信息论与编码技术之实验

上传人:ca****in 文档编号:198891233 上传时间:2023-04-09 格式:DOC 页数:17 大小:192KB
收藏 版权申诉 举报 下载
信息论与编码技术之实验_第1页
第1页 / 共17页
信息论与编码技术之实验_第2页
第2页 / 共17页
信息论与编码技术之实验_第3页
第3页 / 共17页
资源描述:

《信息论与编码技术之实验》由会员分享,可在线阅读,更多相关《信息论与编码技术之实验(17页珍藏版)》请在装配图网上搜索。

1、前两个是别人的,后两个是自己的,学术交流,抛砖引玉。信息论与编码 实验报告样板实验室名称:S1-306实验一二维随机变量信息熵的计算 教学实验报告实验目的掌握二变量多种信息量的计算方法。 实验要求1熟悉二变量多种信息量的计算方法,设计实验的数据结构和算法;2编写计算二维随机变量信息量的书面程序代码。实验内容离散二维随机变换熵的计算说明:(1)利用random函数和归一化方法构造一个二维离散随机变量(X,Y);(2)分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y);(3)对测试通过的程序进行规范和优化;(4)编写本次实验的实验报告。实验步骤实验过程中

2、涉及的各种熵的主要公式(或定义式):1、离散信源熵(平均不确定度/平均信息量/平均自信息量)2、在给定某个yj条件下,xi的条件自信息量为I(xi/yj),X 集合的条件熵H(X/yj)为相应地,在给定X(即各个xi)的条件下,Y集合的条件熵H(Y/X)定义为:3、联合熵是联合符号集合 XY上的每个元素对xiyj的自信息量的概率加权统计平均值,表示X和Y同时发生的不确定度。实验体会通过本次实验,掌握了离散信源熵、条件熵、联合熵的概念和它们与信源统计分布或条件分布、联合分布之间的关系,并能进行计算。进一步加深了对各种信息熵的物理意义的理解。附:计算信源熵、联合熵和条件熵的程序代码清单:(可写入实

3、验报告也可不写入)#include#include#include#include#includeusing namespace std;void main() int k,n,t=0;double a44,b=0,c=0;srand(unsigned)time(NULL); for(k=0;k4;k+)for(n=0;n4;n+)akn=rand()%100;t+=akn;cout从0到100间随机取得行列的random函数:endl;for(k=0;k4;k+)for(n=0;n4;n+)coutsetw(5)akn; coutendl;cout函数归一化:endl;for(k=0;k4;

