- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络多媒体上机实验报告目录实验一 哈夫曼编码实验二 算术编码实验三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,实验四 WAV文件的读取算法分析:音频文件中的各个字节都有自己的含义,各个字节按照相应的顺序排布。只要我们读出这些文件,并按照相应的字节来解读就可以得到想要的信息。程序设计:读入一个音频文件,用fopen打开它,读入一个数组,按照wav文件头的定义信息,一段一段的读出来,为对应的信息。调试过程:读入一个音频文件,用fopen打开它,并且用fgetc来一个字节一个字节的读入,就可以解析到相应的信息实验结果:从上面我们可以看到其中的相应的信息,一些重要的参数。附录源程序1.哈夫曼编码#include stdio.h #include stdlib.h#define MAXBIT 100 //编码比特长度#define MAXVALUE 10000 //节点权值#define MAXLEAF 30 //叶子节点#define MAXNODE MAXLEAF*2-1 //树节点typedef struct{ int bit[MAXBIT];//节点编码 int start;//起始位标记 }Hcodetype; typedef struct{ int weight; int parent; int lchild; int rchild; int lenght; }Hnodetype; void huffman
文档评论(0)