信息论与编码实验报告(共34页).doc
《信息论与编码实验报告(共34页).doc》由会员分享,可在线阅读,更多相关《信息论与编码实验报告(共34页).doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上本科生实验报告实验课程 信息论与编码 学院名称 信息科学与技术学院 专业名称 通信工程 学生姓名 学生学号 指导教师 谢振东 实验地点 6C601 实验成绩 二 一五 年 十一 月 二 一五 年 十一月实验一:香农(Shannon)编码一、实验目的掌握通过计算机实现香农编码的方法。二、实验要求对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码1、将信源消息符号按其出现的概率大小排列 2、确定满足下列不等式的整数码长Ki ; 3、为了编成唯一可译码,计算第i个消息的累加概率4、将累加概率P
2、i变换成二进制数。5、取Pi二进制数的小数点后K i 位即为该消息符号的二进制码。四、源程序: #include#include#include#include#includeusing namespace std;int main() int N; coutN; cout请输入各符号的概率:endl; double *X=new doubleN; /离散无记忆信源 int i,j; for(i=0;iN;i+) coutXi+1Xi; for(i=0;iN;i+) for(j=i+1;jN;j+) if(XiXj) double temp=Xi;Xi=Xj;Xj=temp; int *K=n
3、ew intN; for(i=0;iN;i+) Ki=int(-(log(Xi)/log(2)+1; if(Ki=(-(log(Xi)/log(2)+1) double *Pa=new doubleN; Pa0=0.0; for(i=1;iN;i+) Pai=Pai-1+Xi-1; string *code=new stringN; for(i=0;iN;i+) for(j=0;j=1) codei+=1; Pai=Pai*2-1; else codei+=0; Pai*= 2; for(i=0;iN;i+) codei= codei.substr(0,Ki); coutsetw(12)信源s
4、etw(12)概率p(x)setw(12)累加概率 Pa(x)setw(8)码长 Ksetw(8)码字endl; for(i=0;iN;i+)coutsetw(12)i+1setw(12)Xisetw(12)Paisetw(8)Kisetw(8)codeiendl; delete X; delete Pa; delete K; delete code; getchar(); return 0;开始五、程序设计的流程图输入信源符号的个数 输出累加概率,码长,码字,自信息量,平均码长,编码,编码效率结束将累加概率转化为二进制码字计算累加概率判断概率和s是否等于1输出错误概率计算自信息量计算编码效率
5、计算平均码长按概率大小对信源排序计算平均码长NY六、调试过程中出现的错误:1、在源代码的基础上添加:#include#include#include#include#includeusing namespace std;2、出现错误的语句double *Pa=new doubleN;pa0=0.0,pai=pai-1+Xi-1;红色部分应该改为和前面绿色的格式一样,不然编译程序时会出现红色部分为定义3、出现错误的语句: retuen 0;retuen书写错误,应改为return。七、实验内容:1、对给定信源进行二进制香农编码,编码结果如下所示: 2、对给定信源进行二进制香农编码,编码结果如下所
6、示: 3、自已选择一个例子进行香农编码,选择的例子为,编码结果如下所示:实验二:费诺编码一、实验目的掌握通过计算机实现费诺编码。二、实验要求对于给定的信源的概率分布,按照费诺编码的方法进行计算机实现。三、实验基本原理 费诺编码的步骤: 1、将概率按从大到小的顺序排列;2、按编码进制数将概率分组,使每组概率和尽可能接近或相等;3、给每组分配一位码元;4、将每一分组再按同样原则划分,重复2和3,直到概率不再可分为止。四、源程序:#include#includeusing namespace std;class DATA/public:DATA()next=NULL;pre=NULL;r=NULL;
7、PXi=1;key0=0;key1=0;key2=0;key3=0;key4=0;key5=0;key6=0;key7=0;key8=0;key9=0;key10=0; char Xi; double PXi; char key11; DATA *next,*pre,*r;DATA *head=new DATA,*p=head;int k=(-1);void encoding(DATA * pp);DATA * sort(DATA * pp);DATA *HEAD=new DATA,*tt=HEAD,*T;void input() double l,sum=0; int n,i; char L
8、; coutn; for(i=0;in;i+)cout请输入一个字符的信源符号: L; cout请输入概率: l; p-Xi=L; p-PXi=l; sum=sum+p-PXi; p-next=new DATA; p-next-pre=p;/ p-r=p-next; p=p-next; if(sum!=1)cout所输入的概率之和是sum不为1,请重新输入next=T; tt-next-pre=tt; tt=tt-next; tt-next=new DATA;tt-next-pre=tt; tt=tt-next; HEAD-next-next-pre=NULL; HEAD=HEAD-next-
9、next; cout对输入信源排序结果如下:next!=NULL;p=p-next)coutXi:PXiendl;cout对输入信源编码结果如下:endl;encoding(HEAD);/*编码*/void encoding(DATA * pp)/double y=1; k+; DATA *head1=pp,*head2; int o=1;while(1)double l=0,z=0; for(int i=1;inext=NULL) break; l=l+pp-PXi; pp=pp-next; head2=pp-pre; for(;pp-next!=NULL;pp=pp-next) z=z+p
10、p-PXi; if(yfabs(l-z)/y=fabs(l-z); pp=head1; o+; continue; else if(z=0&i=2)/z=0,i1表示只有一个概率了coutXi:keynext!=head2-next;u=u-next) u-keyk=0; for(DATA * h=head2;h-next!=NULL;h=h-next) h-keyk=1; head2-pre-next=new DATA; head2-pre-next-pre=head2-pre; encoding(head1); encoding(head2); break;k-;DATA * sort(D
11、ATA * pp)/函数递归后头变到HEAD-next-next.返回值得到最后个head2没有与tt相连,需另设得不到结尾为空的(next=MULL)地址DATA *head1=pp,*head2=pp;if(pp-next=NULL) return pp; for(;pp-next!=NULL;pp=pp-next)if(1-pp-PXi=1-head2-PXi) head2=pp; if(head2-pre=NULL)head2-next-pre=NULL; head1=head1-next;else head2-pre-next=head2-next; head2-next-pre=h
12、ead2-pre; tt-next=sort(head1); tt-next-pre=tt; tt=tt-next; return head2;void main()cout*费诺编码*endl;input(); coutendlendlttttttt2?Y通过求累加和确定分组后每组概率累加和尽可能相等或相近分组点为新分组的第一个编号,其他依次.第一组的信源码字加0,第二组的码字加1分组点为新分组的最后一个编号,其他编号不变Y分组点即第一个编号?NY分组点为该组的第二个?N以分组点为断点,重新编号分为两组输出信源符号,概率,码字,码长结束六、实验内容:1、对给定信源进行二进制费诺编码,编码结果
13、如下所示: 2、对给定信源进行二进制费诺编码,编码结果如下所示:3、自已选择一个例子进行费诺编码选择的例子为,编码结果如下所示:实验三 霍夫曼编码一、实验目的掌握通过计算机实现霍夫曼编码 二、实验要求对于给定的信源的概率分布,按照霍夫曼编码的方法进行计算机实现。三、实验基本原理 霍夫曼编码的步骤:1、 把信源符号按概率大小顺序排列, 并设法按逆次序分配码字的长度。2、 在分配码字长度时,首先将出现概率 最小的两个符号的概率相加合成一个概率3、把这个合成概率看成是一个新组合符号地概率,重复上述做法直到最后只剩下两个符号概率为止。4、完成以上概率顺序排列后,再反过来逐步向前进行编码,每一次有二个分
14、支各赋予一个二进制码,可以对概率大的赋为0,概率小的赋为1。四、源程序:#include#include#include#include#includeusing namespace std;#define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE MAXLEAF*2-1 #define MAXBIT 50 typedef struct node char letter; int weight; int parent; int lchild; int rchild;HNodeType;typedef struct char letter
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 编码 实验 报告 34
限制150内