资源预览内容
第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
第9页 / 共57页
第10页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
信息论编码与密码学实习报告 姓 名: 学 号: 班 级: 指导老师: 目录一.Lempel Zil字典编码-7二.信道容量的计算-16三.Hamming码的编码与译码-36四.循环码最小距离的计算-43五.维特比译码器软件的设计-56六.实习心得-57 一、Lempel Ziv字典编码1、 题目要求: 写一个执行Lempel-Ziv算法的程序。该程序的输入可以是英文字母。它应该将字母转化为她们的ASCII码然后进行压缩.它应该输出压缩结果。用这个程序求下列的字符串所得到的压缩:(1) The Lempel Ziv algorithm can compress the English text by about fifty five precent.(2) The cat cannot sit on the canopy of the car.2、 算法设计:(1)字典初始化(2)增添开始与结束位(3)开始读入字符流,进入循环(4)以两个字符为一组构建新的字符(5)判断新的字符是否存在于字典中,如果存在,不做处理,如果不存在,将其添加到字典中,将该新字符在字典中的位置作为编码发送(6)译码过程与编码过程相反 开始3、 算法流程图 字典初始化在字典中寻找字符s 读入字符p读入下一个字符cno判断p+c是否存在字典中yes 令p=c p=p+c 将p+c存入字典 4、 程序代码:#include #include #include using namespace std;string str1;/定义字符串变量str1string str2;string dic500;int n;/函数名:int find(string s) /函数功能:在字典中寻找字符s,并返回在字典中的序号 /参数:所要查找的字符 /返回值:字符在字典中对应的标号 int find(string s) int temp=-1; for(int i=0;i100;i+) if(dici=s) temp=i+1; return temp;/函数名:void init() /函数功能:用az,AZ以及一些标点符号,初始化字典 /参数:void /返回值:void void init() /字典初始化 int i,j; for(j=0,i=0;i=26;i+) dicj=A+i; j+; for(j=26,i=0;i=26;i+) dicj=a+i; j+; dic52=,; dic53=.;dic54=?;dic55=!;/函数名:void code(string str) /函数功能:对输入的字符串进行LZW字典编码 /参数:str 待编码的字符串 /返回值:用cout输出显示编码后的码 void code(string str) init();/初始化 char temp2; temp0=str0; /取第一个字符 temp1=0; string P=temp; /P为前缀 int i=1; int j=56; /目前字典存储的最后一个位置 cout编码为:; while(1) char t2; t0=stri;/取下一字符 t1=0; string C=t; /C为字符流中下一个字符 if(C=) /无码字要译,结束 cout -1) /有码字要译,如果P+C在词典中,则用C扩展P,进行下一步: P=P+C; /前缀变成p+c i+; else /如果P+C不在词典中,则将P+C添加到词典中,令P=C cout find(P); string PC=P+C; dicj+=PC; P=C; /前缀P变为刚刚编码的字符C i+; coutendl; cout生成的词典为:endl; for(i=0;ij;i+) /输出词典中的内容,j为词典的长度 coutsetw(10)i+1diciendl; coutendl;int main() /主程序int i ;char s500 ;coutn输入待编码的字符串为:endl;coutit is the first I make this dictionary.endl;str1=it is the first I make this dictionary.;code(str1); coutn输入待编码的字符串为:endl;coutThe Lempel Ziv algorithmcan compress the English text by about fifty five percent.endl;str2=The Lempel Ziv algorithmcan compress the English text by about fifty five percent.;code(str2);return 0;5、 实验结果: 二 、计算信道容量1、 题目要求: 写一个程序,它在输入信道转移概率矩阵后计算出信道容量。2、 算法设计:(1)设定信源信宿的初始值(2)设定信道转移概率矩阵(3)设定精度(4)计算各个信宿的接受概率(5)将接受概率与精度相比较(6)判断差值是否符合规则,如果符合程序结束得到信道容量,如果不符合重新设定发送概率(7)重复(4)(5)(6)直到满足规则得到信道容量3、 算法流程图 开始输入信源信宿个数输入转移概率矩阵输入迭代精度误差 初始化输入符号的 概率(等概率处理) 计算参数ai计算参数平均互信息C找到ai的最大值CCyesCC-C是否大于等于精度误差no进行迭代,迭代权重向概率大的靠拢(重新分配符号概率) 输出结果 结束4、 程序代码:/*/【名称】:信道容量迭代 /【函数】:计算ai函数、计算C函数、计算CC函数、主函数/【思路】:利用迭代法,使C初步逼近CC,当误差小于e时,C即为信道容量/*#include / 标准的输入输出流头文件#include / 字符串处理头文件#include / 输入输出控制头文件#include using namespace std; / 定义命名空间int Xi,Yj; / Xi为信源个数,Yj为信宿个数int n=1;double e; / 迭代法精度误差double PXi50; / 输入符号的概率P(xi)数组double P5050; / 信道转移概率矩阵double a50;double C;double CC; / 迭代法参数ai
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号