使用Python作FFT(快速傅里叶转换)

使用 Python 作FFT 时频转换

引入

1
2
import numpy as np
import matplotlib.pyplot as plt

设定函数

1
2
3
4
5
6
7
8
9
10
11
12
13
Fs = 100                         # sampling rate
Ts = 1.0/Fs # sampling interval
t = np.arange(0,1,Ts) # time vector
ff = 5 # frequency of the signal
y = np.sin(2 * np.pi * ff * t)

### 图表一设定

``` bach
plt.subplot(2,1,1)
plt.plot(t,y,'b-')
plt.xlabel('time')
plt.ylabel('amplitude')

设定图表二横纵坐标

1
2
3
4
5
6
plt.subplot(2,1,2)
n = len(y) # length of the signal
k = np.arange(n)
T = n/Fs
frq = k/T # two sides frequency range
freq = frq[range(int(n/2))] # one side frequency range

FFT

1
2
Y = np.fft.fft(y)/n              # fft computing and normalization
Y = Y[range(int(n/2))]

图表二设定

1
2
3
plt.plot(freq, abs(Y), 'r-')
plt.xlabel('freq (Hz)')
plt.ylabel('|Y(freq)|')

显示图表

1
plt.show()

完整代码:

1
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

import numpy as np
import matplotlib.pyplot as plt

Fs = 100 # sampling rate
Ts = 1.0/Fs # sampling interval
t = np.arange(0,1,Ts) # time vector
ff = 5 # frequency of the signal
y = np.sin(2 * np.pi * ff * t)

plt.subplot(2,1,1)
plt.plot(t,y,'b-')
plt.xlabel('time')
plt.ylabel('amplitude')

plt.subplot(2,1,2)
n = len(y) # length of the signal
k = np.arange(n)
T = n/Fs
frq = k/T # two sides frequency range
freq = frq[range(int(n/2))] # one side frequency range

Y = np.fft.fft(y)/n # fft computing and normalization
Y = Y[range(int(n/2))]

plt.plot(freq, abs(Y), 'r-')
plt.xlabel('freq (Hz)')
plt.ylabel('|Y(freq)|')

plt.show()

本文标题:使用Python作FFT(快速傅里叶转换)

文章作者:Scale Kent

发布时间:2018年12月25日 - 10:12

最后更新:2018年12月27日 - 12:12

原始链接:http://scalekent.github.io/2018/12/25/使用Python作FFT(快速傅里叶转换)/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。