欢迎来到天天文库
浏览记录
ID:21534025
大小:28.00 KB
页数:7页
时间:2018-10-22
《sharc dsp音频算法开发的调试数据分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、SHARCDSP音频算法开发的调试数据分析 摘要SHARCDSP广泛应用于数字音频产品中,为分析SHARCDSP音频算法开发中的调试数据,采用了文件读写、数据流、操作数组和存储空间等4种数据输入输出方法,以及在软件开发平台VisualDSP++中实现的主要步骤及关键代码。以参量均衡算法为例说明如何用MATLAB对调试数据进行分析。 【关键词】音频数据模拟SHARCDSPVisualDSP++ 1引言 目前很多数字音频产品都是采用DSP作为信号处理平台。为降低产品开发难度、加快进度,国内厂家目前使用
2、较多的是基于图标编程的专用音频DSP,如ADI公司的ADAU1701SigmaDSP和TI公司的TAS3108。然而这类基于图标编程的DSP虽然使用方便,但算法功能却受限于现有的算法图标,仅适合较常用的功能,且不同厂家开发的产品易出现同质化的现象。为提升产品的竞争力,有些厂家研究出自己的音频处理算法,在通用DSP上通过编程实现。ADI公司生产的SHARC系列DSP是数字音频产品中常用的通用DSP,其软件开发平台是VisualDSP++(近年推出了CCES软件,支持与SigmaDSP开发软件平台的互连,目前
3、VisualDSP++还是得到广泛应用)。在SHARCDSP上调试音频算法时,除了需将算法通过程序实现外,还需对算法程序调试的调试数据进行分析。以下讨论DSP开发平台上音频数据输入输出模拟的实现方法及如何用MATLAB对调试数据进行分析。 2音频数据输入输出模拟 常见的DSP音频信号处理框图如图1所示。 其中音频算法一般需要在DSP?件开发平台中先通过软件仿真的方式进行调试,在这个过程中没有外部声音信号输入,也无法将处理好的声音信号输出给外部设备,所以需要对图1中的信号输入输出部分进行模拟。下面讨论
4、在VisualDSP++5.0上模拟输入输出音频数据的几种方法。 2.1通过文件读写进行模拟 通过调用文件操作函数,对WAV、PCM等常用的声音文件进行读写,图2是操作框图。 本例程有两点需要注意:一是WAV文件有44个字节的文件头,不能作为声音数据进行处理,因为文件头有保存文件类型大小等,不是声音的具体数据;二是在SHARCDSP中各种数据类型的比特数,比如shortint/int/float等数据类型均为32比特。 2.2通过数据流进行模拟 数据流可以模拟通过外部端口或存储器与DSP处理器进
5、行数据传输。在VisualDSP++菜单中选择“Settings\Streams\Add”,弹出图3所示界面。 共有Source和Destination两栏,通过对这两栏的相关参数进行设置即可模拟数据的输入输出。 模拟数据输入:在Source栏设定File路径,在Destination栏设定Debugtarget,既可以是各种接口,也可以是存储器地址。为方便处理,可以在程序中定义一个变量,然后将该变量地址作为接收文件数据的Debugtarget。 模拟数据输出:在Source栏设定Debugtarg
6、et,在Destination栏设定File路径。实际的算法仿真时,可以将保存输出数据的变量地址作为Debugtarget,程序运行时系统就会将输出数据保存到输出文件中。 数据流模拟时都要使用到数据文件(后缀名为dat),这种dat文件要满足一定的格式,即将所有数据排成一列,可以通过Matlab或C语言编程对dat文件进行读写。更简便的方法是通过CoolEdit软件进行dat文件读写:若要写一个dat文件,则先打开一个声音文件,然后选择另存,类型选txt,最后写自己定义的文件名(后缀写dat);并将该d
7、at文件中的前面几行文件头信息去掉;若要读一个dat文件,直接打开该文件,然后选定采样率和数据量化比特数即可。 2.3通过操作数组进行模拟 以上两种方法主要模拟数据量较大、无法预存到存储空间的情况,对于少量数据的情况,输入数据的模拟可以定义一个输入数组,用原始声音数据对其初始化。输出数据的模拟也可以定义一个输出数组,将所有处理好的数据都存入这个数组。 输入数组的初始化有几种方法,最直接的方法是将所有数据列出来,但对于几百甚至几千个数据的情况,显得页面不够简洁,建议用以下两种方法。 2.3.1汇编语
8、言环境下用dat文件初始化数组 首先将原始数据写入一个dat文件(例如input.dat),然后新建一个asm文件,定义数组名(例如_inputx),选择存储区(例如seg_dmda)。以下是相关代码: .global_inputx;//声明全局变量 .SECTION/DMseg_dmda;//定义数组存放的存储区 .VAR_inputx[N]="input.dat";//用input.dat文件的数据对数组初始化
此文档下载收益归作者所有