现在的位置: 首页 > 综合 > 正文

现代数字信号处理大型作业

2017年11月22日 ⁄ 综合 ⁄ 共 10638字 ⁄ 字号 评论关闭

2. 试用奇阶互补法设计两带滤波器组(高、低通互补),进而实现四带滤波器组;并画出其频响。滤波器设计参数为:Fp1.7KHz, Fr2.3KHz, Fs8KHz, Armin≥70dB

解:

III. Matlab程序与结果

1二带数字滤波器组的源代码:(源代码统一格式排版)

%二带数字滤波器组
clear all;
close all;
%滤波器设计参数
Fp=1700;
Fr=2300;
Fs=8000;
Omegap=tan(pi*Fp/Fs);
Omegar=tan(pi*Fr/Fs);
Omegac=sqrt(Omegap*Omegar);
k=Omegap/Omegar;
k1=sqrt(sqrt(1-k^2));
q0=0.5*(1-k1)/(1+k1);
q=q0+2*q0^5+15*q0^9+150*q0^13;
N=11;
N2=fix(N/4);
M=fix(N/2);
N1=M-N2;
%计算Omgai和Vi
for i=1:M
   a=0;
   for m=0:5
      a=a+(-1)^m*q^(m*(m+1))*sin((2*m+1)*pi*i/N);
   end
   b=0;
   for m=1:5
      b=b+(-1)^m*q^(m^2)*cos(2*m*pi*i/N);
   end
   Omega(i)=2*q^0.25*a/(1+2*b);
   V(i)=sqrt((1-k*Omega(i)^2)*(1-Omega(i)^2/k));
end
%计算alhpa(i)和beta(i)
for i=1:N1
    alpha(i)=2*V(2*i-1)/(1+Omega(2*i-1)^2);
end
for i=1:N2
	beta(i)=2*V(2*i)/(1+Omega(2*i)^2);
end
%计算A(i)和B(i)
for i=1:N1
   A(i)=(1-alpha(i)*Omegac+Omegac^2)/(1+alpha(i)*Omegac+Omegac^2);
end
for i=1:N2
   B(i)=(1-beta(i)*Omegac+Omegac^2)/(1+beta(i)*Omegac+Omegac^2);
end
w=0:0.0001:0.5;
HL=zeros(size(w));
HH=zeros(size(w)); 
for n=1:length(w)
   z=exp(j*w(n)*2*pi);
   H1=1;
   for i=1:N1
 	   H1=H1*(A(i)+z^(-2))/(1+A(i)*z^(-2)) ;  
   end
   H2=1/z;
   for i=1:N2
 	   H2=H2*(B(i)+z^(-2))/(1+B(i)*z^(-2));   
   end
   HL(n)=abs((H1+H2)/2);
   HH(n)=abs((H1-H2)/2);
end 
plot(w,HL,'g',w,HH,'m');
hold on;
xlabel('digital frequency');
ylabel('Amptitude');
title('二带数字滤波器组');

2)运行结果

 

3)四带数字滤波器组的源代码:

%四带滤波器组
clear all;
close all;
%滤波器器设计参数
Fp=1700;
Fr=2300;
Fs=8000;
Omegap=tan(pi*Fp/Fs);
Omegar=tan(pi*Fr/Fs);
Omegac=sqrt(Omegap*Omegar);
k=Omegap/Omegar;
k1=sqrt(sqrt(1-k^2));
q0=0.5*(1-k1)/(1+k1);
q=q0+2*q0^5+15*q0^9+150*q0^13;
N=11;
N2=fix(N/4);
M=fix(N/2);
N1=M-N2;
%计算Omega(i)和V(i)
for i=1:M
   a=0;
   for m=0:5
      a=a+(-1)^m*q^(m*(m+1))*sin((2*m+1)*pi*i/N); 
   end
   b=0;
   for m=1:5
      b=b+(-1)^m*q^(m^2)*cos(2*m*pi*i/N);
   end
   Omega(i)=2*q^0.25*a/(1+2*b);
   V(i)=sqrt((1-k*Omega(i)^2)*(1-Omega(i)^2/k));
