实验四 IIR数字滤波器设计及软件实现
%N 为信号 st 的长度。
%第 1 路调幅信号的载波频率 fc1=1000Hz,
%第 1 路调幅信号的调制信号频率 fm1=100Hz
%第 2 路调幅信号的载波频率 fc2=500Hz
%第 2 路调幅信号的调制信号频率 fm2=50Hz
%第 3 路调幅信号的载波频率 fc3=250Hz
%第 3 路调幅信号的调制信号频率 fm3=25Hz
程序代码:
function st=mstg
%产生信号序列向量 st,并显示 st 的时域波形和频谱
%st=mstg 返回三路调幅信号相加形成的混合信号,长度 N=1600
N=1600
Fs=10000;T=1/Fs;Tp=N*T; %采样频率 Fs=10kHz,Tp 为采样时间
t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;
fc1=Fs/10;
fm1=fc1/10;
fc2=Fs/20;
fm2=fc2/10;
fc3=Fs/40;
fm3=fc3/10;
xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t); %产生第 1 路调幅信号
xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t); %产生第 2 路调幅信号
xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t); %产生第 3 路调幅信号
st=xt1+xt2+xt3;
fxt=fft(st,N);
%====以下为绘图部分,绘制 st 的时域波形和幅频特性曲线====================
subplot(3,1,1)
plot(t,st);grid;xlabel('t/s');ylabel('s(t)');
axis([0,Tp/8,min(st),max(st)]);title('(a) s(t)的波形')
subplot(3,1,2)
stem(f,abs(fxt)/max(abs(fxt)),'.');grid;title('(b) s(t)的频谱')
axis([0,Fs/5,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
%*********低通滤波器的实现********
wpz=2*pi*275/10000;wsz=2*pi*450/10000;%低通滤波器的通,阻带边界频率
%三路调幅信号相加
%计算信号 st 的频谱
rp=0.1;rs=60;
T=2;Fs=1/T;
%将数字低通滤波器指标转换为模拟滤器低通指标
wplp=2/T*tan(wpz/2); wslp=2/T*tan(wsz/2);
[N,Wn]=ellipord(wplp,wslp,rp,rs,'s');
[num,den]=ellip(N,rp,rs,Wn,'s'); %调用ellip函数计算模拟低通滤波器的频率响应
[num1,den1]=bilinear(num,den,Fs);%调用bilinear函数计算数字低通滤波器频率响应
y1n=filter(num1,den1,st);%滤波器软件实现
%低通滤波器设计与实现绘图部分
N1=500;
f1=0:N1-1;
Y1k=fft(y1n,N1);%y1n的DFT
[h,omega] = freqz(num1,den1,256);
figure(1);subplot(3,1,1);
plot (omega/pi,20*log10(abs(h)));grid;%绘制低通滤波器的冲激函数
axis([0,1,-80,10]);
xlabel('\omega/\pi'); ylabel('Gain, dB');
title('IIR Elliptic Lowpass Filter');
subplot(3,1,2);
plot(t,y1n);grid;%绘制信号经低通滤波器后y1n的图形曲线
xlabel('t/s'); ylabel('y1(n)');
title('y1(n)的波形');
subplot(3,1,3);
stem(f1,abs(Y1k)/max(abs(Y1k)),'.');grid; % 绘制Y1k图形曲线
title('y1(n)的频谱');
xlabel('f/HZ');ylabel('幅度');
B
d
,
i
n
a
G
IIR Elliptic Lowpass Filter
0
-20
-40
-60
-80
0
0.1
0.2
0.3
0.4
0.5
/
0.6
0.7
0.8
0.9
1
)
n
(
1
y
1
0
-1
0
1
度
幅
0.5
0
0
y1(n)的 波 形
0.02
0.04
0.06
0.08
t/s
y1(n)的 频 谱
0.1
0.12
0.14
0.16
50
100
150
200
250
f/HZ
300
350
400
450
500
%*********带通滤波器实现********
wp1z=2*pi*450/10000;wp2z=2*pi*550/10000; %带通滤波器的通,阻带边界频率
ws1z=2*pi*275/10000;ws2z=2*pi*900/10000;
rp=0.1;rs=60;
T=2;Fs=1/T;
%将数字带通滤波器指标转换为模拟滤器带通指标
wp1bp=2/T*tan(wp1z/2);
wp2bp=2/T*tan(wp2z/2);
ws1bp=2/T*tan(ws1z/2);
ws2bp=2/T*tan(ws2z/2);
%将模拟带通滤波器指标转换为模拟滤器低通通指标
ws2bp=wp1bp*wp2bp/ws1bp;
w02=ws1bp*ws2bp;
bw=wp2bp-wp1bp;
wplp=1;
wslp=(w02-ws1bp^2)/ws1bp/bw;
[N,Wn]=ellipord(wplp,wslp,rp,rs,'s');
[num,den]=ellip(N,rp,rs,Wn,'s'); %调用ellip函数计算模拟带通通滤波器的频率响应
[num,den]=lp2bp(num,den,sqrt(w02),bw);%调用函数计算模拟低通滤波器的频率响应
[num2,den2]=bilinear(num,den,Fs); %调用bilinear函数计算数字带通滤波器频率响应
[h,omega] = freqz(num2,den2,256); %滤波器软件实现
%带通滤波器设计与软件实现绘图部分
y2n=filter(num2,den2,st);
N2=900;
Y2k=fft(y2n,N2);
figure(2);subplot(3,1,1);
plot (omega/pi,20*log10(abs(h)));grid; %绘制带通滤波器的冲激函数
axis([0,1,-80,10]);
xlabel('\omega/\pi'); ylabel('Gain, dB');
title('IIR Elliptic bandpass Filter');
subplot(3,1,2);
plot(t,y2n);grid; %绘制信号经低通滤波器后y2n的图形曲线
xlabel('t/s'); ylabel('y2(n)');
title('y2(n)的波形');
subplot(3,1,3);
stem(abs(Y2k)/max(abs(Y2k)),'.');grid; % 绘制Y2k图形曲线
title('y2(n)的频谱');
xlabel('f/HZ');ylabel('幅度');
B
d
,
i
n
a
G
IIR Elliptic bandpass Filter
0
-20
-40
-60
-80
0
0.1
0.2
0.3
0.4
0.5
/
0.6
0.7
0.8
0.9
1
)
n
(
2
y
1
0
-1
0
1
度
幅
0.5
0
0
y2(n)的 波 形
0.02
0.04
0.06
0.08
t/s
y2(n)的 频 谱
0.1
0.12
0.14
0.16
100
200
300
400
f/HZ
500
600
700
800
900
%********高通滤波器的实现 ********
wpz=2*pi*900/10000;wsz=2*pi*550/10000; %高通滤波器的通,阻带边界频率
rp=0.1;rs=60;
T=2;Fs=1/T;
%将数字高通通滤波器指标转换为模拟滤器高通通指标
wphp=2/T*tan(wpz/2);
wshp=2/T*tan(wsz/2);
%将模拟高通通滤波器指标转换为模拟滤器低通通通指标
wplp=1;
wslp=wphp/wshp;
[N,Wn]=ellipord(wplp,wslp,rp,rs,'s');
[num,den]=ellip(N,rp,rs,Wn,'s'); %调用ellip函数计算模拟高通滤波器的频率响应
[num,den]=lp2hp(num,den,wphp); ;%调用函数计算模拟低通滤波器的频率响应
[num3,den3]=bilinear(num,den,Fs); %调用bilinear函数计算数字高通滤波器频率响应
[h,omega] = freqz(num3,den3,256); %滤波器软件实现
y3n=filter(num3,den3,st);
%高通滤波器设计与软件实现绘图部分
N3=1100;
Y3k=fft(y3n,N3);
figure(3);subplot(3,1,1);
plot (omega/pi,20*log10(abs(h)));grid; %绘制带通滤波器的冲激函数
axis([0,1,-80,10]);
xlabel('\omega/\pi'); ylabel('Gain, dB');
title('IIR Elliptic Hignpass Filter');
subplot(3,1,2);
plot(t,y3n);grid; %绘制信号经低通滤波器后y3n的图形曲线
xlabel('t/s'); ylabel('y3(n)');
title('y3(n)的波形');
subplot(3,1,3);
stem(abs(Y3k)/max(abs(Y3k)),'.');grid; % 绘制Y3k图形曲线
title('y3(n)频谱');
xlabel('f/HZ');ylabel('幅度');
IIR Elliptic Hignpass Filter
B
d
,
i
n
a
G
0
-20
-40
-60
-80
0
0.1
0.2
0.3
0.4
0.5
/
0.6
0.7
0.8
0.9
1
)
n
(
3
y
2
0
-2
0
1
度
幅
0.5
0
0
y3(n)的 波 形
0.02
0.04
0.06
0.08
t/s
y3(n)的 频 谱
0.1
0.12
0.14
0.16
200
400
600
f/HZ
800
1000
1200