前言
通过Python的Numpy库和Scipy库可以用于产生基本的信号,如阶跃信号,
指数信号,脉冲信号等等。 本次实验版本Python=3.6.5, numpy=1.14.5, scipy=1.1.0,
matplotlib= 3.1.1
Numpy与Matplotlib中相关绘图API Reference就不多说了,相信大多数博客和官网文档中都写得很详细了。
导入 需要的 library 库
import numpy as np # 科学计算
import matplotlib.pyplot as plt # 画图
import scipy.signal as sg # 导入 scipy 的 signal 库 命名为 sg
import warnings
warnings.filterwarnings(“ignore”) # 去掉常规警告
阶跃信号
# 阶跃信号
t = np.linspace(-1, 1, 500, endpoint=False) # 产生-1~1的500个点
plt.plot(t, np.array(t>0, dtype=np.int)) # 取t为x轴的分布, t当中大于0的部分为y轴的分布 (即当x<0时y=0,当y>0时y=1)
plt.grid()
_ = plt.ylim(-0.5, 1.5)
plt.show()
连续指数信号
# 连续指数信号
# 产生随时间衰减的指数信号
t = np.linspace(0, 5, 5000, endpoint=False)# 定义时间序列
plt.plot(t, 2*np.exp(-1*t))# 绘制随时间衰减的指数信号图
plt.grid()
plt.show()
连续正弦信号
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
t = np.linspace(0, 1, 500, endpoint=True)
A = 1
phi = np.pi / 6
f = 10
plt.plot(t, A*np.sin(t * 2 * np.pi * f + phi))
plt.title("Continuous sinusoidal signal",)
plt.grid()
plt.show()
利用Python产生高度为1、宽度为4、延时2秒、 关于t=0对称的矩形脉冲信号的矩形脉冲信号的Python程序如下:
# 连续矩形脉冲信号
def rect_wave(t, c, c0): # start = c0, breadth = c
if t >= (c+c0):
r = 0.0
elif t < c0:
r = 0.0
else:
r = 1
return r
x = np.linspace(-4, 8, 1000)
y = np.array([rect_wave(t, 4.0, -2.0) for t in x])
_ = plt.ylim(-0.2, 1.2)
plt.plot(x, y)
plt.grid()
plt.show()
连续周期矩形波信号
# 连续周期矩形波信号
t = np.linspace(0, 1, 500, endpoint=False)
plt.plot(t,scipy.signal.square(2*np.pi*5*t)) # 2*pi*w*t
plt.ylim(-2, 2)
plt.grid()
plt.show()
连续抽样信号
# 连续抽样信号
t = np.linspace(-10, 10, 500, endpoint=False)
plt.plot(t, np.sinc(t))
plt.grid()
plt.show()
单位脉冲序列
# 单位脉冲序列
n = np.linspace(-4, 21, 25, endpoint=False)
x = np.append(np.zeros((1, 7)), np.ones((1, 1))) # 先产生7个0点,1个1点
x = np.append(x, np.zeros((1,17)))
plt.stem(n, x, use_line_collection=True)
plt.grid()
plt.show()
单位阶跃序列的产生
n = np.linspace(-4, 21, 25, endpoint=False) # 定义时间序列
x = np.append(np.zeros((1,7)), np.ones((1,18))) # 产生单位阶跃序列
plt.stem(n, x, use_line_collection=True) # 绘制单位阶跃序列信号图像
plt.grid() # 显示网格
plt.show()
指数序列
# 指数序列的产生
n = np.linspace(-4, 21, 25, endpoint=False) # 定义时间序列
x = 0.3*np.power(1/2, n) # 产生离散指数序列
plt.stem(n, x, use_line_collection=True) # 绘制离散指数序列信号图像
plt.grid() # 显示网格
plt.show() # 显示图像
正弦序列
# 正弦序列的产生
n = np.linspace(-50, 51, 101, endpoint=False) # 定义时间序列
omega = np.pi/10 # 频率
x = 0.3*np.sin(omega*n+ np.pi/5) #产生正弦序列
plt.stem(n, x, use_line_collection=True) # 绘制正弦序列信号图像
plt.grid() # 显示网格
plt.show() # 显示图像
离散周期矩形波序列
n = np.linspace(-10, 11, 21, endpoint=False) # 定义离散时间序列
rad = np.pi / 4 # 基波周期 N=8
plt.stem(n, sg.square(rad * n, 0.5)) # 绘制离散周期方波图像
plt.xticks(np.arange(-10, 10, step=5.0)) # 横坐标间隔
plt.grid() # 显示网格
plt.show() # 显示图像