我正在使用以下方法生成正弦波 -
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 中没有区别。有人可以解释这里发生了什么吗?