[dsp设计] dsp实现mp3解码

[dsp设计] dsp实现mp3解码

ID:6684843

大小:159.00 KB

页数:6页

时间:2018-01-22

[dsp设计] dsp实现mp3解码_第1页
[dsp设计] dsp实现mp3解码_第2页
[dsp设计] dsp实现mp3解码_第3页
[dsp设计] dsp实现mp3解码_第4页
[dsp设计] dsp实现mp3解码_第5页
资源描述:

《[dsp设计] dsp实现mp3解码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、概要:Tidsp实现mp3解码    该报告主要介绍了如何应用Ti的TMS320C54X系列DSP实现mp3和AAC的播放器,该播放器基于Ti的referenceframeworklever3,该系统的最大的挑战是把比特流的输入转换成pcm码的输出。Rf中提供了大量的重用代码,使开发者能非常轻松的开发。MP3:ISO-MPEGAudioLayer-3standard(ISO/IEC11172-3,13818-3)AAC:ISO-MPEG2AdvancedAudioCodingstandard(ISO/IEC13818-7)1. 介绍1

2、.1该程序用TMS320DSC25,他是基于c54x的一个的功率的可编程dsp平台,他有一个ARM7TDMI的核心,和一个图象加速器(所以好像有写人把他用在dc上).  该系统我们使用TITLV320AIC23连接到TMS320DSC25的mcbsp串口,TLV320AIC23包含了高性能的A/D和D/A转换器,当然,由于我们使用rf3,所以你也能使用其他的解码器.下图是TMS320DSC25的结构图.     1.2 系统特征:StartStopFast-ForwardFast-RewindPauseResume(fromPause

3、)Resume(fromFF/FR)MuteVolume2 数据流程  图2.表示了数据在系统中的流程. 3 如何使用rf3实现系统.3.1 系统结构概要.  应用rf3使该系统的设计变得十分的简单,图3描述了rf3把mp3解码为pcm编码的整个流程,rf3中的DSP/BIOSSWI线程处理来处理比特流,为了扩展处理器的性能我们使用了两个SWI线程来做数据处理.  在piprxpip中,swiDecode线程把压缩的音乐比特流中转换成pcm编码,swiDecode一次释放一个mp3帧,并把它解码为1152的16比特的pcm编码,对于A

4、AC来说,swiDecode把AAC帧转解码成2048的16比特流的pcm编码,同时,pipdecpip的带宽(注:一次传输16bit)同MP3和AAC解码后的大小一样,,而piprxpip的的带宽明显比pipdecpip的带宽大,也就是说每当swiDecode线程运行一次的时候能完成输出一个解码后的帧,但是不能完成一个输入的帧(很简单的道理,因为mp3和AAC编码都是经过压缩后的,所以执行一次解码,解码后会产生更多的编码)  而同时swiPcmproc线程主要是负责取样频率的转换,音量的控制,和解码后的16比特pcm编码的滤波,,此

5、线程运行一次处理16比特的pcm编码(一个WORD等于16bit),同样的,swiPcmproc线程不能一次完成一个帧的输入,但是能完成一个帧的输出,,很显然的,swiPcmproc线程的优先级比前一个线程的优先级高.  以上我们也提到了,在poprx和pipdec中消费和生产不能同步.见图3 3.2 两个线程的同步.  Rf3使用DSP/BIOS数据管道的提醒功能来实现时间线程,在rf3中,时间提醒功能不直接造成软件的中断,而是他从SWI的信箱中清除专有的比特信息.   对于输入输出信息量不改变的系统而言是很简单的,但是,解压压缩比

6、特流和采用频率的变化改变了输入和输出的数据大小.  也就是说,一个MP3解码器捕获了一个mp3的帧(这是长度可变的)然后解压到1152的pcm编码,解码线程把输入的帧标记为lock状态,知道解压完整个帧,所以只有解码线程知道mp3帧的信息,同时,解码器对应一个输入帧生成了多若干的输出帧.  为了应付上述情况,解码器线程将把一个输入帧的状态置为lock,直到该帧的所有相关的操作全部完成.当一个输入帧的状态标记为lock后,解码器线程将会自动从”信箱(mailbox)”中清理该帧的”(notifyReader)”,3.3 管道中止通知(D

7、isablingPipeNotification)  为了实现停止和暂停的功能,你应该为你的电路增加一个开关(见图6),也就是增加一个使能端,你可以用”管道中止通知(DisablingPipeNotification)””停止”比特流的处理.主要该管道中止通知(DisablingPipeNotification)紧紧是一个消息,他并没有真正的中止. 3.4 Notification的存取(NotificationLatency)  要开始播放和暂停后继续播放,你需要清除输入pipe中的垃圾信息,用pip_get函数来实现。然而,pip

8、_get函数会在清除的处理过程中产生一个伪造的notifyReader通知,   以下的代码实现了如何从一个pipe中清除垃圾信息   以下函数实现了屏蔽pipenotification和notification的存取。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。