傅立叶变换和滤波具有负 fft 值的频率

afr*_*iro 1 signal-processing numpy fft ifft

我正在寻找周期信号中最丰富的频率。我试图了解如果对周期信号执行傅立叶变换并过滤具有负 fft 值的频率,会得到什么。

换句话说,图 2 和图 3(见下文)的轴表示什么?我正在绘制 fft 转换信号上的频率(周期/秒) - y 轴上的负值意味着什么,我只对这些感兴趣是否有意义?

import numpy as np
import scipy

# generate data
time = scipy.linspace(0,120,4000)
acc = lambda t: 10*scipy.sin(2*pi*2.0*t) + 5*scipy.sin(2*pi*8.0*t) + 2*scipy.random.random(len(t))
signal = acc(time)

# get frequencies from decomposed fft
W =  np.fft.fftfreq(signal.size, d=time[1]-time[0])
f_signal = np.fft.fft(signal)

# filter signal
# I'm getting only the "negative" part!
cut_f_signal = f_signal.copy()
# filter noisy frequencies
cut_f_signal[(W < 8.0)] = 0
cut_f_signal[(W > 8.2)] = 0

# inverse fourier to get filtered frequency
cut_signal = np.fft.ifft(cut_f_signal)

# plot
plt.subplot(221)
plt.plot(time,signal)
plt.subplot(222)
plt.plot(W, f_signal)
plt.subplot(223)
plt.plot(W, cut_f_signal)
plt.subplot(224)
plt.plot(time, cut_signal)
plt.show()
Run Code Online (Sandbox Code Playgroud)

傅里叶变换和信号滤波

hot*_*aw2 6

实值输入信号的 FFT 将产生共轭对称结果。(这正是数学最有效的方式。)因此,对于仅真实数据的 FFT 结果幅度,负频率只是正频率的镜像副本,因此在分析结果时可以忽略不计。

但是,如果您想进行逆运算并计算 IFFT,则需要向 IFFT 提供频率数据的共轭对称负半部分(或上半部分,高于 Fs/2),否则您的 IFFT 结果最终将产生复数结果(例如,对于非零虚部(sqrt(-1))分量,在处理基带实数数据时很少需要这样的结果)。

如果您想要过滤 FFT 数据并最终获得 IFFT 的实际结果,则需要以相同的方式对称地过滤正频率和负频率,以保持所需的对称性。

FFT 还产生复数结果,其中每个结果箱的分量(实部和虚部)的值和符号表示分量基向量(复正弦曲线,或实余弦加实正弦分量)的相位和幅度。任何负值仅代表相同结果为正时的相位旋转。