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

测试代码:

%%****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)');

效果:

滤波器特性:

03fac3fa4cc3ecc0b8fb837570c77b59.png

待滤波的信号:

aa78ee403b2bea212a013630b0ea099e.png

滤波后的信号:

29949c1145973d324edc122d0a57d9eb.png

待解决的问题:

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

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

改成

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

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

发现滤波效果出了问题。

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

963c4ddf5c215949a9ea6822ddf2c97c.png

4d7df4460a7f84dd4dda6fa0bce10fa6.png

a37a7b8c77cc23cb9b70ce1d08014c46.png

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值