当前位置:文档之家› 信息论与编码课程设计报告

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

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

目录

一:实验原理----------------------------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;

if((fp=fopen("","wb"))==NULL)

{

printf("打开失败 ....");

return;

}

if(fwrite(&filedata,sizeof(filedata),1,fp)!=1) printf("写入文件失败 ....");

fclose(fp);

}

void openfile()

{ FILE *fp;

if((fp=fopen("","rb"))==NULL)

{

return;

}

fread(&filedata,sizeof(filedata),1,fp);

}

void translate()

{

char c;

int i,j,k=0,m,n=0;

printf("请输入你想要译码的二进制序列 ");

printf("\n");

getchar();

scanf("%c",&c);

for(i=0;(i

{ code[i]=c;

scanf("%c",&c);

}

printf("对应的信源符号为:");

for(j=0;j<=MAXVALUE&&HuffNode[j].parent!=-1;j++) m=j+1;

for(j=0,k=m;j<=i;j++)

{

if(code[j]=='0')

{

n=HuffNode[k].lchild;

if(n==-1)

{

printf("%c",HuffNode[k].ch);

k=m;j--;continue;

}

k=n;

}

else

{

n=HuffNode[k].rchild;

if(n==-1)

{

printf("%c",HuffNode[k].ch);

k=m;j--;continue;

}

k=n;

}

}

}

void Huffman()

{

HCodeType HuffCode[MAXLEAF],cd;

int i,j,m1,m2,x1,x2,c,p,m;

if==0)

{ printf("\n输入信源符号总数 : ");

scanf("%d",&m);

=m;

for(i=0;i<2*m-1;i++)

{ HuffNode[i].gailv=0;

HuffNode[i].parent=-1;

HuffNode[i].flag=0;

HuffNode[i].lchild=-1;

HuffNode[i].rchild=-1;

HuffNode[i].ch='a';

}

for(i=0;i

{ printf("请输入 (概率,信源符号):");

scanf("%f %c",&HuffNode[i].gailv,&HuffNode[i].ch);

[i].gailv=HuffNode[i].gailv;

[i].letter=HuffNode[i].ch;

savetofile();

}

}

else

{ m=;

for(i=0;i<2*m-1;i++)

{ HuffNode[i].gailv=0;

HuffNode[i].parent=-1;

HuffNode[i].flag=0;

HuffNode[i].lchild=-1;

HuffNode[i].rchild=-1;

HuffNode[i].ch=3;

}

for(i=0;i

{ HuffNode[i].gailv=[i].gailv;

HuffNode[i].ch=[i].letter;

}

}

for(i=0;i

{ m1=m2=MAXVALUE;

x1=x2=0;

for(j=0;j

{ if(HuffNode[j].gailv

{ m2=m1;

x2=x1;

m1=HuffNode[j].gailv;

x1=j;

}

else if(HuffNode[j].gailv

{ m2=HuffNode[j].gailv;

x2=j;

}

}

HuffNode[x1].parent=m+i;

HuffNode[x2].parent=m+i;

HuffNode[x1].flag=1;

HuffNode[x2].flag=1;

HuffNode[m+i].gailv=HuffNode[x1].gailv+HuffNode[x2].gailv;

HuffNode[m+i].lchild=x1;

HuffNode[m+i].rchild=x2;

}

for(i=0;i

{ =m-1;

c=i;

p=HuffNode[c].parent;

while(p!=-1)

{ if(HuffNode[p].lchild==c)[]=0;

else []=1;

;

c=p;

p=HuffNode[c].parent;

}

for(j=+1;j

HuffCode[i].start=;

信息论与编码课程报告

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码的译码原理:

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

目录 一:实验原理----------------------------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.设计目的 (1) 2.设计思想 (1) 2.1网站整体结构规划思想 (1) 2.2 主页设计思想 (1) 2.3子页的设计思想 (1) 3网页详细设计分析 (1) 4结论 (2)

1.设计目的 阐述该个人网站的设计意图和创意,简单介绍自己的个人网站。 2.设计思想 阐述网站的整体设计思想,包括: 2.1网站整体结构规划思想 要求阐述网站整体结构的选择、设计的思想,绘制网站结构草图。 2.2 主页设计思想 要求对主页的布局思路进行阐述和分析。 2.3子页的设计思想 要求对子页的设计以及网页对象的选取思路进行阐述和分析。 3网页详细设计分析 要求选取一张网页,对网页的设计实现过程进行阐述和分析,详细说明制作该网页的步骤,所使用的网页对象以及该网页对象的操作方法。

4结论 对整个设计报告做归纳性总结,并分析设计过程中的困难及如何解决的,最后提出展望。 一、设计目的 本课程的设计目的是通过实践使同学们经历Dreamweaver cs3开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。结合具体的开发案例,理解并初步掌握运用Dreamweaver cs3可视化开发工具进行网页开发的方法;了解网页设计制作过程。通过设计达到掌握网页设计、制作的技巧。了解和熟悉网页设计的基础知识和实现技巧。根据题目的要求,给出网页设计方案,可以按要求,利用合适图文素材设计制作符合要求的网页设计作品。熟练掌握Photoshop cs3、Dreamweaver cs3等软件的的操作和应用。增强动手实践能力,进一步加强自身综合素

信息论与编码实验报告.

本科生实验报告 实验课程信息论与编码 学院名称信息科学与技术学院 专业名称通信工程 学生姓名 学生学号 指导教师谢振东 实验地点6C601 实验成绩 二〇一五年十一月二〇一五年十一月

实验一:香农(Shannon )编码 一、实验目的 掌握通过计算机实现香农编码的方法。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。 三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1、将信源消息符号按其出现的概率大小排列 )()()(21n x p x p x p ≥≥≥ 2、确定满足下列不等式的整数码长K i ; 1)(l o g )(l o g 22+-<≤-i i i x p K x p 3、为了编成唯一可译码,计算第i 个消息的累加概率 ∑ -== 1 1 )(i k k i x p p 4、将累加概率P i 变换成二进制数。 5、取P i 二进制数的小数点后K i 位即为该消息符号的二进制码。 四、源程序: #include #include #include #include #include using namespace std; int main() { int N; cout<<"请输入信源符号个数:";cin>>N; cout<<"请输入各符号的概率:"<

int i,j; for(i=0;i

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

吉林建筑大学 电气与电子信息工程学院信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现专业班级:电子信息工程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 ????=????????

WEB个人主页课程设计

Web应用开发技术 实验报告 专业:计算机科学与技术 班级: 学号: 姓名:

一、设计题目 个人网站 二、目的 1、本次设计是学生在学完ASP动态网站开发课程后的一次实践性很强的课程设计,是对ASP进行动态网站开发所学知识的综合运用。 2、掌握使用ASP技术进行网站开发设计。 3、通过本次实习,使学生加深所学知识内容的理解,并能积极地调动学生的学习兴趣,结合实际应用操作环境,真正做到理论与实际相结合。 三、功能需求描述 此网站可以对主人留言,来发表自己的心情,也可以把自己的联系方式写入其中,达到和睦相处、心灵的驿站的目的等。 四、总体设计

五、详细设计 (一)、我的主页 此页面为网站的主页,通过发布新心情,点击通讯录可以查看通讯录好友信息,点击留言板可以查看好友留言。 主要代码: 个人空间