2014-12-07 76 views
1

我有一個信號,我有一個過濾器。如何在頻域過濾

我想將信號轉換爲頻域,然後使用我的過濾器進行過濾。

將信號轉換爲頻率域很容易,但是現在如何過濾信號?

這是我的過濾器:

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),但它沒有工作,它可能是一個錯誤的做法,但我不知道該做些什麼

任何幫助appreicated

+0

是否允許將「firceqrip()」函數中的「2」更改爲另一個值? – mehmet 2014-12-07 09:54:58

+0

@mehmet它會有所作爲? 我應該使用過濾器的順序2,這就是爲什麼:/ – HappyBee 2014-12-07 09:59:45

回答

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) 
+1

但我不能有一個過濾器的順序63,我的過濾器是順序2,我真的很困惑。 – HappyBee 2014-12-07 10:08:31

+1

@sadbee我上面編輯了我的答案。過濾的結果稍有改變。看看這個,也許它更有意義.. – mehmet 2014-12-07 10:28:25

+0

謝謝你,它的工作原理! – HappyBee 2014-12-07 11:37:33