信息论与编码技术实验指导书
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 哈夫曼编码
一 实验目的:掌握通过计算机实现哈夫曼编码 二实验要求: 对于给定的信源的概率分布,按照哈夫曼编码的方法 进行计算机实现. 三实验原理 哈夫曼编码的步骤:
(1). 把信源符号按概率大小顺序排列, 并设法按逆次序分配码 字的长度。 (2). 在分配码字长度时,首先将出现概率 最小的两个符号的 概率相加合成一个概率 (3). 把这个合成概率看成是一个新组合符号地概率,重复上述 做法直到最后只剩下两个符号概率为止。 (4). 完成以上概率顺序排列后,再反过来逐步向前进行编 码,每一次有二个分支各赋予一个二进制码,可以对概率大的 赋为零,概率小的赋为1。
cd.bit[cd.start]=0; else cd.bit[cd.start]=1; cd.start--; c=p; p=huffnode[c].parent; } cout<<huffcode[i].leaf<<":"; for(j=cd.start+1;j<n;j++) { huffcode[i].bit[j]=cd.bit[j]; cout<<cd.bit[j]; } cout<<endl; huffcode[i].start=cd.start; } delete[] huffcode; delete[] huffnode; } void main() { int i=0; int m[10]={30,23,10,10,9,8,7,3}; char cha[10]="abcdefgh"; float f; cout<<"该字符串为:\t"; for (i=0;i<strlen(cha);i++) { cout<<cha[i]<<"\t"; } cout<<"字符加权为:\t"; for (i=0;i<strlen(cha);i++) { f=(float)m[i]/100; cout<<f<<"\t"; } cout<<"各字符的哈夫曼码为:"<<endl; i=strlen(cha);
huf(cha,m,i);
实验五 循环码编码 一 实验目的:掌握通过计算机实现系统循环码编码 二实验要求: 对于给定的消息序列,按照循环码编码的方法进行 计算机实现. 三实验原理 循环码的编码步骤: •循环码的系统码构造的步骤为: 1)消息多项式乘x n-k 2) x n-km(x)/g(x)=q(x) +r(x)/g(x) 其中:q(x)是商,r(x)是余数 3)C(x)= x n-km(x)+r(x) 四实验设备 计算机 c++ 五实验报告 1、画出程序设计的流程图,
和 累加和 X1 X1 X1 X2 X1+X2 2*X1+X2 X3 X1+X2+X3 3*X1+2*X2+X3 X4 X1+X2+X3+X4 4*X1+3*X2+2*X3+X4
ψ X1+X2+X3+X4+ψ 5*X1+4*X2+3*X3+2*X4+ψ 四实验设备 计算机 c++ 五实验报告 1、画出程序设计的流程图, 2、写出程序代码, 3、写出在调试过程中出现的问题 , 4、对实验的结果进行分析。
型如下图:
在给定信源概率分布条件下, 各种熵的求解方法如下: 1) 信源熵 2) 条件熵
3) 联合熵
4) 交互熵 5) 信道容量 ◼一般离散信道容量对计算步骤总结如下:
4、 实验设备:计算机 c++ 五、实验报告要求 1、 画出程序设计的流程图, 2、 写出程序代码, 3、 写出在调试过程中出现的问题 , 4、 对实验的结果进行分析。
A 将概率按从大到小的顺序排列 B 按编码进制数将概率分组,使每组概率和尽可能接近或相 等。 C 给每组分配一位码元 D 将每一分组再按同样原则划分,重复b和c,直到概率不再可 分为止
四 实验设备 计算机 c++ 五实验报告 1、画出程序设计的流程图, 2、写出程序代码, 3、写出在调试过程中出现的问题 , 4、对实验的结果进行分析。
码。
四、实验设备 计算机 c++ 五实验报告 1、画出程序设计的流程图, 2、写出程序代码, 3、写出在调试过程中出现的问题 , 4、对实验的结果进行分析。
实验三 费诺编码 一 实验目的:掌握通过计算机实现费诺编码 二实验要求: 对于给定的信源的概率分布,按照费诺编码的方法进 行计算机实现. 三实验原理 费诺编码的步骤:
四实验设备 计算机 c++ 五实验报告 1、画出程序设计的流程图, 2、写出程序代码, 3、写出在调试过程中出现的问题 , 4、对实验的结果进行分析。 六 参考程序
哈夫曼编码: 根据二叉树思想,将二叉树的程序改编
#include<iostream> #include<string> using namespace std; typedef struct { int weight; int flag; int parent; int lchild; int rchild; }hnodetype; typedef struct { int bit[10]; int start; char leaf; }hcodetype; void huf(char cha[],int m[],int n) { int i,j,m1,m2,x1,x2,c,p; hnodetype *huffnode=new hnodetype[2*n-1]; hcodetype *huffcode=new hcodetype[n],cd; for(i=0;i<2*n-1;i++) { //初始化哈夫曼树 huffnode[i].weight=0; huffnode[i].parent=0; huffnode[i].flag=0; huffnode[i].lchild=-1; huffnode[i].rchild=-1; } for(i=0;i<n;i++) { //哈夫曼结点赋初值 huffnode[i].weight=m[i]; huffcode[i].leaf=cha[i]; } for(i=0;i<n-1;i++)
实验二 香农编码
一 实验目的、掌握通过计算机实现香农编码 二实验要求 对于给定的信源的概率分布,按照香农编码的方法 进行计算机实现. 三、实验原理 给定某个信源符号的概率分布,通过以下的步骤进 行香农编码 1、 信源符号按概率从大到小排列 2、 对信源符号求累加和,表达式: Pi=Pi-1+p(xi) 3、 求自信息量,确定码字长度。自信息量I(xi)=log(p(xi));码字长度取大于等于自信息量的 最小整数。 4、 将累加和用二进制表示,并取小数点后码字的长度的
实验一:信息量及信道容量的计算
1、 实验目的:通过该实验,掌握通过计算机实验信息量 和信道容量的计算方法 2、 实验要求:对一个离散的无记忆信源,给定信源的输 入概率分布,给定一个信道特性,计算各种信息量和 熵,并计算信道容量。 3、 实验原理:
◼设输入X∈{x1,x2,…,xi,…,xn}
输出Y∈{y1,y2,…,yj,…,ym} ,信道的一般数学模
{
//对结点进行编码
Βιβλιοθήκη Baidu
m1=m2=10000000; x1=x2=0; for(j=0;j<n+i;j++) { if(huffnode[j].weight<=m1&&huffnode[j].flag==0) { m2=m1; x2=x1; m1=huffnode[j].weight; x1=j; } else if(huffnode[j].weight<=m2&&huffnode[j].flag==0) { m2=huffnode[j].weight; x2=j; } } huffnode[x1].parent=n+i; huffnode[x2].parent=n+i; huffnode[x1].flag=1; huffnode[x2].flag=1; huffnode[n+i].weight=huffnode[x1].weight+huffnode[x2].weight; huffnode[n+i].lchild=x1; huffnode[n+i].rchild=x2; } for(i=0;i<n;i++) { //生成哈夫曼树 cd.start=n-1; c=i; p=huffnode[c].parent; while(p!=0) { if(huffnode[p].lchild==c)
2、写出程序代码, 3、写出在调试过程中出现的问题 , 4、对实验的结果进行分析。
实验六 模p信道编码实验 一 实验目的:掌握通过计算机实现模p信道编码 二实验要求: 对于给定的消息序列,按照模p信道编码的方法进行 计算机实现. 三实验原理 在实际生活中,有时侯“1”和“I”很相似。 p=37(符号的个数) 数字“0”-“9”和字母“A”-“Z”和空格 共37种符号。 “0” 0 “1” 1 ¨ “A” 10 “B” 11 设有某消息的符号序列为X=X1X2X3X4, 用下表的方式来求它们的和及累加和,然后加上 适当的监督元,使累加和是模37的倍数。 消息符号