利用由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);//滤波}得到的结果波形不对,。向各位请教问题在哪里?
我看了帖子:高通滤波算法
http://forum.vibunion.com/forum.php?mod=viewthread&tid=31964&fromuid=210113。而且我的二阶滤波是可以的。但是高阶不对,难道是fdatool导出的系数问题?
页:
[1]