Hermitian Fourier 变换 (`numpy.fft.hfft()`) 的频率? (假设函数 `numpy.fft.hfftfreq()`)

Frequencies for Hermitian Fourier Transform (`numpy.fft.hfft()`)? (hypothetical function `numpy.fft.hfftfreq()`)

对于普通的 FFT,Numpy 实现了方法 fftfreq(n,d),它可以立即提供 FFT 的频率。但是,对于 Hermitian 变换 hfft,缺少伴随函数 hfftfreq。如果函数 hfftfreq(n,d) 存在,它的返回值是多少?

来源:

numpy.fft.fftfreq: https://numpy.org/doc/stable/reference/generated/numpy.fft.fftfreq.html

Discrete Fourier Transform (numpy.fft): https://numpy.org/doc/stable/reference/routines.fft.html

hfft() / ihfft() 对分别等价于 irfft() / rfft() 对,除了归一化。

特别是,np.fft.hfft(arr, n, norm='forward')np.fft.irfft(arr, n, norm='backward') 相同(backward 范数是默认值)。

import numpy as np


n = 3
k = 2 * (n - 1)
s = np.arange(n)
print(s.astype(np.complex_))
# [0.+0.j 1.+0.j 2.+0.j]

irft_s = np.fft.irfft(s, k)
print(irft_s)
# [ 1.  -0.5  0.  -0.5]
print(np.fft.irfft(s, k, norm='forward'))
# [ 4. -2.  0. -2.]

hft_s = np.fft.hfft(s, k)
print(hft_s)
# [ 4. -2.  0. -2.]
print(np.fft.hfft(s, k, norm='forward'))
# [ 1.  -0.5  0.  -0.5]
print(hft_s / k)
# [ 1.  -0.5  0.  -0.5]
# : get back to the original signal via the respective inverses
rr_s = np.fft.rfft(irft_s)
hh_s = np.fft.ihfft(hft_s)
print(rr_s, np.allclose(s, rr_s))
# [0.+0.j 1.+0.j 2.+0.j] True
print(hh_s, np.allclose(s, hh_s))
# [0.-0.j 1.-0.j 2.-0.j] True
# : get back to the original signal via the mixed inverses
hr_s = np.fft.rfft(hft_s, norm='forward')
rh_s = np.fft.ihfft(irft_s, norm='forward')
print(hr_s, np.allclose(s, hr_s))
# [0.+0.j 1.+0.j 2.+0.j] True
print(rh_s, np.allclose(s, rh_s))
# [0.-0.j 1.-0.j 2.-0.j] True

因此,与hfft()结果关联的频率实际上是与irfft()结果关联的“频率”。 然而,与信号逆变换相关的“频率”是信号样本的“时间”,它是从0n - 1的自然数(n信号的大小):

np.arange(n)

注意 ifft()irfft()(和 hfft())的样本是相同的。

相反,与ihfft()的结果关联的样本由np.fft.rfftfreq()给出。