当前位置:文档之家› 合工大信息论课程设计 费诺编码和自适应算术编码

合工大信息论课程设计 费诺编码和自适应算术编码

合工大信息论课程设计 费诺编码和自适应算术编码
合工大信息论课程设计 费诺编码和自适应算术编码

信息论课程设计

课题名称:四元费诺编码

自适应算术编码

专业班级:

任课教师:

姓名:

学号:

完成时间:2012-12

四元费诺编码

1.问题描述

费诺编码方法属于概率匹配编码。这种编码方法不是最佳的编码方法,但有时也可得到最佳码的性能。设计一个程序对输入的一个字符串实现费诺编码。2.基本要求

书本上大多讲解的二元的费诺编码,但是多元的费诺编码也能实现。请设计程序用以对输入字符串实现4元费诺编码,并且设计译码函数使满足根据编码的结果,输入任意的4进制数字串能够正确唯一的译码,最后计算编码效率。

3.二元费诺编码基本原理

首先,将信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号。依次下去,直至每一个小组只剩下一个信源符号为止。这样,信源符号所对应的码符号序列则为编得的码字。译码原理,按照编码的二叉树从树根开始,按译码序列进行逐个的向其叶子结点走,直到找到相应的信源符号为止。之后再把指示标记回调到树根,按照同样的方式进行下一序列的译码到序列结束。如果整个译码序列能够完整的译出则返回成功,否则则返回译码失败。

编码方法:

1.将信源消息符号按其出现的概率大小依次排列。

2.将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。

3.将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。

4.如此重复,直至每个组只剩下一个信源符号为止。

5.信源符号所对应的码字即为费诺码。

4.费诺编码特点

费诺编码,它编码后的费诺码要比香农码的平均码长小,消息传输速率达,编码效率高,但它属于概率匹配编码它不是最佳的编码方法。

5.二元费诺编码思想

费诺编码最困难的是根据信源概率对信源进行分组,本次借鉴了《信息编码

与加密实践》(夏娜 蒋建国 丁志忠 编著)中的二元费诺编码的思想,设定一个中间判断值—‘old ’为每次分组总概率的一半大小,‘sum ’为每次相加的概率和,每次相加后与该段的中间值差得绝对值与‘old ’比较,小于其值则分为一组,大于其值则为另一组。递归调用这段程序,直到每个分组只含一个信源结束。

6.四元费诺编码流程图

开始

输入字符窜

统计各个字符出现的频

按字符出现的概率大小

对符号进行排列

调用编码对函数进行编

输出编码结果

字符都已编码完? N

Y

7.四元费诺编码思想与函数模块划分

四元费诺编码主要在二元费诺编码的基础上修改编码函数,即二元费诺编码每次递归分两组,四元费诺编码每次就要分为四组。具体修改方法如下:

参数说明

输入要编码的数字串

结束 调用译码函数译码 输出编码结果

②递归结束条条件

③递归函数

递归分组

8.程序测试与结果

9.总结

费诺编码:由实验结果可得,在一般情况下,费诺编码不一定能使短码得到

充分利用,尤其当信源符号较多,并有一些符号概率分布很接近时,分两大组的组合就会很多,可能某种分大组的结果,会出现后面小组的概率和相差较远,因而使平均码长增加。所以,费诺码通常不是最佳码。

程序:由于时间比较仓促,无法对程序进行美化和进一步的编写窗口化程序,界面比较传统和简陋。

自适应算术编码

1.问题描述

是图像压缩的主要算法之一。是一种无损数据压缩方法,也是一种熵编码的方法。和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,然后对每个符号进行编码,而算术编码是直接把整个输入的消息编码为一个数,一个满足(0.0≤n<1.0)的小数n。

2.基本要求

请设计程序用以对输入字符串实现自适应的算术编码,其中要有相应的概率调整的过程,并且设计译码函数使满足根据编码的结果,能够正确的译码。3.算术编码原理

在给定符号集和符号概率的情况下,算术编码可以给出接近最优的编码结果。使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码。这个估计越准,编码结果就越接近最优的结果。

例: 对一个简单的信号源进行观察,得到的统计模型如下:

60% 的机会出现符号中性

20% 的机会出现符号阳性

10% 的机会出现符号阴性

10% 的机会出现符号数据结束符.

中性对应的区间是[0, 0.6)

阳性对应的区间是[0.6, 0.8)

阴性对应的区间是[0.8, 0.9)

数据结束符对应的区间是[0.9, 1)

当所有的符号都编码完毕,最终得到的结果区间即唯一的确定了已编码的符号序列。任何人使用该区间和使用的模型参数即可以解码重建得到该符号序列。实际上我们并不需要传输最后的结果区间,实际上,我们只需要传输该区间中的一个小数即可。在实用中,只要传输足够的该小数足够的位数(不论几进制),以保证以这些位数开头的所有小数都位于结果区间就可以了。

4.自适应算术编码

自适应算术编码即上述的模型还可以进行自适应的变化,即在某种上下文下出现的概率分布的估计随着每次这种上下文出现时的符号而自适应更新,从而更加符合实际的概率分布。不管编码器使用怎样的模型,解码器也必须使用同样的模型。编码过程的每一步,除了最后一步,都是相同的。

编码器通常需要考虑下面三种数据:

1.下一个要编码的符。

2.当前的区间(在编第一个符号之前,这个区间是[0,1), 但是之后每次编码区间都会变化

3.编码其将当前的区间分成若干子区间,每个子区间的长度与当前上下文下可能出现的对应符号的概率成正比。当前要编码的符号对应的子区间成为在下一步编码中的初始区间。

5.自适应算术编码特点

1)不必预先定义概率模型,自适应模式具有独特的优点;

2)信源符号概率接近时,建议使用算术编码,这种情况下其效率高于Huffman 编码;

3)算术编码绕过了用一个特定的代码替代一个输入符号的想法,用一个浮点输出数值代替一个流的输入符号,较长的复杂的消息输出的数值中就需要更多的位数。

4)算术编码实现方法复杂一些,但JPEG 成员对多幅图像的测试结果表明,算术编码比Huffman 编码提高了5%左右的效率,因此在PEG 扩展系统中用算术编码取代Huffman 编码。

6.自适应算法流程图

开始

初始化概率空间和准

备数据

调整指针指向下一字符 输入字符串 调整字符概率序列 字符找到相应的概率空

间 字符都已编码?

N

Y

区间内任选一树

转二进制并去相应的

有效位

输出编码结果

结束

7.自适应算术编码编程思想

算法主要基于算术编码,其中编码译码都要增加一个概率调整的式子。编程思想如下:

