文档库 最新最全的文档下载
当前位置:文档库 › 实验六信源编码仿真实现

实验六信源编码仿真实现

实验六信源编码仿真实现
实验六信源编码仿真实现

实验六 信源编码仿真实现

一、实验目的

理解信源编码的思想,掌握信源编码的编程实现原理及技术。

二、实验原理

信源编码:以提高通信有效性为目的的编码。通常通过压缩信源的冗余度来实现。采用的一般方法是压缩每个信源符号的平均比特数或信源的码率。即同样多的信息用较少的码率传送,使单位时间内传送的平均信息量增加,从而提高通信的有效性。

1 信源编码的分类:离散信源编码、连续信源编码和相关信源编码三类。

离散信源编码:独立信源编码,– 可做到无失真编码;

连续信源编码:独立信源编码,– 只能做到限失真信源

编码;

相关信源编码:非独立信源编码。

()log l H S N r ε

+≥

(等长信源编码定理) 一个熵为H(S)的离散无记忆信源,若对其N 次扩展信源进行等长r 元编码,码长为l ,对于任意 大于0,只要满足

当N 无穷大时,则可以实现几乎无失真编码,反之,若:

()2log l H S N r ε

-≤

则不可能实现无失真编码,当N 趋向于无穷大是,译码错误率接近于1。

log ()l r NH S >

若条件式可写成:

左边表示长为 的码符号所能载荷的最大信息量,而右边代表长为N 的序列平均携带的信息量。因此,只要码字传输的信息量大于信源序列携带的信息量,总可以实现无失真编码 。

log ()l

r H S N ε≥+

若条件式可写成:

'log l

R r N =

为了衡量编码效果,引进

'

()()

log H S H S l R r N η=

=

最佳编码效率为:

1()

H S η

εη

-=

'()()()H S H S R H S ηε=

=+

12,,...,q

W W W

1

212......

q n

a a a X p p p P ????=????????

12,,...,q

l l l

1

()q

i i

i L P S l ==∑

无失真变长信源编码定理(香农第一定理)

N S ()N H S N S

离散无记忆信源S 的N 次扩展信源 ,其熵为 ,并且编

码器的码元符号集为A : {a1,a2,a3….aq}。对信源 进行编码,总可以找到一种编码方法,构成唯一可译码,使信源S 中每个符号si 所需要的平均码长满足

()()1

log log N H S L H S r N r N ≤<+

lim ()

r N L H S →∞

=

N →∞

信源编码分为霍夫曼编码、费诺编码及香农-费诺-埃利斯编码,它们各有它们的特点:

香农码、费诺码、哈夫曼码都考虑了信源的统计特性,使经常出现的信源符号对应较短的码字,使信源的平均码长缩短,从而实现了对信源的压缩;

香农码有系统的、惟一的编码方法,但在很多情况下编码效率不是很高;

费诺码和哈夫曼码的编码方法都不惟一;

费诺码比较适合于对分组概率相等或接近的信源编码; 哈夫曼码对信源的统计特性没有特殊要求,编码效率比较高,对编码设备的要求也比较简单,因此综合性能优于香农码和费诺码。 下例以香农-费诺-埃利斯编码原理为例:

设离散无记忆信源

121

1

2,,,,,,()1

(),(),

,

(),

,

()()n

i n i

i i n x x x x X p x p x p x p x p x P X =??

??==????????

二进制香农码的编码步骤如下:

a) 将信源符号按概率从大到小的顺序排列,b) 为方便起见,c)

令 p(x1)≥ p(x2)≥…≥ p(xn)

b) 令p(x0)=0,e) 用pa(xj),f) j=i+1表示第i 个码字的累加概率,g) 则:

1.

1

()(),1,2,

,j a j i

i p x p x j n

-==

=∑

c) 确定满足下列不i) 等式的整数ki ,j) 并令ki 为第i 个码字的

长度 d) -l)

log2 p(xn)≤ki<-m) log2 p(xn)+1

e) 将pa(xj) 用二进制表示,o) 并取小数点后ki 位作为符号xi 的

编码。

例 有一单符号离散无记忆信源

123456,

,,,,()0.250.250.200.150.100.05X x x x x x x P X ????=????????

对该信源编二进制香农码。其编码过程如下表所示

1) 计算出给定信源香农码的平均码长

0.2522(0.20.15)30.1040.055 2.7(/)K =??++?+?+?=比特符号

2)若对上述信源采用等长编码,要做到无失真译码,每个符号至少要用3个比特表示。相比较,香农编码对信源进行了压缩。 3)由离散无记忆信源熵定义,可计算出:

6

21()()log () 2.42(/)

i i i H X p x p x ==-=∑比特符号

4)对上述信源采用香农编码的信息率为

222.7log log 2 2.71,2

1

K R m L m L =

====这里

5)编码效率为信源熵和信息率之比。则

() 2.4289.63%2.7H X R η=

==

6)可以看出,编码效率并不是很高。

三、实验内容

1.随机产生二进制信源消息序列。2.统计2、4次扩展信源的消息符号概率。3.根据相应的概率进行信源编码。4.生成编码序列。

5.计算编码效率。

6.对编码序列进行译码。

四、程序流程图

五、程序

#include

#include//数学函数库

#include //标准工具库,要用到其中的rand()

#include //时间库,要用到里面的时间来做随机数的种子

main()

