傅里叶变换
傅里叶变换
定义
对于函数
逆傅里叶变换为
why?
由傅里叶级数:
转成复数形式:
当
物理意义
由上面可以看出傅里叶变换的物理意义:把时域的信号
- 振幅谱
- 相位谱

性质
- 线性叠加定理:
- 对称定理:
- 时延定理:
- 频移定理:
- 标度定理:
- 微分定理:
离散傅里叶变换
定义
对于一组离散的数据
则离散傅里叶变换(DFT)为
反变换为
理解
我们以信号

python脚本
import numpy as np
import matplotlib.pyplot as plt
L = 2
fs = 100
t = np.linspace(0, L, L*fs)
f = 5 + 3 * np.cos(2 * np.pi * 7 * t) + 2 * np.sin(2 * np.pi * 10 * t)
x = np.arange(0, L+0.001, 0.001)
y = 5 + 3 * np.cos(2 * np.pi * 7 * x) + 2 * np.sin(2 * np.pi * 10 * x)
plt.plot(x, y, alpha=0.5)
plt.scatter(t, f, c='r', s=2, alpha=0.9)
plt.xlabel('t/s')
plt.show()2
3
4
5
6
7
8
9
10
11
12
13
14
15
先把采样时间
复数序列
绘制出


python脚本
import numpy as np
import matplotlib.pyplot as plt
L = 2
fs = 100
t = np.linspace(0, L, L*fs)
N = L * fs
x = 2 * np.pi * np.arange(0, N, 1) / N
y = 2 * np.sin(2 * np.pi * 10 * t) + 3 * np.cos(2 * np.pi * 7 * t) + 5
k = np.arange(1, 11, 1)
# k = np.arange(11, 21, 1)
ax1 = plt.subplot(251)
ax2 = plt.subplot(252)
ax3 = plt.subplot(253)
ax4 = plt.subplot(254)
ax5 = plt.subplot(255)
ax6 = plt.subplot(256)
ax7 = plt.subplot(257)
ax8 = plt.subplot(258)
ax9 = plt.subplot(259)
ax10 = plt.subplot(2,5,10)
axs = [ax1, ax2, ax3, ax4, ax5, ax6, ax7, ax8, ax9, ax10]
for i in range(10):
y_complex = y * np.exp(-1j*k[i]*x)
axs[i].plot(y_complex.real, y_complex.imag)
axs[i].scatter(y_complex.real.mean(), y_complex.imag.mean(), s=20, c='r')
axs[i].axvline(0, color='black', alpha=0.5)
axs[i].axhline(0, color='black', alpha=0.5)
axs[i].axis('equal')
axs[i].set_title(f'k={k[i]}')
plt.show()2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
可以发现,只有当向量旋转频率
所以我们绘制出 
python脚本
import numpy as np
import matplotlib.pyplot as plt
L = 2
fs = 100
t = np.linspace(0, L, L*fs)
f = 5 + 3 * np.cos(2 * np.pi * 7 * t) + 2 * np.sin(2 * np.pi * 10 * t)
N = L * fs
x = 2 * np.pi * np.arange(0, N, 1) / N
fft_y = []
fre = []
for k in range(N):
ck = 0
for i in range(N):
ck += f[i]*np.exp(-1j*k*x[i])
ck = ck / N
fft_y.append(np.abs(ck))
fre.append(k / L)
plt.plot(fre, fft_y)
plt.xlabel('f/Hz')
plt.ylabel('A')
plt.show()2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
其中
参考
3Blue1Brown 的 B站视频 【【官方双语】形象展示傅里叶变换】
快速傅里叶变换
离散傅里叶变换(DFT)输入数据
其中
该算法的时间复杂度为
FFT算法
当
依下标奇偶分别考察,有
令
则可将
该算法的时间复杂度为
实例
下面以
将
有
故
引入记号
进一步得到他们的递推关系如下表:
| 单元码号 | ||||||||
|---|---|---|---|---|---|---|---|---|
从上表可见,计算全部
改进的FFT算法
推广到
该公式总共要算