numpy.fft.hfft
numpy.fft.hfft(a, n=None, axis=-1, norm=None) [source]
计算具有Hermitian对称性(即实谱)的信号的FFT。即真实频谱。
参数: | a :array_like 输入数组。 b : 输出的转换轴的长度。 对于n个输出点, 需要 如果输入长于此长度,则将对其进行裁剪。 如果比这短,则用零填充。 如果未给出 则将其取为 其中 axis : 计算FFT的轴。如果没有给出,则使用最后一个轴。 norm : 规范化模式(请参阅numpy.fft)。 默认为 1.10.0版中的新功能。 |
返回值: | out : 截断的或零填充的输入, 沿着由轴表示的轴进行转换, 或者如果轴未指定,则为最后一个。 变换轴的长度为 则为 要得到奇数个输出点,必须指定 例如在典型情况下为 |
Raises: | IndexError 如果axis大于a的最后一个轴。 |
Notes
hfft/ ihfft是一对类似于rfft/ irfft,但是对于相反的情况:在这里该信号具有在时域对称性厄米和是在频域中实际。因此,hfft如果结果是奇数,必须在此处提供结果的长度。
- 偶数:在舍入误差内,
ihfft(hfft(a, 2*len(a) - 2)) == a
- 奇数:,舍入误差内。
ihfft(hfft(a, 2*len(a) - 1)) == a
厄米输入的正确解释取决于原始数据的长度,如n所示。这是因为每种输入形状可能对应于奇数或偶数长度的信号。默认情况下,hfft 假设输出长度是偶数,这会将最后一个条目置于奈奎斯特频率;与其对称对应物混叠。通过埃尔米特对称性,该值因此被视为纯实数。为了避免丢失信息,必须给出完整信号的形状。
例子
1)基本使用
import numpy as np
# 创建一个共轭对称的复数数组
a = np.array([1 + 0j, 2 - 1j, 2 + 1j])
# 计算Hermitian FFT
hfft_result = np.fft.hfft(a)
print("Hermitian FFT result:\n", hfft_result)
2)指定变换长度
import numpy as np
# 创建一个共轭对称的复数数组
a = np.array([1 + 0j, 2 - 1j, 2 + 1j])
# 计算Hermitian FFT,并指定变换长度
hfft_result = np.fft.hfft(a, n=8)
print("Hermitian FFT result with n=8:\n", hfft_result)
3)指定轴进行变换
import numpy as np
# 创建一个共轭对称的复数数组
a = np.array([[1 + 0j, 2 - 1j, 2 + 1j], [0 + 0j, 1 - 1j, 1 + 1j]])
# 计算沿第一个轴的Hermitian FFT
hfft_result = np.fft.hfft(a, axis=0)
print("Hermitian FFT result along axis 0:\n", hfft_result)
# 计算沿最后一个轴的Hermitian FFT
hfft_result = np.fft.hfft(a, axis=-1)
print("Hermitian FFT result along axis -1:\n", hfft_result)
4)使用示例
import numpy as np
# 示例1:一维信号的FFT和Hermitian FFT
signal = np.array([1, 2, 3, 4, 3, 2])
# 计算一维信号的FFT
fft_result = np.fft.fft(signal)
print("FFT result:\n", fft_result)
# 输出可能略有不同:
# [15.+0.j -4.+0.j 0.+0.j -1.-0.j 0.+0.j -4.+0.j]
# 计算一维信号前半部分的Hermitian FFT
hfft_result_half = np.fft.hfft(signal[:4])
print("\nHermitian FFT result (first half of signal):\n", hfft_result_half)
# 输出:
# [15. -4. 0. -1. 0. -4.]
# 计算整个一维信号并截断为长度6的Hermitian FFT
hfft_result_full = np.fft.hfft(signal, 6)
print("\nHermitian FFT result (entire signal, truncated to 6):\n", hfft_result_full)
# 输出:
# [15. -4. 0. -1. 0. -4.]
# 示例2:二维信号的Hermitian对称性和Hermitian FFT
signal_2d = np.array([[1, 1j], [-1j, 2]])
# 检查二维信号的Hermitian对称性
hermitian_symmetry = np.conj(signal_2d.T) - signal_2d
print("\nHermitian symmetry check:\n", hermitian_symmetry)
# 输出:
# [[ 0.-0.j -0.+0.j]
# [ 0.+0.j 0.-0.j]]
# 计算二维信号的Hermitian FFT
freq_spectrum_2d = np.fft.hfft(signal_2d)
print("\nHermitian FFT result for 2D signal:\n", freq_spectrum_2d)
# 输出:
# [[ 1. 1.]
# [ 2. -2.]]