一. 数字滤波器分类
系统的传递函数可设定为:
其中常系数线性方程为:
根据该方程滤波器可分为两类滤波器,分别为FIR滤波器和IIR滤波器。其中FIR滤波器输出只跟以前的输入信号有关,其结构可写成:
IIR滤波器的输出不仅跟以前的输入信号有关,而且和以前的输出有关,其结构函数可以写成:
其中FIR滤波器相位是线性的,其相位延迟为,而IIR滤波器的幅频特性精度高,但是相位是非线性的。
二.IIR滤波器相位补偿原理
IIR滤波器相位补偿原理通过matlab的filtfilt函数。滤波器的变换,其时域的卷积为:
Z域的变换为:
对的数据进行反转,则
并通过滤波器:
则其Z域变换为:
并对再次进行反转,则可以得到:
对其变换可得:
由于IIR滤波器理论上理解为理想滤波器,且相位 ,则认为其相位无延迟。
三.IIR滤波器实现
IIR滤波器通过matlab例程代码:
fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+.25*sin(2*pi*t*40);
[b,a] = butter(6,20/(fs/2));
y = filtfilt(b,a,x);
yy = filter(b,a,x);
plot(t,x,t,y,t,yy)
legend('Original','filtfilt','filter')

for (i = 0; i < 3; i++)
{
x[1] = 0;
x[2] = 0;
y[1] = 0;
y[2] = 0;
}
for (i = 0; i < NUMSIZE; i = i + 1)
{
result = a[0] * pInput[i] + a[1] * x[1] + a[2] * x[2] – b[1] * y[1] – b[2] * y[2];
x[2] = x[1];
x[1] = pInput[i];
y[2] = y[1];
y[1] = result;
pOutput1[i] = result;
}
for (i = 0; i < NUMSIZE; i = i + 1)
{
pOutput2[NUMSIZE -1-i] = pOutput1[i];
}
for (i = 0; i < 3; i++)
{
x[1] = 0;
x[2] = 0;
y[1] = 0;
y[2] = 0;
}
for (i = 0; i < NUMSIZE; i = i + 1)
{
result = a[0] * pOutput2[i] + a[1] * x[1] + a[2] * x[2] – b[1] * y[1] – b[2] * y[2];
x[2] = x[1];
x[1] = pOutput2[i];
y[2] = y[1];
y[1] = result;
pOutput3[i] = result;
}
for (i = 0; i < NUMSIZE; i = i + 1)
{
pOutput4[NUMSIZE – 1 – i] = pOutput3[i];
}
并通过gunplot进行画图:

?
?
创业项目群,学习操作 18个小项目,添加 微信:8070109525 备注:小项目!
如若转载,请注明出处:https://www.lebaoshun.com/459.html