matlab - 巴特沃斯带通滤波器的命令是什么

标签 matlab

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

最佳答案

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

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

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

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

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

关于matlab - 巴特沃斯带通滤波器的命令是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17340198/

相关文章:

matlab - 在 Matlab 中使用插值返回函数

python - 在 NumPy 中复制 Matlab 的 ISMEMBER 函数的索引结果?

c++ - boost 中的Matlab gamfit等效函数

image - Matlab的bwlabel,regionprops & centroid函数解释

MATLAB 子图不停留在页面的一侧

matlab - 创建包含时间的向量 matlab

matlab - 在 MATLAB 中实现的基本 SVM

c++ - 在 opencv 中索引矩阵的最佳方法

matlab - 如何在 MATLAB 中编写 GUI?

matlab - Dicom:Matlab 与 ImageJ 灰度级