在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[i]>max)
max=Input[i];
if(Input[i]>yuzhi&&flag==1) //Input[i-1]<阈值且Input[i]>阈值,则num++
{
num=num+1; // num代表波峰数目,即条纹数目
flag=0;
}
if(Input[i]<yuzhi)
flag=1;
}
p.freq=num;
p.amp=max;
return p;
Shine:
能具体说明一下“显示的频率上不去” ,是一开始显示就不对还是到了一定数值就上不去了?
请问是用printf打印频率值的吗?如果是的话,去掉printf看看,或者加大stack, heap。
qioa chen:
回复 Shine:
不是在控制台print频率值,而是用GrStringDraw(&sContext,freq_display,-1,x,y+30,0)在触摸屏上画出来。而且当信号发生器频率超过530hz后,显示的频率随着输入频率增加而减小了。然后到了1000hz后,显示频率又开始增加。。。然后再减小,增加。就这样显示频率随着输入频率在起伏波动。搞不明白为什么,不知道和程序本身之外的东西有关吗。另外stack和heap在哪里修改。
qioa chen:
回复 qioa chen:
而且采样率不同,显示的波形和频率也不同.下面两幅图分别是采样率为1024和10240时的波形和频率值。很不解