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.
但它不想工作。
我的問題是從幅度頻譜(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.
但它不想工作。
您可以設置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'
選項調用它來完成。
如果您需要弄清楚a
和b
應該用於某個頻率,您可以首先創建一個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;
請注意,我在這個例子中實際上省略了使用兩個變量a
和b
的乾脆選擇了邏輯索引,並且Fs
是採樣率。
這就是我需要的,謝謝你的回答! – Karolina 2013-03-26 17:49:23