end
%计算alpha(i)和beta(i)
for i=1:N1
    alpha(i)=2*V(2*i-1)/(1+Omega(2*i-1)^2);
end
for i=1:N2
    beta(i)=2*V(2*i)/(1+Omega(2*i)^2);
end
%计算A(i)和B(i)
for i=1:N1
    A(i)=(1-alpha(i)*Omegac+Omegac^2)/(1+alpha(i)*Omegac+Omegac^2);
 end
 for i=1:N2
    B(i)=(1-beta(i)*Omegac+Omegac^2)/(1+beta(i)*Omegac+Omegac^2);
 end
w=0:0.0001:0.5; 
HLL=zeros(size(w));
HLH=zeros(size(w));
HHL=zeros(size(w));
HHHP=zeros(size(w));
for n=1:length(w)
   z=exp(j*w(n)*2*pi);
   H1=1;
   for i=1:N1
      H1=H1*(A(i)+z^(-2))/(1+A(i)*z^(-2)) ;  
   end
   H21=1;
   for i=1:N1
      H21=H21*(A(i)+z^(-4))/(1+A(i)*z^(-4)) ;  
   end
   H2=1/z;
   for i=1:N2
 	   H2=H2*(B(i)+z^(-2))/(1+B(i)*z^(-2));    
   end
   H22=1/(z^2);
   for i=1:N2
 	   H22=H22*(B(i)+z^(-4))/(1+B(i)*z^(-4));    
   end
   HL=((H1+H2)/2);
   HH=((H1-H2)/2);
   HLL(n)=abs((H21+H22)/2*HL);
   HLH(n)=abs((H21-H22)/2*HL);
   HHH(n)=abs((H21+H22)/2*HH);
   HHL(n)=abs((H21-H22)/2*HH);
end 
plot(w,HLL,'b',w,HLH,'y',w,HHL,'r',w,HHH,'k')
hold on 
xlabel('digital frequency');
ylabel('Amptitude');
title('四带数字滤波器组');

 

4)运行结果

 

3. 根据《现代数字信号处理》(姚天任等,华中理工大学出版社,2001)第四章附录提供的数据(pp.352-353),试用如下方法估计其功率谱,并画出不同参数情况下的功率谱曲线:

1)Levinson算法 2)Burg算法 3)ARMA模型法 4)MUSIC算法

1)Levinson算法的MATLAB源程序如下:

其中,参数X为输入序列,p为AR模型的阶数,函数调用形式为:Levinson(X,p)。这是一个Levinson.m文件:

Levinson.m文件

function S=Levinson(X,p)
N=length(X);
for m=0:N-1
   R(m+1)=sum(conj(X([1:N-m])).*X([m+1:N]))/N;
end
a=-R(2)/R(1);
sigma2=(1-abs(a)^2)*R(1);
gamma=-a;
for k=2:p
   sigma2(k)=R(1)+sum(a.*conj(R([2:k])));
   D=R(k+1)+sum(a.*R([k:-1:2]));
   gamma(k)=D/sigma2(k);
   sigma2(k)=(1-abs(gamma(k))^2)*sigma2(k);
   a=[a-gamma(k)*conj(fliplr(a)),-gamma(k)];
end
sigma2=real(sigma2);
f=linspace(-0.5,0.5,512);
for k=1:512
S(k)=10*log10(sigma2(end)/(abs(1+sum(a.*exp(-j*2*pi*f(k)*[1:p])))^2));
end
plot(f,S);
title(['Levinson: ',int2str(p),' 阶']);
xlabel('归一化频率');
ylabel('相对谱/dB');

close all;
clear all;
p=[10 25 40 55];
x=randn(1,1000);%独立的高斯分布随机数
for k=1:4
   subplot(2,2,k);
   Levinson(x,p(k));
end

3)运行结果

   略

