【发布时间】:2016-07-10 19:35:12
【问题描述】:
我正在使用以下方法生成正弦波 -
sampling rate = 22050;
theta = 0;
for (i = 0; i < N; i++)
{
theta = phase * 2 * PI;
signal[i] = amplitude * sin(theta);
phase = phase + frequency/sampling rate;
}
当我生成频率为 8000 Hz 的信号时,输出会出现失真。低于此的频率(例如 6000 Hz)会正确生成。如果我像这样检查相位,则正确生成 8000 Hz 信号 -
if (phase > 1)
{
float temp = phase - 1;
phase = temp;
}
我认为它与Xcode中的正弦函数有关,可能是它可以接受的值范围?相同的代码有和没有相位环绕在 Matlab 中没有区别。有人可以解释这里发生了什么吗?
【问题讨论】:
-
如果你对 XCode 感兴趣,你需要告诉我们不同的变量是什么类型。这可能会显示一些东西。事实上,我只能看到
temp的类型。 -
嗨彼得,PI 被声明为双精度数,而 theta 在浮点数中。我将 theta 更改为 double,代码生成 8K 信号而不会失真。谢谢!
-
很高兴听到。不过,我将把这个问题作为离题结束,并将其迁移到 SO。
标签: audio sampling phase nyquist