{

printf(" 对随机产生二进制信源消息序列进行香农-费诺-埃利斯编码\n ");

void twosignal(int a[],int b[]);//函数声明

void foursignal(int a[],int b[]);//函数声明

int a[100],BMa[100],b1[50],b2[25];

int i,j,k,r,out;

srand(time(NULL));//srand是设计随机数的种子,作用是使每次产生的随机数不一样,time(NULL)返回

printf("随机产生二进制信源消息序列:\n");

for(i=0;i<=99;i++)//随机产生0—99数100个数

{

r=rand()%2;

if(r==0) out=0;

else out=1;

printf("%d\t",out);

a[i]=out;

}

printf("\n");

for(i=0;i<=49;i++)

b1[i]=a[i*2]*2+a[2*i+1];

twosignal(a,b1);//统计2次扩展信源的消息符号概率

for(j=0;j<=24;j++)

b2[j]=a[j*4]*8+a[j*4+1]*4+a[j*4+2]*2+a[j*4+3];

foursignal(a,b2);//统计4次扩展信源的消息符号概率

printf("编码后的序列为:\n");

for(i=0,j=0;i<100;i+=4)

{if (a[i]==0&&a[i+1]==0&&a[i+2]==0&&a[i+3]==0)

{printf("1010\t");BMa[j]=1,BMa[j+1]=0,BMa[j+2]=1,BMa[j+3]=0;j+=4;}

else if (a[i]==0&&a[i+1]==0&&a[i+2]==0&&a[i+3]==1)

{printf("0010\t");BMa[j]=0,BMa[j+1]=0,BMa[j+2]=1,BMa[j+3]=0;j+=4;}

else if (a[i]==0&&a[i+1]==0&&a[i+2]==1&&a[i+3]==0)

{printf("0110\t");BMa[j]=0,BMa[j+1]=1,BMa[j+2]=1,BMa[j+3]=0;j+=4;}

else if (a[i]==0&&a[i+1]==0&&a[i+2]==1&&a[i+3]==1)

{printf("0100\t");BMa[j]=0,BMa[j+1]=1,BMa[j+2]=0,BMa[j+3]=0;j+=4;}

else if (a[i]==0&&a[i+1]==1&&a[i+2]==0&&a[i+3]==0)

{printf("1110\t");BMa[j]=1,BMa[j+1]=1,BMa[j+2]=1,BMa[j+3]=0;j+=4;}

else if (a[i]==0&&a[i+1]==1&&a[i+2]==0&&a[i+3]==1)

{printf("0101\t");BMa[j]=0,BMa[j+1]=1,BMa[j+2]=0,BMa[j+3]=1;j+=4;}

else if (a[i]==0&&a[i+1]==1&&a[i+2]==1&&a[i+3]==0)

{printf("000\t");BMa[j]=0,BMa[j+1]=0,BMa[j+2]=0;j+=3;}

else if (a[i]==0&&a[i+1]==1&&a[i+2]==1&&a[i+3]==1)

{printf("10110\t");BMa[j]=1,BMa[j+1]=0,BMa[j+2]=1,BMa[j+3]=1,BMa[j+4]=0;j+=5;} else if (a[i]==1&&a[i+1]==0&&a[i+2]==0&&a[i+3]==0)

{printf("1000\t");BMa[j]=1,BMa[j+1]=0,BMa[j+2]=0,BMa[j+3]=0;j+=4;}

else if (a[i]==1&&a[i+1]==0&&a[i+2]==0&&a[i+3]==1)

{printf("0011\t");BMa[j]=0,BMa[j+1]=0,BMa[j+2]=1,BMa[j+3]=1;j+=4;}

else if (a[i]==1&&a[i+1]==0&&a[i+2]==1&&a[i+3]==0)

{printf("1001\t");BMa[j]=1,BMa[j+1]=0,BMa[j+2]=0,BMa[j+3]=1;j+=4;}

else if (a[i]==1&&a[i+1]==0&&a[i+2]==1&&a[i+3]==1)

{printf("1100\t");BMa[j]=1,BMa[j+1]=1,BMa[j+2]=0,BMa[j+3]=0;j+=4;}

else if (a[i]==1&&a[i+1]==1&&a[i+2]==0&&a[i+3]==0)

{printf("10111\t");BMa[j]=1,BMa[j+1]=0,BMa[j+2]=1,BMa[j+3]=1,BMa[j+4]=1;j+=5;} else if (a[i]==1&&a[i+1]==1&&a[i+2]==0&&a[i+3]==1)

{printf("1111\t");BMa[j]=1,BMa[j+1]=1,BMa[j+2]=1,BMa[j+3]=1;j+=4;}

else if (a[i]==1&&a[i+1]==1&&a[i+2]==1&&a[i+3]==0)

{printf("1101\t");BMa[j]=1,BMa[j+1]=1,BMa[j+2]=0,BMa[j+3]=1;j+=4;}

else if (a[i]==1&&a[i+1]==1&&a[i+2]==1&&a[i+3]==1)

{printf("0111\t");BMa[j]=0,BMa[j+1]=1,BMa[j+2]=1,BMa[j+3]=1;j+=4;}

}

k=j;

printf("\n");

printf("\n");

printf("译码后序列:\n");

for(j=0;j

{if(BMa[j]==0&&BMa[j+1]==0&&BMa[j+2]==0){printf("0110");j+=3;}

if(BMa[j]==1&&BMa[j+1]==0&&BMa[j+2]==1&&BMa[j+3]==0){printf("0000\t");j+ =4;}

else

if(BMa[j]==0&&BMa[j+1]==0&&BMa[j+2]==1&&BMa[j+3]==0){printf("0001\t");j+ =4;}

else

if(BMa[j]==0&&BMa[j+1]==1&&BMa[j+2]==1&&BMa[j+3]==0){printf("0010\t");j+ =4;}

else

if(BMa[j]==0&&BMa[j+1]==1&&BMa[j+2]==0&&BMa[j+3]==0){printf("0011\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==1&&BMa[j+2]==1&&BMa[j+3]==0){printf("0100\t");j+ =4;}

else

if(BMa[j]==0&&BMa[j+1]==1&&BMa[j+2]==0&&BMa[j+3]==1){printf("0101\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==0&&BMa[j+2]==0&&BMa[j+3]==0){printf("1000\t");j+ =4;}

else

if(BMa[j]==0&&BMa[j+1]==0&&BMa[j+2]==1&&BMa[j+3]==1){printf("1001\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==0&&BMa[j+2]==0&&BMa[j+3]==1){printf("1010\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==1&&BMa[j+2]==0&&BMa[j+3]==0){printf("1011\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==1&&BMa[j+2]==1&&BMa[j+3]==1){printf("1101\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==1&&BMa[j+2]==0&&BMa[j+3]==1){printf("1110\t");j+

else

if(BMa[j]==0&&BMa[j+1]==1&&BMa[j+2]==1&&BMa[j+3]==1){printf("1111\t");j+ =4;}

else

if(BMa[j]==1&&BMa[j+1]==0&&BMa[j+2]==1&&BMa[j+3]==1&&BMa[j+4]==0){p rintf("0111\t");j+=5;}

else

if(BMa[j]==1&&BMa[j+1]==0&&BMa[j+2]==1&&BMa[j+3]==1&&BMa[j+4]==1){p rintf("1100\t");j+=5;}

}

printf("\n");

}

//--------统计2次扩展信源的消息符号概率函数--------------//

void twosignal(int a[],int b[])//统计2次扩展信源的消息符号概率函数

{

void encode(float *a,int n);//编码函数声明

int j,count[4]={0};

float probability[4];

for(j=0;j<=49;j++)

{

switch(b[j])

{

case 0:count[0]++;break;

case 1:count[1]++;break;

case 2:count[2]++;break;

case 3:count[3]++;break;

}

//----------已完成统计工作,进行概率计算----------------//

}

for(j=0;j<=3;j++)

probability[j]=count[j]/50.0;

}

printf("%d\t随机输出二次扩展信源符号之一00的概率为:%5.2f\n",count[0],probability[0]);

printf("%d\t随机输出二次扩展信源符号之一01的概率为:%5.2f\n",count[1],probability[1]);

printf("%d\t随机输出二次扩展信源符号之一10的概率为:%5.2f\n",count[2],probability[2]);

printf("%d\t随机输出二次扩展信源符号之一11的概率为:%5.2f\n",count[3],probability[3]);

printf("\n\n\n对随机产生的二次扩展信源符号进行香农-费诺-埃利斯编码如下:\n");

encode(probability,4);//------------编码--------------//

}

//-----------统计4次扩展信源的消息符号概率函数------------//

void foursignal(int a[],int b[])//统计4次扩展信源的消息符号概率函数

{

void encode(float *a,int n);//编码函数声明

int j,count[16]={0};

float probability2[16];

for(j=0;j<=24;j++)

{

switch(b[j])

{

case 0:count[0]++;break;

case 1:count[1]++;break;

case 2:count[2]++;break;

case 3:count[3]++;break;

case 4:count[4]++;break;

case 5:count[5]++;break;

case 6:count[6]++;break;

case 7:count[7]++;break;

case 8:count[8]++;break;

case 9:count[9]++;break;

case 10:count[10]++;break;

case 11:count[11]++;break;

case 12:count[12]++;break;

case 13:count[13]++;break;

case 14:count[14]++;break;

case 15:count[15]++;break;

}

//----------------已完成统计工作,进行概率计算--------------//

}

for(j=0;j<=15;j++)

{

probability2[j]=count[j]/25.0;

}

printf("\n");

printf("随机输出四次扩展信源符号之一0000的概率为:%5.2f\n", probability2[0]); printf("随机输出四次扩展信源符号之一0001的概率为:%5.2f\n", probability2[1]); printf("随机输出四次扩展信源符号之一0010的概率为:%5.2f\n", probability2[2]); printf("随机输出四次扩展信源符号之一0011的概率为:%5.2f\n", probability2[3]); printf("随机输出四次扩展信源符号之一0100的概率为:%5.2f\n", probability2[4]); printf("随机输出四次扩展信源符号之一0101的概率为:%5.2f\n", probability2[5]); printf("随机输出四次扩展信源符号之一0110的概率为:%5.2f\n", probability2[6]); printf("随机输出四次扩展信源符号之一0111的概率为:%5.2f\n", probability2[7]); printf("随机输出四次扩展信源符号之一1000的概率为:%5.2f\n", probability2[8]); printf("随机输出四次扩展信源符号之一1001的概率为:%5.2f\n", probability2[9]); printf("随机输出四次扩展信源符号之一1010的概率为:%5.2f\n", probability2[10]); printf("随机输出四次扩展信源符号之一1011的概率为:%5.2f\n", probability2[11]); printf("随机输出四次扩展信源符号之一1100的概率为:%5.2f\n", probability2[12]); printf("随机输出四次扩展信源符号之一1101的概率为:%5.2f\n", probability2[13]); printf("随机输出四次扩展信源符号之一1110的概率为:%5.2f\n", probability2[14]); printf("随机输出四次扩展信源符号之一1111的概率为;%5.2f\n", probability2[15]);

printf("\n\n\n对随机产生的四次扩展信源符号进行香农-费诺-埃利斯编码如下:\n");

encode(probability2,16);//------------编码--------------//

}

//--------------香农-费诺-埃利斯编码--------------//

void encode(float *a,int n)//香农-费诺-埃利斯编码

{

float sum=0.00,averagelength;//定义变量码的平均码长

float entropy=0.0,efficiency; /*定义变量信源的熵即平均信息量以及变量此编码的效率*/

float modifiedp[16];//定义存放修正累积分布概率的数组

int i,j,length[16],remo[1024];

for(i=0;i

{ //-------求每个信源符号的修正的累积分布概率-----------//

if(i==0)

modifiedp[i]=a[i];

else

for(j=i-1,modifiedp[i]=0.5*a[i];j>=0;j--)

modifiedp[i]=modifiedp[i]+a[j];

//------------求每个信源符号的修正的累积分布概率-----------//

if(a[i]!=0.00)

length[i]=(int)(log(1.0/a[i])/log(2.0)+1);//--------------求每个信源符号的码长------------//

else length[i]=1;

sum=sum+length[i];

}

averagelength=sum/n;//求此码的平均码长

for(i=0;i

{ if(a[i]!=0.00)

entropy=entropy+a[i]*(log(1.0/a[i])/log(2.0)); //求出信源的熵即平均信息量

else entropy=entropy;

}

//--------------开始输出各个信源符号生成编码序列--------------//

printf("输出各个信源符号生成编码序列: \n",j+1);

for(j=0;j

{

for(i=0;i

{

remo[i]=(int)(modifiedp[j]*2);

printf("%d",remo[i]);

if(remo[i]==0)

modifiedp[j]=modifiedp[j]*2;

else

modifiedp[j]=modifiedp[j]*2-1;

}

printf("\n");

}

efficiency=averagelength/entropy;//求出编码的效率

printf("信源的信息熵为%5.2f 比特每信源符号\n",entropy);

printf("码的平均码长为%5.2f 二元码符号每信源符号\n",averagelength); printf("编码的效率为η=%5.2f\n",efficiency);

//--------------结束--------------//

}

六、实验结果

七、实验分析

通过实验结果看出,香农-费诺-埃利斯编码,实现了用较少的码率来传送同样多的信息,增加了单位时间内传送的信息量,从而通信系统的有效性。但香农码有系统的、惟一的编码方法,但在很多情况下编码效率不是很高。

八、实验总结

实验编程实在是太难了,我经过上网查看多个资料,借鉴他人编程,在此基础上通过自己参照理解终于写出了此程序,进一步理解信源编码的思想,掌握信源编码的编程实现原理及技术。

述评信源编码标准的历史沿革

自从我国广电进入数字化变革以来。在卫星广播系统.有线电视系统.电视台制播系统的数字化初期.人们 毫无争议地选择了MPEG-2信源编码标准.这是一个历史 的必然。而今.全国乃至全球的数字化变革正在不断深化. 涉及到广电的各个业务角落,甚至深入到网络融合的新媒 体业务中;所到之处.广大用户切身感受到的是数字化带 来的感官痛快,但却给工程技术开发人员造成了心理”郁 闷”.倍感头痛的是信源编码标准的“两难选择”:是采用 MPEG一2,还是采用第二代信源编码标准.或是H.264,或 是AVS国标。工程实践中的”两难”出现的频率极高.无 论数字电视地面广播国标的推广、奥运高清节目制作和传 播、移动多媒体手机电视,还是在直播卫星系统.以及电 信运营的IPl’v等等新媒体.新业务中.都会出现这种“两 难“。因此,本文试图透过评述信源编码标准的历史演进, 来分析和推理面向未来信源编码大趋势的现实对策。 一、国际信源编码标准的演进 从20世纪80年代开始.现代信源编码标准进入实质性研究阶段(不包括算法和体系的研究)。1984年以后,由 现已并入nTU-T的国际电报电话咨询委员会【ccrvr)和 国际标准化机构ISO所属MPEG组织制定了一系列信源编46D’GITCW200e’1 辽宁电视台赵季伟 码技术标准和建议。其中包括面向视频会议的H.261。H.262建议和面向视频广播的MPEG一1/2/3标准.这些建议和标准的制订有力地推动了数字电视和多媒体技术的实用化和产业化。 1984年ccrvr第15研究组成立了一个专家组.专门研究电视电话的信源编码问题.经过5年以上的研究和努力,在1990年12月完成和批准了CCITT推荐书H.261。在H.261的基础上.1996年ITU—T完成了H.263编码标准,在很少增加编码算法复杂度的基础上.H.263能够以更低的速率提供更好的图像质量。目前,H.263编码是D视频通信采用最多的—种信源编码方法。1998年Ⅱu-T推出的H.263+是H.263建议的第二版.它提供了12个新的可协商模式和其他特征.进一步提高了压缩编码性能。 ccrvI"H.261标准始于1984年.实质完成于1989年。虽然它是MPEG-x的先驱.对MPEG.1保有共同的数据结构.编码工具和语法元素,并秉承了继承关系,但二者并非完全后向兼容.MPEG一1可看作是H.26l的扩展集。MPEG-1的发展始于1988年.实质完成于1992年。MPEG-2可被看作是MPEG一1的扩展集,始于1990年,实质完成于1994年。已经归属于ⅡU—T的H.263始于1992年.第一版 完成于1995年。盯U-T在H.263标准之后,于1997年提出

霍夫曼编码的matlab实现(信源编码实验)

重庆交通大学信息科学与工程学院综合性设计性实验报告 专业班级:通信工程2012级1班 学号:631206040118 姓名:王松 实验所属课程:信息论与编码 实验室(中心):软件与通信实验中心 指导教师:黄大荣 2015年4月

霍夫曼编码的matlab实现 一、实验目的和要求。 利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。 本实验用Matlab语言编程实现霍夫曼(Huffman)编码。 二、实验原理。 霍夫曼(Huffman)编码算法是满足前缀条件的平均二进制码长最短的编-源输出符号,而将较短的编码码字分配给较大概率的信源输出。算法是:在信源符号集合中,首先将两个最小概率的信源输出合并为新的输出,其概率是两个相应输出符号概率之和。这一过程重复下去,直到只剩下一个合并输出为止,这个最后的合并输出符号的概率为1。这样就得到了一张树图,从树根开始,将编码符号1 和0 分配在同一节点的任意两分支上,这一分配过程重复直到树叶。从树根到树叶途经支路上的编码最后就构成了一组异前置码,就是霍夫曼编码输出。离散无记忆信源: 例如 U u 1u 2 u 3 u 4 u 5 P(U) = 0.4 0.2 0.2 0.1 0.1

通过上表的对信源缩减合并过程,从而完成了对信源的霍夫曼编码。 三、实验步骤 分为两步,首先是码树形成过程:对信源概率进行合并形成编码码树。然后是码树回溯过程:在码树上分配编码码字并最终得到霍夫曼编码。 1、码树形成过程:将信源概率按照从小到大顺序排序并建立相应的位置索引。然后按上述规则进行信源合并,再对信源进行排序并建立新的位置索引,直到合并结束。在这一过程中每一次都把排序后的信源概率存入矩阵G中,位置索引存入矩阵Index中。这样,由排序之后的概率矩阵G以及索引矩阵Index就可以恢复原概率矩阵P了,从而保证了回溯过程能够进行下去。 2、码树回溯过程:在码树上分配编码码字并最终得到Huffman 编码。从索引矩阵M 的末行开始回溯。 (1) 在Index的末行2元素位置填入0和1。 (2) 根据该行索引1 位置指示,将索引1 位置的编码(‘1’)填入上一行的第一、第二元素位置,并在它们之后分别添加‘0’和‘1’。 (3) 将索引不为‘1’的位置的编码值(‘0’)填入上一行的相应位置(第 3 列)。 (4) 以Index的倒数第二行开始向上,重复步骤(1) ~(3),直到计算至Index 的首行为止。 四、程序代码: %取得信源概率矩阵,并进行合法性判断 clear; P=input('请输入信源概率向量P='); N=length(P); for component=1:1:N

信源编码的基本原理及其应用..

信源编码的基本原理及其应用 课程名称通信原理Ⅱ 专业通信工程 班级******* 学号****** 学生姓名***** 论文成绩 指导教师***** ******

信源编码的基本原理及其应用 信息论的理论定义是由当代伟大的数学家美国贝尔实验室杰出的科学家香农在他1948 年的著名论文《通信的数学理论》所定义的,它为信息论奠定了理论基础。后来其他科学家,如哈特莱、维纳、朗格等人又对信息理论作出了更加深入的探讨。使得信息论到现在形成了一套比较完整的理论体系。 信息通过信道传输到信宿的过程即为通信,通信中的基本问题是如何快速、准确地传送信息。要做到既不失真又快速地通信,需要解决两个问题:一是不失真或允许一定的失真条件下,如何提高信息传输速度(如何用尽可能少的符号来传送信源信息);二是在信道受到干扰的情况下,如何增加信号的抗干扰能力,同时又使得信息传输率最大(如何尽可能地提高信息传输的可靠性)。这样就对信源的编码有了要求,如何通过对信源的编码来实现呢? 通常对于一个数字通信系统而言,信源编码位于从信源到信宿的整个传输链路中的第一个环节,其基本目地就是压缩信源产生的冗余信息,降低传递这些不必要的信息的开销,从而提高整个传输链路的有效性。在这个过程中,对冗余信息的界定和处理是信源编码的核心问题,那么首先需要对这些冗余信息的来源进行分析,接下来才能够根据这些冗余信息的不同特点设计和采取相应的压缩处理技术进行高效的信源编码。简言之,信息的冗余来自两个主要的方面:首先是信源的相关性和记忆性。这类降低信源相关性和记忆性编码的典型例子有预测编码、变换编码等;其次是信宿对信源失真具有一定的容忍程度。这类编码的直接应用有很大一部分是在对模拟信源的量化上,或连续信源的限失真编码。可以把信源编码看成是在有效性和传递性的信息完整性(质量)之间的一种折中有段。 信源编码的基本原理: 信息论的创始人香农将信源输出的平均信息量定义为单消息(符号)离散信源的信息熵: 香农称信源输出的一个符号所含的平均信息量为 为信源的信息熵。 通信原理中对信源研究的内容包括3个方面: (1)信源的建模 信源输出信号的数学描述已有成熟的理论——随机过程,一般的随机过程理∑=-=L i i i x p x p x H 12) (log )()()(x H

数字通信中的信源编码和信道编码.(优选)

数字通信中的信源编码和信道编码 摘要:如今社会已经步入信息时代,在各种信息技术中,信息的传输及通信起着支撑作用。而对于信息的传输,数字通信已经成为重要的手段。本论文根据当今现代通信技术的发展,对信源编码和信道编码进行了概述性的介绍. 关键词:数字通信;通信系统;信源编码;信道编码 Abstract:Now it is an information society. In the all of information technologies, transmission and communication of information take an important effect. For the transmission of information, Digital communication has been an important means. In this thesis we will present an overview of source coding and channel coding depending on the development of today’s communica tion technologies. Key Words:digital communication; communication system; source coding; channel coding 1.前言 通常所谓的“编码”包括信源编码和信道编码。编码是数字通信的必要手段。使用数字信号进行传输有许多优点, 如不易受噪声干扰, 容易进行各种复杂处理, 便于存贮, 易集成化等。编码的目的就是为了优化通信系统。一般通信系统的性能指标主要是有效性和可靠性。所谓优化,就是使这些指标达到最佳。除了经济性外,这些指标正是信息论研究的对象。按照不同的编码目的,编码可主要分为信源编码和信道编码。在本文中对此做一个简单的介绍。 2.数字通信系统 通信的任务是由一整套技术设备和传输媒介所构成的总体——通信系统来完成的。电子通信根据信道上传输信号的种类可分为模拟通信和数字通信。最简单的数字通信系统模型由信源、信道和信宿三个基本部分组成。实际的数字通信系统模型要比简单的数字通信系统模型复杂得多。数字通信系统设备多种多样,综合各种数字通信系统,其构成如图2-l所示。 图2-1 数字通信系统模型 信源编码是以提高通信有效性为目的的编码。通常通过压缩信源的冗余度来实现。采用的一般方法是压缩每个信源符号的平均比特数或信源的码率。 信道,通俗地说是指以传输媒质为基础的信号通路。具体地说,信道是指由有线或无线电线路提供的信号通路。信道的作用是传输信号,它提供一段频带让信号通过,同时又给信号加以限制和损害。 信道编码是以提高信息传输的可靠性为目的的编码。通常通过增加信源的冗余度来实现。采用的一般方法是增大码率或带宽。与信源编码正好相反。在计算机科学领域,信道编

第四章 信源编码 习题解答

第四章信源编码 习题解答 1、一个信源由 1) 哪些是非奇异码?哪些是唯一可译码?哪些是即时码? 2) 分别计算每个唯一可译码的平均码长和编码效率。 解:1)A 、B 、C 、D 、E 、F 是非奇异码。A 、B 、C 、F 是唯一可译码(E 不满足克拉夫特不等式)。A 、C 、F 是即时码(B 是续长码)。 3) 编码A : 平均码长:3A L = 码元/消息 信源熵:111111 ()lb lb 4lb 222441616 H X =---?=比特/消息 编码效率:max ()/2/3 66.7%lb21 A H H X L H η====码码 编码B 和C : 平均码长:111111 23456 2.1252416161616 B C L L ==+?+?+?+?+?= 码元/消息 编码效率:max ()/2/2.125 94.1%lb21 B C H H X L H ηη=====码码 编码F : 平均码长:11 1234 2.524 16F L ??=? +?+?= ??? 码元/消息 编码效率:max ()/2/2.5 80%lb21 F H H X L H η====码码 2、离散无记忆信源X 的概率空间为:1 234567()0.200.190.180.170.150.100.01X x x x x x x x p X ????=???????? 1)对其进行费诺编码,并计算其编码效率; 2)对其进行哈夫曼编码,并将其编码效率与费诺编码相比较。

解:1)费诺编码: 平均码长:()()()0.20.1720.190.180.1530.10.014 2.74L =+?+++?++?=码元/符号 信源熵: ()0.20lb0.200.19lb0.190.18lb0.180.17lb0.170.15lb0.150.1lb0.10.01lb0.01 2.60/874H X =-------= 比特符号 编码后平均码元熵:() 2.60874 0.95212.74H X H L ===码比特/码元 编码效率:max 0.9521 95.21%lb2 H H η= ==码码 2)哈夫曼编码: 码长 码字 信源X p (X ) 2 10 x 1 2 11 x 2 3 000 x 3 3 001 x 4 3 010 x 5 4 0110 x 6 4 0111 x 7 平均码长:()()()0.20.1920.180.170.1530.10.014 2.72L =+?+++?++?=码元/符号 编码后平均码元熵:() 2.60874 0.95912.72H X H L ===码比特/码元 编码效率:max 0.9591 95.91%lb2 H H η= ==码码 与费诺编码相比,哈夫曼编码的编码效率要高于费诺编码。 一般情况下哈夫曼编码效率较高,但费诺编码如果每次划分概率很接近,则效率也很高。

信源编码的基本原理及其应用讲课稿

信源编码的基本原理 及其应用

信源编码的基本原理及其应用 课程名称通信原理Ⅱ 专业通信工程 班级 ******* 学号 ****** 学生姓名 ***** 论文成绩 指导教师 ***** ******

信源编码的基本原理及其应用 信息论的理论定义是由当代伟大的数学家美国贝尔实验室杰出的科学家香农在他1948 年的著名论文《通信的数学理论》所定义的,它为信息论奠定了理论基础。后来其他科学家,如哈特莱、维纳、朗格等人又对信息理论作出了更加深入的探讨。使得信息论到现在形成了一套比较完整的理论体系。 信息通过信道传输到信宿的过程即为通信,通信中的基本问题是如何快速、准确地传送信息。要做到既不失真又快速地通信,需要解决两个问题:一是不失真或允许一定的失真条件下,如何提高信息传输速度(如何用尽可能少的符号来传送信源信息);二是在信道受到干扰的情况下,如何增加信号的抗干扰能力,同时又使得信息传输率最大(如何尽可能地提高信息传输的可靠性)。这样就对信源的编码有了要求,如何通过对信源的编码来实现呢? 通常对于一个数字通信系统而言,信源编码位于从信源到信宿的整个传输链路中的第一个环节,其基本目地就是压缩信源产生的冗余信息,降低传递这些不必要的信息的开销,从而提高整个传输链路的有效性。在这个过程中,对冗余信息的界定和处理是信源编码的核心问题,那么首先需要对这些冗余信息的来源进行分析,接下来才能够根据这些冗余信息的不同特点设计和采取相应的压缩处理技术进行高效的信源编码。简言之,信息的冗余来自两个主要的方面:首先是信源的相关性和记忆性。这类降低信源相关性和记忆性编码的典型例子有预测编码、变换编码等;其次是信宿对信源失真具有一定的容忍程度。这类编码的直接应用有很大一部分是在对模拟信源的量化上,或连续信源的限失真编码。可以把信源编码看成是在有效性和传递性的信息完整性(质量)之间的一种折中有段。 信源编码的基本原理: 信息论的创始人香农将信源输出的平均信息量定义为单消息(符号)离散信源的信息熵: 香农称信源输出的一个符号所含的平均信息量为 为信源的信息熵。 通信原理中对信源研究的内容包括3个方面: ∑=-=L i i i x p x p x H 12) (log )()() (x H

霍夫曼信源编码实验报告

实验1:霍夫曼信源编码综合设计 【实验目的】 通过本专题设计,掌握霍夫曼编码的原理和实现方法,并熟悉利用C语言进行程序设计,对典型的文本数据和图像数据进行霍夫曼编解码。 【预备知识】 1、熵的概念,霍夫曼编码原则 2、数据结构和算法设计 3、C(或C++)编程语言 【实验环境】 1、设备:计算机一台 2、软件:C程序编译器 【设计要求】 根据霍夫曼编码原则,利用C语言设计并实现霍夫曼编码和解码程序,要求能够对给出的典型文本数据和图像数据进行霍夫曼编解码,并计算相应的熵和压缩比。 【实验原理】 Huffman编码属于熵编码的方法之一,是根据信源符号出现概率的分布特性而进行的压缩编码。 Huffman编码的主要思想是:出现概率大的符号用长的码字表示;反之,出现概率小的符号用短的码字表示。 Huffman编码过程描述: 1. 初始化: 将信源符号按出现频率进行递增顺序排列,输入集合L; 2. 重复如下操作直至L中只有1个节点: (a) 从L中取得两个具有最低频率的节点,为它们创建一个父节点; (b) 将它们的频率和赋给父结点,并将其插入L; 3. 进行编码: 从根节点开始,左子节点赋予1,右节点赋予0,直到叶子节点。 【基本定义】

1. 熵和平均编码符号长度 熵是信息量的度量方法,它表示某一事件出现的概率越小,则该事件包含的信息就越多。根据Shannon 理论,信源S 的熵定义为2()log (1/)i i i H s p p =∑,其中i p 是符号i S 在S 中出现的概率;2log (1/)i p 表示包含在i S 中的信息量,也就是编码i S 所需要的位数 假设符号i S 编码后长度为l i (i=1,…,n),则平均编码符号长度L 为:i i i L p l =∑ 2. 压缩比 设原始字符串的总长度为L orig 位,编码后的总长度为L coded 位,则压缩比R 为 R = (L orig - L coded )/ L orig 【例子】 有一幅40个象素组成的灰度图像,灰度共有5级,分别用符号A 、B 、C 、D 和E 表示,40个象素中出现灰度A 的象素数有15个,出现灰度B 的象素数有7个,出现灰度C 的象素数有7个等等,如表1所示。如果用3个位表示5个等级的灰度值,也就是每个象素用3位表示,编码这幅图像总共需要120位。 根据Shannon 理论,这幅图像的熵为 H (S ) = (15/40)?2log (40/15)+(7/40)?2log (40/7)+ +(5/40)?2log (40/5)=2.196 平均编码符号长度L 为(15/40)*1+(7/40)*3+(7/40)*3+(6/40)*3+(5/40)*3 = 2.25 根据霍夫曼编码原则可以得到如下的霍夫曼编码表。 霍夫曼码的码长虽然是可变的,但却不需要另外附加同步代码。例如,码串中的第1位为0,那末肯定是符号A ,因为表示其他符号的代码没有一个是以0开始的,因此下一位就表示下一个符号代码的第1位。同样,如果出现“110”,那么它就代

《信息论与信源编码》实验报告

《信息论与信源编码》实验报告 1、实验目的 (1) 理解信源编码的基本原理; (2) 熟练掌握Huffman编码的方法; (3) 理解无失真信源编码和限失真编码方法在实际图像信源编码应用中的差异。 2、实验设备与软件 (1) PC计算机系统 (2) VC++6.0语言编程环境 (3) 基于VC++6.0的图像处理实验基本程序框架imageprocessing_S (4) 常用图像浏览编辑软件Acdsee和数据压缩软件winrar。 (5) 实验所需要的bmp格式图像(灰度图象若干幅) 3、实验内容与步骤 (1) 针对“图像1.bmp”、“图像2.bmp”和“图像3.bmp”进行灰度频率统计(即计算图像灰度直方图),在此基础上添加函数代码构造Huffman码表,针对图像数据进行Huffman编码,观察和分析不同图像信源的编码效率和压缩比。 (2) 利用图像处理软件Acdsee将“图像1.bmp”、“图像2.bmp”和“图像 3.bmp”转换为质量因子为10、50、90的JPG格式图像(共生成9幅JPG图像),比较图像格式转换前后数据量的差异,比较不同品质因素对图像质量的影响; (3) 数据压缩软件winrar将“图像1.bmp”、“图像2.bmp”和“图像3.bmp”分别生成压缩包文件,观察和分析压缩前后数据量的差异; (4) 针对任意一幅图像,比较原始BMP图像数据量、Huffman编码后的数据量(不含码表)、品质因素分别为10、50、90时的JPG文件数据量和rar压缩包的数据量,分析不同编码方案下图像数据量变化的原因。 4、实验结果及分析 (1)在VC环境下,添加代码构造Huffman编码表,对比试验结果如下: a.图像1.bmp:

无失真信源编码

第3章无失真信源编码 教学内容包括:信源编码概述、定长编码、变长编码常用的信源编码 3.1信源编码概述 讲课内容: 1、信源编码及分类 2、信源编码定义 3、信源编码基础 1、给出编码译码示意图 2、编码:信源编码、信道编码。 信源 = 信息 + 冗余 信源编码:针对信源的编码,能更加有效地传输、存储信息。编码后尽可能减少所需信息的损失,提高编码后携带信息的效率。 3、信源编码的主要任务 a、减少冗余 b、提高编码效率 4、信源编码的基本途径 a、解除相关性

b 、概率均匀化 4、信源编码的两个基本定理 a 、无失真编码定理(可逆编码的基础、只适用于离散信源) b 、限失真编码定理(连续信源) 5、信源编码的分类 a 、冗余度压缩编码,可逆压缩,经编译码后可以无失真地恢复。 统计特性:Huffman 编码,算术编码Arithmetic Coding b 、熵压缩编码,不可逆压缩 压缩超过一定限度,必然带来失真 允许的失真越大,压缩的比例越大 译码时能按一定的失真容许度恢复,保留尽可能多的信息 本章讨论离散信源无失真编码,包括定长、变长无失真编码定理和编码方法,以及几种实用的无失真信源编码,如香农编码、费诺编码、哈夫曼编码等。 6、信源编码的定义 首先给出信源编码的定义, 信源编码就是从信源符号到码符号的一种映射f ,它把信源输出的符号u i 变换成码元序列w i 。 f :u i ——>w i ,i =1,2,…,q 译码是从码符号到信源符号的映射。若要实现无失真编码,这种映射必须是一一对应的、可逆的。 给出马元、码字、马块、二元编码的概念

结合P34例3.1.1给出编码的分类如下: 给出平均码长的定义和公式。 结合P34例3.1.1进行二进制信源的简单编码,并计算平均码长。 3.2克拉夫特(Kraft)不等式 讲课内容: 1、变长码的码字分离技术 2、即时码的引入和码树表示方法 3、即时码与克拉夫特不等式 1、变长码的码字分离技术 a、同步信号 b、可分离码字 2、即时码和码树表示法 即时码是一种实时的惟一可译码,这类码无需另加同步信息,就能在接收端被分离出来。在信源编码和数据压缩中,这类编码无论在理论还是在实际中都有很大意义,对较简单的信源,可以很方便地用码树法直接且直观地构造出可以分离码(异前缀码)。

信源编码与信道编码解析

信源编码与信道编码解析 摘要:衡量一个通信系统性能优劣的基本因素是有效性和可靠性,有效性是指信道传输信息的速度快慢,可靠性是指信道传输信息的准确程度。在数字通信系统中,信源编码是为了提高有效性,信道编码是为了提高可靠性,而在一个通信系统中,有效性和可靠性是互相矛盾的,也是可以互换的。我们可以用降低有效性的办法提高可靠性,也可以用用降低可靠性的办法提高有效性。本文对信源编码和信道编码的概念,作用,编码方式和类型进行了解析,以便于更好的理解数字通信系统的各个环节。 关键字:信源编码信道编码 Abstract: the measure of a communication system the basic factor is quality performance efficiency and reliability, effectiveness refers to channel to transfer information machine speed, reliability is to point to the accuracy of the information transmission channel. In digital communication system, the source coding is in order to improve the effectiveness, channel coding is in order to improve the reliability, and in a communication system, effectiveness and reliability is contradictory, is also can be interchanged. We can use to reduce the availability of improving the reliability, also can use to improve the effectiveness of reduces reliability. In this paper, the source coding and channel coding concept, function, coding mode and the types of analysis, in order to better understand all aspects of digital communication systems. Key words: the source coding channel coding 中图分类号:TN911.21 文献标识码:A 文章编号: 1引言 数字通信系统: 信源是把消息转化成电信号的设备,例如话筒、键盘、磁带等。 信源编码的基本部分是压缩编码。它用于减小数字信号的冗余度,提高数字信号的有效性,如果是模拟信源,则它还包括数模转换功能,在某些系统中,信源编码还包括加密功能。

实验三 无失真信源编码

实验三 无失真信源编码 一、[实验目的] 1、理解香农第一定理指出平均码长与信源之间的关系; 2、加深理解香农编码具有的重要的理论意义。 3、掌握霍夫曼编码的原理; 4、掌握霍夫曼编码的方法和步骤; 二、[实验环境] windows XP,MATLAB 7 三、[实验原理] 香农第一定理: 设离散无记忆信源为 12 (1) (2)....()S s s sq P p s p s p sq ????=???????? 熵为H(S),其N 次扩展信源为 12 (1) (2)....()N q S p p p q P αααααα????=???????? 熵为H(S N )。码符号集X=(x1,x2,…,xr )。先对信源N S 进行编码,总可以找 到一种编码方法,构成惟一可以码,使S 中每个信源符号所需的平均码长满足: 1N L H S H S N N +>≥()()logr logr 当N →∞时 lim ()N r N L H S N →∞= N L 是平均码长 1 ()N q N i i i L p αλ==∑ i λ是i α对应的码字长度 四、[实验内容] 1、在给定离散无记忆信源 S P s1 s2 s3 s4 1/8 5/16 7/16 1/8 =

条件下,实现二进制霍夫曼编码,求最后得到的码字并算出编码效率。 五、[实验过程] 每个实验项目包括:1)设计思路2)实验中出现的问题及解决方法; 某一离散信源概率分布:p=[1/2,1/4,1/8,1/16,1/16] 求信源的熵,并对该信源进行二元哈夫曼编码,得到码字和平均码长以及编码效率。 Matlab程序: function [h,l]=huffman(p) p=[1/2 1/4 1/8 1/16 1/16]; if length(find(p<0))~=0, error('Not a prob.vector,there is negative component') end if abs (sum(p)-1)>10e-10 error('Input is not a prob.vector,the sun of the components is not equal to 1') end n=length(p); q=p; m=zeros(n-1,n); for i=1:n-1 [q,l]=sort(q); m(i,:)=[l(1:n-i+1),zeros(1,i-1)]; q=[q(1)+q(2),q(3:n),1]; end for i=1:n-1 c(i,:)=blanks(n*n); end c(n-1,n)='0'; c(n-1,2*n)='1'; for i=2:n-1

