设计特定范围内的带通滤波器

时间:2014-05-03 09:04:51

标签: matlab filtering signal-processing

假设我们有采样频率为100赫兹的信号,我想设计FIR滤波器,以便切断15-20频率范围之外的所有频率,如果我们将其转换为标准化频率,我们将获得15/50 = 0.3和0.4,我知道例如我可以使用黄油来设计过滤器,例如那里 http://www.emba.uvm.edu/~gmirchan/classes/EE275/Lab5.pdf

但是你可以帮我在matlab中设计带通滤波器吗?假设我们有一些信号s(t),

这个命令

[b a] = butter(2, 400/(fs/2));

设计二阶Butterworth滤波器,截止频率为400,然后是该命令

y = filter(b,a,swn);

过滤给定信号,但不是一个截止频率,我需要15-20的范围,那么如何应用带通滤波器?

1 个答案:

答案 0 :(得分:1)

实际上,您可以使用相同的函数butter()来设计带通滤波器,只需提供一个截止频率矢量而不是标量:

% filter design
fs = 100;
f1 = 15;
f2 = 20;

% normalized frequency
w1 = f1 / (fs/2);
w2 = f2 / (fs/2);

% second-order butterworth
[b, a] = butter(2, [w1 w2]);

% filtering
x = randn(1, 10000);
y = filter(b, a, x);

在您的问题中,您谈论的是FIR过滤器的需求。但是,Butterworth滤波器具有无限的脉冲响应,正如您可以看到函数butter()返回带有多个元素的向量a这一事实。