快速霍夫曼解码算法.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
快速霍夫曼解码算法

快速霍夫曼解码算法在AAC音频解码中的应用 内容摘要 MPEG-2 AAC(Advanced Audio Coding,先进音频编码)数字音频压缩标准,已经成为MPEG国际标准中音频编码的核心,引领着感知音频的发展方向。MPEG-2 AAC是高保真音频编码标准中的一种。从编码原理的角度来看,它包含着多种新型高效的编码工具。主要有修正离散余弦变换(MDCT)、时域预测编码、瞬时噪声整形、无噪声编码等等。在本文中,针对 AAC 解码过程中复杂度最高的无噪声解码模块进行了改进,应用了快速霍夫曼解码,提高了解码效率。 正文 文字大小:大 中 小 一、 研究背景及意义 十多年来,在信元编解码领域的研究中,音频信号的压缩编解码越来越成为人们重视和研究的课题,尤其是最近10多年来,计算机科学技术的高速发展,数字音频逐渐取代了模拟音频,成为了多媒体技术领域的重要研究方向,尤其是宽带音频的高效编码得到了广泛发展和应用。数字音频在消费电子、网络、广播移动无线通信和数字影视等众多领域中有了广泛的应用。但是在很多领域中由于存储介质容量和传输带宽的限制,都要求在很低的比特率下实现数字音频信号的传输。虽然当前的数字音频编码技术已经达到很高的水平,但还是不能满足人们各式各样的个性化需求[1]。 二、 AAC音频解码器结构 MPEG-2 AAC 解码器的组成如图2.1所示,包括比特流解复用、无噪解码、反量化、比例因子解码、M/S、IS.、TNS、合成滤波器组和形成PCM模块。从图2.1可知,MPEG-2 AAC 的解码流程为:比特流解复用模块从原始的AAC码流中分离出数据和控制信息,数据信息送至量化频谱解码模块,控制信息则送到各个相关模块,并由控制信息决定各个功能模块是否激活。量化频谱解码模块根据指定的码本对输入的数据进行Huffman解码,解码后的量化频谱送到逆量化模块,将解出的1024个量化数据进行逆量化变换。缩放因子解码模块将经由Huffman和差分解码后得到的缩放因子与逆量化后得到的频谱数据加权,得到实际的频谱值,并将其传送至M/S解码模块。M/S解码模块通过矩阵运算将传输左右声道频谱和与差的两路频谱数据变换为原始的左右声道。IS解码模块将右声道频谱通过对左声道频谱值做能量加权实现强度立体声解码。TNS解码模块将频谱数据通过一组TNS无限冲积响应IIR滤波器,进行时域噪声整形。最后,合成滤波器组将经过上述各模块处理后的频谱数据转化成时域数据,完成音频解码[2]。 图2.1 MPEG-2 AAC 解码器流程图 三、快速霍夫曼解码的应用和实现 AAC解码器复杂度最高的Huffman解码部分。由于AAC标准中规定的每一个Huffman码表都很长,因此传统的算法解码速度比较慢,特别是对于支持多路解码的系统而言,实践证明最坏的情况下,对于5.1声道的AAC音频输入,在MIPS24Kc主频400M下,每一帧的解码必须在150Mbps以下。因此,我们在这里提出一种快速Huffman解码算法,并在本系统中实现。 通过观察Huffman码表的规律,我们可以看出:相同的码字加1递增,如果码字后面补0扩找到m位(m是码表中的最大码长),则码长小的码字,其扩展后的值一定小于码长大的码字扩展后的值。为了实现快速Huffman解码,可以根据上述Huffman码表的规律建立一个定位表,用于对Huffman码表定位,从而迅速找到匹配值。定位表中也存放了三个信息,分别是扩展的码字、实际码长和码字在Huffman码表中的存放地址。对于Huffman码表中不同的码长,提取其最小的码字及存放地址,并将码字后面补0到m位,形成扩展的码字。我们建立的定位表如下所示[3]。 表 3.1 定位表 Codeword Length Address 0000000000000000 1 0 1000000000000000 4 1 1100000000000000 5 5 1101000000000000 6 7 1110100000000000 7 13 …… …… …… 11111111111111110 16 79 建立了所需要的定位标志后,接着我们设计出下面的伪代码来具体描述快速Huffman解码算法的实现。 typedef struct { unsigned long cw1; //扩展码字 int length; //实际码长 int address; //在Huffman码表中的存放地址 }Huffcmp; int huffman_decoding(Huffman *h, Huffcmp *hcmp, int m) { int cw0; cw0=getbits(m); //从码流中读入长度为m的编码数据 while(cw0=hcmp-cw1) { if(cw0=hcmp-cw1) {

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档