我在做主动噪声控制的一个程序,用的是LMS的算法,可是一开始就有一个很奇怪的问题出现了:
void sinewave()
{
Int16 i=0;
float a=0.01;
for (i=0; i<size;i++)
{
xs[i]=23405*sin(2*3.14*a*i);
}
}
for (n=M; n<=size; n++)
{
//把数据存在Buffer里
for(k=n; k>=n-M+1; k--)
{
Buffer1[n-k]=g[k];
Buffer2[n-k]=(float)xs[k];
}
声音模块AIC23里我把扫描频率设置成8kHz,这样产生的正弦信号就是80Hz了,但是经过for循环之后,输出的正弦信号xs在示波器上显示的是60Hz左右的频率,这里并没有针对正弦信号xs的计算,为什么频率会变了呢?有人知道吗?
我也试过了,不经过这个for循环,直接输出这个正弦信号是我本来设定的80Hz没问题。之后我还有一些别的运算,用到了这里的Buffer1和Buffer2,频率会继续变化,最后便到了20Hz左右,这是为什么呢??