我试图在c中创建一个单周期正弦波。频率需要约为1kHz,采样频率为44.1kHz。这是因为正弦查找表被送入stm32f4微控制器,该微控制器以44.1kHz采样,然后输出到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);
}
你的除数是错误的 - 你想要除以样本数,而不是取样频率。这就产生了问题 - 在44.1KHz下只需要一个1KHz的采样周期,你需要44.1个样本,这不是一个整数。所以你有两个选择:
for(int j = 0; j < 441; j++)
arr[j] = MAXVOLUME*((sin(2.0*PI*j/44.1)+1.0)/2.0);
for(int j = 0; j < 44; j++)
arr[j] = MAXVOLUME*((sin(2.0*PI*j/44.0)+1.0)/2.0);