c中的单周期44.1kHz采样的1kHz正弦波

时间:2019-03-03 19:25:40

标签: c signal-processing stm32 sine dac

我正在尝试在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);
}

1 个答案:

答案 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);