什么是butterworth带通滤波器的命令

时间:2013-06-27 10:00:10

标签: matlab

我有信号数据要使用带通滤波器进行滤波,频率为10-45s,45-150s和150-600s。如何在matlab中创建带通滤波器命令来过滤那些频率?

1 个答案:

答案 0 :(得分:9)

假设您有信号处理工具箱(对于butter命令 - 如果butter不可用,请参阅较低的代码),如果您知道采样频率fs,则可以制作使用以下代码使用低频和高频(以Hz为单位)-3dB的简单递归巴特沃斯滤波器。较高的order s会以更长的脉冲响应和更多的计算费用为代价提供更好的异频抑制。

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

输出信号y是通过使用x命令生成的系数对输入信号butter进行滤波而获得的。

如果您想同时获得所有3个波段的输出,您可以将3个独立滤波器操作的输出相加,每个波段一个。但是,如果要保留波段之间的相位关系,您可能希望在执行此操作时使用filtfilt命令而不是filter

如果您没有信号处理工具箱,可以使用下面的代码创建二阶带通butterworth系数,其中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];