西电软院网络多媒体上机报告讲解

西电软院网络多媒体上机报告讲解
西电软院网络多媒体上机报告讲解

网络多媒体上机实验报告

目录

实验一哈夫曼编码

实验二算术编码

实验三LZW编码

实验四WAV文件的读取

附录对应的四个源程序 实验一哈夫曼编码

算法分析:

哈夫曼编码采用自底向上的描述方式。哈夫曼编码运用了贪心算法,每次都取权值最小的两个节点合并成一个节点,该合并节点的权值记为两者权值之和,然后继续上述操作直到最后合并成一个节点,在建成树的过程中,就记下了相应的哈夫曼编码。通过已经构造出的哈夫曼树,自底向上,由频率节点开始向上寻找parent,直到parent为树的顶点为止。每个频率都会有一个01编码与之唯一对应,并且任何编码没有前部分是同其他完整编码一样的。

程序设计:

构造最优二叉树:输入入N个叶子节点的权值,找出所有结点中权值最小、无父结点的两个结点,并合并成一个结点,继续在剩下的结点中寻找权值最小的叶子结点,循环合并结点操作,并最终生成最优二叉树,节点在二叉树的深度的编码既是对此组字符的哈夫曼编码。

我们将用自己定义的结构体来表示各个节点,其中结构体中包含权值,左右孩子和父节点,然后用一个select函数来寻找当前最小的两个节点,合并成一个节点,然后继续直到全部合并为一个节点,然后顺着树来将其01编码储存在一个一个字符数组中。

调试过程:

由于之前做过哈夫曼编码问题。因此问题不大,未遇到较难处理的问题。

运行结果:

这是实验的截图,从中可以看出,权值比较大的用到的编码的位数比较少,而权值较小的节点则远离根节点。而且,我们可以从上图看出哈弗曼是一种前缀编码。

实验二算术编码

算法分析:

算数编码是一种更现代的编码方法,算术编码把整个消息看做一个单元。在实际的应用中,输入数据同城被分割成块以避免错误传播。他只传输一个区间的值,从而可以通过迭代得知相应的信息,性能比较好。

程序设计:

我们将整个信息的概率设置为1,各个信号的概率给出,则一个字符一个字符的取,当取到某个自腐蚀,则将其限制在{low,high}之间,然后在在这个区间内继续往下细分,不断迭代,最后生成一个数,我们可以寻找在最后区间内的一个最短的二进制码字,记得到编码,解码同样是不断的看在那个范围中。

调试过程:

这个感觉就像是一道数学题,但是在写的过程中确实存在精度的问题。

实验结果:

最大的问题就是精度的问题,表示的精度范围是有限的。

实验三LZW编码

算法分析:

LZW算法利用了一种自适应的,基于字典的压缩技术。和变长编码方式不同,LZW使用定长的码字来表示通常会在一起出现的符号/字符的变长的字符串。

和其他的自适应压缩技术一样,LZW编码器和解码器会在接收数据时动态

的创建字典,编码器和解码器也会同时产生相同的字典。

程序设计:

它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。 LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如“print”字符串,如果在压缩时用266表示,只要再次出现,均用266 表示。

调试过程:

运行结果:

从上图可以看出,a,b,c,ab分别占据了0123的编码,故abcabc输出0,1,2,3,2,

相关主题
相关文档
最新文档