fnjcr 发表于 2013-7-19 19:02

利用由fdatool设计的高通滤波系数编程进行滤波的问题

本帖最后由 fnjcr 于 2013-7-19 19:08 编辑

本人是matlab+信号处理的新手{:4_79:}

使用振动传感器采集速度波形,再由波形计算位移。在进行积分、去趋势后需要进行高通滤波,滤除极低频的干扰。
使用fdatool进行滤波器设计
http://f.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e9cb61b118d8bc3ec65d0eceb7bb8a28/b3119313b07eca80e072ed6c902397dda04483c2.jpg
convert to singlel section,得到了分子分母系数:
const int NL = 10;
const real64_T NUM = {   0.8558457777315,   -7.702611999584,    30.81044799834,   -71.89104532945,      107.8365679942,   -107.8365679942,    71.89104532945,   -30.81044799834,      7.702611999584,-0.8558457777315};const int DL = 10;const real64_T DEN = {                   1,   -8.688722481439,    33.55806880257,   -75.61737954546,       109.553642522,   -105.8293351142,    68.16455775223,   -28.22860996292,      6.820250022448,-0.7324719952609};
然后进行差分计算得到滤波结果,如下:pWave为输入波形,pFilter的内容也复制为输入波形for(i=16; i<dataLength+32; ++i){*(pFilter+i)= 0;float_Value = 0;for(j=0; j<10; ++j){float_Value += (NUM*(*(pWave+i-j))-DEN*(*(pFilter+i-j)));}//好多结果的绝对值都超过32768 了。。。if (float_Value>32768){float_Value = 32768;}if (float_Value<-32768){float_Value = -32768;}*(pFilter+i) = (float)(float_Value);//滤波}得到的结果波形不对,。向各位请教问题在哪里?

fnjcr 发表于 2013-7-19 19:07

我看了帖子:高通滤波算法
http://forum.vibunion.com/forum.php?mod=viewthread&tid=31964&fromuid=210113。而且我的二阶滤波是可以的。但是高阶不对,难道是fdatool导出的系数问题?
页: [1]
查看完整版本: 利用由fdatool设计的高通滤波系数编程进行滤波的问题