实验二 香农编码
i 1
Pi p( xk )
k 1
4.将累加概率 Pi 变成二进制数; 5.取 Pi 二进制数的小数点后 Ki 位即为该消息符号的二进制码字。 五、实验步骤 1.根据实验原理,设计香农编码程序; 2.输入一组信源消息符号概率,可以求香农编码、平均码长和编码效 率。 六、实验注意事项 1.香农编码是码符号概率大的用短码表示,概率小的是用长码表示, 程序中需要对概率进行排序,对此我们调用 MATLAB 的库函数; 2.最后需要注意的是,求得的码字依次与排序后的符号概率对应; 3.向无穷方向取最小正整数位 ceil 函数。 七、实验结果 香农编码程序:
第 页
陕西科技大学实验报告
八、思考题 举例说明香农编码在现实中有实际作用,列举一个例子,并简要说 明? 可以抓住语言结构的冗余性以及语言中字母、 词的使用频度等统 计特性。 使用香农信息论信息量等观点, 来研究中文与英文的信息量, 从而比较科技大学实验报告
1.将信源消息符号按其出现的概率大小依次排列: P ( X 1 ) P ( X 2 ) ,, P ( X n ) 2.确定满足下列不等式整数码长 Ki ; log2p(x i ) K i log 2 p(x i ) 1 3.为了编成唯一可译码,计算第 i 个消息的累加概率;
close all; clc; n=input('输入信源符号个数:'); p=zeros(1,n); for i=1:n p(1,i)=input(' 输 入 信 源 符 号 概 率:'); end if sum(p)<1||sum(p)>1 error('输入概率不符合概率分布') end y=fliplr(sort(p));
第 页
陕西科技大学实验报告
D=zeros(n,4); D(:,1)=y'; for i=2:n D(1,2)=0; D(i,2)=D(i-1,1)+D(i-1,2); end for i=1:n D(i,3)=-log2(D(i,1)); D(i,4)=ceil(D(i,3)); end D A=D(:,2)'; B=D(:,4)'; Code_length=0; for j=1:n Code_length=Code_length+p(j)*D(j, 4); end H=0; for j=1:n H=H+p(j)*log2(1/p(j)); end for j=1:n fprintf('输入信源符号概率为%f 的 码字为:',p(1,j)); C=deczbin(A(j),B(j)); disp(C) end Efficiency=H/(Code_length) fprintf('平均码长:\n'); disp(Code_length) fprintf('\n 香农编码效率:\n'); disp(Efficiency) A:累加概率;B:码子长度。 function [C]=deczbin(A,B) C=zeros(1,B); temp=A; for i=1:B temp=temp*2; if temp>1 temp=temp-1; C(1,i)=1; else C(1,i)=0; end end
陕西科技大学实验报告
班级 实验日期 学号 室温 姓名 报告日期 实验组别 成绩
报告内容:(目的和要求、原理、步骤、数据、计算、小结等) 实验名称:实验二 香农编码 一、实验目的 1.了解香农编码的基本原理及其特点; 2.熟悉掌握香农编码的方法和步骤; 3.掌握 MATLAB 编写香农编码的程序。 二、实验内容 1.根据香农编码的方法和步骤,用香农编码编写程序; 2.用编写的源程序验证书中例题的正确性。 三、实验仪器、设备 1.计算机-系统最低配置 256M 内存、P4 CPU; 2. MATLAB 编程软件。 四、实验原理 1.香农编码原理: 香农第一定理指出了平均码长与信源之间的关系, 同时也指出了可以 通过编码使平均码长达到极限值,这是一个很重要的极限定理。香农 第一定理指出,选择每个码字的长度 Ki 满足下式: I ( X i ) K I ( X i ) 1, i 就可以得到这种码,这种编码方法就是香农编码。 2.香农编码算法: