📄 21ic 基于定点dsp的mp3间频编码算法研究及实现.htm
字号:
<P
style="TEXT-INDENT: 30px">直接计算(1)式需要64×32次乘法和63×32次加法,采用快速算法需16×16×2+16×2次乘法和15×16×2+16×2+31+15次加法,运算量原来的1/4,而且数据表格所占用的存储空间也减少为原来的1/8左右。</P>
<P style="TEXT-INDENT: 30px">2.2 心理声学模型的简化</P>
<P
style="TEXT-INDENT: 30px">根据试验观察发现每帧的掩蔽阈值曲线大致相同,所以考虑采用静态声学心理模型,具体做法是:首先对某一具有代表性的音频帧,<IMG
height=533 hspace=1 src="21IC 基于定点DSP的MP3间频编码算法研究及实现.files/17j.gif"
width=357 align=right vspace=1
border=0>根据心理声学模型计算出掩蔽阈值曲线,在压缩其它音频源时,不再计算每帧的心理声学模型,而是认为每帧信号与上述被分析过的代表帧具有相同的掩蔽特性。这样,虽然不是很准确,但通常情况下,误差不会太大,不易被人耳察觉,省去心理学模型需的巨大运算量和存储空间。实践证明编码效果令人满意,而且对于要求不是很高的应用场合,可以认为掩蔽阈值是频率的常数函数,每个频带采用相同的量化阶,也听不出声音质量的明显下降。</P>
<P style="TEXT-INDENT: 30px">2.3 量化编码迭代循环的简化</P>
<P
style="TEXT-INDENT: 30px">量化编码迭代是两重循环过程,图3是外迭代循环流图,迭代的目的是在可用比特数的限制之内,以各频带的掩蔽值为依据,确定全局增益(体现了全局量化阶)和各频带的缩放因子(体现了局部量化阶)。内循环逐步增加量化器步长,即全局增益,直到MDCT系数量化后可被可用比特进行霍夫曼编码,即通过增加全局量化阶以降低编码比特数;外循环依据掩蔽阈值检测各缩放因子带的失真,若超过允许失真,则扩大该带的MDCT系数,即增大该带的缩放因子,以降低局部失真;最后一次迭代的结果作为最终的霍夫曼码。每一次循环都要用当前量化阶量化并霍夫曼编码一次,运算量相当大。从外循环可以看出掩蔽阈值最终决定缩放因子,为了能省去外控代循环,将代表帧的缩放因子作成表格,供每帧采用。</P>
<P
style="TEXT-INDENT: 30px">由于上述三个模块是最主要并且运算量最大的模块,通过对它们的简化和优化,程序大小和运算量可得到极大的减少。</P>
<P style="TEXT-INDENT: 0px"><B>3 用定点DSP实现MP3压缩算法</B></P>
<P
style="TEXT-INDENT: 30px">为了实现MP3的实时编码,必须采用高速DSP芯片。采用美国德州仪器(TI)公司的主流定点DSP芯片TMS320C549,其运算速度100MIPS,调试开发的环境是TI公司的第三方Spectrum
Digital公司的EVM评估板,板上除了TMS320C549自带32K字片上内存外,还有128K字片外内存,数模转换采用TI的TLC320AD55,与PC机通过JTAG口实现数据与程序的加载和调试。</P>
<P
style="TEXT-INDENT: 30px">由于评估板与主机的接口速度太慢,即使能做到实时压缩,将比特流传给PC机存盘的速度也会跟不上。因此笔者采用的办法是:将原始PCM音频数据从PC机的硬盘文件加载到板上的片外内存,压缩后的数据传给PC机存盘,再加载后续文件,压缩存盘,直到整个音频文件全部压缩完,最后用C语言程序将各数据块拼成MP3文件,用软件解码程序回放。是否能达到实时要求只能通过测试每帧运行的指令数判断。</P>
<P
style="TEXT-INDENT: 30px">在运用快速算法计算子带分析滤波器时,考虑到DSP芯片的特点,每分解一次,要作一次加(10)式的加法,势必降低精度,另外(11)和(12)式的系数动态范围太大,精度也会受到影响,因此,只分解到16点DCT运算。</P>
<P
style="TEXT-INDENT: 30px">采用静态心理声学模型,心理声学模型和量化编码外循环所需的运算量就为零。代表帧的心理声学模型和缩放因子采用C语言或MATLAB语言编程计算,或者将网上下载MP3文件中的缩放因子信息破译出来加以利用,子带分析滤波器之后的MDCT全部采用长块。表1是静态缩放因子比特数和缩放因子的一种设置方案。<BR><BR><B>表1
缩放因子数据表格</B></P>
<TABLE borderColorDark=#ffffff width="100%" borderColorLight=#000000
border=1>
<TBODY>
<TR class=main>
<TD width="19%">缩放因子带</TD>
<TD align=middle width="4%">0</TD>
<TD align=middle width="4%">1</TD>
<TD align=middle width="5%">2</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">4</TD>
<TD align=middle width="4%">5</TD>
<TD align=middle width="4%">6</TD>
<TD align=middle width="4%">7</TD>
<TD align=middle width="4%">8</TD>
<TD align=middle width="4%">9</TD>
<TD align=middle width="4%">10</TD>
<TD align=middle width="4%">11</TD>
<TD align=middle width="4%">12</TD>
<TD align=middle width="4%">13</TD>
<TD align=middle width="4%">14</TD>
<TD align=middle width="4%">15</TD>
<TD align=middle width="4%">16</TD>
<TD align=middle width="4%">17</TD>
<TD align=middle width="4%">18</TD>
<TD align=middle width="2%">19</TD>
<TD align=middle width="3%">20</TD></TR>
<TR class=main>
<TD width="19%">缩放因子比特数</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="5%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="2%">3</TD>
<TD align=middle width="3%">3</TD></TR>
<TR class=main>
<TD width="19%">缩放因子</TD>
<TD align=middle width="4%">1</TD>
<TD align=middle width="4%">1</TD>
<TD align=middle width="5%">0</TD>
<TD align=middle width="4%">0</TD>
<TD align=middle width="4%">1</TD>
<TD align=middle width="4%">1</TD>
<TD align=middle width="4%">4</TD>
<TD align=middle width="4%">5</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">7</TD>
<TD align=middle width="4%">5</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">0</TD>
<TD align=middle width="4%">3</TD>
<TD align=middle width="4%">0</TD>
<TD align=middle width="4%">1</TD>
<TD align=middle width="4%">0</TD>
<TD align=middle width="4%">7</TD>
<TD align=middle width="4%">5</TD>
<TD align=middle width="2%">0</TD>
<TD align=middle width="3%">3</TD></TR></TBODY></TABLE>
<P
style="TEXT-INDENT: 30px">另外在内循环中,首先初步选择一个全局增益使最大量化值小于码表可编码的最大值,标准推荐的作法是全局增益从小开始,每循环一次量化后,比较最大量化值,并调整一次全局增益,直到满足要求为止。本程序省去了这一循环,事先根据最大谱线值计算出应有的全局增益,作成数据表格,程序中只需根据最大谱线值查表即可。初始化全局增益确定后,要分区、量化、编码并计算编码比特数,如果比特数太大或太小都还要调整全局增益。对这一迭代循环过程,采用折半搜索的办法实现,也就是说第一次循环时全局增益取上述初始化值的一半,若编码比特数超出要求,则再取一半作为新的全局增益,否则增大一半,如此不断循环直到无法折半为止。这种折半搜索的方法比逐一搜索要快很多。</P>
<P
style="TEXT-INDENT: 30px">采用了这些简化、优化措施以及编程技巧,整个编码程序运算量仅需74MIPS左右,片上存储空间占用27K字左右。用标准的MP3回放软件解码,通过主观测评,音质接收CD。</P>
<P
style="TEXT-INDENT: 30px">由于本系统对心理声学模型进行了大量的简化,对于一般的音乐,这种简化带来的声音质量的下降并不明显,尤其是在要求不高的应用场合完全可行。但是当应用到某些编码难度较高的音频信号,例如响板时,声音质量下降较明显。因此如果采用更高运算速度的DSP,可在该编码系统中加入一个完备的或简化的动态心理声学模型,编码质量可进一步提高,至于简化的动态心理声学模型还有待进一步摸索。
</SPAN></P>
<P></P></DIV></TD></TR>
<TR>
<TD align=middle height=15>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD>
<DIV></DIV></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right height=2>
<TABLE cellSpacing=0 cellPadding=0 width="80%" border=0>
<TBODY>
<TR>
<TD width=75>【<A href="javascript:doPrint();">打印本稿</A>】</TD>
<TD width=8></TD>
<TD width=75>
<P>【<A
href="http://www.21ic.com/new_info/news/review.asp?title=基于定点DSP的MP3间频编码算法研究及实现target="
_blank?>发表评论</A>】</P></TD>
<TD width=10></TD>
<TD width=79>【<A
href="http://www.21ic.com/new_info/news/sendmail.asp?num=基于定点DSP的MP3间频编码算法研究及实现">推荐</A>】</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right height=2></TD></TR>
<TR>
<TD align=right height=2><A href="javascript:window.close();"><IMG
height=20 src="21IC 基于定点DSP的MP3间频编码算法研究及实现.files/close_c.gif"
width=77 border=0 name=Image161></A><FONT
color=#ffffff>----</FONT></TD></TR></TBODY></TABLE><BR><BR>
<TABLE cellSpacing=0 cellPadding=0 width=520 align=center border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=middle width=114 bgColor=#999a76
height=1><IMG height=1
src="21IC 基于定点DSP的MP3间频编码算法研究及实现.files/blank.gif" width=1></TD>
<TD width=466 height=1></TD></TR>
<TR>
<TD align=middle width=114 bgColor=#ece8db height=19>相关新闻</TD>
<TD width=466 height=19></TD></TR>
<TR bgColor=#999a76>
<TD colSpan=2 height=1><IMG height=1
src="21IC 基于定点DSP的MP3间频编码算法研究及实现.files/blank.gif" width=1></TD></TR>
<TR>
<TD colSpan=2 height=1></TD></TR></TBODY></TABLE>
<TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width=520
align=center border=0>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE class=RelatedTable width="100%" border=0>
<TBODY>
<TR class=RelatedTr>
<TD class=RelatedTd>
<SCRIPT language=javascript
src="21IC 基于定点DSP的MP3间频编码算法研究及实现.files/about.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR></TD>
<TD vAlign=top align=middle width=150 bgColor=#ece8db height=2>
<TABLE cellSpacing=0 cellPadding=1 width="100%" border=0>
<TBODY>
<TR>
<TD bgColor=#000000>
<TABLE cellSpacing=0 cellPadding=2 width=150 bgColor=#ece8db
border=0>
<TBODY>
<TR>
<TD><!--#include file="../../adinc/a_ad_4.asp"--></TD></TR>
<TR>
<TD
height=5></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=766 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top colSpan=6></TD></TR>
<TR>
<TD vAlign=top colSpan=6 height=10></TD></TR>
<TR>
<TD vAlign=top bgColor=#999999 colSpan=6 height=2></TD></TR>
<TR>
<TD class=stxt vAlign=center align=middle colSpan=6
height=6></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=766 align=center border=0>
<TBODY>
<TR>
<TD class=s width=973 height=12></TD></TR>
<TR>
<TD class=s width=973 height=20>
<DIV align=center><FONT face="Arial, Helvetica, sans-serif"><!--#include file="../../../../inc/copy.inc"--></FONT></DIV></TD></TR></TBODY></TABLE><BR></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -