Matlab 雙線性變換法設計數字帶通濾波器

2022-02-27 05:45:51 字數 3320 閱讀 5050

測試**:

%%****bin_bp.m*******************%%

%% 使用雙線性變換法設計帶通濾波器

%% 2023年6月13日 16:30:34

%% author:alimy

close all;

clear;

clc;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%**正文

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%給定數字濾波器指標

f_sl = 150 ; %阻帶下限頻率(hz)

f_1 = 200 ; %通帶下限頻率(hz)

f_3 = 500 ; %通帶上限頻率(hz)

f_sh = 600 ; %阻帶上限頻率(hz)

r_p = 0.5 ; %通帶允許的最大衰減

r_s = 40 ; %阻帶允許的最小衰減

f_s = 2000 ; %取樣頻率

t_s = 1 / f_s ; %取樣間隔

%1.將數字帶通濾波器的頻率引數變換為歸一化的數字角頻率引數

omega_sl = 2 * pi * f_sl / f_s; %阻帶下限頻率

omega_1 = 2 * pi * f_1 / f_s; %通帶下限頻率

omgea_3 = 2 * pi * f_3 / f_s; %通帶上限頻率

omega_sh = 2 * pi * f_sh / f_s; %阻帶上限頻率

%2.預畸變處理,將歸一化數字角頻率引數變換成模擬帶通濾波器的角頻率引數

c = 2*f_s ;

omega_sl = c * tan( omega_sl / 2 );

omega_1 = c * tan( omega_1 / 2 );

omega_3 = c * tan( omgea_3 / 2 );

omega_sh = c * tan( omega_sh / 2 );

%3.對模擬帶通濾波器的角頻率引數做歸一化處理

omega_bw = omega_3 - omega_1;

eta_sl = omega_sl / omega_bw;

eta_1 = omega_1 / omega_bw;

eta_3 = omega_3 / omega_bw;

eta_sh = omega_sh / omega_bw;

%4.設計歸一化模擬濾波器,得到歸一化模擬帶通濾波器的轉移函式

omega_p = [ omega_1 , omega_3 ];

omega_s = [ omega_sl , omega_sh ];

[ n , wn ] = buttord( omega_p , omega_s , r_p , r_s , 's' ); %選擇模擬巴特沃斯濾波器的最小階數

[ bs, as ] = butter(n,wn,'s');

%5.利用模擬帶通濾波器的轉移函式確定iir數字濾波器的轉移函式

[ bz , az ] = bilinear(bs,as,f_s);

figure(1);

freqz(bz,az);

title('帶通濾波器幅度譜和相位譜特性');

%濾波效果測試

n = 1000;

t = [ 0 : n - 1 ] * t_s ;

f1 = 50;

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 雙線性變換法設計數字帶阻濾波器

測試 bin bs.m 使用雙線性變換法設計帶阻濾波器 2018年6月13日 16 48 04 author alimy close all clear clc 正文 給定數字濾波器指標 f sl 150 阻帶下限頻率 hz f 1 200 通帶下限頻率 hz f 3 500 通帶上限頻率 hz f...

MATLAB實現雙線性內插演算法

用matlab簡易的實現雙線性內插演算法演算法,實現影象的縮放。具體的細節,程式注釋裡面裡面會有。講的還是清晰易懂 本實現 也是參考上面這篇博文的講解實現的 雙線性插值實現 f x,y w1 p1 w2 p2 w3 p3 w4 p4 p1,p2,p3,p4是與 x,y 最近的四個畫素點 w1,w2,...

補充 雙線性差值

opencv使用函式cv2.resize 進行影象縮放的時候,預設使用使用的插值方式是雙線性插值 cv2.inter linear 我們知道,fcn是在用雙線性插值的方式來初始化反卷積的卷積核。所以在這裡補充一下。但是其他 很少用這種方式。放在這裡,能跑通。自己用不用都行,會呼叫就行了 想深究的可以...