信源编码和信源解码

信源编码和信源解码 字、符号、图形、图像、音频、视频、动画等各种数据本身的编码通常称为信源编码,信源编码标准是信息领域的基础性标准。无论是数字电视、激光视盘机,还是多媒体通信和各种视听消费电子产品,都需要音视频信源编码这个基础性标准。 大家用电脑打字一定很熟悉,当你用WORD编辑软件把文章(DOC文件)写完,存好盘后,再用PCTOOLS工具软件把你的DOC文件打开,你一定能看到你想象不到的东西,内容全是一些16进制的数字,这些数字叫代码,它与文章中的字符一一对应。现在我们换一种方法,用小画板软件来写同样内容的文章。你又会发现,用小画板软件写出来的BMP文件,占的内存(文件容量)是DOC文件的好几十倍,你知道这是为什么?原来WORD编辑软件使用的是字库和代码技术,而小画板软件使用的是点阵技术,即文字是由一些与坐标位置决定的点来组成,没有使用字库,因此,两者在工作效率上相差几十倍。[信源]->[信源编码]->[信道编码]->[信道传输+噪声]->[信道解码]->[信源解码]->[信宿] 目前模拟信号电视机图像信号处理技术就很类似小画板软件使用的点阵技术,而全数字电视机的图像信号处理技术就很类似WORD编辑软件使用的字库和代码技术。实际上这种代码传输技术在图文电视中很早就已用过,在图文电视机中一般都安装有一个带有图文字库的译码器,对方发送图文信号的时候只需发送图文代码信息,这样可以大大地提高数据传输效率。 对于电视机,显示内容是活动图像信息,它哪来的“字库”或“图库”呢?这个就是电视图像特有的“相关性”技术问题。原来在电视图像信号中,90%以上的图像信息是互相相关的,我们在模拟电视机中使用的Y/C(亮度信号/彩色信号)分离技术,就是利用两行图像信号的相关性,来进行Y/C分离。如果它们之间内容不相关,Y/C信号则无法进行分离。全数字信号电视也一样,如果图像内容不相关,则图像信号压缩也就要免谈。如果图像内容有相关性,那么上一幅图像的内容就相当于下一幅图像的“图形库”,或一幅图像中的某部分就是另一部分的“图形库”,因此,下一幅图像或图像中某一个与另一个相关的部分,在发送信号时,只需发送一个“代码”,而传送一个“代码”要比送一个“图形库”效率高很多,显示时也只需把内容从“图形库”中取出即可,这就是MPEG图像压缩的原理。 利用电视信号的相关性,可以进行图像信号压缩,这个原理大家已经明白,但要找出图像相关性的内容来,那就不是一件很容易的事情,这个技术真的是太复杂了。为了容易理解电视图像的相关性,我们不妨设想做一些试验,把图像平均分成几大块,然后每一块,每一块的进行比较,如果有相同的,我们就定义它们有相关性;如果没有相同的,我们继续细分下去,把每大块又分成几小块,一直比较下去,最后会发现,块分得越细,相同块的数目就越多,但分得太细需要的代码也增多,所以并不是分得越细越好。我们在看VCD的时候经常发现,如果VCD读光盘数据出错,就会在图像中看到“马赛克”,这些“马赛克”就是图像分区时的最小单位,或把数码相片进行放大,也可以看到类似“马赛克”的小区,这就是数码图像的最小“图形库”,每个小“图形库”都要对应一个“代码”。 在单幅图像中找出相关性的几率并不是很大的,所以对单幅图像的压缩率并不很大,这个通过观察数码相片的容量就很容易明白,如果把寻找相关性的范围扩大到两幅图像,你就会发现,具有相关性的内容太多了,这是因为运动物体对于人的眼睛感觉器官来说,是很慢

