什么是Butterworth带通滤波器的命令?

3

我有一些信号数据需要使用带通滤波器进行过滤,该滤波器的频率为10-45秒、45-150秒和150-600秒。如何在Matlab中创建带通滤波器命令来过滤这些频率?


1
在Matlab中,这个问题被标记为PHP? - HamZa
1
秒(s)成为频率单位是什么时候开始的? - learnvst
通常在这里会出现“给我看代码”的评论,但我想这有些合理。不过,你可以展示一些你尝试过的东西... - icedwater
1个回答

9
假设您已经安装了信号处理工具箱(用于butter命令 - 如果butter不可用,请参见下面的代码),并且如果您知道采样频率fs,则可以使用以下代码使用低频和高频(以Hz为单位)-3dB点制作简单的递归Butterworth滤波器。更高的order将在牺牲较长的脉冲响应和稍微增加一些计算开销的情况下提供更好的抗干扰能力。
[b,a] = butter(order, [lowFreq hiFreq]/(fs/2), 'bandpass');
 y = filter(b,a,x)

输出信号y是通过使用使用butter命令生成的系数来过滤输入信号x而获得的。
如果您想同时从所有三个频段获得输出,则可以将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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接