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

[复制链接]
 楼主| caopeng32 发表于 2010-9-9 08:48 | 显示全部楼层 |阅读模式
源程序完全参照库文档,文档里的小错误也发现并修改了,可还是不行,想请香水城帮忙看下,
使用FIR库滤波后的数据

使用FIR库滤波后的数据

使用FIR库滤波后的数据

MATLAB滤波后的数据

MATLAB滤波后的数据

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, 对数据的解释不一致造成的吧.
dl_shuang 发表于 2011-4-1 21:35 | 显示全部楼层
这个跟库函数无关,是你的16个点的滤波系数太少了。
你可以让Matlab看看你这16个点的滤波系数的频谱响应。
yhb123456 发表于 2011-4-26 21:00 | 显示全部楼层
是Matlab骗了你,16点的系数出来的图不可能这么好,之前有过这种教训,具体系数要看你的采样率,带内平滑度,和带阻,你先用带内3,带阻30,让系统自己生成看看有多少
black.lu 发表于 2011-4-29 13:56 | 显示全部楼层
我最近也在做,滤波系数是怎么确定的啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

0

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部