np.fft.irfft()中的归一化因子是什么?

0 投票
1 回答
827 浏览
提问于 2025-04-18 08:00

我在用 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。这和这个参考资料中的内容是一致的(可以查看实现细节)。

撰写回答