信息论编码实验四香农编码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 香农编码
一、实验目的
1、理解香农编码的概念。
2、掌握香农编码的一般算法
3、掌握香农编码算法中的二进制编码算法。
4、任意给定一个信源模型,编程实现其二进制香农编码,输出编码结果。
二、实验仪器与软件
1、PC 机 1台
2、C 语言环境或MATLAB7.0环境
三、实验原理
(1)输入信源符号以及每个符号对应的出现概率。
(2)对输入的信源符号按概率的大小进行排序。
(3)个码字的累加概率表示第,用令i i j x p x p j a ,1),(0)(0+==
(4)令)(log 1)(log 22i i i x p k x p -≤≤-
(5)的码字位作为点后的用二进制表示,用小数把i j a x k x p )(
(6)重复(3)-(5)直到求出所有的码字。
四、实验内容(源代码及实验结果)
设输入单符号离散信源{a1, a2,a3,a4,a5, a6 ,a7},出现的概率分别是0.2, 0.19, 0.18, 0.17, 0.15, 0.1, 0.01,编程实现二进制香农编码,输出编码结果。
五、实验小结(对本次实验结果进行分析和总结)
1、程序代码:
求解给定信源符号概率的香农编码
n=input('输入信源符号个数n=')
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);%生成7*4的零矩阵
D(:,1)=y';%把y赋给零矩阵的第一列
for i=2:n
D(1,2)=0;%令第一行第二列的元素为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));%求第四列的元素,对D(i,3)向无穷方向取最小正整数
end
D
A=D(:,2)';%取出D中第二列元素
B=D(:,4)';%取出D中第四列元素
for j=1:n
C=deczbin(A(j),B(j))%生成码字
function [C]=deczbin(A,B)%对累加概率求二进制的函数
C=zeros(1,B);%生成零矩阵用于存储生成的二进制数,对二进制的每一位进行操作
temp=A;%temp赋初值
for i=1:B%累加概率转化为二进制,循环求二进制的每一位,A控制生成二进制的位数temp=temp*2;
if temp>=1
temp=temp-1;
C(1,i)=1;
else
C(1,i)=0;
end
end
2、实验小结:
本次实验顺利完成。
这次的实验主要是针对香农编码,通过这次的实验我进一步理解了香农编码的概念同事也掌握香农编码的一般算法和香农编码算法中的二进制编码算法。
一开始做实验的时候,如果任意给定一个信源模型,要求编程实现其二进制香农编码,输出编码结果对我而言有很大的难度,但是通过这次的实验,这些操作对我而言驾轻就熟不在话下了。
这次实验让我学到了很多,很有意义。