信源编码-PCM非均匀量化与编码实验报告(完成版)

PCM非均匀量化与编码 实验报告

一、实验目的 (1). 了解模拟信号数字化的三个基本步骤:抽样、量化、编码。 (2). 抽样频率、量化级数对信号数字化的影响. (3). 加深对非均匀量化的理解。 (4). 理解信息速率与抽样量化编码的关系。 (5). 掌握MATLAB语言的函数调用,提高编程编程能力,,为之后的学习做准备。 二、实验内容: 对模拟信号进行抽样、量化并进行13折线PCM编码,运用Matlab软件实现PCM编码全过程。 三、实验步骤与结果 1、抽样: 产生一个周期的正弦波x(t)=1024cos(2πt)mv ,分别以4HZ和32Hz的频率进行采样用plot函数在绘出原信号和抽样后的信号序列(可用stem函数)。(4Hz保存为图1,32Hz保存为图2) function sample(f) t=0:1/f:1; y=1024*cos(2*pi*t); stem(t,y,'b','filled'); hold on; T=1:0.01:1; Y=1024*cos(2*pi*T); plot(T,Y,'r');

2、均匀量化: 对以32Hz的抽样频率进行抽样后的信号的绝对值分别进行8级和2048级均匀量化。在同一张图上绘出正弦波波形(用plot函数)、量化图(用stairs函数)。(保存为图3) function y=Even(n,m) t=0:1/m:1; x=1024*cos(2*pi*t); a=-1024:2048/n:1024; for i=1:m+1 for j=1:n if (x(i)>=a(j)&x(i)<=a(j+1)) y(i)=(a(j)+a(j+1))/2; end end end y=y/max(y); if(n==8) stairs(t,y,'b'); end if(n==2048) stairs(t,y,'k') end axis([0 1 -1.5 1.5]); hold on;