II) Burg算法

函数调用形式为:Burg(X,p)。其中参数X为输入序列,p为AR模型的阶数。

<pre name="code" class="plain">function [S,A,sigma2]=Burg(X,p)
N=length(X);
ef=X; 
eb=X;
sigma2=sum(X*X')/N;
A=[];
for k=1:p
   efp=ef(k+1:end);
   ebp=eb(k:end-1);
   gamma(k)=2*efp*ebp'/(efp*efp'+ebp*ebp');
   sigma2(k+1)=(1-abs(gamma(k))^2)*sigma2(k);
   ef(k+1:end)=efp-gamma(k)*ebp;
   eb(k+1:end)=ebp-gamma(k)'*efp;
   A=[A-gamma(k)*conj(fliplr(A)),-gamma(k)];
end
f=linspace(-0.5,0.5,512);
for k=1:512
   S(k)=10*log10(sigma2(end)/(abs(1+sum(A.*exp(-j*2*pi*f(k)*[1:p])))^2));
end
plot(f,S);
title(['Burg: ',int2str(p),' 阶']);
xlabel('归一化频率'), ylabel('相对谱/dB');


分别对应于10阶、25阶、40阶、55阶的Burg算法的执行可以调用Burg函数实现。.m文件如下:

close all;
clear all;
p=[10 25 40 55];
x=randn(1,1000);%独立的高斯分布随机数
for k=1:4
   subplot(2,2,k);
   Burg(x,p(k));
End

3)运行结果

III)  ARMA模型法

函数调用形式为:ARMA(X,p,q)。其中参数X为输入序列,p为AR模型的阶数,q为MA模型的阶数。

function S=ARMA(X,p,q)
N=length(X);
M=N-1;
r=xcorr(X,'unbiased');
for k=1:p
  R(:,k)=(r([N+q-k+1:N+M-k])).';
end
a=(-pinv(R)*(r([N+q+1:N+M]).')).';
Y=filter([1,a],[1],X);
pp=5*q;
[S,A,K]=Burg(Y,pp);
P=K(end);
[S,A,K]=Burg(A,q);
b=A;
f=linspace(-0.5,0.5,512);
for k=1:512
  S(k)=10*log10(P*(abs(1+b*(exp(-j*2*pi*f(k)*[1:q]).'))/abs(1+a*(exp(-j*2*pi*f(k)*[1:p]).')))^2);
end
plot(f,S);
title(['ARMA: (',int2str(p),',',int2str(q),') 阶']);
xlabel('归一化频率');
ylabel('相对谱/dB');

分别对应于ARMA3010)、ARMA301)、ARMA4010)、ARMA5010)的ARMA算法的执行可以用.m文件实现

 close all;
clear all;
x=randn(1,1000);%独立的高斯分布随机数
subplot(2,2,1);ARMA(x,30,10);
subplot(2,2,2);ARMA(x,30,1);
subplot(2,2,3);ARMA(x,40,10);
subplot(2,2,4);ARMA(x,50,10);

3)运行结果

IV) MUSIC算法

函数调用形式为:MUSICXp)。其中参数X为输入序列,pAR模型的阶数,

function S=MUSIC(X,p)
N=length(X);
r=xcorr(X,'biased');
clear R
for k=1:N
  R(:,k)=(r([N-(k-1):2*N-k])).';
