np.fft.irfft()中的归一化因子是什么?
我在用 np.fft.irfft()
这个函数来计算 Wigner 分布。因为我不想要 fft 的归一化版本,所以我需要一个归一化因子来“撤销”这个归一化。
那 np.fft.irfft() 的归一化因子是什么呢?
1 个回答
1
我认为 numpy.fft.irfft
的规范是数组长度的倒数,也就是1除以数组的长度。为了理解这一点,可以看看下面这个程序:
import numpy as np
t = np.array([0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
x = np.fft.irfft(t)
print "Array length: ", len(t), "\t 1/n: ", 1.0/float(len(t)), "\t max x val: ", max(x)
x1 = np.array([0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
t1 = np.fft.rfft(x1)
print "Array length: ", len(t1), "\t 1/n: ", 1.0/float(len(t1)), "\t max t1 val: ", max(t1)
这个程序的输出是:
Array length: 128 1/n: 0.0078125 max x val: 0.00787401574803
Array length: 65 1/n: 0.0153846153846 max t1 val: (1+0j)
从这个输出来看,我认为 irfft 的规范是 1/n,而 rfft 的规范是 1。这和这个参考资料中的内容是一致的(可以查看实现细节)。