1.概要
信源编码是一种信息编码技术,旨在提高通信系统的有效性,通过压缩信息的冗余度来实现。在编码理论指导下,先后出现了许多性能优良的编码方法,根据信源的性质进行分类,则有信源统计特性已知或未知、无失真或限定失真、无记忆或有记忆信源的编码;按编码方法进行分类,可分为分组码或非分组码、等长码或变长码等。然而最常见的是讨论统计特性已知条件下,离散、平稳、无失真信源的编码,消除这类信源剩余度的主要方法有统计匹配编码和解除相关性编码。例如,香农码、哈夫曼码属于不等长度分组码,算术编码属于非分组码,预测编码和变换编码是以解除相关性为主的编码。在此简要介绍常见信源编码中香浓编码与哈夫曼编码,以及利用MATLAB二者的方法。
2.香浓编码
香农编码是一种基于概率的编码方法,由克劳德·香农在1948年首次提出。其核心思想是利用符号出现概率的不均匀性来最小化平均编码长度。具有以下特点:
- 属于不等长编码,通常将经常出现的消息变成短码,不经常出现的消息编成长码。
- 编码所得的码字没有相同的,所以是非奇异码,也没有一个码字是其他码字的前缀,所以是即时码,也是唯一可译码。
具体步骤如下:
1. 将信源符号按概率从大到小顺序排列。
2. 计算第 i 个符号对应的码字的码长(向上取整),码长计算公式为:![]()
3. 计算第 i 个符号的累加概率。
4. 将累加概率变换成二进制小数,取小数点后相应位数作为第 i 个符号的码字。
下面是用matlab实现香浓编码
clear all
clc
% 输入离散信源的概率分布
p = input('请输入离散信源概率分布,例如[0.5,0.5]:\n');
% 获取概率分布的长度
N = length(p);
% 计算每个符号的理论最短码长(向上取整)
L = ceil(-log2(p));
% 对概率进行降序排序,并记录原始索引
[p_SortDescend,reflect] = sort(p,'descend');
% 初始化累积概率数组和码字数组
P = zeros(1,N);
CODE = strings(1,N);
for i=1:N
% 初始化当前符号的码字(长度为该符号的理论最短码长)
code = zeros(1,L(reflect(i)));
% 对于第一个符号,累积概率为0,码字为


8132

被折叠的 条评论
为什么被折叠?



