使用NumPy的快速傅里叶变换:为什么会这样?

1 投票
1 回答
5360 浏览
提问于 2025-04-17 15:21

快速傅里叶变换是一种快速计算离散傅里叶变换的方法,至少我是这么理解的。

我一直在玩NumPy这个数学库,用下面的代码做了一个图:

import numpy as np
from numpy.fft import fft, fftfreq
import matplotlib.pyplot as plt

t = np.arange(0, 10, step=0.001)
signal = np.sin(t) + np.sin(10*t)
sp = fft(signal)
freq = fftfreq(signal.size, d=0.001)
plt.plot(freq, sp)
plt.show()

我觉得这个图应该看起来像是 d(x-1) + d(x-10) ... // 这里的 d 是冲击函数

(离散傅里叶变换应该和普通傅里叶变换差不多,只是边缘有点倾斜,至少我理解是这样的)

但实际上并不是。它看起来像是 "d(x-0.1) + d(x-1.5) ..." 我在想这是为什么。是不是和 fftfreq 有关?

1 个回答

1

我已经很多年没研究这个了……

你是不是希望在1赫兹和10赫兹的地方看到波峰?那你需要调整一下正弦函数的参数。

正弦函数的输入是弧度。1赫兹对应的是每秒2π弧度,10赫兹就是每秒10乘以2π弧度。

所以你可以把你的信号改成:signal = np.sin(2*np.pi*t) + np.sin(10*2*np.pi*t) # 根据需要优化数学计算。

撰写回答