matlab过滤问题

时间:2010-12-08 04:32:51

标签: matlab signal-processing

我有一个数据数组,它在时域中。每个数据代表幅度。这些数据以10,000Hz的频率采样。   我想在两个频率f1和f2之间做一个带通滤波器。我想我需要做一个低通滤波器和一个高通滤波器。信号进行FFT,然后通过两个滤波器,然后执行一个invserse FFT。我的问题是有一个简单的方法来做低通和高通滤波器吗?我不知道如何根据两个截止频率推导出传递函数。

谁知道怎么做?

由于

3 个答案:

答案 0 :(得分:3)

基于特里斯坦的答案,这里有一些Octave代码可能与Matlab兼容,也可能不兼容。 butter函数为您导出传递函数系数。 alt textalt text

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]);

答案 1 :(得分:2)

MATLAB有一些工具可以进行过滤,因此您不需要自己进行FFT-IFFT(可能会导致一些问题)。尝试使用butterfilter的组合来完成您想要做的事情。

Butter

Filter

答案 2 :(得分:2)

如果您有信号处理工具箱,我建议您使用sptool设计滤波器,它是一个用于滤波器设计的GUI工具,它还可以显示幅度和相位响应等。您不想要的是带通滤波器。它也可以根据你的建议用低通和高通滤波器构建,但Matlab也可以直接为你提供带通滤波器。

如果您没有工具箱,我建议您参考The Scientist and Engineer's Guide to Digital Signal Processing,整本书都可以在线获取,并且在Basic中有很多很好的示例代码,很容易翻译成Matlab。例如Designing bandpass windowed sinc filter