信源编码实验报告

电子科技大学 实验报告 课程名称信息论与编码 实验名称信源编码 任课教师 姓名学号 时间2018 年11月28 日 一、实验目的和要求 1.掌握对信源变长编码定理的理解; 2.掌握信源编码技术,如香农编码,费诺编码,哈夫曼编码或其他无失真信源 编码技术; 3.对英文小说“Game of Thrones”中出现的26个英文字母和空格符号(一共 27个符号)进行信源编码。 4.至少对前两章“Prologue”和“Bran”中出现的符号进行统计。 5.任意选择一种编程平台,C++,Java,Python,Matlab等等。 6.运行程序后,能够在屏幕上显示每一个符号对应的码字,原始信源的熵,平 均码字长度,码字长度的方差,以及编码效率。

二、 实验内容 1. 对英文小说“Game of Thrones ”中出现的26个英文字母和空格符号(一共27个符号)进行信源编码。 2. 在屏幕上显示每一个符号对应的码字,原始信源的熵,平均码字长度,码字长度的方差,以及编码效率。 三、 实验原理 1. 采用哈夫曼编码完成实验要求 2.哈夫曼(Haveman )编码算法是满足前缀条件的平均二进制码长最短的编-源输出符号,而将较短的编码码字分配给较大概率的信源输出。算法是:在信源符号集合中,首先将两个最小概率的信源输出合并为新的输出,其概率是两个相应输出符号概率之和。这一过程重复下去,直到只剩下一个合并输出为止,这个最后的合并输出符号的概率为1。这样就得到了一张树图,从树根开始,将编码符号1 和0 分配在同一节点的任意两分支上,这一分配过程重复直到树叶。从树根到树叶途经支路上的编码最后就构成了一组异前置码,就是霍夫曼编码输出。 离散无记忆信源: 例如 Uu 1u 2u 3u 4u 5 P (U ) = 0.4 0.2 0.2 0.1 0.1