4、k+)for(n=0;n4;n+)coutsetw(12)akn/t; coutendl;coutH(Y)计算:setw(20)H(X)计算:endl;int e=1;for(k=0;k4;k+)double i=0,g=0;for(n=0;n4;n+)i+=(akn/t);g+=(ank/t);coutP(Yk+1):isetw(8)P(Xe):gendl;+e;b-=(i*log(i)/log(2.0);c-=(g*log(g)/log(2.0);coutH(Y)=-p(Y)log p(Y)=bendl;coutH(X)=-p(X)log p(X)=cendl;cout联合熵H(X,Y)计

5、算:endl;b=0;int r,u,h=0;for(k=0;k4;k+)for(n=0;n4;n+)if(akn!=0)b-=(akn/t)*log(akn/t)/log(2.0);else r=k,u=n;h=1;break;if(h=0)coutH(X,Y)=-p(X,Y)log p(X,Y)=bendl;else coutP(r+1,u+1)为零,中断,无值endl;cout条件熵H(X|Y)计算:endl;b=0,h=0;for(k=0;k4;k+)double i=0;for(n=0;n4;n+)i+=(akn/t);for(n=0;n4;n+)if(akn!=0)b-=(akn/

6、t)*log(akn/t)/i)/log(2.0);else h=1;break;if (h=0)coutH(X|Y)=-P(X,Y)log(P(X,Y)/P(Y)=bendl;else coutP(r+1,u+1)为零,中断,无值endl;coutI(X|Y)计算:endl;if(h=0)coutI(X|Y)=H(X)-H(X|Y)=c-bendl;else coutP(r+1,u+1)为零,中断,无值endl;实验二 简单信源编码方法实现 教学实验报告实验目的掌握Huffman编码方法。 实验要求1熟悉离散信源的编码方法,重点是Huffman编码方法,设计Huffman编码的数据结构和算法

7、;2编写Huffman编码的书面程序代码。实验内容离散信源的Huffman编、译码方法说明:(1)利用random函数构造一个一维离散随机变量分布P(X);(2)构造离散随机变量的概率压缩表;(3)根据概率压缩表构造Huffman编码表,并实现Huffman编码;(4)完成Huffman译码;(4)编写本次实验的实验报告。实验体会通过本次实验,掌握了离散信源最佳不等长编码的概念,掌握了哈夫曼编码的基本方法和过程及平均码长和编码效率的计算。哈夫曼编码的计算例子:给定离散信源概率分布如下:平均码长:编码效率对本信源进行了哈夫曼编码,可以得到如下的一种可能编码:附:哈夫曼编码过程的程序代码清单:(可

8、写入实验报告也可不写入)#include#include#include#include#include#include#includeusing namespace std;double *a;string *c;struct elemdouble a2;double a3;class stackint size;int top;elem *list;public:stack(const int sz=0)size=sz;top=0;list=new elemsz;stack()delete list;void clear()top=0;void push(const elem& item)

9、assert(topsize);listtop+=item;elem pop()assert(!isEmpty();return list-top;elem topValue() constassert(!isEmpty();return listtop-1;bool isEmpty() constreturn top=0;void aa(int n)double w=0;a=new doublen;srand(unsigned)time(NULL);cout随机生成归一化一维离散变量:endl;for(int i=0;in;i+)ai=rand()%50;w+=ai;for(int i=0;

10、in;i+)ai=ai/w;double p;for(int i=0;i=i;j-)if(ajaj+1)p=aj+1; aj+1=aj; aj=p;coutP(X):;for(int i=0;in;i+)cout.precision(3);coutaisetw(8);void huffman(double *a,string *c,int n)elem mp;stack s(n);double *b;b=new doublen;for(int i=0;in;i+)bi=ai;double *d;d=new doublen;for(int i=0;in;i+)di=i;double *e;e=n

11、ew doublen;for(int i=0;i=2;m-)bm-2+=bm-1;mp.a2=dm-2;mp.a3=dm-1;s.push(mp);double mp,mp1;for(int i=0;i=i;j-)if(bjbj+1)mp=bj+1; mp1=dj+1;bj+1=bj; dj+1=dj;bj=mp;dj=mp1;coutleftsetw(6)nP(X):;for(int i=0;im-1;i+)cout.precision(3);coutsetw(8)bi;while(!s.isEmpty()mp=s.pop();for(int i=0;in;i+)if(mp.a2=ei)t=

12、ci;for(int i=0;in;i+)if(mp.a2=ei)ci=t;ci+=0;else if(mp.a3=ei)ci=t;ci+=1; void main()int n;coutn;c=new stringn;aa(n);huffman(a,c,n);coutendl;coutsetw(6)各项Huffman编码为:endl;for(int i=0;in;i+)cout.precision(3);coutsetw(8)ai;cout.precision(0);coutsetw(n+4)ci;coutendl;项目三:算术编码1. 实验内容对信源概率进行算术编码。2. 数据结构与算法分

13、析累积概率的递推公式为:。3. 实验数据与实验结果本实验采用二元序列为:11111100,。实验结果:图3 算术编码实验结果4. 程序代码清单:myLength用于计算码长,myProbability用于计算的累积概率,myYouC用于计算二元序列的并累加,myYouChengR用于输出编码结果。(1) YCAgain/.h#ifndef YCAGAIN_H_INCLUDED#define YCAGAIN_H_INCLUDEDextern int myLength(double p);extern double myProbability(double *a,double p,int n);e

14、xtern double myYouC(double *a,double p,int n);extern void myYouChengR(double p, int n);#endif / YCAGAIN_H_INCLUDED/.cpp#include #include int myLength(double p) int length; double result; if(p 0) length += 1; return length;double myProbability(double *a,double p,int n) int i; double sum =1; for(i=0;

15、in; i+) if(*(a+i)=1) sum *=p; /puts(1t); if(*(a+i)=0) sum *=(1-p); /puts(0t); return sum;double myYouC(double *a, double p, int n) double sum=0; / all sum double myAn; int i; int j; for(i=0; i0) for(j=0; j=1) printf(1); p = p-1; else printf(0); i+; while(in);(2) main#include #include YCAgain.h#defin

16、e N 8int main() double aN = 1,1,1,1,1,1,0,0; double p= 0.75; double myP; double myL; double myYCP; myP = myProbability(a,p,N); printf(P: %lfn,myP); myL = myLength(myP); printf(L: %lfn,myL); myYCP = myYouC(a, p, N); printf(YCP: %lfn,myYCP); printf(Code: ); myYouChengR(myYCP, myL);项目四:香农编码1. 实验内容香农编码2

17、. 数据结构与算法分析(1) 将个信源符号按概率递减的方式进行排列:(2) 按上式计算出每个信源符号的码长。(3) 为了编成唯一可译码,计算第 个信源符号的累加概率:(4) 将累加概率用二进制表示。(5) 取对应二进制的小数点后 位构成该信源符号的二进制码字。3. 实验数据与实验结果(1) 信源概率是随机产生的。(2) 实验结果如图:图2 香农编码实验结果4. 程序代码清单:myRand产生信源随机概率,myLength计算码长,myQuickSort对信源概率排序,主函数调用。(1). myRand/ .h#ifndef MYRAND_H_INCLUDED#define MYRAND_H_I

18、NCLUDEDextern void myRand(double*, int);#endif / MYRAND_H_INCLUDED/.cpp#include #include void myRand(double *p, int n) int i=0; double sum =0; srand(time(NULL); for(i=0; in; i+) *(p+i) = rand() % 100 + 1; sum += *(p+i); for(i=0; in; i+) *(p+i) /= sum; (2)myLength/.h#ifndef MYLENGTH_H_INCLUDED#define

19、 MYLENGTH_H_INCLUDEDextern int myLength(double);#endif / MYLENGTH_H_INCLUDED/.cpp#include int myLength(double p) int length; double result; if(p 0) length += 1; return length;(3)myQuickSort/.h#ifndef MYQUICKSORT_H_INCLUDED#define MYQUICKSORT_H_INCLUDEDextern void myQuickSort(double *, int, int);#end

20、if / MYQUICKSORT_H_INCLUDED/.cppint mySortBase(double *p, int left, int right) double m_flag; double tmp; m_flag = *(p + left); while(left *(p+right) ) right-; if(m_flag *(p+right) ); tmp = *(p+right); *(p+right) = *(p+left); *(p+left) = tmp; while( m_flag pleft) left+; if(m_flag pleft) tmp = *(p+ri

21、ght); *(p+right) = *(p+left); *(p+left) = tmp; *(p+left) = m_flag; return left;void myQuickSort(double *p, int left, int right) int mid; if(leftright)mid = mySortBase(p,left,right); myQuickSort(p,left,mid-1); myQuickSort(p,mid+1,right);(4) main#include #include myQuickSort.h#include myRand.h#include

22、 myLength.h#define N 7int main() double pN = 0.20, 0.19, 0.18, 0.17, 0.15, 0.10, 0.01; double qN; int i,j; int k; /编码 长度 double b_c; / 二 进制 数 / 生成 随机数 puts(Rand:n); myRand(p, N); for(i=0; iN; i+) printf(%4.2lft, pi); puts(n); / 排序 puts(Sort:n); myQuickSort(p, 0, N-1); for(i=0; iN; i+) printf(%4.2lft

23、, pi); puts(n); /累加 概率 puts(Q:); q0 = 0; for(i=1; iN; i+) qi = qi-1 + pi-1; for(i=0; iN; i+) printf(%4.2lft, qi); puts(n); /输出 编码 for(i=0; iN; i+) printf(P%d: %4.2lft, i+1, pi); printf(Q%d: %4.2lft, i+1, qi); k = myLength(pi); b_c = 2*qi; for(j=0; j= 1) putchar(1); b_c -= 1; else putchar(0); b_c *= 2; puts(n); return 0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!