我有一個問題的理解從MATLAB信號中的一些代碼片段處理工具箱FIR2()函數:傅立葉時移在Matlab fir2()函數中做什麼?
% My comment: at this point vector H contains nn+1 (nn is an even number) points (double numbers) of amplitudes for a dense frequency grid
% Fourier time-shift.
dt = 0.5 .* (nn - 1);
rad = -dt .* sqrt(-1) .* pi .* (0:npt-1) ./ (npt-1);
H = H .* exp(rad);
%My comment: now H contains nn+1 complex numbers
%My comment: creates a horizontal mirror with 2*nn points
Hconj = [H conj(H(npt-1:-1:2))]; % Fourier transform of real series.
ht = real(ifft(Hconj)); % Symmetric real series.
%My comment: throws away the half after ht[nn]
b = ht(1:nn); % Raw numerator.
wind = hamming(nn);
b = b .* wind(:).'; % Apply window.
什麼讓我困惑的是: - 如果我註釋掉傅立葉時移,IFFT的結果是對稱的如果我離開傅里葉時移碼完好無損,ifft的結果在ht [nn]周圍不再是對稱的,但它在ht [nn/2]和ht [3 * nn/4]周圍有兩個對稱的組。 ],而ht [nn]周圍的兩個部分在情節中看起來真的不同。但是ht [nn]之後的所有內容都會被丟棄,所以如果我需要最終的輸出是對稱的,那麼我必須離開傅立葉時間偏移。
爲什麼傅立葉時間偏移需要?我可以在我的C++應用程序中用一些更簡單的算法替換它,它不使用複數,並且仍然在ht [nn/2]周圍出現nn個對稱點,所以我可以在ht [nn]之後丟棄所有的東西?
P.S.我只看過有無傅里葉時間轉換的情節,並注意到我可以通過將第二個結果nn/2移到右邊來獲得相同的結果。因此,理論上我可以避免在我的C++應用程序中使用傅里葉時間偏移,但只需將nn/2的實際結果向右移動,然後在nn後丟棄所有內容。我對嗎?是否安全?