实现香农编码费诺编码杨兴勃0808060121.docx

上传人:b****6 文档编号:15319376 上传时间:2023-07-03 格式:DOCX 页数:11 大小:86.95KB
下载 相关 举报
实现香农编码费诺编码杨兴勃0808060121.docx_第1页
第1页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第2页
第2页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第3页
第3页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第4页
第4页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第5页
第5页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第6页
第6页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第7页
第7页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第8页
第8页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第9页
第9页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第10页
第10页 / 共11页
实现香农编码费诺编码杨兴勃0808060121.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实现香农编码费诺编码杨兴勃0808060121.docx

《实现香农编码费诺编码杨兴勃0808060121.docx》由会员分享,可在线阅读,更多相关《实现香农编码费诺编码杨兴勃0808060121.docx(11页珍藏版)》请在冰点文库上搜索。

实现香农编码费诺编码杨兴勃0808060121.docx

实现香农编码费诺编码杨兴勃0808060121

《信息论课程设计》

———实现香农编码、费诺编码

信计0801班

杨兴勃

01

香农编码

一、课题描述:

二、课程设计目的:

三、课程设计要求:

四、算法分析:

五、香农编码流程图:

六、程序设计代码:

七、实验结果:

八、总结:

九、参考文献:

费诺编码

一、问题描述:

二、实习目的:

三、算法分析:

四、费诺编码流程图:

五、费诺编码源程序代码:

六、费诺编码测试结果截图:

七、总结:

八、参考文献:

香农编码

一、课题描述:

对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。

二、课程设计目的:

(1)进一步熟悉香农编码算法;

(2)掌握程序设计和调试技术中数值的进制转换、数值愈字符串之间的转换等技术。

三、课程设计要求:

(1)输入:

信源符号个数

、信源的概率分布

(2)输出:

每一个信源符号对应的香农编码码字。

四、算法分析:

2.1、数据结构

分别用数组p、q、k存放输入的概率,累加概率、码字长度;

2.2、算法基本原理

给定某个信源符号的概率分布,通过以下的步骤进行香农编码:

1)信源符号按概率从大到小排列;

2)对信源符号求累加和,表达式:

Pi=Pi-1+p(xi);

3)求自信息量,确定码字长度。

自信息量I(xi)=-log(p(xi));码字长度取大于等于自信息量的最小整数;

4)将累加和用二进制表示,并取小数点后码字的长度的码。

五、香农编码流程图:

六、程序设计代码:

#include

#include

#include

#include

usingnamespacestd;

voidbubble(double*p,intn)//排序

{

for(inti=0;i

{

for(intj=i+1;j

{

if(p[i]

{

doubletemp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

}

}

voidleijia(double*p,double*pa,intn)//累加概率

{

doublesum=0.0;

for(inti=0;i

{

pa[i]=sum;

sum+=p[i];

}

}

voidlength(double*p,int*k,intn)//码字的长度

{

for(inti=0;i

{

for(intj=0;j<20;j++)

{

if(j<1-log(p[i])/log

(2)&&j>=-log(p[i])/log

(2))

k[i]=j;

}

doubleI=-log(p[i])/log

(2);

inttemp=int(I);

if(I-temp==0)k[i]=temp;

elsek[i]=temp+1;

}

}

voidcode(int*k,double*pa,string*str,intn)//求编码

{

for(inti=0;i

{

doubles=pa[i];

for(intj=0;j

{

s=2*s;

if(s>=1)

{

str[i]+="1";

s=s-1;

}

elsestr[i]+="0";

}

}

}

voidmain()

{

intn;

cout<<"信源符号个数n=";

cin>>n;

double*p=newdouble[n];

cout<<"信源符号的概率依次为:

";

for(inti=0;i

{

cin>>p[i];

}

bubble(p,n);

double*pa=newdouble[n];

leijia(p,pa,n);

int*k=newint[n];

length(p,k,n);

string*str=newstring[n];

code(k,pa,str,n);

cout<

<<"码字"<

for(i=0;i

{

cout<

}

}

七、实验结果:

八、总结:

通过本次上机,我对香农编码有了进一步的了解,掌握了其具体过程的实现方法,也对新源编码这一概念有了更加深刻的理解,在编码的过程中,是我对C以及C++语言的基础知识掌握更加牢固,特别是巩固了对输出流格式控制的相关知识,总而言之,这次课程设计实践让我受益匪浅。

九、参考文献:

1.《信息论与编码》(第二版)曹雪虹张宗橙编著,清华大学出版社

2.《C/C++语言程序设计》龚尚福主编,中国矿业大学出版社

费诺编码

一、问题描述:

对于给定的信源的概率分布,按照费诺编码的方法进行计算机实现。

二、实习目的:

掌握通过计算机实现费诺编码。

三、算法分析:

3.1、数据结构

本程序采用一个结构体的数据类型来存储费诺编码的相关信息,具体的数据结构如下:

typedefstruct

{

chardata;

floatP;

}Fano[MAX+1];//需要编码的结构体

3.2、算法基本原理

1)将概率按从大到小的顺序排列;

2)按编码进制数将概率分组,使每组概率和尽可能接近或相等;

3)给每组分配一位码元;

4)将每一分组再按同样原则划分,重复2)和3),直到概率不再可分为止。

四、费诺编码流程图:

五、费诺编码源程序代码:

#include

#include

#include

#include

usingnamespacestd;

//全局变量定义

intn;

string*sign;

double*p;

string*code;

voidfano(inta,intb)//费诺编码函数

{

if((b-a)>=1)//判断该组中符号个数是否大于2

{

doublesum=0;

for(inti=a;i<=b;i++)

sum+=p[i];//计算该组概率累加和

doubles1=0,*s=newdouble[10];

for(i=a;i<=b;i++)

{

s1+=p[i];s[i]=fabs(2*s1-sum)/sum;

}

doublemin=s[a];intc;

for(i=a;i<=b;i++)

if(s[i]<=min)

{

min=s[i];c=i;//定位使两组概率和尽可能相近或相等的位置c

}

for(i=a;i<=b;i++)

{

if(i<=c)code[i]+="0";//码字加"0"

elsecode[i]+="1";//码字加"1"

}

//判断分组点位置,进而分情况自身调用

if(c==a)

fano(c+1,b);

elseif(c==b-1)

fano(a,c);

else

{fano(a,c);fano(c+1,b);}

}

}

voidmain()

{

cout<<"请输入信源符号个数n:

";

cin>>n;

p=newdouble[n];

sign=newstring[n];

code=newstring[n];

cout<<"请依次输入信源符号:

";

for(inti=0;i>sign[i];

cout<<"请依次输入信源符号的概率:

";

for(i=0;i>p[i];

for(i=0;i

for(intj=i+1;j

if(p[i]

{

doubletemp=p[i];p[i]=p[j];p[j]=temp;

stringm=sign[i];sign[i]=sign[j];sign[j]=m;

}

fano(0,n-1);//费诺编码

cout<

for(i=0;i

cout<

delete[]p;delete[]sign;delete[]code;

}

六、费诺编码测试结果截图:

七、总结:

费诺编码方法不是唯一。

费诺码比较适合于对分组概率相等或相近的新源编码。

费诺码也可以编。

m进制码,但m越大,信源的符号数越多,可能的编码方式就越多,编码过程就越复杂,有时短吗未必能得到充分利用。

一般情况下,当信源符号个数越多,编码效率就越多低,信源符号相等或越接近,编码效率越高。

八、参考文献:

1.《信息论与编码》(第二版)曹雪虹张宗橙编著,清华大学出版社

2.《C/C++语言程序设计》龚尚福主编,中国矿业大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2