无法在matlab中获得滤波后的带通信号

时间:2017-08-04 14:17:30

标签: matlab filter fft lowpass-filter bandpass-filter

我正在尝试使用15hz(bandpass filter)组件提取信号,但没有得到答案。但是我可以获得10hz(lowpass filter)

我有3个不同频率{3}的3个信号。

我的设计如下:

10 15 and 30hz

现在我已经添加了所有这些......

x=0:1/fs:1;
f1=10;
f2=15;
f3=30;
s1=sin(2*pi*f1*x);
s2=sin(2*pi*f2*x);
s3=sin(2*pi*f3*x);

我有正确的傅里叶变换:

Combined signal Fourier transform

Butter命令在这里不起作用

这是我尝试过的:

s=s1+s2+s3;

我收到以下内容进行过滤:

Filtered Original

它的傅立叶变换是这样的:

Fourier transform of filtered signal

我甚至无法猜到为什么我在[b,a]=butter(10,[12 18]/500); % 500 is fs/2 filtered=filter(b,a,s);

达到高峰

如果是低通,我会得到一个完美的输出:

0

Low pass output

这背后的原因是什么?请告诉我是否有另一种解决方法..Thankyou:)

修改

这是完整的代码:

[b,a]=butter(10,10/500);
filtered=filter(b,a,s);

1 个答案:

答案 0 :(得分:1)

A tenth order Butterworth is wayyy too big here (and in general). If you look at the filter coefficients b, you’ll see they’re on the order of machine precision (i.e., ~1e-16). Start with a second or third-order Butterworth filter! See if butter(2, 10/500) gives sufficient attenuation and carefully increase the filter order from there.