• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Matlab]双线性变换法设计数字低通滤波器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

测试代码:

%%****bin_lp.m*******************%%
%% 使用双线性变换法设计低通滤波器
%% 2018年6月13日 14:27:37
%% author:Alimy

close all;
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%代码正文
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%给定数字滤波器指标
f_p     =   200     ;   %通带上截止频率
f_st    =   210     ;   %阻带下截止频率
R_p     =   3       ;   %通带允许的最大衰减
R_st    =   30      ;   %阻带允许的最小衰减
f_s     =   1000    ;   %采样频率
T_s     =   1 / f_s ;   %采样间隔
%1.将数字低通滤波器的频率参数变换为归一化的数字角频率参数
omega_p  = 2 * pi * f_p  / f_s;
omega_st = 2 * pi * f_st / f_s;
%2.预畸变处理,将归一化数字角频率参数变换成模拟低通滤波器的角频率参数
C = 2 / T_s ;
Omega_p   = C * tan( omega_p  / 2 );
Omega_st  = C * tan( omega_st / 2 ); 
%3.对模拟低通滤波器的角频率参数做归一化处理
lamda_p  = Omega_p  / Omega_p;
lamda_st = Omega_st / Omega_p;
%4.设计归一化模拟滤波器,得到归一化模拟低通滤波器的转移函数
[ N , Wn ] = buttord( Omega_p , Omega_st , R_p , R_st , \'s\' ); %选择模拟巴特沃斯低通滤波器的最小阶数
[ z , p , k ] = buttap(N); %创建巴特沃斯模拟低通滤波器
[ Bp , Ap ] = zp2tf(z,p,k); %由零点、极点、增益确定传输函数的分子与分母系数
%5.利用归一化模拟低通滤波器的转移函数确定模拟低通滤波器的转移函数
[ b , a ] = lp2lp(Bp,Ap,Wn);
%6.利用模拟低通滤波器的转移函数确定IIR数字滤波器的转移函数 
[ bz , az ] = bilinear(b,a,f_s);

figure(1);
freqz(bz,az);
title(\'低通滤波器幅度谱和相位谱特性\');

%滤波效果测试 
N = 1000
t = [ 0 : N - 1 ] * T_s ;
f1 = 20;
f2 = 250;
f3 = 300;
x1 = 2*1*sin( 2 * pi * f1 * t );
x2 = 2*2*sin( 2 * pi * f2 * t );
x3 = 2*1*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;

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)\');


%滤波
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(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)\');

  效果:

滤波器特性:

待滤波的信号:

滤波后的信号:

 

待解决的问题:

f_p = 200 ; %通带上截止频率
f_st = 210 ; %通带下截止频率

改成

f_p = 100 ; %通带上截止频率
f_st = 110 ; %通带下截止频率

发现滤波效果出了问题。

设计得到的滤波器在通道有增益上波动,滤波后的时域信号体现出增大的效果,不明白哪里需要修改。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi对泛型TList的的改进(TSimpleList)发布时间:2022-07-18
下一篇:
Delphi XE10 给地图层上面添加Android原生控件发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap