【发布时间】:2023-03-12 15:03:01
【问题描述】:
我正在尝试使用15hz(bandpass filter) 组件提取信号但没有得到答案。但是我可以得到10hz(lowpass filter)。
我有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);
现在我已经全部添加了...
s=s1+s2+s3;
我有正确的傅立叶变换:
Butter 命令在这里不起作用
这是我尝试过的:
[b,a]=butter(10,[12 18]/500); % 500 is fs/2
filtered=filter(b,a,s);
我得到以下过滤:
它的傅立叶变换是这样的:
我什至无法猜测为什么我会在0 达到顶峰
如果是低通,我会得到完美的输出:
[b,a]=butter(10,10/500);
filtered=filter(b,a,s);
这背后的原因是什么?请告诉我是否有另一种方法来解决这个问题..谢谢:)
编辑:
这是完整的代码:
clc;
close all;
fs=1000;
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);
s=s1+s2+s3;
figure
x_axis=linspace(-fs/2,fs/2,numel(x));
plot(s)
fourier=fft(s);
answer=fftshift(fourier);
plot(x_axis,abs(answer));
figure
[b,a]=butter(10,10/500);
filtered=filter(b,a,s);
plot(filtered);
figure
plot(x_axis,abs(fftshift(fft(filtered))));
【问题讨论】:
-
展示你如何做每一件事,包括情节
-
好的,请稍等。我会编辑答案
-
@AnderBiguri 我已经发布了整个代码
标签: matlab filter fft lowpass-filter bandpass-filter