打印

香水帮忙看下,究竟是STM32的FIR滤波库函数是**肋,还是

[复制链接]
7239|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
源程序完全参照库文档,文档里的小错误也发现并修改了,可还是不行,想请香水城帮忙看下,
使用FIR库滤波后的数据
MATLAB滤波后的数据
两个滤波使用的系数一样,数据都是采用的实际数据,只是不是同一次采集的,我感觉MATLAB的滤波比较靠谱点,但为什么FIR的库不能呢,或者库的使用还需要那些注意点,请香水城和所有高手帮忙看下,
#define M 16 /*number of coefficients*/
#define N 16 /*number of output samples*/
COEFS fir_coefs;/*coefficients structure*/
int a[N];/*filter output vector*/
int x0[N];
short x[M+N-1];/*filter input vector*/
short h[M]={3099,   1137,   1305,   1456,   1586,   1687,   1758,   1795,   1795,
     1758,   1687,   1586,   1456,   1305,   1137,   3099};/*filter coefficients vector*/
uint16_t xyz_FIR[16];
void FIR_filter(u32 k)
{
  u8 j;
  for (j=0;j<16;j++)
   {
     x0[j] = ADCConvertedValue[j]+offsetx;
  x[j+16]= x0[j];
   }
   if (k>1) //第一次的16个数据无法完成FIR滤波
   {
       fir_coefs.nh = M; /*Number of Coefficients for FIR*/
       fir_coefs.h = h; /*Pointer on FIR coefficient vector*/
       fir_16by16_stm32(a,x,&fir_coefs,N);/*performs the FIR filtering*/
    }
   for(j=0;j<15;j++)
   {
     x[j]= x0[j+1];
   }
   if (k>1)  //第一次的16个数据无法完成FIR滤波
   {
    for (j=0;j<16;j++)
    {  
      xyz_FIR[j]=a[j]/65535;
    }
   }  
}
这个前几天我已经发帖求助了,但是没有人解答,这段时间我又用MATLAB仿真了下,更加肯定了,FIR库我使用的肯定不对了,但请有人帮忙看下
沙发
香水城| | 2010-9-9 09:34 | 只看该作者
对不起,我不懂FIR滤波,看不懂这个函数库,你问问其他人吧。

使用特权

评论回复
板凳
selina1983| | 2011-3-30 09:06 | 只看该作者
我现在也在做FIR 滤波  能不能交流一 下啊   我的qq522367801

使用特权

评论回复
地板
airwill| | 2011-3-30 12:59 | 只看该作者
我看是滤波的参数有问题.
从楼主的波形看, 是系数太小了, 可以试试加大8倍,10倍的再试试.
可能和 MATLAB, 对数据的解释不一致造成的吧.

使用特权

评论回复
5
dl_shuang| | 2011-4-1 21:35 | 只看该作者
这个跟库函数无关,是你的16个点的滤波系数太少了。
你可以让Matlab看看你这16个点的滤波系数的频谱响应。

使用特权

评论回复
6
yhb123456| | 2011-4-26 21:00 | 只看该作者
是Matlab骗了你,16点的系数出来的图不可能这么好,之前有过这种教训,具体系数要看你的采样率,带内平滑度,和带阻,你先用带内3,带阻30,让系统自己生成看看有多少

使用特权

评论回复
7
black.lu| | 2011-4-29 13:56 | 只看该作者
我最近也在做,滤波系数是怎么确定的啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