基于matlab的CQMFB单带滤波器设计仿真

134 阅读4分钟

1.算法描述

QMF

 

        在滤波器的某些附加条件下,与分析滤波器组和合成滤波器组相关联的变换是正交的。正态性意味着样品的能量在转换过程中保持不变。如果满足这些条件,滤波器具有以下显著特性:合成滤波器是分析滤波器的时间反转版本,高通滤波器是低通滤波器的调制版本,即,其中K是整数延迟。这种滤波器通常被称为正交镜滤波器(QMF)、共轭正交滤波器(CQF)或功率互补滤波器,因为两个低通(分别为高通)滤波器具有相同的频率响应,并且低通和高通滤波器的频率响应通过功率互补特性,适用于所有频率。滤波器h0(n)被视为原型滤波器,因为它自动确定其他三个滤波器。

 

  在滤波器的某些附加条件下,与分析滤波器组和合成滤波器组相关联的变换是正交的。正态性意味着样品的能量在转换过程中保持不变。如果满足这些条件,滤波器具有以下显著特性:合成滤波器是分析滤波器的时间反转版本,高通滤波器是低通滤波器的调制版本,即,其中K是整数延迟。这种滤波器通常被称为正交镜滤波器(QMF)、共轭正交滤波器(CQF)或功率互补滤波器,因为两个低通(分别为高通)滤波器具有相同的频率响应,并且低通和高通滤波器的频率响应通过功率互补特性,适用于所有频率。滤波器h0(n)被视为原型滤波器,因为它自动确定其他三个滤波器。

 

QMF 正交镜像滤波器和共轭QMF

 

e6da786019b1e5cd46bc636498ba1037_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

最小相位:所有的零点都在单位圆内或者单位圆上最大相位:所有零点都在单位圆外

 

CQMFB

 

       滤波器组包括分析滤波器组和综合滤波器组。分析滤波器组将信号分成M个子带,对每个子带做M倍的抽取。综合滤波器组做M倍插值,得到和原信号相同的抽样率,实现信号的重建。

 

      当M=2时,分析滤波器组由一个低通滤波器和一个高通滤波器组成,把信号分成一个低通信号和一个高通信号。对于一个给定的信号,经过分析滤波器后,再进行抽取、编码、传输,可以通过零值内插、综合滤波器滤波、求和运算得到恢复和重建。重建后的信号与原始信号存在误差,误差来源包括:

 

混叠失真

抽取和内插产生的混叠和镜像带来的误差,导致分析滤波器组和综合滤波器组的频带不能完全分开。

幅度失真

由于分析和综合滤波器组的频带在通带内不是全通函数,其幅频特性波纹产生的误差。

相位失真

由滤波器相频特性的非线性所产生的误差。

量化失真

由编、解码产生的误差,与量化噪声相似,这类误差无法完全消除,只能设法减小。

3.完全重建QMFB的设计

 

选定W,对应不同的输入信号 ,改变的大小求出均方误差,通过比较得到最优的值;

固定N,对应不同的输入信号 ,改变的大小求出均方误差,通过比较得到最优的值。至此,找到了使得完全重建QMFB效果最好的参数和。

2.仿真效果预览

matlab2022a仿真结果如下:

 

2.png

3.png

4.png

5.png

 

3.MATLAB核心程序 ` % 由单带滤波器得到半带滤波器

for j=1:N+1

   tmp(2j-1)=0.5hsb(j);

   tmp(2*j)=0;

end

hlf=tmp(1:(2*N+1));

hlf(N+1)=hlf(N+1)+0.5;

 

wf=0:pi/N0:pi*(N0-1)/N0;

wff=0:0.5/N0:(N0-1)/N0/2;

a=1;

Gw= freqz(hlf,a,wf);

Ew=exp(i2N*wf/2);

Gr=Ew.*Gw;

% Gr 现在是零相位半带滤波器的频率特性,,其虚部应为零,实际上是滤波器的“增益”

mmax=max(real(Gr))

mmin=min(real(Gr))

 

subplot(222)

plot(wff,real(Gr));grid;

%title('half band filter HLF(z)')

 

% 获得“增益”恒正的半带滤波器, P+

hlf(N+1)=hlf(N+1)+abs(mmin);

p=hlf*0.5/(0.5+abs(mmin));

subplot(223)

stem(p,'.');grid;

%title('halfband filter p(n)');

 

Gw= freqz(p,a,wf);

Gr=Ew.*Gw;

subplot(224)

plot(wff,real(Gr));grid;

%title('halfband filter P(z)');

%save p.mat p;

%---------------------------------------------------------------------

% 谱分解部分,求出 h0(n);

l=2*N+1;

A=zeros(l,1);

A(1)=1;

A=A';

[Z,P,K]=tf2zp(p,A);

Z1=sort(Z)

ll=length(Z1)/2;

ZZ=Z1(1:ll);

temp=1;

for m=1:ll

    temp=(-ZZ(m))*temp;

end

if imag(temp)<0.0001

   temp=real(temp);

end

KK=sqrt(K/temp);

l2=length(ZZ);

PP=zeros(l2,1);

[h0,P1]=zp2tf(ZZ,PP,KK);

subplot(122)

zplane(h0,P1);

title('the zeros and poles after resolve')

%-----------------------------------------------------------------------------

% 利用CQMFB四个滤波器之间的关系,得到 h1, g0, g1;

h1=qmf(h0,1);

g0=-wrev(h0);

g1=qmf(g0);

% 求出并画出分析滤波器组的对数幅频特性;

[H0,w]= freqz(h0,a,N0,Fs);

[H1,w]= freqz(h1,a,N0,Fs);

absH0=abs(H0);

absH1=abs(H1);

ah0=20*log10(absH0);

ah1=20*log10(absH1);`