目录
- 1.题目一
- 1.1题目一解答
- 方法一
- 用频率采样优化设计法设计,在过渡带增加一点采样点,取T1=0.38;
- 方法二
- 用fir2子函 数设计,加Blackman窗,在过渡带增加一点采样点,取T1 = 0.38
- 题目一代码
- 2.题目二
- 2.1题目二解答
- 2.2题目二代码
- 3.题目三
- 3.1题目三解答
- 3.2题目三代码
- 4.题目四
- 4.1题目解答
- 4.2题目代码
- 5.题目5
- 5.1题目5解答
- 5.2题目5代码
1.题目一
试用两种方法设计FIR数字带通滤波器,要求:wp1=0.4π,wp2=0.6π,ws1 = 0.25π, ws2 = 0.75π;取N=41,描绘滤波器的脉冲响应、幅频响应和相频响应曲线,并检验通阻带衰减指标是否满足指标。
1.1题目一解答
方法一
用频率采样优化设计法设计,在过渡带增加一点采样点,取T1=0.38;
方法二
用fir2子函 数设计,加Blackman窗,在过渡带增加一点采样点,取T1 = 0.38
题目一代码
代码如下(示例):
clear;
%方法1:在过渡带增加1点采样点,取T1=0.38
N=41;T1=0.38;%输入设计数据
n=0:N-1;ws1=0.25*pi;ws2=0.75*pi;%输入截止频率
wp1=0.4*pi;wp2=0.6*pi;
N1=round((wp2-wp1)/(2*pi/N));%计算通带采样点数
N1=N1+mod(N1+1,2);%使其为奇数
N2=round((N-2*N1-4)/4);%计算阻带采样点数
N2=N2+mod(N2+1,2);
N3=N-2*N2-2*N1-4;
%建立符幅特性样本序列
A=[zeros(1,N2),T1,ones(1,N1),T1,zeros(1,N3),T1,ones(1,N1),T1,zeros(1,N2)];
theta=-pi*(N-1)/N*(0:N-1);%建立相位特性样本序列
Hk=A.*exp(1j*theta);%建立频率特性样本序列
h=real(ifft(Hk));%由反变换求脉冲序列,去掉运算误差造成的虚部
[db,mag,pha,grd,w]=freqz_m(h,1);%由脉冲序列求得的频率特性
dw=2*pi/1000;%dw为频率分辨率,将0-2π分为1000份
% ws=2*pi/N*fix(wc/(2*pi/N)-2);%确定ws的位置
% As=-round(max(db(1:fic(ws/dw)+1))) %检验最小阻带衰减
% wp=ws+3*2*pi/N;%确定wp的位置
% Rp=
m=(N-1)/2;wa=[0:m-1]/m;%为作图求0-π的样点数,建立对应的频率向量
%作图
figure;
subplot(2,2,1),plot(wa,A(1:m),'.-',w/pi,mag,'r');
axis([0,1,-0.1,1.1]);title('理想幅频、样点序列及实际滤波器幅频响应');
xlabel('频率/\pi');ylabel('H(e^{j\omega})');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'YTickMode','manual','YTick',[0,T1,1]);grid
subplot(2,2,2),stem(n,h,'.');
title('滤波器脉冲响应');
xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(w/pi,db);
axis([0,1,-100,5]);title('实际滤波器幅频响应(dB)');
xlabel('频率/\pi');ylabel('G(dB)');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'YTickMode','manual','YTick',[-40,-20,0]);grid
subplot(2,2,4),plot(w/pi,pha);
axis([0,1,-4,4]);title('实际滤波器相频响应');
xlabel('频率/\pi');ylabel('\phi(\omega)');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'YTickMode','manual','YTick',[-pi,0,pi]);grid
Rp=-(min(db(wp1/dw+1:wp2/dw+1)))
As=-round(max(db([1:ws1/dw+1,ws2/dw+1:501]))) %检验最小阻带衰减
%方法二:用fir2子函数设计,加Blackman窗,在过渡带加一采样点T1=0.38
ws1=0.25;ws2=0.75;%输入截止频率
wp1=0.4;wp2=0.6;
wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2;%确定T1对应的频率
f=[0,ws1,wc1,wp1,wp2,wc2,ws2,1];%建立理想幅频特性频率向量
m=[0,0,T1,1,1,T1,0,0];%建立理想幅频特性幅度向量
windows=blackman(N);%建立blackman窗
b=fir2(N-1,f,m,windows);%求FIR滤波器的系数
[db,mag,pha,grd,w]=freqz_m(b,1);%由脉冲序列求得的频率特性
% dw=2*pi/1000;
% Rp=-(min(db(wp1*pi/dw+1:wp2*pi/dw+1)))%检验通带波动
% ws0=[1:ws1*pi/dw+1,ws2*pi/dw+1:501];%建立阻带频率样点数组
% As=-round(max(db(ws0)))%检验最小阻带衰减
%作图
figure;
subplot(2,2,1),plot(f,m,'.-',w/pi,mag,'r');
axis([0,1,-0.1,1.1]);title('理想幅频、样点序列及实际滤波器幅频响应');
xlabel('频率/\pi');ylabel('H(e^{j\omega})');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'XtickLabelRotation',90);
set(gca,'YTickMode','manual','YTick',[0,T1,1]);grid
subplot(2,2,2),stem(n,b,'.');
title('滤波器脉冲响应');
xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(w/pi,db);
axis([0,1,-100,5]);title('实际滤波器幅频响应(dB)');
xlabel('频率/\pi');ylabel('G(dB)');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'XtickLabelRotation',90);
set(gca,'YTickMode','manual','YTick',[-40,-20,0]);grid
subplot(2,2,4),plot(w/pi,pha);
axis([0,1,-4,4]);title('实际滤波器相频响应');
xlabel('频率/\pi');ylabel('\phi(\omega)');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'XtickLabelRotation',90);
set(gca,'YTickMode','manual','YTick',[-pi,0,pi]);grid
Rp=-(min(db(wp1*pi/dw+1:wp2*pi/dw+1)))
As=-round(max(db([1:ws1*pi/dw+1,ws2*pi/dw+1:501])))pi]);grid
2.题目二
由序列h0= [3,-1,2,-3]为基础,构成四种类型的线性相位FIR滤波器,即
①h1 = [3,-1,2,-3,5,-3,2,-1,3]; ②h2 = [3,-1,2,-3,-3,2,-1,3];
③h3 = [3,-1,2,-3,0,3,2,1,-3]; ④h4 = [3,-1,2,-3,3,-2,1,3]
分别求它们的冲激响应和符幅特性,并在同一张图纸上描绘出来,进行比较。(利用matlab作答)
2.1题目二解答
使用自编函数amplres.m可以求得符幅特性,四种类型的FIR线性相位FIR滤波器的冲激响应和符幅特性如下:
其中第一行的两个图分别对应第一类相位系统且N为奇数的情况,符幅特性曲线关于0,π,2π偶对称;第二行的两个图分别对应第一类相位系统且N为偶数的情况,符幅特性曲线关于0,2π偶对称,关于π奇对称,但单纯从上图来看,函数在2π和0的值是相反的,这是由于此时符幅特性曲线的周期为4π;第三行的两个图分别对应第二类相位系统且N为奇数的情况,符幅特性曲线关于0,π,2π奇对称;第四行的两个图分别对应第二类相位系统且N为偶数的情况,符幅特性曲线关于0,2π奇对称,关于π偶对称。
2.2题目二代码
%question1
clear;
h1=[3,-1,2,-3,5,-3,2,-1,3];
M=length(h1);n=0:M-1;
[A,w,type,tao]=amplres(h1);
figure;
subplot(4,2,1),stem(n,h1,'.','Markersize',10);
ylabel('h_1(n)');xlabel('n');grid
subplot(4,2,2),plot(w/pi,A);
ylabel('A');xlabel('\pi');grid
h2=[3,-1,2,-3,-3,2,-1,3];
M=length(h2);n=0:M-1;
[A,w,type,tao]=amplres(h2);
subplot(4,2,3),stem(n,h2,'.','Markersize',10);
ylabel('h_2(n)');xlabel('n');grid
subplot(4,2,4),plot(w/pi,A);
ylabel('A');xlabel('\pi');grid
h3=[3,-1,2,-3,0,3,-2,1,-3];
M=length(h3);n=0:M-1;
[A,w,type,tao]=amplres(h3);
subplot(4,2,5),stem(n,h3,'.','Markersize',10);
ylabel('h_3(n)');xlabel('n');grid
subplot(4,2,6),plot(w/pi,A);
ylabel('A');xlabel('\pi');grid
h4=[3,-1,2,-3,3,-2,1,-3];
M=length(h4);n=0:M-1;
[A,w,type,tao]=amplres(h4);
subplot(4,2,7),stem(n,h4,'.','Markersize',10);
ylabel('h_4(n)');xlabel('n');grid
subplot(4,2,8),plot(w/pi,A);
ylabel('A');xlabel('\pi');grid
suptitle('四种类型线性相位滤波器的冲激响应和符幅特性');
3.题目三
求解线性相位系统h=[3,-1,2,-3,5,-3,2,-1,3]的零极点分布图,并观察实数零点和复数零点成组出现的特点。(利用matlab作答)
3.1题目三解答
程序执行的结果如下:
i | rz | r=1/rz |
1 | 0.8945+0.4470i | 0.8945+0.4470i |
2 | 0.8945-0.4470i | 0.8945-0.4470i |
3 | 0.4560+0.8900i | 0.4560+0.8900i |
4 | 0.4560-0.8900i | 0.4560-0.8900i |
5 | -0.6536+0.8975i | -0.5302+0.7281i |
6 | -0.6536-0.8975i | -0.5302-0.7281i |
7 | -0.5302+0.7281i | -0.6536+0.8975i |
8 | -0.5302-0.7281i | -0.6536-0.8975i |
可看出,5、6、7、8的四个复数为一组;在单位圆上的1、2为一组,在单位圆上的3、4为一组。
零极点分布图如下:
3.2题目三代码
%question 2
clear;
h=[3,-1,2,-3,5,-3,2,-1,3];
M=length(h);
rz=roots(h)
for i=1:M-1
r(i)=1/rz(i); %为了观察那些零点为同组极点(零点的倒数还是零点)
end
r'
zplane(h,1)
title('线性相位系统h的零极点分布图')
4.题目四
选择合适的窗函数设计FIR数字低通滤波器要求:通带wp=0.2π,Rp=0.05dB;阻带ws=0.3π,As=40dB。描绘实际滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。(利用matlab作答)
4.1题目解答
使用MATLAB作答:
查表可知,选用汉宁窗,程序执行的结果如下:
由
数据和曲线可见,选用汉宁窗设计的结果能满足设计指标要求,其中N=67,可知,FIR数字低通滤波器的阶数一般都比较高。
4.2题目代码
%question 3
clear;
%查表可知,选用汉宁窗
wp=0.2*pi;ws=0.3*pi;%输入设计指标
deltaw=ws-wp;%计算过渡带的宽度
N0=ceil(6.6*pi/deltaw);%按汉宁窗数据,求滤波器长度N0
N=N0+mod(N0+1,2);%为实现FIR类型I偶对称滤波器,应确保N为奇数
windows=(hamming(N))';%使用汉宁窗,并将列向量变为行向量
wc=(ws+wp)/2;%截止频率取通阻带频率的平均值
hd=ideal_lp(wc,N);%建立理想低通滤波器
b=hd.*windows;
[db,mag,pha,grd,w]=freqz_m(b,1);%求解频率特性
n=0:N-1;dw=2*pi/1000;%dw为频率分辨率,将0-2π分为1000份
Rp=-(min(db(1:wp/dw+1)))%检验通带波动
As=-round(max(db(ws/dw+1:501)))%检验最小阻带衰减
%作图
subplot(2,2,1),stem(n,b,'.');
axis([0,N,1.1*min(b),1.1*max(b)]);title('实际脉冲响应')
xlabel('n');ylabel('h(n)');grid
subplot(2,2,2),stem(n,windows,'.');
axis([0,N,0,1.1]);title('窗函数特性');
xlabel('n');ylabel('w_d(n)');grid
subplot(2,2,3),plot(w/pi,db);axis([0,1,-80,10]);
title('幅度频率响应曲线');
xlabel('频率/\pi');ylabel('H(e^{j\omega})');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1]);
set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid
subplot(2,2,4),plot(w/pi,pha);axis([0,1,-4,4]);
title('相位频率响应曲线');
xlabel('频率/\pi');ylabel('\phi(\omega)');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1]);
set(gca,'YTickMode','manual','YTick',[-3.14,0,3.14]);grid
suptitle('FIR数字低通滤波器')
5.题目5
4.选择合适的窗函数设计FIR数字带通滤波器,要求:fp1=3.5kHz,fp2= 6.5kHz ,Rp=0.05dB;fs1=2.5kHz,fs2=7.5kHz,As=60dB,滤波器采样频率Fs= 20kHz。描绘实际滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。(利用matlab作答)
5.1题目5解答
查表可知,选用布莱克曼窗,程序运行结果如下:
由数据和曲线可见,选用布莱克曼窗设计的结果能满足设计指标要求,且具有很小的通带波动(
),很高的阻带衰减值(
),过渡带很窄。
5.2题目5代码
%question 4
clear;
fp1=3500;fp2=6500;%输入设计指标
fs1=2500;fs2=7500;Fs=20000;
ws1=fs1/(Fs/2)*pi;ws2=fs2/(Fs/2)*pi;%计算归一化角频率
wp1=fp1/(Fs/2)*pi;wp2=fp2/(Fs/2)*pi;
wp=[wp1,wp2];ws=[ws1,ws2];
deltaw=wp1-ws1;
N0=ceil(11*pi/deltaw);%按布莱克曼窗计算滤波器长度N0
N=N0+mod(N0+1,2);%为实现FIR类型I偶对称滤波器,应确保N为奇数
windows=(blackman(N))';%使用布莱克曼窗,并将列向量变为行向量
wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2;%截止频率取通阻带频率的平均值
hd=ideal_lp(wc2,N)-ideal_lp(wc1,N);%建立理想带通滤波器
b=hd.*windows;
[db,mag,pha,grd,w]=freqz_m(b,1);%求解频率特性
n=0:N-1;dw=2*pi/1000;%dw为频率分辨率,将0-2π分为1000份
Rp=-(min(db(wp1/dw+1:wp2/dw+1)))%检验通带波动
ws0=[1:ws1/dw+1,ws2/dw+1:501];%建立阻带频率样点数组
As=-round(max(db(ws0)))%检验最小阻带衰减
%作图
subplot(2,2,1),stem(n,b,'.');
axis([0,N,1.1*min(b),1.1*max(b)]);title('实际脉冲响应')
xlabel('n');ylabel('h(n)');grid
subplot(2,2,2),stem(n,windows,'.');
axis([0,N,0,1.1]);title('窗函数特性');
xlabel('n');ylabel('w_d(n)');grid
subplot(2,2,3),plot(w/pi,db);axis([0,1,-150,10]);
title('幅度频率响应曲线');
xlabel('频率/\pi');ylabel('H(e^{j\omega})');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'YTickMode','manual','YTick',[-100,-60,-20,-3,0]);grid
subplot(2,2,4),plot(w/pi,pha);axis([0,1,-4,4]);
title('相位频率响应曲线');
xlabel('频率/\pi');ylabel('\phi(\omega)');
set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,'YTickMode','manual','YTick',[-3.14,0,3.14]);grid
suptitle('FIR数字带通滤波器')