前言:
目前姐妹们对“相位恢复算法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