📜  Python| numpy np.fft() 方法(1)

📅  最后修改于: 2023-12-03 15:19:14.083000             🧑  作者: Mango

Python | numpy np.fft() 方法

在 Python 中,使用numpy库的np.fft()方法可以进行快速傅里叶变换(FFT)。傅里叶方法是通过分解周期信号或非周期信号为周期函数的和来分析和合成信号的过程。

np.fft()方法的语法
numpy.fft.fft(a, n=None, axis=-1, norm=None)
参数说明
  • a:表示输入数组。如果是列表或元组等可迭代对象,则会自动转为numpy.ndarray类型。
  • n:表示进行FFT的长度。默认情况下,n等于a的长度,如果指定长度小于a的长度,则a会被截断,如果指定长度大于a的长度,则a会被填充0。
  • axis:表示沿哪个轴计算FFT,默认为最后一个轴。
  • norm:表示归一化方式。如果为True,则对结果除以n,如果为None,则不归一化。
示例
特定长度的FFT
import numpy as np

# 创建一个长度为8的正弦波信号
sample_rate = 8000     # 采样率,单位:Hz
freq = 400             # 信号频率,单位:Hz
duration = 1           # 信号时长,单位:s
t = np.linspace(0, duration, int(duration * sample_rate), endpoint=False)
signal = np.sin(2 * np.pi * freq * t)

# 对信号进行FFT
fft_result = np.fft.fft(signal, 8)

# 输出FFT结果
print(fft_result)
[ 1.11489620e-16+0.j         -4.04163051e-17-0.70710678j
  1.69975535e-16-0.j          5.55111512e-17-0.29289322j
  4.22541417e-17+0.j          5.55111512e-17+0.29289322j
  1.87129066e-16+0.j         -4.04163051e-17+0.70710678j]
归一化频谱
import numpy as np

# 创建一个长度为8的正弦波信号
sample_rate = 8000     # 采样率,单位:Hz
freq = 400             # 信号频率,单位:Hz
duration = 1           # 信号时长,单位:s
t = np.linspace(0, duration, int(duration * sample_rate), endpoint=False)
signal = np.sin(2 * np.pi * freq * t)

# 对信号进行FFT,并归一化
fft_result = np.fft.fft(signal, 8, norm="ortho")

# 输出FFT结果
print(fft_result)
[ 1.44918662e-17+0.j         -5.26645223e-18-0.35355339j
  2.22597835e-17+0.j          7.25145096e-18-0.14644661j
  5.54541415e-18+0.j          7.25145096e-18+0.14644661j
  2.44563002e-17+0.j         -5.26645223e-18+0.35355339j]
总结

通过np.fft()方法,我们可以对信号进行快速傅里叶变换,并得到频谱。我们还可以通过指定n的值,控制FFT的长度,并通过指定norm的值,控制归一化方式。在实际的应用中,我们可以将FFT结果用于信号的滤波、可视化等领域。