双线性变换法MATLAB实现巴特沃斯低通滤波器

实验名称  数字信号处理实验4  实验(实习)日期 12.13 得分       指导老师                

学院 电信院 专业 电子信息工程 年级 2020  班次       姓名        学号  20208327         

1.实验目的

  1. 掌握利用MATLAB求滤波器阶数和自然截至频率;
  2. 掌握利用MATLAB求分子、分母多项式系数;
  3. 掌握利用MATLAB改变滤波器的截止频率;
  4. 掌握利用MATLAB将模拟滤波器转化成数字滤波器。

2.实验内容

(1)试用双线性变换法设计一个数字低通滤波器,给定技术指标fp=100Hz,fs=300Hz,αp=3dB, αs=20dB,采样频率fs=1000Hz。

3.实验步骤和实验结果

①分析:根据给定的技术指标fp、fs、αp、αs和fs,可以算出通带和阻带的Ωp和Ωs。通过buttord()函数求得阶数和截止频率,函数为[n,wn]=buttord(wap,was,rp,rs,'s'),其中n为滤波器阶数,wn为截止频率;然后使用buttap()函数求得极点、零点和增益,使用zp2tf()函数,将已知的极、零点和增益转换为传递函数的形式,之后使用lp2lp()函数将截止频率为1rad/s的模拟低通滤波器变换成截止频率为wap的模拟低通滤波器:最后使用bilinear()函数,根据双线性变换法将模拟滤波器转为数字滤波器,最后使用freqz()函数求得离散系统的频响特性。

clc;clear;
%参数设置
f_p=100;   %通带上截止频率
f_st=300;   %阻带下截止频率
R_p=3;   %通带允许的最大衰减
R_st=20;   %阻带允许的最小衰减
f_s=1000;   %采样频率
T_s=1/f_s;   %采样间隔
%归一化为数字角频率参数
s_p=2*pi*f_p/f_s;
s_st=2*pi*f_st/f_s;
%变换成模拟低通滤波器的角频率参数
C=2/T_s ;
S_p=C*tan(s_p/2);
S_st=C*tan(s_st/2); 
%模拟低通滤波器角频率参数归一化处理
lamda_p=S_p/S_p;
lamda_st=S_st/S_p;
%归一化模拟低通滤波器的转移函数
[N,Wn]=buttord(S_p,S_st,R_p,R_st,'s'); %求阶数和截止频率
%选择模拟巴特沃斯低通滤波器的最小阶数
[z,p,k]=buttap(N);%求极点、零点和增益
[Bp,Ap]=zp2tf(z,p,k);%将已知的极、零点和增益转换为传递函数的形式
%将截止频率为1rad/s的模拟低通滤波器变换成截止频率为Omega_p的模拟低通滤波器
[b,a] = lp2lp(Bp,Ap,Wn);
%根据双线性变换法将模拟滤波器转为数字滤波器 
[bz,az]=bilinear(b,a,f_s);
%滤波效果测试 
N=1000
t=[0:N-1]*T_s ;
f1=20;
f2=300;
f3=500;
x1=2*sin(2*pi*f1*t);
x2=2*2*sin(2*pi*f2*t);
x3=2*3*sin(2*pi*f3*t);
x=x1+x2+x3;
fft_x=fft(x);
X_mag=fftshift(abs(fft_x))/N ;
X_ang=fftshift(angle(fft_x));
delta_f=f_s/N;
f=(-N/2:N/2-1)*delta_f;
%滤波
lp_x=filter(bz,az,x);
lp_fft_x=fft(lp_x);
lp_X_mag=fftshift(abs(lp_fft_x))/N ;
lp_X_ang=fftshift(angle(lp_fft_x));
%显示
figure(1);
freqz(bz,az);
title('低通滤波器幅度谱和相位谱');
figure(2);
subplot(3,1,1);
plot(t,x);
title('原信号时域波形');
xlabel('t(s)');
subplot(3,1,2);
plot(f,X_mag);
title('原信号幅度谱');
xlabel('f(hz)');
subplot(3,1,3);
plot(f,X_ang);
title('原信号相位谱');
xlabel('f(hz)');
figure(3);
subplot(3,1,1);
plot(t,lp_x);
title('滤波后信号时域波形');
xlabel('t(s)');
subplot(3,1,2);
plot(f,lp_X_mag);
title('滤波后信号幅度谱');
xlabel('f(hz)');
subplot(3,1,3);
plot(f,lp_X_ang);
title('滤波后信号相位谱');
xlabel('f(hz)');

结果:

实验小结

本次实验主要掌握了如何用MATLAB实现低通滤波器,实验过程中要注意数字角频率和模拟角频率的转化,并且采用双线性变换法将模拟滤波器转化为数字滤波器。模拟滤波器设计的主要流程总结为:1)根据信号处理的要求确定设计指标;2)选择滤波器类型;3)计算滤波器阶数。同时本实验也用到了前几节课所学的滤波、显示图像等知识,需要进行融会贯通。

至此四次数字信号处理四次实验已经结束,通过这四次实验,我对MATLAB的熟悉程度有所加深,从第一次做实验不知道如何切换MATLAB的运行环境,到现在掌握了一些编程方法和函数的使用,还是很有收获的。也在实验过程中深深意识到了自己编程水平的不足,常常需要到CSDN等博客平台上寻求帮助,虽然作为一名电信人,可能接触到的更多的是硬件,但是对基础算法和编程思想的掌握和熟练程度还是需要进一步精进的。

路漫漫其修远兮,继续加油吧!

  • 1
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值