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