exa060302.m

来自「胡广书著的《现代信号处理教程》一书的例子的源码。都是Matlab程序。」· M 代码 · 共 68 行

M
68
字号
%---------------------------------------------------------------------------------------
%  exa060302.m,  for 例6.3.2 和 图 6.3.2
%  利用单带滤波器来设计一个半带滤波器,并显示半带滤波器H0,H1,及 H0+H1的幅频响应
%  单带滤波器的归一化截止频率为0.84,长度=16,半带滤波器的长度=31。
%----------------------------------------------------------------------------------------
clear all;

N0=512;
%First step: To design a one-band filter G(z) by Chebyshev approximation
% set the cutoff frequency of the G(w);
F=[0 0.84,1,1];
A=[1 1 0,0];
N=15;
B=remez(N,F,A)
a=1;
wf=0:pi/N0:pi*(N0-1)/N0;
wff=0:1/N0:(N0-1)/N0;
Gw= freqz(B,a,wf);
Ew=exp(i*N*wf/2);
Gr=Ew.*Gw;
% Gr is a zero phase one-band filter,so Gr is real

figure(1);
subplot(2,1,1)
plot(wff,real(Gr));grid on;
title('single-band filter  G(jw)');
subplot(2,1,2)
stem(B,'filled')
title('single-band filter   g(n)')
hold on
plot((0:10),zeros(11),'b');grid on;

% To obtain half-band filter F(z) from G(z), 
% F(z)=[G(z^2)+(N-1)/2]/2
s=length(B)
B2=zeros(1,2*s-1);
for k=1:s,
   B2(k*2-1)=B(k);
  end, 
N2=length(B2)
B2(N+1)=1+B2(N+1);
B2=B2/2
Fw=freqz(B2,a,wf);
Ew=exp(i*N*wf);
Fr=Ew.*Fw;
Fg=real(Fr);

figure(2);
subplot(2,1,1)
plot(wff,Fg);grid on;
title('Half-band filter H(jw)');
subplot(2,1,2)
stem(B2,'filled');grid on;
title('Half-band filter h(n)')

hold on
plot((0:20),zeros(21),'b');grid on;

for i=0:N0-1
   Fh(i+1)=Fg(N0-i);
   Fhg(i+1)=Fg(i+1)+Fh(i+1);
end

figure(3)
plot(wff,Fg,'r-',wff,Fh,'g.',wff,Fhg,'b-');;grid on;


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?