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

问题描述 投票:0回答:1

我试图在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);
}
c signal-processing stm32 sine dac
1个回答
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时,1个周期的44个样本将为您提供1.00227KHz for(int j = 0; j < 44; j++) arr[j] = MAXVOLUME*((sin(2.0*PI*j/44.0)+1.0)/2.0);
© www.soinside.com 2019 - 2024. All rights reserved.