当前位置: 首页 > 知识库问答 >
问题:

C++中的正弦波生成

康鹏云
2023-03-14

我试图生成一组点,当绘制成一个图表示1个周期的正弦波。要求是:

  • 1个周期的正弦波
  • 下限=29491
  • 上限=36043
  • 点数=100
  • 振幅=3276
  • 零偏移量=32767

代码:

int main()
{
    ofstream outfile;
    outfile.open("data.dat",ios::trunc | ios::out);
    for(int i=0;i<100;i++)
    {
        outfile << int(3276*sin(i)+32767) << "\n";
    }
    outfile.close();
    return 0;
}

我正在生成并存储一个文件中的点。当这些点被绘制出来时,我得到了下面的图。

但我只需要一个循环。我怎么能这么做?

共有1个答案

元鸿波
2023-03-14

考虑到正弦波的公式:

y(t) = A * sin(2 * PI * f * t + shift)

其中:

A=振幅,函数与零的峰值偏差。
f=常频,振荡次数(周期)
t=时间
移位=相移

y[t] = AMPLITUDE * sin (2 * M_PI * 0.15 * t + 0) + ZERO_OFFSET;
                                   ^^^ f = 15 cycles / NUM_POINTS = 0.15 Hz

要获得一个完整周期,请从y[0:t)循环,其中t是获得一个完整周期所需的时间或点数(即波长)

 类似资料:
  • 用C/C++编写了一个三维正弦波发生器 代码:

  • 我如何建立一个方程来产生扫频正弦波。我是信号处理新手,在网上找不到太多关于生成扫描正弦波的话题。请告诉我一些我可以用来生成方程式并在代码中使用的源代码。非常感谢。

  • 问题内容: 在Java中以任何频率生成正弦波声音的最简单方法是什么?样本大小大于2个字节会有所帮助,但这并不 重要。 问题答案: 见一个自包含的例子。 也许更简单? 如链接答案顶部所示,这51行代码段(在下面重复-分隔为单行和行内注释)大约与 生成音调一样简单(好的,您可以取出5行以上用于谐波)。 人们似乎认为这应该是工具包中内置的一种产生 纯净音调的方法。并非如此,要花一点时间就可以做到。

  • 我试图在y有最高值时显示x位置。在if语句中,我试图将y值与120进行比较,但它似乎从来都不是真的,所以它没有使用文本函数显示我的x位置。我也试着取整y值,但结果仍然不是我想要的。有人能帮我吗?

  • 我正在做一个项目,我想通过组合不同的正弦波来产生(简单的)声音。我使用的是arduino mkrZero,因为它内置了I2S接口,似乎有足够的处理能力来满足我的需求。 教程代码工作得很好,我从扬声器中得到了一个简单的方波音调。 现在我修改了生成正弦波的代码,有一个sin函数的查找表,使其足够快: 如果我稍微修改一下代码,然后写 而不是 一切都破裂了,扬声器发出的声音听起来像是可怕的尖叫 //阻塞

  • 问题内容: 当我运行以下代码时,我的后台出现轻微失真(听起来像嗡嗡声)。由于其微妙的性质,它使人相信字节转换会发生某种混叠。 音频格式= PCM_SIGNED 44100.0 Hz,16位,立体声,4字节/帧,大端 注意 :代码暂时假设数据是大端的。 问题答案: 您的评论说该代码假定为大端字节序。 从技术上讲,您 实际上是 在输出Little-endian,但这并不重要,因为通过幸运的怪癖,您的最