16. Scipy Tutorial- 快速傅立叶逆变换ifft
逆向快速傅里叶变换(IFFT)的计算原理是将频域(注意频域是复数)数据进行取共轭复数(虚部取反),然后再进行FFT变换,这样便将频域信号转换到时域。因为FFT变换的结果是复数,所以从频域进行FFT变换过来的结果也是复数,而此时只需取复数的实部,便是原时域信号。
signal_samples函数实现产生一个信号,由两个正弦波叠加而成,两个正弦波一个频率为$1Hz$另一个正弦波的频率为$20Hz$,下面的程序通过处理掉高频的信号而留下$1Hz$信号的数据,实现低通滤波,然后使用ifft将频率数据转为时域数据,恢复时域的波形。程序和前一章区别不大,一个是signal_samples函数是用两个正弦波组成的,另外一处不同是滤波,语句代码是F_filtered = F * (abs(f) < 10),新增了ifft即逆向快速傅里叶变换产生新的时域信号数据f_t_filtered。
import numpy as np
import matplotlib.pyplot as plt
def signal_samples(t):
return np.sin(2 * np.pi * 1 * t) + np.sin(2 * np.pi * 20 *t)
B = 30.0
f_s = 2 * B
delta_f = 0.01
N = int(f_s / delta_f)
T = N / f_s
t = np.linspace(0, T, N)
f_t = signal_samples(t)
fig, axes = plt.subplots(1, 2,