1. 程式人生 > >[Matlab]雙線性變換法設計數字高通濾波器

[Matlab]雙線性變換法設計數字高通濾波器

濾波 del inf 代碼 info ima IV http 分享圖片

測試代碼:

%%****bin_hp.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 ] = lp2hp(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 = 100;
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)‘);

  

 效果:

濾波器特性:

技術分享圖片

待濾波的信號:

技術分享圖片

濾波後信號:

技術分享圖片

[Matlab]雙線性變換法設計數字高通濾波器