龙空技术网

IIR滤波器相位补偿

滴水成泉 229

前言:

目前姐妹们对“相位恢复算法matlab”可能比较注意,小伙伴们都想要知道一些“相位恢复算法matlab”的相关内容。那么小编同时在网摘上收集了一些有关“相位恢复算法matlab””的相关文章,希望兄弟们能喜欢,你们快快来学习一下吧!

一. 数字滤波器分类

系统的传递函数可设定为:

其中常系数线性方程为:

根据该方程滤波器可分为两类滤波器,分别为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进行画图:

标签: #相位恢复算法matlab