2013-06-27 37 views
3

我有信號數據使用帶通濾波器進行濾波,頻率爲10-45s,45-150s和150-600s。如何在matlab中創建帶通濾波器命令來過濾頻率?butterworth帶通濾波器的命令是什麼

+1

'in matlab' and the question is tagged'PHP'? – HamZa

+1

從什麼時候開始秒(s)的頻率單位? – learnvst

+0

通常,「顯示我的代碼?」評論會出現在這裏,但我想這是有道理的。然而,你可以展示你已經嘗試過的東西...... – icedwater

回答

9

假設你有信號處理工具箱(用於butter命令 - 見下的代碼,如果butter是不可用),以及如果知道採樣頻率fs,可以使用低和高頻率作一個簡單的遞歸巴特沃斯濾波器(以Hz爲單位)使用以下代碼的-3dB極點。更高的orders會以更長的脈衝響應和更多的計算開銷爲代價,爲您提供更好的偏頻抑制。

[b,a] = butter(order, [lowFreq hiFreq]/(fs/2), 'bandpass'); 
y = filter(b,a,x) 

輸出信號y通過使用使用butter命令生成的係數濾波輸入信號x獲得。

如果您想要一次輸出所有3個頻帶的輸出,則可以對3個獨立濾波器操作的輸出進行求和,每個頻帶一個。但是,如果要保留波段之間的相位關係,則可以使用filtfilt命令而不是filter

如果不具有信號處理工具箱,cancreate使用下面的代碼,其中dt = 1/fsflfu是低和高截止頻率第二階帶通巴特沃斯係數。

function [ b, a ] = butterTwoBp(dt, fl, fu) 
q=pi*dt*(fu-fl); 
r=pi*dt*(fu+fl); 
N = (tan(q)^2) + sqrt(2)*tan(q) + 1; 
M = (tan(q)^2)/N; %M after N because it depends on N 
O = -cos(r) * (2*sqrt(2)*tan(q) + 4)/((cos(q))*N); 
P = (-2*(tan(q)^2) + (( (2*cos(r)) /(cos(q)) )^2) + 2)/ N; 
Q = cos(r)*(2*sqrt(2)*tan(q) - 4)/(cos(q)*N); 
R = ( (tan(q)^2) - sqrt(2)*tan(q) + 1 )/N; 

b=[M 0 -2*M 0 M]; 
a=[1 O P Q R];