-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathfft_plot.py
More file actions
35 lines (26 loc) · 1.26 KB
/
fft_plot.py
File metadata and controls
35 lines (26 loc) · 1.26 KB
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
31
32
33
34
35
import numpy as np
from scipy.fftpack import fft, ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 显示负号
# 采样点选择1400个,因为设置的信号频率分量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍,所以这里设置采样频率为1400赫兹(即一秒内有1400个采样点,一样意思的)
data = []
lines = open('./trace.log').readlines()
for line in lines:
line = line.strip()
data.append(int(line, base=16))
data_np = np.array(data)
# 设置需要采样的信号,频率分量有200,400和600
y = data_np
fft_y = fft(y) # 快速傅里叶变换
N = len(data)
x = np.arange(N) # 频率个数
half_x = x[range(int(N/2))] # 取一半区间
abs_y = np.abs(fft_y) # 取复数的绝对值,即复数的模(双边频谱)
angle_y = np.angle(fft_y) # 取复数的角度
normalization_y = abs_y/N # 归一化处理(双边频谱)
normalization_half_y = normalization_y[range(int(N/2))] # 由于对称性,只取一半区间(单边频谱)
plt.plot(normalization_half_y, 'blue')
plt.title('half single frequency', fontsize=9, color='blue')
plt.show()