python - 使用 scipy.fftpack 绘制的 fft 图中出现恒定线

标签 python fft

当我使用 scipy.fftpack 对信号计算 FFT 并随后绘制它时,我得到一条恒定的水平线(数据上有一条垂直线)任何人都可以解释为什么会出现这些线,并可能提出一个绘制解决方案没有谱线的光谱?

让我们看一个简单的信号。频率为 12 赫兹的正弦波。在此示例中,您可以在大约 y = 2.1 处看到水平线。

import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack

# test signal
omega = 2 * np.pi * 12
t = np.linspace(-15, 15, 1000)
ampl = np.sin(omega * t)

# compute fft, fft frequences
fft  = abs(scipy.fft(amp))
freq = scipy.fftpack.fftfreq(fft.size, t[1] - t[0])

# plot
plt.plot(freq, fft)

Horizontal Line in example signal.

这是我的实验信号的 FFT 图(放大)。您可以看到水平线 (y =~ 0.0015) 和垂直线(在 x = 0 处)。

根据这些行,我在数组中找不到任何数据。为什么会出现这些线条?

Zoomed in

最佳答案

你是对的,这一行连接了第一个和最后一个数据。正如 @SleuthEye 之前所解释的,标准 fft 函数更喜欢首先绘制正频率,然后绘制负频率。

通过添加第三行和第四行很容易解决这个问题,如下

fftData = np.fft.fft(data)
freq = np.fft.fftfreq(lenData, 1/fSamp)
fftData = np.fft.fftshift(fftData)
freq = np.fft.fftshift(freq)

关于python - 使用 scipy.fftpack 绘制的 fft 图中出现恒定线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49612848/

相关文章:

python - PyQt - 在窗口之间传递数字变量

python - pandas导入时exe文件运行失败

Python 多处理,类型错误

python - Pandas Groupby 按唯一键除以序列中的最后一个

iphone - 简单直接的 MP3 文件 FFT

android - 如何根据录音中的采样率计算 FFT 点

python - 过滤 wav 文件中高于限制的频率(低通滤波器)

python - 如何根据功率谱密度确定我的数据是否为 ​​1/f 噪声?

python - Pandas Multiindex 选择标准以及列选择标准

c - 在 Visual Studio 和 Eclipse 中包含 Kiss FFT 库