信号脉冲编码位数
01 第八次作业
一、习题简介
对于信号进行脉冲编码调制, 也被称为 PCM。 首先需要对信号进行采样, 然后对采样值进行量化,形成数字信号。 由于量化, 就会在编码值与实际数值之间出现误差。 这个误差最大不超过量化间隔。 也就是每个相邻两个量化值之间的差别。 如果我们知道了信号的变化范围, 比如在第十八次作业中, 所描述信号为 8 加上 A 乘以 sine omega t。 直流分量为 8V, 交流分量幅值为 7V, 这样信号变化范围就不超过 15V。
如果量化所使用的比特数位为 N 位, 对应量化编码个数为 2 的 N 次方。 量化电压间隔是 15V 除以 2 的 N 次方。 题目中要求量化误差不超过 10mV, 求所需要编码位数。
▲ 图1.1.1 采样量化的结果
from headm import *
t = linspace(0, 2*pi, 10000)
ft = sin(t)+1.2
sn = 16
ts = linspace(0, 2*pi, sn)
fts = sin(ts)+1.2
ftsq = [int(s*16)/16 for s in fts]
ts = [s for t in ts for s in [t,t]][1:]
printf(ts)
ftsq = [ftsq[0]] + [s for v in zip(ftsq[:-1], ftsq[1:]) for s in v]
printf(ftsq)
plt.plot(ts, ftsq, lw=3, label='PCM')
plt.plot(t, ft, 'r--', lw=0.5, label='f(t)')
for n in range(int(sn*2.3)):
y = (n+1)/16
plt.plot([0, 2*pi], [y,y], 'b--', lw=0.5)
plt.xlabel("t")
plt.ylabel("f(t)")
plt.axis([min(t)-(max(t)-min(t))/20, max(t)+(max(t)-min(t))/20, -.50, 2.50])
plt.grid(False)
plt.tight_layout()
plt.show()
二、习题求解
既然已经分析到这里了, 习题中的问题的答案几乎呼之欲出了。 将刚才的不等式进行整理一下, 两边取 log 2, 便可以求解出量化比特 N 的不等式, 根据实际数值, 可以计算出 N 需要大于 10.551, 去整之后, 得到量化比特位数需要超过 11 位。 下面对此进行验证, 根据前面所得到的公式, 量化误差等于电压范围, 除以量化间隔数量, 这样得到量化误差为 7.32mV, 所以它满足习题中 要求量化误差不超过 10mV 的要求。
※ 总 结 ※
本文对于第八次作业中对信号进行量化编码习题的讨论。 习题的最终答案为 11 。
■ 相关文献链接:
● 相关图表链接: