我有一些信号数据需要使用带通滤波器进行过滤,该滤波器的频率为10-45秒、45-150秒和150-600秒。如何在Matlab中创建带通滤波器命令来过滤这些频率?
我有一些信号数据需要使用带通滤波器进行过滤,该滤波器的频率为10-45秒、45-150秒和150-600秒。如何在Matlab中创建带通滤波器命令来过滤这些频率?
butter
命令 - 如果butter
不可用,请参见下面的代码),并且如果您知道采样频率fs
,则可以使用以下代码使用低频和高频(以Hz为单位)-3dB点制作简单的递归Butterworth滤波器。更高的order
将在牺牲较长的脉冲响应和稍微增加一些计算开销的情况下提供更好的抗干扰能力。[b,a] = butter(order, [lowFreq hiFreq]/(fs/2), 'bandpass');
y = filter(b,a,x)
y
是通过使用使用butter
命令生成的系数来过滤输入信号x
而获得的。filtfilt
命令而不是filter
。dt = 1/fs
,fl
和fu
是低和高截止频率。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];