我正在尝试使用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);
我有正确的傅里叶变换:
Butter命令在这里不起作用
这是我尝试过的:
s=s1+s2+s3;
我收到以下内容进行过滤:
它的傅立叶变换是这样的:
我甚至无法猜到为什么我在[b,a]=butter(10,[12 18]/500); % 500 is fs/2
filtered=filter(b,a,s);
如果是低通,我会得到一个完美的输出:
0
这背后的原因是什么?请告诉我是否有另一种解决方法..Thankyou:)
修改
这是完整的代码:
[b,a]=butter(10,10/500);
filtered=filter(b,a,s);
答案 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.