【数字信号处理】——Python频谱绘制

# -*- coding: utf-8 -*-
from matplotlib import pyplot

pyplot.rcParams['font.sans-serif'] = ['SimHei']
pyplot.rcParams['axes.unicode_minus'] = False

import numpy as np
import matplotlib.pyplot as pl
import matplotlib
import math
import random

N = 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有情怀的机械男

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值