数字信号处理实验(五):数字滤波器设计
目录
一、实验目的:
二、实验内容及要求:
双线性变换法设计IIR数字滤波器:
- 窗函数法设计FIR数字滤波器:
三、实验结果及问题回答:
双线性变换法设计IIR数字滤波器:
- 窗函数法设计FIR数字滤波器:
一、实验目的:
设计传输函数,使其频率响应逼近给定的频率响应指标。本实验掌握双线性变换法设计IIR数字滤波器的原理及具体设计方法;掌握窗函数法设计FIR数字滤波器的原理及具体设计方法。
二、实验内容及要求:
1. 双线性变换法设计IIR数字滤波器:
用双线性变换法及Mat lab编程设计一个IIR数字带通滤波器,其中通带波纹为1dB,阻带最小衰减为40dB,通带截止频率分别为500Hz和700Hz,阻带截止频率分别为400Hz和800Hz,抽样频率为2000Hz。画出该滤波器的幅频特性图。
2. 窗函数法设计FIR数字滤波器:
用窗函数法(汉明窗)及Mat lab编程设计一个FIR数字带通滤波器,其中通带波纹为1dB,阻带最小衰减为40dB,通带截止频率分别为500Hz和700Hz,阻带截止频率分别为400Hz和800Hz,抽样频率为2000Hz。画出该滤波器的幅频特性图。
三、实验结果及问题回答:
1. 双线性变换法设计IIR数字滤波器:
(1)程序:
%%
clear all
Rp=1;%设定通带波纹
Rs=40;%设定阻带最小衰减
wp1=500;%设定通带截止频率
wp2=700;
ws1=400;%设定阻带截止频率
ws2=800;
Fp=2000;%设定抽样频率
%%
%模拟频率转换成数字角频率
Wp1=2*pi*wp1/Fp;
Wp2=2*pi*wp2/Fp;
Ws1=2*pi*ws1/Fp;
Ws2=2*pi*ws1/Fp;
%%
%非线性化
WP1=tan(Wp1/2);
WP2=tan(Wp2/2);
WS1=tan(Ws1/2);
WS2=tan(Ws2/2);
WP0=sqrt(WP1*WP2);%等效中频
Bw=WP2-WP1;%带宽
%%
%标准化
Normal_P0=WP0/Bw;
Normal_P1=WP1/Bw;
Normal_P2=WP2/Bw;
Normal_S1=WS1/Bw;
Normal_S2=WS2/Bw;
%%
%转换为等效低通
EqualLowPass_P=(Normal_P2^2-Normal_P0^2)/Normal_P2;
EqualLowPass_S1=-(Normal_S1^2-Normal_P0^2)/Normal_S1;
EqualLowPass_S2=-(Normal_S2^2-Normal_P0^2)/Normal_S2;
EqualLowPass_S=min(EqualLowPass_S1,EqualLowPass_S2);
%%
%估计滤波器阶数
[N,Wn]=buttord(EqualLowPass_P,EqualLowPass_S,Rp,Rs,'s');
%%
%设计滤波器
[num1,den1]=butter(N,Wn,'s');
[num2,den2]=lp2bp(num1,den1,WP0,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 on;
axis([0 1 -60 5]);
xlabel('\omega/\pi');
ylabel('Gain in db');
title('带通滤波器的增益响应图')
(2)幅频特性:
2. 窗函数法设计FIR数字滤波器:
(1)程序:
%%
clear all;
Rp=1;%设定通带波纹
Rs=40;%设定阻带最小衰减
wp1=500;%设定通带截止频率
wp2=700;
ws1=400;%设定阻带截止频率
ws2=800;
Ft=2000;%设定抽样频率
Fp=[wp1,wp2];
Fs=[ws1,ws2];
Deta_p=1-10^(-Rp/20);
Deta_s=10^(-Rs/20);
%%
%估计滤波器阶数
N=kaiord(Fp,Fs,Deta_p,Deta_s,Ft);
%%
%设计滤波器
Wn=2/Ft*[wp1 wp2];%标准化频率
b=fir1(N,Wn,'bandpass');
%%
%计算增益响应
[g,w]=Gain(b,1);
%%
%绘制增益响应
plot(w/pi,g);
grid on;
axis([0 1 -60 5]);
xlabel('\omega/\pi');
ylabel('gain in dB');
title('FIR带通滤波器的增益响应')
gain函数:
function [g,w] = gain(num,den)
w = 0:pi/255:pi;
h = freqz(num,den,w);
g = 20*log10(abs(h));
kaiord函数:
function N = kaiord(Fp, Fs, Rp, Rs, FT)
if nargin == 4,
FT = 2;
end
if length(Fp) > 1,
TBW = min(abs(Fp(1) - Fs(1)), abs(Fp(2) - Fs(2)));
else
TBW = abs(Fp - Fs);
end
num = -20*log10(sqrt(Rp*Rs))-13;
den = 14.6*TBW/FT;
N = ceil(num/den);
(2)幅频特性:
还没有评论,来说两句吧...