《香农编码matlab实现》由会员分享,可在线阅读,更多相关《香农编码matlab实现(23页珍藏版)》请在金锄头文库上搜索。
1、实验二 香农编码的MATLAB实现,一、实验目的,熟悉MATLAB平台及工作环境 熟练使用条件判断语句、循环语句 掌握香农编码的步骤 掌握利用MATLAB实现香农编码,二、实验原理,1. 香农编码步骤 (1)将信源符号按概率从大到小的顺序排序:(2)令 p(a0) = 0,用 pa (aj)(j = i+1)表示第 i 个码字的累加概率,则:,二、实验原理,1. 香农编码步骤 (3)令 ki 为第 i 个码字的码长,按照下式计算出各概率对应的码字长度 ki :(4)把各个累加概率pa (aj)由十进制小数转化为二进制小数,并取小数点后的前 ki 位作为对应信源符号ai的码字。,二、实验原理,【
2、例 3.3.1】 设有一单符号离散无记忆信源:,对该信源编二进制香农码。,2. 以教材P39例题3.3.1信源为例,二、实验原理,2. 以教材P39例题3.3.1信源为例,二、实验原理,平均码长:信源熵:信息率:编码效率:,2. 以教材P39例题3.3.1信源为例,三、实验内容,1. 程序设计 (1)代码初始化 clc; % 清除命令窗口的内容 clear all; % 清除工作空间的内容 p = 0.25 0.25 0.20 0.15 0.10 0.05; % 输入信源分布 n = length(p); % 计算信源符号的个数,三、实验内容,(2)判断信源是否合法,计算信源熵 if min(
3、p)1 % 判断概率值是否介于0到1之间disp(信源分布 P(X)=,num2str(p),);disp(概率值必须介于0到1之间,请重新输入信源分布);return elseif sum(p) = 1 % 判断概率累加和是否等于1disp(信源分布 P(X)=,num2str(p),);disp(概率累加和必须等于1,请重新输入信源分布);return,三、实验内容,(2)判断信源是否合法,计算信源熵 elseH = 0; % 熵值初始化为0for i = 1:nH = -p(i)*log2(p(i) + H; % 累加各个符号的概率加权end end,三、实验内容,(3)按照概率大小排序
4、,并计算累加概率 p = sort(p, descend); % 降序排列 pa = zeros(1,n); % 对累加概率矩阵初始化 for j = 2:npa(j) = pa(j-1) + p(j-1); % 计算累加概率 end,三、实验内容,(4)计算每个码字的长度 k = zeros(1,n); % 对码长矩阵初始化 for i = 1:nk(i) = ceil(-log2(p(i); % 计算每个码字长度,向上取整 end,三、实验内容,(5)十进制小数转换成二进制小数 k_max = max(k); bin = zeros(n,k_max); % 对二进制小数矩阵初始化 for
5、i = 1:n for j = 1:k_maxbin(i,j)=floor(pa(i)*2); % 将累加概率转换成二进制pa(i)=pa(i)*2-floor(pa(i)*2);end end,三、实验内容,(6)取小数点后 ki 位作为码字 codeword = zeros(n,k_max); % 对码字矩阵初始化 for i = 1:nfor j = 1:k_maxif j k(i)codeword(i,j) = blanks(1); % 创建空白串elseif bin(i,j) = 0codeword(i,j) = 0;,三、实验内容,(6)取小数点后 ki 位作为码字elseif b
6、in(i,j) = 1codeword(i,j) = 1;endendend end codeword = char(codeword); % 码字,三、实验内容,(7)计算平均码长、信息率和编码效率 K = sum(p.* k); % 平均码长 R = K; % 信息率 eff = H/R; % 编码效率,三、实验内容,(8)输出结果 disp(信源分布 P(X) = ,num2str(p),); disp(编码结果:); for i = 1:ndisp(num2str(p(i), - ,num2str(codeword(i,:); end disp(信源熵 H(X) = ,num2str(
7、H), (bit/sign); disp(平均码长 K = ,num2str(K), (bit/sign); disp(信息率 R = ,num2str(R), (bit/sign); disp(编码效率 = ,num2str(eff);,三、实验内容,2. 实验结果 p = 0.25 0.25 0.20 0.15 0.10 0.05,三、实验内容,2. 实验结果 p = 0.2 0.19 0.18 0.17 0.15 0.10 0.01,?,三、实验内容,2. 实验结果 p = 0.183 0.141 0.137 0.114 0.095 0.083 0.068 0.064 0.045 0.038 0.021 0.011,?,三、实验内容,3. 常用函数使用说明 sum(x):求矩阵x的各个元素之和 min(x)、max(x):求矩阵x的最小值、最大值 zeros(m,n):创建m行n列的全0矩阵,用于初始化 sort(x, descend):对矩阵x降序排列 ceil(x)、floor(x):对小数x向上取整、向下取整 if.else.end:条件判断语句 for.end:循环语句,四、实验心得,通过本次实验,学到了,掌握了 实验过程中,遇到的困难,如何克服,附 实验报告要求,实验目的 实验原理 实验内容 实验心得,