在AD8568采样应用中,为了计算输入正弦信号的频率和幅值,写了下面这个函数。但是结果是在输入正弦信号频率低的时候(<360HZ)结果显示正确,但是频率加高后,显示的频率就上不去了,而且还会下降,不知道为什么?从算法上感觉没有问题,算法思路是找找到一个大于0的值,然后再找到小于0的值,最后再找到一个大于0的值,则频率值加1;不知道和DSP的程序运行方式有没有关系。
Para GetParameter(float Input[]){
Para p;
float max=1;
int i,flag=1,num=0;
double yuzhi=0.1;
for(i=1;i<800;i++)
{
if (Input>max)
max=Input;
if(Input>yuzhi&&flag==1) //Input[i-1]<阈值且Input>阈值,则num++
{
num=num+1; // num代表波峰数目,即条纹数目
flag=0;
}
if(Input<yuzhi)
flag=1;
}
p.freq=num;
p.amp=max;
return p;
而且采样率不同,显示的波形和频率也不同.下图分别是采样率为1024和10240时的结果输入正弦波频率为100hz.采样点数为1024. 而且为了调试程序我在main函数的第一行就加了printf("sdfsd");但是debug的时候控制台里并没有打印信息啊 |