第一章
步骤二:信号抽样和重构(tu1_3_sinsmpling.py) import numpy as np import pylab as pl
import scipy.signal as signal import matplotlib.pyplot as plt
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] #图形中正确显示汉字
import matplotlib
matplotlib.rcParams['axes.unicode_minus']=False #坐标轴正确显示负数
# 产生50Hz的模拟信号 # 较高的采样频率2000Hz模拟 f0 = 50 # 50Hz
Fs = 2000 # 模拟信号采样频率为2000Hz
t = np.arange(-0.1, 0.1, 1/Fs) # 产生-0.1s-0.1s范围的信号 xat = np.sin(2*np.pi*f0*t + np.pi/8) #产生f0=50Hz信号
# 抽样频率200Hz产生信号 # 方法一:用函数重新生成
# 方法二:对步骤一模拟信号进行抽样 fs = 200 # sampling rate 200Hz Ts = 1/fs # sampling perido
n = np.arange(-0.1/Ts, 0.1/Ts) #对应的时间轴 # xn = np.sin(2*np.pi*f0/fs*n + np.pi/8) #方法一 tmpn = np.arange(-0.1*Fs, 0.1*Fs, Fs/fs) #方法二抽样 tmpn = list(map(int, tmpn+200)) #矩阵下标平移 xn = xat[tmpn] #抽取对应采样点的数据
# 利用采样重构公式进行重构 xat = [] xatt = 0 for ti in t: for nj in n:
#xskt = np.cos(2*np.pi*f0/fs*nj + pi/8); xskt = xn[int(nj+20)] #下标移位
1
if (ti == nj*Ts):
piRt = 1 # 在采样点时,系数为1,以免造成分母为0的情况 else: #构建插值函数
piRt = (np.sin(np.pi / Ts * (ti - nj * Ts))) / (np.pi / Ts * (ti - nj * Ts)) xatt = xatt + xskt * piRt #与插值函数相乘 xat = np.append(xat, xatt) #序列追加 xatt = 0
pl.figure(1, figsize=(7,6)) pl.subplot(3,1,1) pl.plot(t, xat)
pl.title('continunous wave') #pl.xlabel('Time (s)') pl.xlim(-0.1,0.1) pl.ylim(-1,1) pl.grid(1)
pl.subplot(3,1,2) pl.stem(n, xn) pl.title('Sample Wave')
plt.subplots_adjust(top=1, wspace=0.2, hspace=0.5) # 调整视图
pl.subplot(3,1,3) pl.plot(t, xat)
pl.title('reconstructed signal') pl.xlabel('Time (s)') pl.xlim(-0.1,0.1) pl.ylim(-1,1) pl.grid(1)
plt.subplots_adjust(top=1, wspace=0.2, hspace=0.4) # 调整视图
plt.savefig('figure1_3.jpg', bbox_inches='tight', dpi=300, pad_inches=0.1) pl.show()
#保存文件,300dpi 2
图2 信号的采样与重构
3
python数字信号处理—采样与重构
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)