matlab中滤波器函数filter的c语言实现
参考出处:https://wenku.baidu.com/view/6a8eeeee9fc3d5bbfd0a79563c1ec5da50e2d6e5.html
实现:
MATLAB的filter滤波函数为:
a=[1.0000;
0;
0.4860;
0;
0.0177];
b=[0.0940;
0.3759;
0.5639;
0.3759;
0.0940];
SignalFilter=filter(b,a,OriginalSignal);
C代码的filter滤波程序为:
int OriginalSignal[100];
float a[5]={1,0,0.4860,0,0.0177};
float b[5]={0.0940,0.3759,0.5639,0.3759,0.0940};
//滤波 5阶的
SignalFilter[0]=b[0]*OriginalSignal[0];
SignalFilter[1]=b[0]*OriginalSignal[1] + b[1]*OriginalSignal[0] – a[1]*SignalFilter[0];
SignalFilter[2]=b[0]*OriginalSignal[2] + b[1]*OriginalSignal[1] + b[2]*OriginalSignal[0] – a[1]*SignalFilter[1]- a[2]*SignalFilter[0] ;
SignalFilter[3]=b[0]*OriginalSignal[3] + b[1]*OriginalSignal[2] + b[2]*OriginalSignal[1] + b[3]*OriginalSignal[0]- a[1]*SignalFilter[2]- a[2]*SignalFilter[1]- a[3]*SignalFilter[0] ;
for (int i=4;i<100;i++)
{
SignalFilter[i]=b[0]*OriginalSignal[i] + b[1]*OriginalSignal[i-1] + b[2]*OriginalSignal[i-2] + b[3]*OriginalSignal[i-3]+ b[4]*OriginalSignal[i-4]- a[1]*SignalFilter[i-1]- a[2]*SignalFilter[i-2] – a[3]*SignalFilter[i-3] – a[4]*SignalFilter[i-4] ;
}
SignalFilter结果相同