我有一组数据,它在时域中。每个数据代表幅度,该数据以 10,000Hz 的频率采样。
我想在两个频率 f1
和 f2
之间做一个带通滤波器。我想我需要做一个低通滤波器和一个高通滤波器。信号进行 FFT,然后通过两个滤波器,然后进行逆 FFT。
我的问题:有没有一种简单的方法来做低通和高通滤波器?我不知道如何根据两个截止频率推导出传递函数。
有谁知道怎么做?
谢谢
最佳答案
以 Tristan 的回答为基础,这里有一些 Octave 代码,它可能与 Matlab 兼容,也可能不兼容。黄油函数为您推导出传递函数系数。 .
hz = 8000;
x = [1:1:hz*10];
t = x./hz;
pi = 3.1415;
% Create signal with 10 hz, 200 hz and 500 hz components
raw_signal = sin(10*2*pi*t)+sin(200*2*pi*t)+sin(500*2*pi*t);
% View Raw Signal Over .1 Second Window
plot(t, raw_signal)
title('Raw Signal with 10Hz, 200Hz, 500Hz Components')
xlabel('Time (Sec)')
ylabel('Amplitude')
set(gca,'XLim', [5, 5.1]);
% Create Band Pass Butterworth Filter
[S_numer, S_denom] = butter(5, [100/hz 350/hz]);
band_passed_signal = filter(S_numer, S_denom, raw_signal);
% View Band Pass Filtered Signal Over .1 Second Window
plot(t, band_passed_signal)
title('Band Pass Filtered Signal')
xlabel('Time (Sec)')
ylabel('Amplitude')
set(gca,'XLim', [5, 5.1]);
关于matlab过滤题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4384190/