引言:
在我们的数字通信系统中,一般要发送的绝大多数都是模拟信号。而所谓数字通信,传递的就应该是数字信号。因此,我们首先要对这个待发送的模拟信号进行采样(这在我之前《信号与系统》的相关博客中有详细解读),但是问题来了:我们对一个幅值连续的模拟信号采样,采样值的幅度仍然是有无限多种可能的,尽管他们在时间上离散,可这仍然是一个模拟信号。要想成为数字信号,就必须让这个信号在时间和幅度上都是离散的,即取值只有有限种可能。因此,就需要对采样值的幅度进行量化。PCM编码(脉冲编码调制)就是其中一种方法。
所谓的脉冲编码调制 PCM ,博主对其理解就是将经过采样得到的信号经过量化和编码,从而得到一组二进制码组的过程。既然 PCM 可以理解为这样两个过程,那么我们就分别从这两个过程入手开始讲解。
1. 量化
PCM 编码中实现的是非均匀量化。为什么使用非均匀量化呢? —— 这是因为在实际的通信系统中,信号幅度可能会在一个很大的范围内变化。以电话通信为例:经过实验证明,幅度较低的信号出现的频率非常高,而幅度特别大的信号出现的概率就比较小。这样一来,如果采用均匀量化,那么小信号的量化就显得十分粗糙了。而换一种思路:如果我们对出现概率很大的小信号,采用更为精细的量化方式;对于出现频率不那么高的大信号,采用略微粗糙的量化方法,可以预见的是这样做对通话质量是有保障的。
上述提到的这种,就是非均匀量化。而实现非均匀量化,我们有下面这样的思路:
首先对信号做某种非线性变换,然后对经过非线性变换的结果进行均匀量化。
以上这种思路,就被引入到了接下来我们要介绍的 A 律13折线:
我们先来看看 A律13折线是怎么构成的:
- 首先对于横轴:在 [0 - 1]区间不均匀地划分为8段:
[
0
,
1
128
]
,
[
1
128
,
1
64
]
,
[
1
64
,
1
32
]
,
[
1
32
,
1
16
]
,
[
1
16
,
1
8
]
,
[
1
8
,
1
4
]
,
[
1
4
,
1
2
]
,
[
1
2
,
1
]
[0, \frac{1}{128}], [\frac{1}{128}, \frac{1}{64}], [\frac{1}{64}, \frac{1}{32}],[\frac{1}{32}, \frac{1}{16}],[\frac{1}{16}, \frac{1}{8}],[\frac{1}{8}, \frac{1}{4}],[\frac{1}{4}, \frac{1}{2}], [\frac{1}{2}, 1]
[0,1281],[1281,641],[641,321],[321,161],[161,81],[81,41],[41,21],[21,1]
而其中,这不均匀的8段里面,我们再在每段里面均匀地划分出16小段。值得注意的是,在同一段里面,这些等分之间的长度是相等的;但是在不同的段里面,这些等分的长度是不相等的。那么,在x轴上,一共就有了: 8 × 16 = 128 8\times16 = 128 8×16=128个量化级。 下面,我们就来看看最小的量化间隔是什么:
很明显,8段里面最短的就是第一段,长度为: 1 128 \frac{1}{128} 1281,那么在这段里面再做16等分,那么每一个小分的长度就是: 1 128 × 1 16 = 1 2048 \frac{1}{128}\times\frac{1}{16} = \frac{1}{2048} 1281×161=20481,这就是最小的量化间隔,我们记为 △ △ △。【特别值得注意的是:我们上述的讨论都是针对归一化信号而言的,即信号的幅度范围在 ±1 之间,如果题目中给的范围不是归一化的,那么得先将他归一化再来编码】!
那么,我们的横轴就以 △ △ △ 作为单位。所以8段中各段的起使电平就是: 16 △ , 32 △ , 64 △ , 128 △ , 256 △ , 512 △ , 1024 △ , 2048 △ 16△, 32△, 64△, 128△, 256△, 512△, 1024△, 2048△ 16△,32△,64△,128△,256△,512△,1024△,2048△ - 横轴划分好了,接下来我们就看看y轴怎么划分—— 很简单,对于纵轴,我们先直接在 [ 0 , 1 ] [0, 1] [0,1] 区间做8等分,得到8个等长的段;接下来还是在每一段里面均匀地做16等分。也就是y也是对应128个量化级。
好啦!这就是 A律13折线的设置,那么为啥叫13折呢?—— 首先对于上面这个图,我们发现第一段和第二段折线的斜率是一样的,而在 [ − 1 , 0 ] [-1, 0] [−1,0] 区间,靠近0的也有两端折线斜率一样,所以这4条折线合并为1条折线,那么最终在 [ − 1 , 1 ] [-1, 1] [−1,1] 区间上给人们呈现出来的,就一共有13条折线。故名为 A律13折线。
这里给大家支一招:做题非常好用:不同的考题可能他们的最小量化间隔是不一样的,如果题目说最小量化间隔是1,那么很简单就按照上面的写出各段的起使电平(最大值是 2048 △ 2048△ 2048△): 0 , 16 △ , 32 △ , 64 △ , 128 △ , 256 △ , 512 △ , 1024 △ , 2048 △ 0,16△, 32△, 64△, 128△, 256△, 512△, 1024△, 2048△ 0,16△,32△,64△,128△,256△,512△,1024△,2048△
其中, [ 0 , 16 △ ] [ 0,16△] [0,16△], [ 16 △ , 32 △ ] [16△, 32△] [16△,32△]他们视为一段,标号从1开始。
\space
如果题目说最小量化间隔是 2 ,那么最大值应该变成( 4096 △ 4096△ 4096△),那么还是一样写出各段的起使电平: 0 , 32 △ , 64 △ , 128 △ , 256 △ , 512 △ , 1024 △ , 2048 △ , 4096 △ 0,32△, 64△, 128△, 256△, 512△, 1024△, 2048△, 4096△ 0,32△,64△,128△,256△,512△,1024△,2048△,4096△
其中, [ 0 , 32 △ ] [ 0,32△] [0,32△], [ 32 △ , 64 △ ] [32△, 64△] [32△,64△]他们视为一段,标号从1开始。
2. 编码
A律13折线采用 8 位二进制数来进行编码。二进制码组的结构如下: C 1 C 2 C 3 C 4 C 5 C 6 C 7 C 8 C_1 \space\space C_2C_3C_4 \space\space C_5C_6C_7C_8 C1 C2C3C4 C5C6C7C8
其中, C 1 C_1 C1表示极性码:如果信号是正的,那么 C 1 = 1 C_1 = 1 C1=1,反之 C 1 = 0 C_1 = 0 C1=0
C 2 C 3 C 4 C_2C_3C_4 C2C3C4 表示段落码:我们刚刚不是说先把x轴不均匀地划分为8段嘛,所以这里的段落码就是指示信号在哪一段的。(例:第一段就是 000;第二段就是 001;第五段就是 100…)
C 5 C 6 C 7 C 8 C_5C_6C_7C_8 C5C6C7C8 表示段内码:因为我们对每一段又进一步做了16等分,所以这个段内码就是指示信号在某一段内的哪个小段。(例:如果在第一小段就是 0000,第二小段就是 0001;第10小段就是 1001…)
3.译码
译码的时候,极性码和段落码的恢复比较简单,值得注意的是段内码的恢复:
首先,由:
C
5
C
6
C
7
C
8
C_5C_6C_7C_8
C5C6C7C8确定段内数
m
m
m,接下来,我们还需要加上
△
k
2
\frac{△_k}{2}
2△k这一项(
△
k
△_k
△k 表示第 k 段的量化间隔),这是为了能够将误差控制在
±
△
k
2
±\frac{△_k}{2}
±2△k 范围之内。
4. 对数PCM码与线性PCM码的互相转换
因为我们现在用PCM方法编码得到的是对数码,无法直接进行数值运算,因此需要转为线性PCM码。这很简单,我们下面介绍一下:
首先我们先将获得的对数PCM编码转换为十进制数 y ^ \hat{y} y^,假设我们的最小量化间隔是 1 2048 \frac{1}{2048} 20481时,那么 y ^ \hat{y} y^ 的最大取值将会是 2048,需要11位二进制数来表示。所以我们最后就直接把十进制数转为11位二进制数即可。【但是值得注意的是:8位二进制码转11位二进制码,由于量化间隔的问题,会出现不可分辨部分,所以我们一般可以通过查表得到转换结果】
而将线性PCM码转为对数PCM码那就直接是PCM编码的过程了——先将线性码转为十进制数,然后对这个十进制数做PCM编码即可。
最后一点就是:A律压缩变换对于小信号区域,信噪比SNR有24dB的提升。