numpy中的实际FFT使用这样的事实:实值函数的傅立叶变换就是说“偏斜对称”,即频率k处的值是频率Nk处k = 1的值的复共轭. N-1(正确的术语是Hermitian).因此,rfft仅返回与非正频率相对应的结果部分.
对于大小为N的输入,rfft函数返回对应于N / 2或低于N / 2的频率的FFT输出部分.因此,如果N是偶数(所有频率从0到N / 2),则rfft的输出大小为N / 2 1,如果N为奇数,则输出(N 1)/ 2(所有频率从0到(N-1)/ 2).观察功能层(n / 2 1)为偶数和奇数输入大小返回正确的输出大小.
所以要在matlab中重现rfft
function rfft = rfft(a)
ffta = fft(a);
rfft = ffta(1:(floor(length(ffta)/2)+1));
end
例如
a = [1,1,1,1,-1,-1,-1,-1];
rffta = rfft(a)
会产生
rffta =
Columns 1 through 3:
0.00000 + 0.00000i 2.00000 - 4.82843i 0.00000 + 0.00000i
Columns 4 through 5:
2.00000 - 0.82843i 0.00000 + 0.00000i
现在将它与python进行比较
>>> np.fft.rfft(a)
array([ 0.+0.j , 2.-4.82842712j, 0.-0.j ,
2.-0.82842712j, 0.+0.j ])
再现irfft
要重现irfft的基本功能,您需要从rfft输出中恢复