编码解码(通信系统编码解码流程)
在通信系统中,信息在传播之前需要进行编码,通过信道传播后,在接收端再进行解码,如图1所示。
图1:编解码流程
由于无线通信系统中,频谱资源越来越稀缺,所以必须保证整个通信系统高效、稳定的进行交互。
首先看下源编码,这个过程是将原始数据转换成二进制序列的过程,如图2:
图2:原始数据编解码流程
信源编码的另一种定义是将信源数据转换成能够最小化传输数据所需的带宽的形式。简单地说,就是“数据压缩”。
那信道编码呢?
信道编码是一种将“原始数据位”替换为“一些其他位(通常比原始位长)”的方法。例如,最简单的编码如下:
0 –> 0000 :将原始数据中的所有“1”替换为“0000‘
1 –> 1111 : 将原始数据中的所有“1”替换为“1111‘
编码的另一个例子是在通信中添加奇偶校验位,原始七位数据–>原始七位数据+一个奇偶校验位。
在通信系统中,通常把“原始数据”称为“消息(message)”,把编码后的数据称为“码字(Codeword)”。在所有的编码过程中,“码字”的长度大于“消息”的长度,这意味着在编码过程中,在原始数据(消息)中增加了一些额外的位,这些额外的位被称为“冗余位”。
这不是降低了效率吗?为什么需要编码呢?
答案是在“信道”上有“噪声”。接收端不能准确的接收到正确的原始数据。
为了解决这个问题,可以考虑两种可能的选择。
-
·使信道无噪音。(以无噪音的方式建造信道)
-
·使用某种方法检测并纠正错误
第一种选择几乎是不可能的,尤其是在无线通信中。如果是有线通信,至少你可以尝试降低信道中的噪声,但在无线通信中,几乎不可能直接从信道中去除噪声。
这意味着唯一的选择是开发一些方法(算法)来检测和纠正由噪声信道引起的错误。这是“编码”的主要动机。
图3:计算噪声产生的误码
编码的主要思想是以一种非常特殊的方式(不是以随机/任意的方式)向原始数据中添加一些额外的位(称之为冗余位),以便它们可以用来检测错误的确切位置并进行纠正。
通常编码/解码块的位置如图4所示。编码接收比特流并产生编码比特流。
图4:编解码过程产生的误码
那编码/解码的增益是多少?是不是可以使接收到的数据很少或几乎没有错误?
以下是编码/解码过程引起的主要问题。
1. ·数据传输开销(由于冗余位)
2. ·使数据传输和接收过程复杂化(由于编码/解码算法)
如前所述,编码是在原始数据中添加一些冗余位,这些冗余位将用于检测和纠正解码过程中的错误。编解码算法有很多种,各有优缺点。因此,在实现编码/解码块时,总是会遇到以下问题。
1. ·必须添加多少位冗余位以最小化冗余位的数量并最大化错误纠正?
2. ·哪种编码/解码算法是最好的。比如5G中的Polar码和LDPC编码
一般来说,添加的冗余位越多,错误检测/纠正能力就越高。但是,添加的冗余位越多,获得的吞吐量就越低,因为传输的位的较大部分应该分配给冗余位,而不是要发送的信息。
3GPP规范规定了编码/解码过程的所有细节,我们只需要执行和学习就够了。
例如,在LTE情况下,3GPP 36.212指定如下所示的编码算法和相关参数。规范的第5章提供了实现编码过程的所有详细参数。
在4、5G网络中,使用了Block Code编码方法,它把整个输入数据流分成小块,用另一小块(码字Codeword)代替小块(消息Message)。
这个过程可以如图5所示。进入编码功能的小块称为“消息”,离开编码功能的小块称为“码字”。也用符号(n,k)来表示这个过程。n是码字(输出)的位数,k是消息(输入)的位数。n总是大于k,这意味着输出(码字)的长度总是大于输入(消息)的长度。
Block Code的一个示例如图6所示。将输入数据流拆分为4位块,并用7位块替换每个块。每个可能的4位块(输入=消息)和7位块(输出=码字)之间的映射表如图6所示。
图6:编码示例
“线性编码”是指一组代码,其中两个代码在该集合中的任何线性组合产生一个也属于原始集合的代码。假设有一组代码,如图7所示。从集合中取出任意两个代码,取它们的模2求和,结果也是集合的一个成员。
图7:线性编码示例
“循环”是一组代码,其中一个代码可以通过该代码集中另一个代码的循环移位来生成。换言之,该集合中一个码的任意数量的循环移位也属于该集合。例如,假设有一个由以下四个代码组成的代码集。如果只查看这些代码中的每一个,这些代码中的任何一个都可以通过另一个代码的循环移位来创建,如图8所示。
将编码(0110101)循环右移1,得到(10101010),它也是集合的一个成员。
将编码(0110101),循环右移2,得到(0110101),它也是集合的一个成员。
简言之,在这一组不管你用什么代码,不管你做了多少次循环移位,结果总是在原来的集合中。
用一个叫“生成功能”来产生这些编码集,如图9所示。
理解上述等式真正含义的最佳方法是举例说明。假设有四个生成函数
可以将这些方程打包成一个矩阵,如下所示。(注意最低的顺序是最左边的)。
假设有一个m = (1 1 0 1)的消息。
现在,计算出该消息的码字(计算出该消息通过编码器块时的输出位流)。使用生成器函数计算码字的过程如图10所示。
现在看一下生成器函数(生成器矩阵)的高级视图,看看是否有任何可识别的模式。如图11所示。
1. 行数与消息长度相同(消息中的位数)
2. 矩阵包含k x k单位矩阵,其中k是消息的长度
我怎么知道使用哪些生成器函数?
正常情况下,这些功能/矩阵将根据通信系统提供规范。每个无线通信系统都会提供码本以供使用。