(1)对一组信源符号按照符号的概率排序,将[0,1)设为当前分析区间。按信源符号的概率序列在当前分析区间划分比例间隔。

(2)检索“输入消息序列”,锁定当前消息符号(初次检索的话就是第一个消息符号)。找到当前符号在当前分析区间的比例间隔,将此间隔作为新的当前分析区间。并把当前分析区间的起点(即左端点)指示的数“补加”到编码输出数里。当前消息符号指针后移。

(3)根据输如的字符,相应的调整信源的概率序列。

(4)按照新的信源符号的概率序列在当前分析区间划分比例间隔。然后重复第二步。直到“输入消息序列”检索完毕为止。

(5)最后的编码输出数就是编码好的数据。

修改信源概率序列方法:

Cnt[i] 为相应信源符号的出现次数,初始化都为1;

Sum 为总共的信源符号

Proc[i] 为相应信源符号的概率

areaBegin 为区间起始概率

areaEnd 为区间结束概率

8.程序测试与结果

9.总结

自适应算术编码:不必预先定义概率模型,自适应模式具有独特的优点,没有对个输入符号的信息量为整数的限制,随着编码结果的小数随位数的增加,它的精度也随之增高,从信息的角度来说,它所含的信息量也随之增加。信源符号概率接近时编码效率比较好,其效率高于哈夫曼编码。

程序:自己在指导书的程序基础上修改了编码译码函数,总体来说还是比较轻松简单的。但是因为时间比较紧,没有足够的时间对程序进行可视化窗口编程和美化,所以程序基于黑白对话框比较简陋;输入字符要手动输入,过程比较繁琐,容易出错,可以在以后增加文件操作和成熟美化等工作,使程序简单实用。

附录一:费诺编码源程序

// Fano编括?码?.cpp : 定¨义?控?制?台 ?应畖用?程ì序ò的?入?口ú点?。£

//

// Fano编码.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

typedef struct

{

char data;

float weight;

char code[1000];

}fnode;

fnode f[50];

int num;

int forwd,mid,last;

int jsq(char*s,int cnt[],char str[])

{

char *p;

int i,j,k=0;

int temp[257];

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

temp[i]=0;

for(p=s;*p!='\0';p++)

temp[*p]++;

for(i=0,j=0;i<=256;i++)

if(temp[i]!=0)

{

j++;

str[j]=i;

cnt[j]=temp[i];

}

return j;

}

//shuru

void Input(char receive[],int cnt[],char str[])

{

unsigned int len=0;

printf("输入要编码的字符串:");

gets(receive);

len=strlen(receive);

num=jsq(receive,cnt,str);

for(int i=1;i<=num;i++)

{

f[i-1].data=str[i];

f[i-1].weight=float(cnt[i])/len;

}

}

//编码

void code(fnode f[],double total,int begin,int end)

{

//double sum=0.0,tsum=0.0,temp1old=total/2;

double

sum=0.0,fsum=0.0,msum=0.0,lsum=0.0,temp1=0.0,temp2=0.0,temp3=0.0,old1=total/4,o ld2=total/4,old3=total/4;

//int forwd,mid,last;

if(end-begin==0)

return;

else

if (end-begin==1)

{

strcat(f[begin].code,"0");

strcat(f[begin+1].code,"1");

return;

}

else

if (end-begin==2)

{

strcat(f[begin].code,"0");

strcat(f[begin+1].code,"1");

strcat(f[begin+2].code,"2");

return;

}

else

if(end-begin==3)

{

strcat(f[begin].code,"0");

strcat(f[begin+1].code,"1");

strcat(f[begin+2].code,"2");

strcat(f[begin+3].code,"3");

return;

}

else

for(int i=begin;i<=end;i++)

{

sum+=f[i].weight;

temp1=fabs(sum-total/4);

if(temp1<=old1)

{

forwd=i;

fsum=sum;

strcat(f[i].code,"0");

old1=temp1;

}

else

{

//temp=fabs(sum)

//msum=sum-fsum;

temp2=fabs(sum-fsum-total/4);

if (temp2<=old2)

{

mid=i;

msum=sum-fsum;

strcat(f[i].code,"1");

old2=temp2;

}

else

{

temp3=fabs(sum-fsum-msum-total/4);

if(temp3<=old3)

{

last=i;

lsum=sum-fsum-msum;

strcat(f[i].code,"2");

old3=temp3;

}

else

strcat(f[i].code,"3");

}

}

//old3=temp3;

}

code(f,fsum,begin,forwd);

code(f,msum,forwd+1,mid);

code(f,lsum,mid+1,last);

code(f,sum-fsum-msum-lsum,last+1,end);

}

//译码

void decode(char s[])

