《信息论与编码》
实验报告
姓名:***
学号:***
班级:***
指导教师:**
2017年6月
B.1信道容量的迭代算法
【实验目的】
(1)熟悉和理解信道容量的迭代算法;
(2)利用C编程语言实现该算法的功能;
(3)掌握上机调试程序和键盘输入数据得出结果的方法;
【实验要求】
1)已知:信源符号个数r、信宿符号个数s、信道转移概率矩阵P=(Pji)r*s;
2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入;
3)输出:最佳信源分布P’*,信道容量C。
【程序流程图】
输入P
llogΦji
ΦIJ
C
否
是
输出
终止
【运行结果】
B.2唯一可译码的判断代码
【实验目的】
(1)熟悉和理解唯一可译码的判决规则;
(2)利用C编程语言实现该算法的功能;
(3)掌握上机调试程序和键盘输入数据得出结果的方法;
【实验要求】
(1)已知:信源符号个数r、码字集合C;
(2)输入:任意的一个码,码字个数和每个具体的码字在运行时从键盘输入;
(3)输出:判决(是唯一可译码/不是唯一可译码)
开始
【程序流程图】
输入信源符号个数r,码字集合C
判断是否为奇异码
是
判断前缀,有无后缀
否
否
是
构造后缀集合F
是
F是否存在元素为C中码字
输出不是唯一可译
F与C是否有相同前缀
否
是
输出是唯一可译
否
结束
【运行结果】
B.3 Huffman编码
【实验目的】
(1)熟悉和理解Huffman编码的意义和过程;
(2)利用C编程语言实现该算法的功能;
(3)掌握上机调试程序和键盘输入数据得出结果的方法;
【实验要求】
(1)已知:信源符号个数q,信源符号S0,S1,……Sq-1,信源概率分布P0,P1……Pq-1;
(2)输入:信源符号个数r,信源的概率分布P;
(3)输出:每个信源符号对应的Huffman编码的码字。
【程序流程图】
开始
从主函数中获取各个字符及其权值,再调用Huffman函数
定义哈夫曼树节点和哈弗曼编码表类型并用typedef声明类型
初始化哈夫曼树
查找权值最小的两个节点x1、x2
定义节点n+i为x1和x2节点的父节点、其权值为二者之和
P是根节点?
循环n次
定义c为当前要求码字的节点,p指向要求的编码表
P节点的左孩子为c?
码字加1
T
F
T
F
输出第i个符号码字
结束
码字加0
P指向向根节点移动
每执行一次,输出一个符号的码字,一共执行n次
【运行结果】
B.4 LZW编码
【实验目的】
(1)熟悉和理解LZW编码的意义和过程;
(2)利用C编程语言实现该算法的功能;
(3)掌握上机调试程序和键盘输入数据得出结果的方法;
【实验要求】
(1)已知:待压缩的数据文件;
(2)输入:本程序将从标准输入中读入待压缩的数据;
(3)输出:将压缩结果输出到标准输出上去。
【程序流程图】
【运行结果】
B.5香农编码
【实验目的】
(1)熟悉和理解香农编码的意义和过程;
(2)利用C编程语言实现该算法的功能;
(3)掌握上机调试程序和键盘输入数据得出结果的方法;
【实验要求】
(1)输入:信源符号个数q,信源符号S0,S1,……Sq-1,信源的概率分布P0,P1……Pq-1,;
(2)输出:信源符号与码字的对应关系表(编码表)。
【程序流程图】
开始
输入符号个数N和相应概率X[i]
按概率由大到小排序
按公式求码长
求出对应位的概率累加和
按乘2取余法则,将累加概率转换为二进制
结合求得的对应码长,将二进制的累加概率取对应长度的作为相应码字
输出信源、概率、累加概率、码长和码字
结束
【运行结果】
【实验心得】
本次信息论上机课我使用VC6.0软件,使用C语言分别实现了信道容量的迭代算法,唯一可译码判决规则,哈夫曼编码,LZW编码和香农编码的算法程序,并且予以调试和运行,在调试无错误后,使用键盘输入相应的符号个数以及概率矩阵,得到了的结果与自己理论计算的结果完全相同,验证了自己所学习的理论知识,同时使用的相应的算法语句能够得到多次有效的运用,能够在以后的学习生活中得到再次应用。
本次实验中遇到的问题主要是程序的出错调试问题,在VC6.0软件中运行时,部分程序会出现错误,我通过查阅相关资料,根据软件报错提醒的错误位置和内容,修改了相应的个别语句,多次尝试后运行成功,使用键盘输入数据时,要根据运行框里面的提示一步步输入数据,得到相应的结果,并且与理论值对比,得出结论。
本次实验我不仅更加熟悉了这五种编码方法的原理,方法和过程,而且提高了自己利用算法来实现编码功能的能力,也增加了对《信息论与编码》这门课程的兴趣,可以说收获颇多。
展开阅读全文