end
[V,D] = eig(R);
f=linspace(-0.5,0.5,512);
S0=fft(V(:,p+1:end),512);
for k=1:512
  S(k)=10*log10(1/(S0(k,:)*S0(k,:)'));
end
S=[S(257:512) S(1:256)];
plot(f,S);
title(['MUSIC: ',int2str(p),' 维']);
xlabel('归一化频率');
ylabel('相对谱/dB');

 

 分别对应于10维、25维、40维、55维的MUSIC算法的执行可以用.m文件实现:

clear all;
close all;
x=randn(1,1000);%独立的高斯分布随机数
p=[10 25 40 55];
for k=1:4
   subplot(2,2,k);
   MUSIC(x,p(k));
end

4.图1为均衡带限信号所引起失真的横向或格型自适应均衡器(其中横向FIR系统长度M=11),系统输入是取值为±1的随机序列x(n),其均值为零;参考d(n)=x(n-7);信道具有脉冲响应:

式中W用来控制信道的幅度失真(W=2~4,例如,取W=2.9,3.1,3.3,3.5),而且信道受到均值为零、方差为 (例如,取 =0.001,相当于信噪比为30dB)的高斯白噪声v(n)的干扰,试比较基于下列五种算法自适应均衡器在不同信道失真、不同噪声干扰下的收敛情况(对应于每一种情况,在同一坐标下画出其学习曲线),并分析其结果。

1>横向/-梯型结构LMS算法     2>横向/-梯型结构RLS算法


I)横向结构LMS算法

close all;
clear all;
w=[2.9,3.1,3.3,3.5];%信道的幅度失真
M=11;%横向滤波器的长度
sigma2=0.001; %噪声方差
T=7; %参考信号延时
N=400; % 训练次数(信号样本数)
iteration=500; %迭代次数
L=iteration+T+M-1; %单个输入信号长度
u=0.025; %迭代步长
value=zeros(length(w),L-M+1-T);
for ww=1:length(w)
    %信道具有的脉冲响应
    h=ones(1,3);
    h(1)=0.5*(1+cos(2*pi/w(ww)));
    h(3)=h(1);
    e2=zeros(N,L-M+1-T);%误差信号的平方
    for n=1:N
        rand('seed',n*N);  
        X=sign(2*rand(1,L)-1); %产生一个随机信号序列
        D=zeros(size(X));
        for mm=T+1:L
            D(mm)=X(mm-T);%对应的参考信号
        end 
        U=conv(X,h);%信号经过信道的输出
        randn('seed',n*N);
        V=randn(size(U)).*sqrt(sigma2); %产生高斯噪声
        R=U+V; %自适应滤波器输入信号
        W=zeros(M,1); %滤波器参数的初始值为0
        for m=1:iteration
            r=R(T+m:T+m+M-1)';
            y=r'*W;
            e=D(T+m+M-1)-y; % 误差信号
            e2(n,m)=e.^2;
            W=W+2*u*e*r; %滤波器参数迭代
        end
    end
    value(ww,:)=mean(e2); %均方误差值
end
semilogy(value(1,:),'y--');hold on;
semilogy(value(2,:),'k-.');hold on;
semilogy(value(3,:),'m:');hold on;
semilogy(value(4,:),'b-');hold on;
grid on;
xlabel('the number of iteration');
ylabel('mean square error');
title('LMS Arithmetic');
legend(‘w1=2.9’,‘w2=3.1’,‘w3=3.3’,‘w4=3.5’);

II)横向结构RLS算法

