numpy fft

一维FFT变换 #

import numpy as np
fft = np.fft.fft(data) 
fftshift = np.fft.fftshift(fft)
fre = np.fft.fftshift(np.fft.fftfreq(d=ts, n=signal.size))
  • data是时域一维信号, 如[1, 2, 3, ..., 100]
  • 通过np.fft.fft调用得到len(data)个频域分量, 是复数表示
  • np.fft.fftshift将零频率分量移动到频谱中心
  • np.fft.fftfreq更具采样周期和数据长度得到经过np.fft.fft计算的每个频域分量的频率

一维FFT逆变换 #

mask = np.ones(len(fftshift))
mask[np.where(((low_freq < fre) & (fre < high_freq)) | ((-low_freq > fre) & (fre > -high_freq)))] = 0
fftshift[np.where(mask != 0)] = 0

ifftshift = np.fft.ifftshift(fftshift)
data = np.fft.ifft(ifftshift)
  • mask是一个简单的带通滤波器

比如这样的原始信号, 其频谱图如下:

1678345106253.png

经过mask滤波后可能得到类似这样的频谱图:

1678345074337.png

关联 #