2013-03-26 63 views
0

我的問題是從幅度頻譜(fft)獲得原始信號,基於fft的逆,但僅適用於某些頻率範圍ex。 8-12Hz。任何人都可以幫我嗎?我嘗試使用:頻率範圍的逆快速傅里葉變換

xdft=fft(x); 
ixdft=ifft(xdft(a:b)), %where xdft(a:b) is |Y(f)| for freq 8-12 Hz. 

但它不想工作。

回答

3

您可以設置xdft所有值爲零,除了那些你想要的,即

xdft = fft(x); 
xdft = xdft(1:ceil(length(xdft)/2)); 
xdft(1:a) = 0; 
xdft(b+1:end) = 0; 
ixdft = ifft(xdft, 'symmetric'); 

我所採取的原因只有原來FFT'd數據的一半是你的結果將是左右對稱Fs/2(其中Fs是採樣率),並且如果您不對中心兩側的頻率做同樣的事情,則會得到一個複雜的信號。我不是手動對雙方做同樣的事情,我只是採取了一邊,修改它,並告訴ifft它必須通過附加一個鏡像來反映你通過它的全部頻率範圍的數據;這通過使用'symmetric'選項調用它來完成。

如果您需要弄清楚ab應該用於某個頻率,您可以首先創建一個FFT頻率的矢量,然後找到那些在您的頻率範圍內的頻率,例如:

xdft = fft(x); 
xdft = xdft(1:ceil(length(xdft)/2)); 
f = linspace(0, Fs/2, length(xdft)); 
keepInd = f >= 8 & f <= 12; % Keep frequencies between 8 and 12 Hz 
xdft(~keepInd) = 0; 

請注意,我在這個例子中實際上省略了使用兩個變量ab的乾脆選擇了邏輯索引,並且Fs是採樣率。

+0

這就是我需要的,謝謝你的回答! – Karolina 2013-03-26 17:49:23