TI中文支持网
TI专业的中文技术问题搜集分享网站

算法讨论

在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时的波形和频率值。很不解

赞(0)
未经允许不得转载:TI中文支持网 » 算法讨论
分享到: 更多 (0)