DSP实验报告(五)之离散时间信号和系统的时域分析

一、用双线性变换法及Matlab编程设计一个IIR数字带通滤波器,其中通带波纹为1dB,阻带最小衰减为40dB,通带截止频率分别为500Hz和700Hz,阻带截止频率分别为400Hz和800Hz,抽样频率为2000Hz。画出该滤波器的幅频特性图。

No.1巴特沃斯带通滤波器

答案版本的…

clc;
clear;

Rp = 1; % 单位为dB的最大通带衰减
Rs = 40; % 单位为dB的最小阻带衰减
OmegaP1_1=500; % 通带截止频率(Hz)
OmegaP1_2=700; % 通带截止频率(Hz)
OmegaS1_1=400; % 阻带截止频率(Hz)
OmegaS1_2=800; % 阻带截止频率(Hz)
Fp=2000; % 采用频率(Hz)
Wp1=2*pi*OmegaP1_1/Fp; % 改变模拟频率到数字角频率
Wp2=2*pi*OmegaP1_2/Fp; % 改变模拟频率到数字角频率
Ws1=2*pi*OmegaS1_1/Fp; % 改变模拟频率到数字角频率
Ws2=2*pi*OmegaS1_2/Fp; % 改变模拟频率到数字角频率
OmegaP1=tan(Wp1/2); % 非线性化
OmegaP2=tan(Wp2/2); % 非线性化
OmegaS1=tan(Ws1/2); % 非线性化
OmegaS2=tan(Ws2/2); % 非线性化
OmegaP0=sqrt(OmegaP1*OmegaP2);% 等效中频
Bw=OmegaP2-OmegaP1; % 带宽
Eta_P0=OmegaP0/Bw; % 归一化
Eta_P1=OmegaP1/Bw; % 归一化
Eta_P2=OmegaP2/Bw; % 归一化
Eta_S1=OmegaS1/Bw; % 归一化
Eta_S2=OmegaS2/Bw; % 归一化
Lemta_P_EquivalentLowPass=(Eta_P2^2-Eta_P0^2)/Eta_P2;   % 改变为等效低通参数
Lemta_S1_EquivalentLowPass=-(Eta_S1^2-Eta_P0^2)/Eta_S1; % 改变为等效低通参数
Lemta_S2_EquivalentLowPass=(Eta_S2^2-Eta_P0^2)/Eta_S2;  % 改变为等效低通参数
Lemta_S_EquivalentLowPass=min(Lemta_S1_EquivalentLowPass,Lemta_S2_EquivalentLowPass); % 获取低通阻带截止频率中小的一个 (这里它省事了) 


%设计巴特沃斯低通
[N, Wn] = buttord(Lemta_P_EquivalentLowPass, Lemta_S_EquivalentLowPass, Rp, Rs,'s'); 
[num1,den1] = butter(N,Wn,'s'); 
[num2,den2]=lp2bp(num1,den1,OmegaP0,Bw);
[num,den]=bilinear(num2,den2,0.5);
% 计算增益
w = 0:pi/255:pi;
h = freqz(num,den,w);
g = 20*log10(abs(h));
% 绘制增益响应曲线
figure;
plot(w/pi,g);grid 
axis([0 1 -60 5]);
xlabel('\omega /\pi'); ylabel('Gain in dB');
title('Gain Response of a Butterworth Bandpass Filter');

在这里插入图片描述

其实,答案其实并不太正确,1、通带和阻带频率并不关于中心频率对称,需要微调。2、题目要求绘制幅频特性

下面是我修改后的,

clc;
clear;

