# -*- coding: utf-8 -*-
from matplotlib import pyplotpyplot.rcParams['font.sans-serif'] = ['SimHei']
pyplot.rcParams['axes.unicode_minus'] = Falseimport numpy as np
import matplotlib.pyplot as pl
import matplotlib
import math
import randomN = 500 # 繪制點總數
fs = 5 # 正弦信號頻率,即周期為0.2
n = [2 * math.pi * fs * t / N for t in range(N)] # 2πft/N 表示每個點的值
axis_x = np.linspace(0, 1, num=N) # 將0,1的區間分割成N個點
# myfont = matplotlib.font_manager.FontProperties(fname='c:\\windows\\fonts\\fzshjw_0.ttf')# 頻率為5Hz的正弦信號
x = [math.sin(i) for i in n] # 計算每個點的正弦值
pl.subplot(221)
pl.plot(axis_x, x)
pl.title(u'5Hz的正弦信號')
pl.axis('tight')# 頻率為5Hz、幅值為3的正弦+噪聲x1 = [random.gauss(0, 0.5) for i in range(N)] # 給每個點隨機生成高斯噪聲,噪聲值為0-0.5
xx = []
# 將噪聲添加到信號中
for i in range(len(x)):xx.append(x[i] * 3 + x1[i])pl.subplot(222)
pl.plot(axis_x, xx)
pl.title(u'頻率為5Hz、幅值為3的正弦+噪聲')
pl.axis('tight')# 頻譜繪制
xf = np.fft.fft(x) # fft變換
xf_abs = np.fft.fftshift(abs(xf))
axis_xf = np.linspace(-N / 2, N / 2 - 1, num=N)
pl.subplot(223)
pl.title(u'頻率為5Hz的正弦頻譜圖')
pl.plot(axis_xf, xf_abs)
pl.axis('tight')# 頻譜繪制
xf = np.fft.fft(xx)
xf_abs = np.fft.fftshift(abs(xf))
pl.subplot(224)
pl.title(u'頻率為5Hz的正弦頻譜圖')
pl.plot(axis_xf, xf_abs)
pl.axis('tight')pl.show()