close all;
clear all;
w=[2.9,3.1,3.3,3.5];
M=11;
sigma2=0.001; %噪声方差
T=7;%参考信号延迟
N=400;%训练次数
iteration=500; %迭代次数
L=iteration+T+M-1;%输入信号长度
lamda=0.999; %遗忘因子
value=zeros(length(w),L-M+1-T);
for ww=1:length(w)  
    h=ones(1,3);
    h(1)=0.5*(1+cos(2*pi/w(ww)));
    h(3)=h(1);
    e2=zeros(N,L-M+1-T);
    for n=1:N
        rand('seed',n*N);
        X=sign(2*rand(1,L)-1);
        D=zeros(size(X));
        for mm=T+1:L 
            D(mm)=X(mm-T);
        end
        U=conv(X,h);
        randn('seed',n*N);
        V=randn(size(U)).*sqrt(sigma2);
        R=U+V; %自适应滤波器输入信号
        W=zeros(M,1);
        P=eye(M)/0.004;
        for m=1:iteration
            r=R(T+m+M-1:-1:T+m)';
            e=D(T+m+M-1)-r'*W;
            e2(n,m)=e.^2; 	
            K=P*r/(lamda+r'*P*r);
            P=(eye(M)-K*r')*P/lamda;
            W=W+K.*e;
            for mm=2:M-1  
                r(mm)=r(mm+1);
            end
            r(1)=R(T+m+M);
        end
    end
    value(ww,:)=mean(e2);
end
semilogy(value(1,:),'y--');hold on;
semilogy(value(2,:),'k-.');hold on;
semilogy(value(3,:),'m:');hold on;
semilogy(value(4,:),'b-');hold on;
grid on;
xlabel('the number of iteration');
ylabel('mean square error');
title('RLS Arithmetic');

III)格-梯型结构LMS算法

close all;
clear all;
W=[2.9,3.1,3.3,3.5];%信道的幅度失真
w=0.9999;
T=7;%延迟7个周期
sigma2=0.001;%噪声方差
L=500;%数据长度
M=11;%横向滤波器的长度
N=400;%次数
e2=zeros(length(W),L);
for ww=1:length(W)
    n=[1,2,3];
    h(n)=1/2*(1+cos(2*pi*(n-2)/W(ww)));
    for nn=1:N
 	      km=ones(L+2,M+1);
 	      vm=ones(L+2,M+1);
 	      beta=ones(L+2,M+1);
 	      fm=ones(L+2,M+1);
 	      gm=ones(L+2,M+1);
         e=ones(L+2,M+2);
         rand('seed',N*nn); 
 	      X=sign(2*rand(1,L+T)-1);
 	      U=conv(X,h);
 	      randn('seed',N*nn);
 	      V=randn(size(U))*sqrt(sigma2);
 	      R=U+V;
          for m=1:M+1
               km(2,m)=0; %n=2
               vm(2,m)=0.8;
               beta(3,m)=0;
               fm(2,m)=0;
               gm(2,m)=0;
               gm(1,m)=0;
          end 
          for n=3:L+2     %m=1
               e(n,2)=X(n-2);
               fm(n,1)=R(n-2+T);
               gm(n,1)=R(n-2+T);
          end
          for n=3:L+2
               for m=2:M+1
               vm(n,m)=w*vm(n-1,m)+(abs(fm(n,m-1)))^2+(abs(gm(n-1,m-1)))^2;                    km(n,m)=km(n-1,m)+(fm(n-1,m-1)*conj(gm(n-1,m))+conj(gm(n-2,m-1))*fm(n-1,m))/vm(n-1,m);
                   fm(n,m)=fm(n,m-1)-km(n,m)*gm(n-1,m-1);
                   gm(n,m)=gm(n-1,m-1)-conj(km(n,m))*fm(n,m-1);
                   e(n,m+1)=e(n,m)-gm(n,m)*beta(n,m);
                   beta(n+1,m)=beta(n,m)+2*e(n,m+1)*conj(gm(n,m))/vm(n,m);
               end  
               e2(ww,n-2)=e2(ww,n-2)+e(n,M+2)*e(n,M+2);
          end
   end
end
e2=e2/N;
semilogy(1:L,e2(1,:),'y-');hold on;
semilogy(1:L,e2(2,:),'b-.');hold on;
semilogy(1:L,e2(3,:),'k:');hold on;
semilogy(1:L,e2(4,:),'m--');hold on;
grid on;
xlabel('data');
ylabel('mean square error');
title('格-梯型结构LMS算法');

IV)格-梯型结构RLS算法

