如何使用 Python 获得傅里叶级数呸呸呸_ _fft
信息处理
fft
离散信号
频谱
Python
傅里叶级数
2022-02-11 20:17:53
3个回答
我不是这个主题的专家,但有一些有用的例子可以分享。
1 个组件示例
要保留i-eth 傅里叶分量,您可以将其余分量归零:
n = len(y)
Y = numpy.fft.fft(y)
numpy.put(Y, range(0, i), 0.0)
numpy.put(Y, range(i+1, n), 0.0)
# Now Y holds 1 imaginary coefficient corresponding with the i-eth Fourier component
如果您正在寻找与所选i-eth 分量相对应的 Real 信号,您可以随后通过以下方式执行逆变换ifft:
ifft = numpy.fft.ifft(Y) # the sinusoid you're looking for
多组件示例
您保留的傅立叶分量越多,您就越能模仿原始信号。此示例显示了当您保留 10、20、...up tp n 个组件时会发生什么。
假设x和y是您的数据向量。
import numpy
from matplotlib import pyplot as plt
n = len(y)
COMPONENTS = [10, 20, n]
for c in COMPONENTS:
colors = numpy.linspace(start=100, stop=255, num=c)
for i in range(c):
Y = numpy.fft.fft(y)
numpy.put(Y, range(i+1, n), 0.0)
ifft = numpy.fft.ifft(Y)
plt.plot(x, ifft, color=plt.cm.Reds(int(colors[i])), alpha=.70)
plt.title("First {c} fourier components".format(c=c))
plt.plot(x,y, label="Original dataset")
plt.grid(linestyle='dashed')
plt.legend()
plt.show()
...看看它如何模仿原始信号?
如果您假设您的信号是原始信号的一个周期,那么 FFT 会为您提供高达频率的傅里叶级数系数(由于奈奎斯特定理)。DFT 结果正是复傅立叶级数的系数。您可以将复数系数转换为和根据维基百科的真实傅立叶级数(正弦和余弦) 。另外,我的两篇文章(Complex Fourier Series , Spectral Leakage)可能会帮助您进一步理解。
只有在以下情况下,DFT 结果向量才会为您提供傅立叶级数系数:(1) 信号在 DFT/FFT 长度内完全是整数周期,并且 (2) 信号(采样前)完全受限于低于 Fs/ 的频率2. 否则,DFT 将包含窗口伪影和/或频率混叠。
其它你可能感兴趣的问题




