如何在频域中进行过滤

时间:2014-12-07 09:26:49

标签: matlab filter

我有一个信号,我有一个过滤器。

我想将信号转换为频域,然后使用我的过滤器对其进行过滤。

将信号转换为频域很简单,但我现在如何过滤信号?

这是我的过滤器:

filter_2 = firceqrip(2,0.6,[0.05 0.03]);

这是我的信号:

freqs = [0.08, 0.2, 0.32, 0.4];
periods = 1./ freqs;
t_max = 4 * periods(1);
t = linspace(0, t_max, 50);

signal = sin(2*pi*0.08*t) + sin(2*pi*0.2*t) + sin(2*pi*0.32*t) + sin(2*pi*0.4*t);

% to find the fft of the signal
N = 64;
signal_spect = abs (fft(signal,N));
signal_spect = fftshift(signal_spect);
F = [-N/2:N/2-1]/N;

现在如何使用我的过滤器过滤前一个信号? 我尝试过这个fft(filter_2),但它没有成功,它可能是一个错误的方法,但我不知道还能做什么

任何帮助都是适用的

1 个答案:

答案 0 :(得分:1)

频域滤波只是逐个元素的乘法。因此,频域中的信号和滤波器必须是相同的长度。在你的代码中,firceqrip()中的参数是“2”,但我认为它应该是63.或者,你应该采用2个滤波器的N元素fft。我不知道你是否可以改变这些。如果您这样做,您的代码将起作用。但同样,我不知道结果是否合理:

filter_2 = firceqrip(2,0.6,[0.05 0.03]); 

freqs = [0.08, 0.2, 0.32, 0.4];
periods = 1./ freqs;
t_max = 4 * periods(1);
t = linspace(0, t_max, 50);

signal = sin(2*pi*0.08*t) + sin(2*pi*0.2*t) + sin(2*pi*0.32*t) + sin(2*pi*0.4*t);

% // to find the fft of the signal
N = 64;
signal_spect = fft(signal, N);
F = [-N/2:N/2-1]/N;

output = abs( fftshift( ( fft(filter_2, N) .* signal_spect) ) );
stem(F, output)