close all;
clear all;W=[2.9,3.1,3.3,3.5];%信道的幅度失真
lamda=0.999; %遗忘因子
T=7;%延迟7个周期
L=500; %数据长度
M=11;%横向滤波器的长度
N=400; %迭代次数 
sigma2=0.001;%噪声方差
e2=zeros(length(W),L);
for i=1:length(W)
    h=ones(1,3);
    h(1)=0.5*(1+cos(2*pi/W(i)));
    h(3)=h(1);
    alpha=zeros(L+2,M);
    k=zeros(L+2,M);
    kf=zeros(L+2,M);
    kb=zeros(L+2,M);
    fm=zeros(L+2,M);
    gm=zeros(L+2,M);
    Ef=zeros(L+2,M);
    Eb=zeros(L+2,M);
    delta=zeros(L+2,M);
    kasi=zeros(L+2,M);
    e=zeros(L+2,M+1);
    for j=1:N
        rand('seed',N*j);
        X=sign(2*rand(1,L+T)-1);
        D=zeros(size(X));
        U=conv(X,h);
     	 randn('seed',N*j);
         V=randn(size(U)).*sqrt(sigma2);
         R=U+V; %自适应滤波器输入信号       
         for m=1:M
            alpha(1,m)=1;
            k(1,m)=0;
            Eb(1,m)=0.9;
            Eb(2,m)=0.9;
            Ef(2,m)=0.9;
            delta(1,m)=0;
            fm(2,m)=0;
            gm(2,m)=0;
            gm(1,m)=0;
            e(2,m)=0;
         end
         for n=3:L+2			
            alpha(n-1,1)=1;
            e(n,1)=X(n-2);
            fm(n,1)=R(n-2+T);
            gm(n,1)=R(n-2+T);
            Ef(n,1)=lamda*Ef(n-1,1)+(abs(R(n-2+T)))^2;
            Eb(n,1)=Ef(n,1);
         end
         for n=3:L+2		
             for m=1:M-1 
                 k(n-1,m+1)=lamda*k(n-2,m+1)+alpha(n-2,m)*fm(n-1,m)*conj(gm(n-2,m));
                 kf(n-1,m+1)=-k(n-1,m+1)/Eb(n-2,m);
                 kb(n-1,m+1)=-conj(k(n-1,m+1))/Ef(n-1,m);
                 fm(n,m+1)=fm(n,m)+kf(n-1,m+1)*gm(n-1,m);
                 gm(n,m+1)=gm(n-1,m)+kb(n-1,m+1)*fm(n,m);
                 Ef(n-1,m+1)=Ef(n-1,m)-(abs(k(n-1,m+1)))^2/Eb(n-2,m);
                 Eb(n-1,m+1)=Eb(n-2,m)-(abs(k(n-1,m+1)))^2/Ef(n-1,m);
                 alpha(n-1,m+1)=alpha(n-1,m)-(alpha(n-1,m))^2* (abs(gm(n-1,m)))^2/Eb(n-1,m);
             end   
             for m=1:M	
                 delta(n-1,m)=lamda*delta(n-2,m)+alpha(n-1,m)* conj(gm(n-1,m))*e(n-1,m);
                 kasi(n-1,m)=-delta(n-1,m)/Eb(n-1,m);
                 e(n,m+1)=e(n,m)+kasi(n-1,m)*gm(n,m);
             end
             e2(i,n-2)=e2(i,n-2)+e(n,M+1)^2;
         end
     end
 end
 e2=e2/N;
 clf;
 semilogy(1:L,e2(1,:),'y-');hold on;
 semilogy(1:L,e2(2,:),'b-.');hold on;
 semilogy(1:L,e2(3,:),'c:');hold on;
 semilogy(1:L,e2(4,:),'k--');hold on;
 grid on;
 xlabel('data');
 ylabel('mean square error');
 title('格-梯型结构RLS算法');

几种算法结果比较分析:

(1)在不同的信道幅度失真下,信道幅度失真越小,收敛时的均方误差越小。横向LMS算法对信道幅度失真十分敏感,当w=3.5时,横向LMS不仅稳态误差较大,其收敛速度也明显变慢。

(2)从收敛速度上看,横向RLS和格型RLS快于横向LMS和格型LMS。

(3)从稳态误差上看,横向RLS和格型RLS普遍低于横向LMS和格型LMS。

(4)从计算量上看,RLS大于LMS,格型大于横向结构。

 

抱歉!评论已关闭.