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

Single cycle 44.1kHz sampled 1kHz sine wave in c

我正试图在 c 中创建一个单周期正弦波。频率需要大约为 1kHz,并以 44.1kHz 采样。这是因为正弦查找 table 被馈送到以 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);
}

你的除数是错误的——你想除以样本数,而不是采样频率。这就带来了问题——要在 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);