我正在尝试在c中创建一个单周期正弦波。频率需要大约为1kHz,并以44.1kHz采样。这是因为正弦查找表被馈入以44.1kHz采样的stm32f4微控制器,然后输出到5个独立的DAC。我一直在寻找如何精确获得1个周期的波浪的问题。
目前我大约有10-11个周期。
for(int j = 0; j < 45; j++){
arr[j] = MAXVOLUME*((sin(2.0*PI*sineFrequency*j/44100.00)+1.0)/2.0);
}
答案 0 :(得分:2)
您的除数是错误的-您想除以样本数,而不是除以采样频率。这就提出了问题-要以44.1KHz的频率精确采样一个1KHz的周期,则需要44.1个采样,这不是整数。因此,您有两种选择:
使用更多的样本来获取更多的周期-例如,以441个样本可以在1 KHz处获取10个周期
for(int j = 0; j < 441; j++)
arr[j] = MAXVOLUME*((sin(2.0*PI*j/44.1)+1.0)/2.0);
调整所需的频率以匹配输出频率-例如,以44.1KHz输出时,一个周期的44个样本将为1.00227KHz
for(int j = 0; j < 44; j++)
arr[j] = MAXVOLUME*((sin(2.0*PI*j/44.0)+1.0)/2.0);