信源编码

信源编码技术 为什么要进行信源编码 通信系统就是将产生的信息传输到目的地。信源有各种不同的形式,
如广播的信源是语音或音乐,电视的信源是活动图像,这些信源的输 出都是模拟信号,称为模拟信源。计算机和存储器件(磁盘或光盘) 输出的是离散信号,称为数字信源。在数字系统中传输的都是数字信 息,不论是模拟信源还是离散信源其输出都必须转化为可以传输的数 字信息,这种转化通常是由信源编码器来完成的。 信源编码在移动通信中也称语音编码。 ? 信源编码的作用是用信道能传输的符号来表示信源发出的信息,在不 失真或一定失真的条件下用尽可能少的符号传送信源消息,提高信息 传输率。信源编码(如语音)对数字传输非常重要,而且对无线通信
来说显得尤其重要。
PDF created with pdfFactory Pro trial version https://www.wendangku.net/doc/cb12197536.html,

?
随着数字电话和数据通信容量日益增长的迫切要求,而又 不希望明显降低传送话音信号的质量,除了提高通信带宽之外, 对话音信号进行压缩是提高通信容量的重要措施。
?在移动通信中,稀少而又昂贵的无线信道更一定要和必 须要对传输的各种信号源进行压缩,以提高通信容量。
PDF created with pdfFactory Pro trial version https://www.wendangku.net/doc/cb12197536.html,

