数字信号处理实验9


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数字带通滤波器')

猜你喜欢

转载自blog.csdn.net/weixin_45662974/article/details/113477012