{

unsigned int i=0;

int j=0;

char s2[100];

s2[0]='\0';

while(i< strlen(s))

{

char temp[2];

temp[0]=s[i];

temp[1]='\0';

strcat(s2,temp);

for(j=0;j

{

if(strcmp(s2,f[j].code)==0)//判断是否匹配

{

printf("%c",f[j].data);

s2[0]='\0';

break;

}

}

i++;

}

}

//输出结果

void print()

{

int i;

for(i=0;i

//cout<<"符号"<

printf("符号%c概率%f,编码为%s\n",f[i].data,f[i].weight,f[i].code); }

//计算编码效率

double code_ratio(fnode f[50],char receive[],int cnt [],char str[])

{

double up=0.0,down=0.0,temp=0.0;

int i=1,j,len=strlen(receive);

for (i;i<=num;i++)

{

temp=cnt[i]/double(len);

up-=temp*(log10(temp)/log10(4.0));

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

if(f[j].data==str[i])

down+=temp*strlen(f[j].code);

}

return(up/down)*100;

}

//sort 函数的参数

bool Myless(const fnode l,const fnode r)

{

return l.weight>r.weight;

}

void main()

{

//int forwd,mid,last;

char got[1000],s[1000]={'\0'},receive[1000],str[1000];

//got接收输入的待解码的字符串,s接受解码的结果,receive接受输入的字符串int cnt[1000]; //str,cnt分别统计字符中的字符和其出现的概率

Input(receive,cnt,str); //调用输入函数

sort(f,f+num,Myless); //调用排序函数

code(f,1.0,0,num-1); //调用编码函数

print(); //调用输出编码函数

printf("上述字符串的费诺编码为");

int i=0,j=0;

while (receive[i]!='\0')

{

for(j=0;j

if (f[j].data==receive[i])

{

printf("%s",f[j].code);

break;

}

i++;

}

printf("\n编码效率:%f%%\n",code_ratio(f,receive,cnt,str));

printf("请输入四进制码开始的解码:\n");

gets(got);

strcat(s,got);

printf("译码结果为:");

decode(s); //调用译码函数

printf("\n");

//system("pause");

附录二:自适应算术编码

// 自适应算术编码.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include

#include

#include

using namespace std;

double proc[] = {0.10, 0.10, 0.10, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1};

int cnt[]={1,1,1,1,1,1,1,1,1,1};

double num=10.0;

double result, areaBegin, areaEnd;

int cord[1000],cordLength;

char str[1000];

int strLength = 0;

bool readdat(){

int i;

cout<<"*********************自适应模式********************************"<

cout<<"请输入字符(0~9):"<

cin >> str;

while(str[strLength] != '\0'){

strLength++;

}

for(i = 0; i < strLength; i++){ //输入是否合法

if(str[i] > '9' || str[i] < '0') return 1;

}

return 0;

}

void encode(){

cout<<" 编码: ";

int i,l;

double w = 0.0, len;

areaBegin = 0.0, areaEnd = 1.0;

for(i = 0; i < strLength; i++){

int n = str[i] - '0', k;

cnt[n]++;

num++;

w = 0.0;

for(k = 0; k < n; k++){

w += proc[k]; //计算所在区间

}

len = areaEnd - areaBegin; //计算新的区间

areaEnd = areaBegin + len * (w + proc[k]);

areaBegin += len * w;

for(l=0;l<=9;l++) //调整信源概率序列

{

proc[l]=cnt[l]/num;

}

}

result = areaBegin * 0.01 + areaEnd * 0.99; //选择适当的点

cordLength = (int(-log10(areaEnd - areaBegin) / log10(2.0))) + 1;

cout<<"编码位数: "<

cout<<"编码结果:";

double temp1 = result;

int temp2,j;

for(j = 0; j < cordLength; j++){ //十进制转换成二进制temp1 *= 2;

temp2 = int(temp1);

temp1 -= temp2;

cord[j] = temp2;

cout<

}

cout<

}

void decode(){

cout<<" 译码:"<

信息论与编码课程设计..

吉林建筑大学 电气与电子信息工程学院信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现专业班级:电子信息工程101 学生姓名: 学号: 指导教师:吕卅王超 设计时间:2013.11.18-2013.11.29

一、设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 通过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 三、设计内容 一个有8个符号的信源X ,各个符号出现的概率为: 编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面, 12345678,,,,, ()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

信息论与编码课程设计报告

目录 一:实验原理----------------------------1 二:程序源代码--------------------------1 三:实验分析-----------------------------6 四:实验结论---------------------------7

赫夫曼编码 一:实验原理 哈夫曼编码的具体步骤归纳如下: ① 概率统计(如对一幅图像,或m幅同种类型图像作灰度信号统计),得到n个不同概率的信息符号。 ② 将n个信源信息符号的n个概率,按概率大小排序。 ③ 将n个概率中,最后两个小概率相加,这时概率个数减为n-1个。 ④ 将n-1个概率,按大小重新排序。 ⑤ 重复③,将新排序后的最后两个小概率再相加,相加和与其余概率再排序。 ⑥ 如此反复重复n-2次,得到只剩两个概率序列。 ⑦ 以二进制码元赋值,构成哈夫曼码字。编码结束。 哈夫曼码字长度和信息符号出现概率大小次序正好相反,即大 概信息符号分配码字长度短,小概率信息符号分配码字长度长。 C、哈夫曼编码的特点 (1)哈夫曼编码的构造顺序明确,但码不是唯一的(因以大赋1还是小的赋1而异;

(2)哈夫曼编码的字长参差不齐,硬件实现不方便; (3)只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在信源分布均匀时,一般不使用哈夫曼编码。 二:程序源代码: #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE 59 #define MAXBIT 10 #define LENTH 30 #include "" #include typedef struct{ float gailv; int flag; int parent; int lchild; int rchild; char ch; int t; }HNodeType; typedef struct{ int bit[MAXBIT]; int start; }HCodeType; typedef struct{ float gailv; char letter; }mytype; /*it's the type of data save in file*/ typedef struct filehuff{ int count; mytype mydata[MAXLEAF]; filehuff(){count=0; }; }; filehuff filedata; char code[MAXVALUE]; HNodeType HuffNode[MAXNODE]; void savetofile() { FILE *fp;

多媒体技术基础试题

多媒体技术基础及应用试题(一)1.单项选择题(每小题2分,共20分) 1.下列说法不正确的是()。 A.熵压缩法会减少信息量 B.熵压缩法是有损压缩法 C.熵压缩法可以无失真地恢复原始数据 D.熵压缩法的压缩比一般都较大 2.在数字音频信息获取与处理过程中,下列顺序正确的是()。 A.A/D变换,采样,压缩,存储,解压缩,D/A变换 B.采样,压缩,A/D变换,存储,解压缩,D/A变换 C.采样,A/D变换,压缩,存储,解压缩,D/A变换 D.采样,D/A变换,压缩,存储,解压缩,A/D变换3.某音频信号的采样频率为44.1kHz,每个样值的比特数是8位,则每秒存储数字音频信号的字节数是()。 A.344.531k B.43.066k C.44.1k D.352.8k 4.全电视信号主要由()组成。 A.图像信号、同步信号、消隐信号 B.图像信号、亮度信号、色度信号 C.图像信号、复合同步信号、复合消隐信号 D.图像信号、复合同步信号、复合色度信号 5.下列说法不正确的是()。 A.预测编码是一种只能针对空间冗余进行压缩的方法 B.预测编码是根据某一模型进行的 C.预测编码需将预测的误差进行存储或传输 D.预测编码中典型的压缩方法有DPCM、ADPCM 6.国际标准MPEG—II采用了分层的编码体系,提供了四种技术,它们是()。 A.空间可扩展性;信噪比可扩充性;框架技术;等级技 术 B.时间可扩充性;空间可扩展性;硬件扩展技术;软件 扩展技术 C.数据分块技术;空间可扩展性;信噪比可扩充性;框 架技术 D.空间可扩展性;时间可扩充性;信噪比可扩充性;数 据分块技术 7.如果按三个色差信号B-Y,R-Y,G-Y来传输彩色全电视信号,会造成()失真。 A.幅度 B.传输 C.色彩 D.图像 8.人们在实施音频数据压缩时,通常应综合考虑的因素有()。 A.音频质量、数据量、音频特性 B.音频质量、计算复杂度、数据量 C.计算复杂度、数据量、音频特性 D.音频质量、计算复杂度、数据量、音频特性 9.彩色可用()来描述。 A.亮度,饱和度,色调 B.亮度,饱和度,颜色 C.亮度,对比度,颜色 D.亮度,色调,对比度 10.帧频率为25帧/秒的制式为()。 A.PAL、NTSC B.PAL、SECAM C.SECAM、NTSC D.PAL、YUV 二、多项选择题(每小题3分,共15分) 1.多媒体计算机的发展趋势是()。 A.进一步完善计算机支持的协同工作环境CSCW B.智能多媒体技术 C.把多媒体信息实时处理和压缩编码算法作到CPU芯 片中 D.多媒体创作工具极其丰富 2.音频卡的核心,是声音的合成与处理,它由以下几部分组成()。 A.数字声音处理器 B.混合信号处理器 C.功率放大器 D.FM音乐合成器 E.MIDI控制器 3.下列会议系统属于点对点视频会议系统的是()。 A.可视电话 B.桌面视频会议系统 C.会议室型视频会议系统 D.MCU视频会议系统 4.下面列出的卡中,属于视频采集卡的有()。 A.Video Blaster SE100 B.MegaMotion C.Media Magic ISP-16 D.Intel Smart Video Recorder Pro 5.三个重要的有关视频图像压缩编码的国际标准是()。 A.JPEG标准 B.H.261标准 C.H.320标准 D.AIF E.MPEG标准 一、单项选择题(每小题1分,共10分) 1.C 2.C 3.B 4.C 5.A 6.D 7.A 8.B 9.A 10.B

算术编码

实现算术编码及其译码 一、实验内容 借助C++编程来实现对算术编码的编码及其译码算法的实现 二、实验环境 1.计算机 2.VC++6.0 三、实验目的 1.进一步熟悉算术编码的原理,及其基本的算法; 2.通过编译,充分对于算术编码有进一步的了解和掌握; 3.掌握C++语言编程(尤其是数值的进制转换,数值与字符串之间的转换 等) 四、实验原理 算术编码 算术编码的基本原理是将编码的消息表示成实数0和1之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。 算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。编码过程中的间隔决定了符号压缩后的输出。 给定事件序列的算术编码步骤如下: (1)编码器在开始时将“当前间隔”设置为[0,1)。 (2)对每一事件,编码器按步骤(a)和(b)进行处理 (a)编码器将“当前间隔”分为子间隔,每一个事件一个。 (b)一个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间 隔”。 (3)最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码。 编码过程 假设信源符号为{A, B, C, D},这些符号的概率分别为{ 0.1, 0.4, 0.2,0.3 },根据这些概率可把间隔[0, 1]分成4个子间隔:[0, 0.1], [0.1, 0.5],

[0.5, 0.7], [0.7, 1],其中[x,y]表示半开放间隔,即包含x不包含y。上面的信息可综合在表03-04-1中。 下表为信源符号,概率和初始编码间隔 如果二进制消息序列的输入为:C A D A C D B。编码时首先输入的符号是C,找到它的编码范围是[0.5,0.7]。由于消息中第二个符号A的编码范围是[0,0.1],因此它的间隔就取[0.5, 0.7]的第一个十分之一作为新间隔[0.5,0.52]。依此类推,编码第3个符号D时取新间隔为[0.514, 0.52],编码第4个符号A 时,取新间隔为[0.514, 0.5146],…。消息的编码输出可以是最后一个间隔中的任意数。整个编码过程如图03-04-1所示。 编码和译码的全过程分别表示在下表。 编码过程

费诺编码课程设计报告书

建筑大学 电气与电子信息工程学院 信息理论与编码课程设计报告 设计题目:费诺编码 专业班级 学生: 学号: 指导教师: 设计时间: 2014.11.24-2014.12.5

第1章概述 1.1设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法。 1.2设计任务及要求 1.理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2.根据费诺编码算法,考虑一个有多种可能符号(各种符号发生的概率不同)的信源,得到费诺编码; 3.掌握费诺编码的优缺点; 4.能够使用MATLAB或其他语言进行编程,编写的函数要有通用性,要理解每个函数的具体意义和适用围,对主要函数的功能和参数做详细说明。 1.3设计容 费诺编码属于概率匹配编码,但不是最佳的编码方法。在编N进制码时首先将信源消息符号按其出现的概率依次由小到大排列开来,并将排列好的信源符号按概率值分N大组,使N组的概率之和近似相同,并对各组赋予一个N进制码元0、1……N-1。之后再针对每一大组的信源符号做如上的处理,即再分为概率和相同的N组,赋予N进制码元。如此重复,直至每组只剩下一个信源符号为止。此时每个信源符号所对应的码字即为费诺码。 针对同一信源,费诺码要比香农码的平均码长小,消息传输速率大,编码效率高。 一个有8个符号的信源X,各个符号出现的概率为: X P(X ) X1, X2, X3, X4, X5, X6, X7, X8 0.19, 0.18, 0.17, 0.16, 0.13, 0.10, 0.06, 0.01

算术编码的C实现

算术编码的C++实现 #include #include #include #include using namespace std; #define N 50 //输入的字符应该不超过50个 struct L //结构用于求各字符及其概率 { char ch; //存储出现的字符(不重复) int num; //存储字符出现的次数 double f;//存储字符的概率 }; //显示信息 void disp(); //求概率函数,输入:字符串;输出:字符数组、字符的概率数组;返回:数组长度; int proba(string str,char c[],long double p[],int count); //求概率的辅助函数 int search(vector arch,char,int n); //编码函数,输入:字符串,字符数组,概率数组,以及数组长度;输出:编码结果 long double bma(char c[],long double p[],string str,int number,int size); //译码函数,输入:编码结果,字符串,字符数组,概率数组,以及它们的长度;输出:字符串 //该函数可以用于检测编码是否正确 void yma(string str,char c[],long double p[], int number,int size,long double input); int main() { string str; //输入要编码的String类型字符串 int number=0,size=0; //number--字符串中不重复的字符个数;size--字符串长度char c[N]; //用于存储不重复的字符 long double p[N],output; //p[N]--不重复字符的概率,output--编码结果 disp(); cout<<"输入要编码的字符串:"; getline(cin,str); //输入要编码的字符串 size=str.length(); //字符串长度 number=proba(str,c,p,size);//调用求概率函数,返回不重复字符的个数 cout.setf(ios::fixed); //“魔法配方”规定了小数部分的个数 cout.setf(ios::showpoint); //在此规定编码结果的小数部分有十个 cout.precision(10); output=bma( c, p, str, number, size);//调用编码函数,返回编码结果 yma(str,c, p, number, size, output); //调用译码函数,输出要编码的字符串, //以验证编码是否正确 return 0;

算术编码工作原理

算术编码工作原理 在给定符号集和符号概率的情况下,算术编码可以给出接近最优的编码结果。使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码。这个估计越准,编码结果就越接近最优的结果。 例: 对一个简单的信号源进行观察,得到的统计模型如下: ?60% 的机会出现符号中性 ?20% 的机会出现符号阳性 ?10% 的机会出现符号阴性 ?10% 的机会出现符号数据结束符. (出现这个符号的意思是该信号源'内部中止',在进行数据压缩时这样的情况是很常见的。当第一次也是唯一的一次看到这个符号时,解码器就知道整个信号流都被解码完成了。) 算术编码可以处理的例子不止是这种只有四种符号的情况,更复杂的情况也可以处理,包括高阶的情况。所谓高阶的情况是指当前符号出现的概率受之前出现符号的影响,这时候之前出现的符号,也被称为上下文。比如在英文文档编码的时候,例如,在字母Q 或者q出现之后,字母u出现的概率就大大提高了。这种模型还可以进行自适应的变化,即在某种上下文下出现的概率分布的估计随着每次这种上下文出现时的符号而自适应 更新,从而更加符合实际的概率分布。不管编码器使用怎样的模型,解码器也必须使用同样的模型。 一个简单的例子以下用一个符号串行怎样被编码来作一个例子:假如有一个以A、B、C三个出现机会均等的符号组成的串行。若以简单的分组编码会十分浪费地用2 bits 来表示一个符号:其中一个符号是可以不用传的(下面可以见到符号B正是如此)。为此,这个串行可以三进制的0和2之间的有理数表示,而且每位数表示一个符号。例如,“ABBCAB”这个串行可以变成0.011201(base3)(即0为A, 1为B, 2为C)。用一个定点二进制数字去对这个数编码使之在恢复符号表示时有足够的精度,譬如 0.001011001(base2) –只用了9个bit,比起简单的分组编码少(1 – 9/12)x100% = 25%。这对于长串行是可行的因为有高效的、适当的算法去精确地转换任意进制的数字。 编码过程的每一步,除了最后一步,都是相同的。编码器通常需要考虑下面三种数据: ?下一个要编码的符号 ?当前的区间(在编第一个符号之前,这个区间是[0,1), 但是之后每次编码区间都会变化) ?模型中在这一步可能出现的各个符号的概率分布(像前面提到的一样,高阶或者自适应的模型中,每一步的概率并不必须一样) 编码其将当前的区间分成若干子区间,每个子区间的长度与当前上下文下可能出现的对应符号的概率成正比。当前要编码的符号对应的子区间成为在下一步编码中的初始区间。

信息论与编码课程总结

信息论与编码 《信息论与编码》这门课程给我带了很深刻的感受。信息论是人类在通信工程实践之中总结发展而来的,它主要由通信技术、概率论、随机过程、数理统计等相结合而形成。它主要研究如何提高信息系统的可靠性、有效性、保密性和认证性,以使信息系统最优化。学习这门课程之后,我学到了很多知识,总结之后,主要有以下几个方面: 首先是基本概念。信息是指各个事物运动的状态及状态变化的方式。消息是指包括信息的语言、文字和图像等。信号是消息的物理体现,为了在信道上传输消息,就必须把消息加载到具有某种物理特性的信号上去。信号是信息的载荷子或载体。信息的基本概念在于它的不确定性,任何已确定的事物都不含有信息。信息的特征:(1)接收者在收到信息之前,对其内容是未知的。(2)信息是能使认识主体对某一事物的未知性或不确定性减少的有用知识。(3)信息可以产生,也可以消失,同时信息可以被携带、存储及处理。(4)信息是可以量度的,信息量有多少的差别。编码问题可分解为3类:信源编码、信道编 码、加密编码。= 理论上传输的最少信息量 编码效率实际需要的信息量。 接下来,学习信源,重点研究信源的统计特性和数学模型,以及各类离散信源的信息测度 —熵及其性质,从而引入信息理论的一些基本概念和重要结论。本章内容是香农信息论的基础。重点要掌握离散信源的自信息,信息熵(平均自信息量),条件熵,联合熵的的概念和求法及其它们之间的关系,离散无记忆的扩展信源的信息熵。另外要记住信源的数学模型。通过学习信源与信息熵的基本概念,了解了什么是无记忆信源。信源发出的序列的统计性质与时间的推移无关,是平稳的随机序列。当信源的记忆长度为m+1时,该时刻发出的符号与前m 个符号有关联性,而与更前面的符号无关,这种有记忆信源叫做m 阶马尔可夫信源。若上述条件概率与时间起点无关,则信源输出的符号序列可看成齐次马尔可夫链,这样的信源叫做齐次马尔可夫信源。之后学习了信息熵有关的计算,定义具有概率为 () i p x 的符号i x 的自信息量为:()log ()i i I x p x =-。自信息量具有下列特性:(1) ()1,()0i i p x I x ==(2)()0,()i i p x I x ==∞(3)非负性(4)单调递减性(5)可加 性。信源熵是在平均意义上来表征信源的总体特征,它是信源X 的 函数,一般写成H (X )。信源熵:()()log ()i i i H X p x p x =-∑,条件熵:(|)(,)log (|) i j i j ij H X Y p x y p x y =-∑联合 熵(|)(,)log (,)i j i j ij H X Y p x y p x y =-∑,联合熵 H(X,Y)与熵H(X)及条件熵H(Y|X)的关系: (,)()(|)()(|)H X Y H X H Y X H X H X Y =+=+。互信息: ,(|)(|)(;)(,)log ()(|)log () () j i j i i j i j i ij i j j j p y x p y x I X Y p x y p x p y x p y p y = = ∑ ∑ 。熵的性质:非负性,对称性,确定 性,极值性。 接下来接触到信道,知道了信道的分类,根据用户数可以分为,单用户和多用户;根

信息论与编码课程设计报告书

信息论与编码课程设计报告设计题目:判断唯一可译码、香农编码 专业班级电信12-03 学号7 学生琳 指导教师成凌飞 教师评分 2015年3月21日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 通过本次课程设计的练习,使学生进一步巩固信源熵、信源编码的基本原理,掌握具体的编码方法,熟悉编程软件的使用,培养学生自主设计、编程调试的开发能力,同时提高学生的实践创新能力。 1、判断唯一可译码 利用尾随后缀法判断任意输入的码是否为唯一可译码,即设计一个程序实现判断输入码组是否为唯一可译码这一功能。 2、香农编码 熟悉运用香农编码,并能通过C语言进行编程,对任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 1、判断唯一可译码 在我们学习使用了克劳夫特不等式之后,知道唯一可译码必须满足克劳夫特不等式。但是克劳夫特不等式仅仅是存在性的判定定理,即该定理不能作为判断一种码是否为唯一可译码的依据。也就是说当码字长度和码符号数满足克劳夫特不等式时,则必可以构造出唯一可译码,否则不能构造出唯一可译码。因此我们必须找到一种能够判断一种码是否为唯一可译码的方法,尾随后缀法。 尾随后缀法算法描述: 设C为码字集合,按以下步骤构造此码的尾随后缀集合F: (1) 考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中; (2) 考查C和Fi两个集合,若Wj∈C是Wi∈Fi的前缀或Wi∈Fi 是Wj

简单短序列的算术编码的MATLAB实现

简单短序列的算术编码的MATLAB实现 正确实现的算术编码算法压缩能力Shannond定理描述的理论极限,是目前已知的压缩能力最强的无损压缩算法。 不过,由于算术编码算法的实现比较复杂,使用它作为默认压缩算法的应用程序还相当少。在Unix平台上非常流行的bzip2(这个工具有命令行模式的Windows版本)使用的就是经过修改的算术编码算法。 目前为止还没有使用算术编码作为默认压缩算法的Windows应用程序,WinRAR和WinIMP能够支持bzip2的解压。除此之外,在最新的JPEG标准中也用到了经过修改的算术编码压缩算法,但JPEG所用的那种算法受专利保护,因此使用时必须获得授权。 在之后的文章会很好的研究这个算法的实现: 现在给出一个简单的实例:

运行过程如下:

%I=imread('001.bmp') %imshow(I); clear I=[3 3 1 1 3 3 1 2;2 3 3 1 3 2 3 2;1 2 3 3 3 3 1 2]; %I=[1 1 1 1 0 0 1 0 1 1 1 0]; [m,n]=size(I); % 第一列为灰度值,第二列为个数,第三列为概率百分数,应该也可以用imhist table = tabulate(I(); % 注意的是,tabulate要求I的元素必须为非负整数 % 否则,以采用如下方法求解 % 如[1 2 3;1 2 2],则统计出结果1是2个,2是3个,3是1个 % sortM=sort(M(); % uniqueM=([diff(sortM);1]>0); % count = [sortM(uniqueM) diff(find([1;uniqueM]))] % 即color,p如下所示 color = table(:,1)'; p = table(:,3)'/100; % 计算上下限 csump = cumsum(table(:,3)'); allLow =[0,csump(1:end-1)/100]; allHigh = csump/100; numberlow = 0; numberhigh = 1; for k = 1:m for kk = 1:n data = I(k,kk); low = allLow(data==color); high = allHigh(data==color); range = numberhigh-numberlow; tmp = numberlow; numberlow = tmp+range*low; numberhigh = tmp+range*high; end

信息论与编码

滨江学院 《信息论与编码》课程论文题目香农编码及其应用改善 院系电子工程系 专业班级通信班 学生姓名 学号 教师杨玲 成绩 二O一四年十二月二十二日

香农编码及其应用改善 摘要:香农编码作为变长信源编码的重要方法之一,具有重要的理论指导意义,但其在实际应用中存在效率较低的缺点。本文对香农编码方法进行阐述,及运用MATLAB实现香农编码操作,并找出香农编码的不足,针对其缺陷,通过判断码字之间是否互为前缀来确定码字的方法对其编码算法进行了优化,给出了优化算法的实现步骤。最后,通过具体实例分析得出本文提出的改善算法能有效地提高编码效率。 关键词:香农码方法;MATLAB;编码效率;优化编码;

引言:1948年,美国工程师香农在贝尔实验室杂志上发表了长文《通讯的数学原理》他用概率测度和数理统计的方法系统地讨论了通信的基本问题,得出了几个重要而带有普遍意义的结论,并由此奠定了现代信息论的基础。香农编码理论揭示了在通信系统中,采用适当的编码后能够实现高效率和高可靠地传输信息的规律,并给出了相应的信源编码定理和信道编码定理。从数学观点看,这些定理是最优编码的存在定理。它们给出了编码的性能极限,在理论上阐明了通信系统中各种因素的相互关系,为寻找最佳通信系统提供了重要的理论依据。 在多媒体数据的传输和存储过程中,为了确保通信的顺利进行,必须要通过信源编码技术必须对多媒体信息进行压缩处理。香农编码技术作为变长信源编码的重要方法之一,具有重要的理论指导意义。但由于在香农编码的过程中先限定每个码字的码长,以至于在码字的选取中是以每个码字的码长作为先决条件而不考虑各个码字之间的相关性,因此编出的码字往往存在较大的冗余,影响了整个通信系统的传输效率。就这一缺陷,本文提出了通过剔除先限定每个码字的码长这一过程,通过判断码字之间是否互为前缀来确定码字的方法对其编码算法进行了改善。 1.香农编码的方法 在写香农编码之前先简单介绍下信源编码: 编码分为信源编码和信道编码,其中信源编码又分为无失真和限失真。由于这些定理都要求符号数很大,以便其值接近所规定的值,因而这些定理被称为极限定理。一般称无失真信源编码定理为第一极限定理;信道编码定理(包括离散和连续信道)称为第二极限定理;限失真信源编码定理称为第三极限定理。完善这些定理是香农信息论的主要内容。 信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码地宫里,前者是可逆编码的基础。可逆是指当信源符号转换成代码后,可从代码无失真的恢复原信源符号。当已知信源符号的概率特性时,可计算它的符号熵,这表示每个信源符号所载有的信息量。编码定理不但证明了必定存在一种编码方法,可使代码的平均长度可任意接近但不低于符号熵,而且还阐明达到这目标的途径,就是使概率与码长匹配。无失真编码或可逆编码只适用于离散信源。本节讨论离散信源编码。首先从无失真编码定理出发,重点讨论以香农码为代表的最

费诺编码

1 课题描述 本文通过采用递归的思想进行费诺编码,求得了每个字符的二进制码字。并且对编码后的平均码长,以及编码的传输效率进行了求解。符合费诺编码的要求,得到了预期的编码结果。 2 信源编码的相关介绍 信源编码分为无失真信源编码和限失真信源编码。一般称无失真信源编码为第一机械定理;限失真信源编码定理称为第三极限定理。 由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的主要任务就是减少冗余,提高编码效率。具体说,就是针对信源输出符号序列的统计特性,寻找一定的方法把信源输出符号序列变换为最短码字序列的方法。信源编码的基本途径有两个:使编码中各个符号出现的概率尽可能地相等,即概率均匀化。 信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码定理。其中无失真编码定理是可逆编码的基础。可逆是指当信源符号转换成代码后,可从代码无失真地恢复信源符号。当已知信源符号的概率特性时,可计算它的符号熵,这表示每个信源符号所载有的信息量。编码定理不但证明了必定存在一种编码方法,可使代码的平均长度可任意接近但不低于符号熵,而且还阐明达到这目标的途径,就是使概率与码长匹配。无失真编码或可逆编码只适用于离散信源。对于连续信源,编成代码后就无法无失真地恢复原来的连续值,因为后者的取值可有无限多个。此时只能根据率失真编码定理在失真受限制的情况下进行限失真编码。信源编码定理出现后,编码方法就趋于合理化。 凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合称为最佳变长码。能获得最佳码的编码方法主要有:香农码(Shannon)、费诺(Fano)、哈夫曼(Huffman)编码等。 3.费诺编码 3.1费诺编码算法 (1)将信源消息符号按其出现的概率大小依次排列:n p p p ≥≥≥ 21。 (2)将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。 (3)将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。

H.264标准的特点及应用

H.264标准的特点及应用 随着人类精神需求和空间需求的提升,人们不再满足面对面的语言交流,空间距离的增加导致人们面对面的语言交流变得越来越少,人们更需要在时空中交流与交往。当传统的交流方式难以实现时,更需要视觉、感观以及信息交流。正因为如此,促进了卫星通信、微波通信、有线/无线传输技术的发展,也推动信息压缩技术和宽带传输技术,同时推动了安防业的迅猛发展。视频信息传输和视频通讯的猛增,给视频压缩技术带来了很大挑战。无论是互联网还是无线网络,都需要一种新型的压缩算法,新算法要求高压缩比,且能适应不同的网络环境。以较小的失真、较高的压缩比、更小的花费、较低的码率在信道中传递视频,进行多媒体通信是今后视频压缩技术研究的一个方向。 H.264,又称MPEG-4part10,也称AVC(AdvancedVideoCoding),是一个数字视频压缩标准,由 VCEG(ITU-TVideoCodingExpertsGroup)和MPEG(ISO/IECMovingPictureExpertsGroup)联合组成的 JVT(JointVideoTeam)于2003年3月正式发布[1,2]。H.264标准的主要目标就是在同等保真条件下,提高编码效率。这是一对矛盾,既然要求图像不失真,则图像传输的比特数就大,在网络带宽一定的情况下,图像信号传输的速度就快,因此,只有提高编码效率才能实现。 H.264的源起 在以往众多的视频编码算法中,被广泛认可并应用于实际的是ISO/IEC制定的MPEG-X和ITU-T制定的H.26x两大系列视频编码国际标准。 H.261是早期的编码标准,主要是规范ISDN网上的会议电视和可视对讲。它采用的是可减少时间冗余的帧间预测和减少空间冗余的DCT变换的混合编码方法,以及ISDN信道匹配,其输出码率是P×64kbit/s。P较小时,传输清晰度不太高的图像;P较大时,可以传输清晰度较好的会议电视图像。 H.263是低码率图像压缩标准,在技术上是H.261的改进和扩充,且支持码率小于64kbit/s的应用。后期263+、263++已能支持全码率应用,支持众多图像,可看出,其支持多格式图像信息传输,如Sub-QCIF、QCIF、CIF、4CIF、16CIF等格式。 MPEG-1标准的码率为1.2mbit/s,可实现30帧/sCIF(352×288)图像传输,它与H.261和H.263相似,也采用运动补偿的帧间预测、二维DCT及VLC游程编码等措施。此外还引入帧内帧(I)、预测帧(P)、双向预测帧(B)和直流帧(D)等概念,进一步提高了编码效率。在MPEG-1的基础上,MPEG-2将针对提高分辨率、兼容数字电视方面做一些改进。 从编码方面知,MPEG-4标准编码技术是简单档次(SimpleProfile),比如Microsoft的WindowsMediaPlayer就是这种档次的媒体系统。这种传统的编码技术因为基于对象编码的难点就是对象的提取,所以影响实用进程。从传输方面分析,目前流行的基于MPEG-4的流媒体技术其本质上没有采用14496-6所提出的传输多媒体集成框架(DMLF),而是根据IEIF提出的传输建议来实现的,还不成熟,目前可实际应用的编码技术仍然是基于帧编码的技术。H.261、H.263、MPEG-1/2/4都是在尽可能低的码率(存储容量)下获得尽可能好的图像质量。目前,H.264标准被广泛应用于有线/无线视频远程监控、网络交互媒体、数字电视及视频会议等等。 H.264的关键技术及优势

信息论与编码课程报告

Turbo码编码与译码方法 一、前言: Turbo码自1993年被提出以来,就以其优异的纠错性能而备受关注,并被主要通信标准所采纳。Turbo码是用短码构造等效意义的长码,以达到长码 的纠错性能而减少解码复杂度。在强噪声低洗澡比的条件下,如E b/N0=0.7dB, 采用编码效率R=1/2的Turbo码,经过18次迭代解码后,仍然具有极低的误 码率。Turbo码得这一特性对于强噪声环境下数字通信与数字信号传输具有重 要的应用价值。Turbo码的发现,标志着信道编码理论与技术的研究进入了一 个崭新的阶段,对现代编码理论的发展起着重要的作用。 二、Turbo码的编码原理: Turbo码编码器由两个递归系统卷积吗编码器(RSC1和RSC2)通过一个交织器并行级联而成,编码后经过删除或复用,产生不同码率的码字,进入传输 信道。Turbo码编码器结构框图如图1所示,信息序列d={d1,d2,…d N}经过N 位交织器,形成一个新序列 d‘={d1’,d2’,…,d N’}(长度与内容没变,但比特位置经过重新排列)。d和d‘分 别传送到两个分量码编码器(RSC1和RSC2)。一般情况下,这两个分量码编 码器结构相同,生成序列X1p和X2p。为了提高误码率,序列X1p和X2p需要经过 删除器,采用删除技术从这两个校验序列中周期地删除一些校验位,形成校验 位序列X P与编码序列u(为方便表述,也用X S表示)经过复用,生成Turbo 码序列。例如,假如图中两个分量编码器的码率均是1/2,为了得到1/2码率 的Turbo码,可以采用这样的删除矩阵:P=[10,01],即删除来自RSC1的校验 序列X1p的偶数位置比特,与来自RSC2的校验序列X2p的奇数位置比特。 S X 图1 交织器在Turbo码中起关键作用。表面上看,它仅仅是将信息序列中的N个比特的位置进行随机置换,实际上,它很大程度上影响了Turbo码的性能。通过随机交织,使得编码序列在长为2N和3N(不使用删除)比特的范围内具有记忆性,从而有简单的短码得到近似长码。当交织器充分大时,Turbo码就具有近似于随机长码的特性。 三、Turbo码的译码原理:

信息论与编码课程设计报告,统计信源熵与香农编码

信息论与编码课程设计报告设计题目:统计信源熵与香农编码 专业班级电信 12-06 学号 学生姓名 指导教师 教师评分 2015年 3 月 30日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 1.统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 2.香农编码 要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 本次课程设计中主要运用C 语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C 程序。 1、信源熵 定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H ()。 计算公式: ) (log )(-)x (i i i x p x p H ∑= 2、香农编码过程: (1)将信源消息符号按其出现的概率大小依次排列为 n p p ≥???≥≥21p (2)确定满足下列不等式的整数码长i K 为 1)()(+-<≤-i i i p lb K p lb (3)为了编成唯一可译码,计算第i 个消息的累加概率 ∑-==11) (i k k i a p P (4)将累计概率 i P 变换成二进制数。 (5)取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。

三、设计流程图 1、统计信源熵 开始 读取给定文件 判断文件是否打开否 并且不为空 是 统计文本字符,直关闭文件 至文本字符读完。 统计同一字符(不分 大小写)出现的次数 计算字符概率 计算信源熵 输出 结束

多媒体计算机技术期末复习

一、填空题: 1、国际电报电话咨询委员会(CCITT,目前已被ITU取代)曾对媒体作过如下分类: (1)感觉媒体:直接作用于人的感官、使人能直接产生感觉。 (2)表示媒体:为了加工、处理和传输感觉媒体而人为研究、构造出来的一种数据类型。 (3)表现媒体:指感觉媒体和用于通信的电信号相互转换用的物理手段或设备。 (4)存储媒体:用于存放表示媒体,以便计算机随时处理、加工和调用信息编码。 (5)传输媒体:用来将媒体从一处传送到另一处的物理载体。 2、(感觉媒体)指能直接作用于人的感官、使人能直接产生感觉的一类媒体。 3、(表示媒体)是为了加工、处理和传输感觉媒体而人为研究、构造出来的一种数据类型。 4、(表现媒体)是指感觉媒体和用于通信的电信号相互转换用的物理手段或设备。 5、(存储媒体)用于存放表示媒体(感觉媒体数字化后的代码),以便计算机随时处理、加工和调用信息编码。 6、(传输媒体)是用来将媒体从一处传送到另一处的物理载体。 7、多媒体技术有时被简称为(多媒体),或(多媒体计算机技术)。 8、人类获取的信息主要是通过(视觉)获取的。 9、DPCM系统中的误差来源是发送端的量化器,而与接收端(无)关。 10、预测编码主要是在(时)域上进行,变换编码则利用频域中能量较集中的特点,在(频)域(变换域)上进行。 11、Huffman编码/算术编码是(可逆[无失真])编码。 12、MPEG音频压缩后的比特流可以按(4)种模式之一支持单声道或(双声道)。 13、MPEG算法允许编码选择I图像的(频率)和位置。 14、基于块的(运动补偿)技术,就是在其(参照)帧中寻找符合—定条件限制、当前被预测块的最佳匹配块。 15、为了适应不同应用的要求,并保证数据的可交换性,MPEG-2 Video定义了不同的功能档次,每个档次又分为几个(功能档次、等级和规 范)。 16、一般情况下,对细节多、运动部分少的图像在(帧)内进行DCT,而细节少、运动分量多的图像在(场)内进行DCT。 17、MPEG算法编码过程和解码过程是一种非(镜像)对称算法,解码过程要比编码过程相对(简单)些。 18、目前市场上流行的MPEG软解压软件有哪些?答:金山解霸、豪杰超级解霸、Xing等。 19、与同期硬盘相比,单片光盘容量比硬盘略(小)。 20、光盘的用户容量比格式化容量要(少)。 21、光盘存储数据采用EFM编码,即将1字节的8位编码为 (14 ) 位的光轨道位。 22、CD-DA即激光唱盘常采用(常线速)伺服方式。 23、激光唱盘的每秒的音频数据分为(75)个扇区。 24、Video CD标准是目前流行的视频光盘标准,它描述一个使用(CD-ROM)格式和(MPEG1)标准的数字电视播放系统。 25、实践中常用的多媒体功能卡有:(声卡、视频卡和图形加速卡)。 26、声卡可选择多种声源(麦克风、CD唱机、线路)输入。 27、(MIDI)是一种电子乐器之间、电子乐器与电脑之间的统一交流协议。 28、目前主要的声音合成手段有:(FM合成和波表合成)。(FM合成)多用于以前的ISA声卡; 波表合成是现在最先进的声音合成方法,它的合成原理要比FM合成复杂得多。 29、如果一首MIDI乐曲中的复音数超过了声卡的复音数,则将丢失某些声部,但一般不会丢失(主旋律)。 30、声音采样位数越(高),采样精度越(高)。 31、声音采样频率越(高),记录声音的波形就越(准确),保真度就越高,但采样产生的数据量也越(大),要求的存储空间也越(多)。 32、声卡复音数越 (大 ),音色就越好,播放MIDI时可以听到的声部越多、越细腻。 33、目前PC 视频采集卡通常采用32位的(PCI)总线接口,插到PC机主板的扩展槽中,以实现采集卡与PC机的通讯与数据传输。 34、低档视频采集卡通过PC机上的(声卡)获取数字化的伴音并把伴音与采集到的数字视频同步到一起。 35、可以把国际标准JPEG或MPEG算法集成在一块(视频处理)芯片上。 36、高性能的视频采集卡一般具有一个( 采集卡)接口和一个S-Video接口,以便与模拟视频设备相连。 37、一般的采集卡都支持(NTSC)和(PAL)两种电视制式。(NTSC,PAL,SECAM) 38、一般的PC视频采集卡采用帧内压缩的算法把数字化的视频存储成( AVI)文件。 39、视频采集卡一般都配有( 图形加速卡 )以控制和操作采集过程。 40、画面刷新率(Frame Rate)即显示器上图像画面的更新速度,单位为FPS或帧每秒。 41、凹凸贴图(Bump Mapping)是一种在3D场景中模拟粗糙表面的技术。 42、常见的3D贴图有:材质3D贴图、Mip贴图、凹凸贴图、视频材质贴图。

相关主题
文本预览
相关文档 最新文档