模拟信源(语音)编码的种类
波形编码、参量编码、混合编码 一般来说,波形编码器的话音质量高,但数据率也很高;参量编码器的数据 率很低,产生的合成话音的音质有待提高;混合编码器同时使用参量编译码技 术和波形编译码技术,数据率和音质介于它们之间。 (1)波形编码 波形编码比较简单,编码前采样定理对模拟语音信号进行量化,然后进行 幅度量化,再进行二进制编码。解码器作数/模变换后再由低通滤波器恢复出现 原始的模拟语音波形,这就是最简单的脉冲编码调制(PCM),也称为线性 PCM。可以通过非线性量化,前后样值的差分、自适应预测等方法实现数据压 缩。波形编码的目标是让解码器恢复出的模拟信号在波形上尽量与编码前原始波 形相一致,也即失真要最小。波形编码的方法简单,数码率较高,在64kbit/s至 32kbit/s之间音质优良,当数码率低于32kbit/s的时候音质明显降低,16 kbit/s时 音质非常差。
PDF created with pdfFactory Pro trial version https://www.wendangku.net/doc/cb12197536.html,

第五章 信源编码(第十讲)

第五章 信源编码(第十讲) (2课时) 主要内容:(1)编码的定义(2)无失真信源编码 重点:定长编码定理、变长编码定理、最佳变长编码。 难点:定长编码定理、哈夫曼编码方法。 作业:5。2,5。4,5。6; 说明:本堂课推导内容较多,枯燥平淡,不易激发学生兴趣,要注意多讨论用途。另外,注意,解题方法。多加一些内容丰富知识和理解。 通信的实质是信息的传输。而高速度、高质量地传送信息是信息传输的基本问题。将信源信息通过信道传送给信宿,怎样才能做到尽可能不失真而又快速呢?这就需要解决两个问题:第一,在不失真或允许一定失真的条件下,如何用尽可能少的符号来传送信源信息;第二,在信道受干扰的情况下,如何增加信号的抗干扰能力,同时又使得信息传输率最大。为了解决这两个问题,就要引入信源编码和信道编码。 一般来说,提高抗干扰能力(降低失真或错误概率)往往是以降低信息传输率为代价的;反之,要提高信息传输率常常又会使抗干扰能力减弱。二者是有矛盾的。然而在信息论的编码定理中,已从理论上证明,至少存在某种最佳的编码或信息处理方法,能够解决上述矛盾,做到既可靠又有效地传输信息。这些结论对各种通信系统的设计和估价具有重大的理论指导意义。 §3.1 编码的定义 编码实质上是对信源的原始符号按一定的数学规则进行的一种变换。 讨论无失真信源编码,可以不考虑干扰问题,所以它的数学描述比较简单。图 3.1是一个信源编码器,它的输入是信源符号},,,{21q s s s S =,同时存在另一符号 },,,{21r x x x X =,一般来说,元素小姐xj 是适合信道传输的,称为码符号(或者码元)。 编码器的功能就是将信源符号集中的符号s i (或者长为N 的信源符号序列)变换成由x j (j=1,2,3,…r)组成的长度为l i 的一一对应的序列。 输出的码符号序列称为码字,长度l i 称为码字长度或简称码长。可见,编码就是从信源符号到码符号的一种映射。若要实现无失真编码,则这种映射必须是一一对应的,并且是可逆的。 码符号的分类: 下图是一个码分类图

2.10常用信源编码

2.10常用信源编码 信源编码也称为有效性编码,通过编码的方式,压缩信源的冗余度,从而提高了了通信的有效性。 2.10.1山农—费诺编码 山农—费诺编码是一种常见的信源编码,其编码的步骤如下: (1)将信源的符号按其概率从大到小排列。 (2)将这一列符号分成尽可能概率接近或相同的两组。 (3)上面一组符号编为0,下面一组符号编为1,或反之。 (4)已分的组再按(2)、(3)步骤重复做,直至不能再分组。 (5)自左至右写出各码字。 [例2.10.1]有一单符号离散无记忆信源X如下,要求进行山农—费诺编码

因为信源有8个符号,其理论最大熵为lb8=3比特/符号,而实际熵为2.55比特/符号,如采用三位二进制等长编码,则效率η=2.55/3 = 85%,或者说采用定长编码效率较低。如采用山农—费诺编码,则效率会提高不少。 2.10.2哈夫曼编码 哈夫曼编码是效率比较高的又一种无失真信源编码,二进制哈夫曼编码步骤如下: (1) 把信源符号按概率从大到小排成一列; (2) 把概率最小的两个分成一组,上面一个编为0,下面一个编为1,并将这两个符号的概率加起来,其结果再和尚未处理过的符号重新按大小排序; (3) 重复步骤2,直到所有信源符号都处理完。 (4) 从右向左依据编码路径返回,就得到各码字。 [例2.10.2]同前例,编码过程见下图2.10.2:(PPT 001第四章)

第五节香农编码 ? 设离散无记忆信源 ? 二进制香农码的编码步骤如下:?将信源符号按概率从大到小的顺序排列,为方便起见,令p (x 1)≥p (x 2)≥…≥p (x n )?令p (x 0)=0,用p a (x j ),j =i +1表示第i 个码字的累加概率,则: ?确定满足下列不等式的整数k i ,并令k i 为第i 个码字的长度?-log 2p (x n )≤k i <-log 2p (x n )+1 ? 将p a (x j ) 用二进制表示,并取小数点后k i 位作为符号x i 的编码。 1 ()(),1,2,,j a j i i p x p x j n -== =∑ 121 12,,,,,,()1 (), (), , (), , ()()n i n i i i n x x x x X p x p x p x p x p x P X =????==? ???????∑ 2.10.3冗余位编码 冗余的信息完全可以不全部传送(压缩掉),从而提高了传输效率。 1.L —D 编码 现在来讨论一种由林绪(Lynch )和达维生(Davission )分别独立提出的冗余位编码法,称为L —D 编码。 例如有一二元序列,其中的一串000100000001000共二进制15位,其余的也可分割成15位一串,称为一帧。现在研究压缩冗余的方法。显然对该帧可确切描述为: (1) 帧长为15。

相关文档
相关文档 最新文档