Rp = 1; % 单位为dB的最大通带衰减
Rs = 40; % 单位为dB的最小阻带衰减
OmegaP1_1=500; % 通带截止频率(Hz)
OmegaP1_2=700; % 通带截止频率(Hz)
OmegaS1_1=400; % 阻带截止频率(Hz)
OmegaS1_2=800; % 阻带截止频率(Hz)
Fp=2000; % 采用频率(Hz)
Wp1=2*pi*OmegaP1_1/Fp; % 改变模拟频率到数字角频率
Wp2=2*pi*OmegaP1_2/Fp; % 改变模拟频率到数字角频率
Ws1=2*pi*OmegaS1_1/Fp; % 改变模拟频率到数字角频率
Ws2=2*pi*OmegaS1_2/Fp; % 改变模拟频率到数字角频率
OmegaP1=tan(Wp1/2); % 非线性化
OmegaP2=tan(Wp2/2); % 非线性化
OmegaS1=tan(Ws1/2); % 非线性化
OmegaS2=tan(Ws2/2); % 非线性化
OmegaP0=sqrt(OmegaP1*OmegaP2);% 等效中频
Bw=OmegaP2-OmegaP1; % 带宽
OmegaP_EquivalentLowPass = 1;%这个归一化后的通带截止频率就很随意了,我们这里就设其为1好了.
if(( (OmegaP1*OmegaP2) == (OmegaP0*OmegaP0) ) && ( (OmegaS1*OmegaS2) == (OmegaP0*OmegaP0) )) %比较
    OmegaS_EquivalentLowPass = -OmegaS1; % 这个是映射关系,具体看书上P165 带通的参数等效到低通
else
    OmegaS_EquivalentLowPass = ((OmegaP0*OmegaP0) - (OmegaS1*OmegaS1)) / (OmegaS1*Bw);%带通的参数等效到低通
end

%下面就很随意了。。。
%设计巴特沃斯低通
[N, Wn] = buttord(OmegaP_EquivalentLowPass, OmegaS_EquivalentLowPass, Rp, Rs,'s'); 
[num1,den1] = butter(N,Wn,'s'); 
[num2,den2]=lp2bp(num1,den1,OmegaP0,Bw);
[num,den]=bilinear(num2,den2,0.5);
% 计算幅频响应
w = 0:pi/255:pi;
h = freqz(num,den,w);
plot(w/pi,abs(h));grid;
axis([0 1 0 1.3]);
title('Magnitude Spectrum |H(e^{j\omega})|');
xlabel('\omega /\pi');
ylabel('Amplitude');

在这里插入图片描述

2. 窗函数法设计FIR数字滤波器:用窗函数法(汉明窗)及Mat lab编程设计一个FIR数字带通滤波器,其中通带波纹为1dB,阻带最小衰减为40dB,通带截止频率分别为500Hz和700Hz,阻带截止频率分别为400Hz和800Hz,抽样频率为2000Hz。画出该滤波器的幅频特性图。

clc;
clear;
choice = input('输入1表示Han,输入2表示Hamming, 输入其他默认阶数为100,请选择:\n');
Rp = 1; % 单位为dB的最大通带衰减
Rs = 40; % 单位为dB的最小阻带衰减
OmegaP1_1=500; % 通带截止频率(Hz)
OmegaP1_2=700; % 通带截止频率(Hz)
OmegaS1_1=400; % 阻带截止频率(Hz)
OmegaS1_2=800; % 阻带截止频率(Hz)
Ft=2000; % 采用频率(Hz)
Wn=2/Ft*[OmegaP1_1 OmegaP1_2];% 归一化频率,FT/2对应PI(归一化1对应PI)
if(choice == 1)
    N = 21;num=fir1(N,Wn,hann(N+1));%汉宁
elseif(choice == 2)
    N = 23;num=fir1(N,Wn,hanning(N+1));%海明
else
    N = 100;num=fir1(N,Wn,'bandpass');%带通
end;
w = 0:pi/255:pi;
h = freqz(num,1,w);
g = 20*log10(abs(h));
% 幅频绘制
subplot(2,1,1);
plot(w/pi,abs(h));grid 
axis([0 1 0 1.3]);
title('Magnitude Spectrum |H(e^{j\omega})|');
xlabel('\omega /\pi');
ylabel('Amplitude');
% 增益绘制
subplot(2,1,2);
plot(w/pi,g);grid 
axis([0 1 -60 5]);
xlabel('\omega /\pi'); ylabel('Gain in dB');
title('Gain Response of a FIR Bandpass Filter');

在这里插入图片描述

发布了653 篇原创文章 · 获赞 1016 · 访问量 73万+

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/84675510