我有信号数据使用带通滤波器进行滤波,频率为10-45s,45-150s和150-600s.如何在matlab中创建带通滤波器命令来过滤那些频率?
假设您有信号处理工具箱(对于butter命令 - 请参阅较低的代码,如果butter不可用),如果您知道采样频率fs,您可以使用低频和高频(以Hz为单位)-3dB的频率使用简单的递归Butterworth滤波器以下代码.较高的orders将以更长的脉冲响应和更多的计算费用为代价提供更好的异频抑制.
[b,a] = butter(order, [lowFreq hiFreq]/(fs/2), 'bandpass');
y = filter(b,a,x)
Run Code Online (Sandbox Code Playgroud)
y通过x使用使用该butter命令生成的系数对输入信号进行滤波来获得输出信号.
如果您想同时获得所有3个波段的输出,您可以将3个独立滤波器操作的输出相加,每个波段一个.但是,如果要保留波段之间的相位关系,您可能希望在执行此操作时使用该filtfilt命令filter.
如果你不具备信号处理工具箱,你cancreate 2阶带通巴特沃思系数使用下面的代码,其中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];
Run Code Online (Sandbox Code Playgroud)