.
(注意:此处的
D
i
是一量化单位为基础的,而不是最小量化间隔)
i
为段落值,然
后再利用计算式
G fix((x 2
(i 2)
) / D
i
)
,得到段内段落数
G
,再将
G
转换成二进制
数,完成编码。
Huffman 数据压缩部分:
说明:本部分包含两个函数 Huff_P 和 Huff_code 两个函数,下面将一一介绍;
[P,Str,B]=Huff_P(Str):
函数功能:计算 Str 中每一种元素的概率;
函数参数:Str 是一个数组,元素为 PCM_code 函数返回的 pc;
函数返回值:P 表示每个元素的概率矩阵,Str 同参数一样,B 表示 Str 中的元
素种类;
实现;利用系统函数 unique 得到 Str 中的元素的种类,再利用双重循环计算每
一种元素个数,再除以中的元素的个数,便得到每一种元素的概率。
[Code,Final_code,Length_code,Bnew]=Huff_code(P,Str,B):
函数功能:对 B 中的每一种元素进行 Huffman 编码;
函数参数:P 表示概率矩阵,Str 同 Huff_P 函数中的参数一致,B 表示元素种类;
函数返回值:Code 表示建立的码字表,Final_code 表示对 B 中的每一种元素编
码后的 0、1 比特流,Length_code 表示 Code 中每一行码字的长度,Bnew 表示根据
概率矩阵 P 降序排列后的元素。
实现:首先构造一个六行的 Huffman 树,第一行存放结点编号,第二行存放该
结点的概率值,第三行记录该结点的父结点,第四行记录该结点是左结点还是右结
点,第五行标记该结点是否为父结点,第六行存放概率 P 降序排列后的新矩阵。然
后根据 Huffman 树记录的编码过程,完成对 B 的编码和对 Str 的编码。
产生生成矩阵和监督矩阵部分([G,H]=GH()):
函数功能:产生(15,11)码生成矩阵 G 和监督矩阵 H;
函数参数:无;
函数返回值:生成矩阵 G 和监督矩阵 H;
实现:将单位矩阵与监督矩阵分开完成,然后再合并到一起。首先生成两个大
小分别为(4,4)和(11,11)的单位矩阵;然后在利用循环生成监督矩阵,方法如下:
将 3 至 15 除了 4 和 8 之外的这十一个数分别调用 dextobin 函数将其转换成二进制
数,这些二进制数即作为监督元。
将监督元直接附在(11,11)单位矩阵的后面即可得到生成矩阵 G,将监督元转置