傅立叶时移在Matlab fir2()函数中起什么作用?

傅立叶时移在Matlab fir2()函数中起什么作用?,matlab,signal-processing,fft,Matlab,Signal Processing,Fft,我在理解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) .*

我在理解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的结果是围绕ht[nn]对称的 -如果我保持傅立叶时移码不变,ifft的结果不再围绕ht[nn]对称,而是围绕ht[nn/2]和ht[3*nn/4]有两个对称组,而围绕ht[nn]的两个部分在图中看起来确实不同。但是ht[nn]之后的一切都被丢弃了,所以如果我需要最终的输出是对称的,我必须留下傅里叶时间偏移

为什么需要傅里叶时移?在C++应用程序中,我可以用一些简单的算法来代替它,它不使用复数,仍然能在HT [NN/2 ]周围对称地得到神经网络点,这样我就可以在HT [NN]?

之后丢弃所有的东西。 顺便说一句,我刚刚看了有无傅里叶时间偏移的图,注意到我可以通过将第二个结果nn/2向右偏移得到相同的结果。理论上,我可以避免在傅立叶的C++应用中使用时移,但是只需将NF/2的IFFT的真实结果移到右边,然后在NN之后丢弃所有的结果。我说得对吗?这样做安全吗

根据,因果过滤器设计需要时间偏移。引用

如果为每个