基于DSP的音频处理器 毕业设计论文.docx
《基于DSP的音频处理器 毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于DSP的音频处理器 毕业设计论文.docx(31页珍藏版)》请在冰豆网上搜索。
基于DSP的音频处理器毕业设计论文
目录
基于DSP的音频处理器2
1.设计目标2
2.硬件平台3
3.DSP软件—标准的音频框架6
4.DSP软件—音频效果算法9
(1)自动音场转移(Autopanner)9
(2)人工混响10
(3)时间延迟效应――颤音(vibrato)、和声(chorus)及回旋(flanging)13
5.主机支持软件—EVM6xAPI22
6.主机应用软件—音频效果控制界面24
基于DSP的音频处理器
这个应用例子,我们将了解个人计算机主机内部音频效果处理器的发展。
尽管我们选用的的应用很简单,它却是研究大量DSP系统应用设计与实现的重要手段。
就本例的应用开发平台而言,我们选择C6xxxEVM板,因为它不仅集合了前面几个章节中讨论的内容,而且提供了本例音频效果处理器的理想模型。
C6xxxEVM包含了必需的CD品质立体音频编/解码器,一个快速的DSP处理器以及一个PCI界面,通过这个接口,可以实时控制音频效果。
基本配置下图所示。
1.设计目标
这个设计实例可分为三部分,
(1)硬件平台设计,
(2)应用算法设计,即音频处理计算法,(3)主机软件设计。
正如上面所提,硬件平台是TI的C6xxxEVM板。
这是一个明智的选择,因为它包含了系统应用所需的主要系统部件,并且,TI免费提供这一模板的设计。
因而这将成为开发特定系统平台的良好开端。
此处介绍的音频效果处理器能有效使用时间延续以及可调性时间延续功能来达到简单的样本混响,截边以及和声效果。
输出调制器的应用使得输出幅度平坦。
所有这些效果都是由主机软件界面来控制的。
主机软件通过PCI总线进行通信,并控制实时DSP算法。
主机软件也也能在开始阶段对DSP进行初始化,下载必要的音频处理算法,因而并不需要EPROM进行引导。
当DSP卡被初始化后,它就可以自主运行,几乎不许要对主机输入。
作为主机软件的一部分,效果控制界面提供对对效果算法的异步控制。
这使得调制深度,调制速率,延时长度可以实时变化,而不必停止或中断原算法。
在下面的章节中,我们将从硬件平台着手,依次研究设计的各个部分。
图10-11显示了该应用的总结,不同软件的组成部分和接口。
2.硬件平台
作为此项应用的基本平台,C6xxxEVM开发平台在第2.4章节中有详细叙述。
该平台使用的编/解码器接口在第4.4章节中有详细介绍。
有关直接存储器存取传输,主机端口和高速串行端口部分在第4章中也有介绍。
因而,我们没有必要再在本章中赘述这部分内容。
图10-12,完整描绘了TI的C6xxxEVM板,包括C6xxxDSP,编/解码器,存储器部分,主机端口接口和PCI总线。
C6xxxEVM板上的PCI接口具有即插即用的功能,并且能支持高速数据传输的主副模式:
即PCI总线通信初始化可由目标或主机方来驱动。
PCI的即插即用特性管理着寻找地址以及中断分配的各个方面,从而保证不会出现资源冲突的情况。
在计算机启动阶段,具有PCI接口的器件能自动由计算机的BIOS来配置。
这意味着插入PCI总线的一块C6xxxEVM卡将具有动态分配的个人计算机记忆存储地址和中断线。
从编程者的角度来看,为了简便起见,TI提供了软件驱动器来支持EVM板。
驱动程序是用来查询EVM板的PCI控制器,并获得该板相关的存储地址和中断分配信息。
这是非常有用的,以为它使得用户只需插卡和启动计算机。
EVM的驱动器自动处理用户软件与EVM硬件实体间的接口问题,并考虑分配中断与存储器配置。
标准PCI总线能够以132MB/S数据速率进行突发的通信。
同样,在主动模式下,每块独立的PCI卡能够在很短的时间内完全控制总线,从而完全达到突发的传输速率。
这就意味着个人计算机和PCI卡双方都不会落后。
当然,也可以在典型系统中使用多个外部PCI器件,所有器件以时分复用方式工作。
所以,连续的传输率将低于132Mhz的速率。
为了使任何系统中的传输速率最大化,最好使用突发模式传输,而不是重复单个字的传输。
因为这样可以减少总线请求和请求允许的总耗费。
基于工业标准的应用的专用集成电路,ASIC,C6xxxEVM实现了一个标准的PCI。
使用标准PCI器件的一个优势是所有的数据传输都是由该器件自行管理的,从而保证了C6xxxEVM器件本身不需要处理时间的消耗。
PCI和ASIC以及与C6xxxDSP接口的图示如10-13所示:
C6xxxEVM提供的PCI允许以下三种方式与C6xxxDSP通信。
第一种方法是使用一组先进先出列队和邮箱寄存器,每一方可以通过这些来传输数据。
当主机方填满了邮箱,DSP处将会相应产生一个中断信号,从而引发中断服务线ISR来收集邮箱数据。
同样如果DSP方填满了回复邮箱,并在主机方产生一中断信号,就触发了主机数据收集的中断程序。
第二种通信方式是应用JTAG接口。
这一接口可对DSP的所有运算进行检测和实时控制。
一般而言,这个接口多为软件和硬件调试所使用。
CCS在C6xxxEVM上调试软件时,也使用JTAG界面。
PCI的特殊应用集成电路的第三种界面是HPI。
这个接口允许异步导入DSP中的任意内存或外存空间。
HPI使用DMA来访问DSP的可寻址可存储空间。
由于HPI使用DMA来传输数据,所以当数据在传输过程中,它对核心的实时处理能力的影响很小或几乎没有。
HPI是最佳的用于音频效果处理的接口,并且它将从主机软件控制面板的控制信息传送到DSP算法中去。
C6xxxEVMHPI在传输中使用小恩迪安数据格式,即首先传输的半个字的最低位的字组。
也就是说,数据必须使用低字/高字的传输次序来传送。
这本身与PCI总线和个人计算机相兼容。
EVMPCI接口以及支持的软件允许以字节,字,双字的方式访问DSP的任何可寻址存储器空间。
HPI的自动增量功能也支持顺序数据传输。
这样可以快速传输一大块数据,而不需要在单个字的传输上表明目的地址。
这种顺序地址传输模式使得PCI总线真正以群发模式工作。
同时,它的数据传输速率接近PCI总线的最大数据传输速率。
我们已经说过,传输速率不可能达到全速—132MB/s数据速率。
C6xxxEVM板上的立体声CODEC是CrystalSemiconductors生产的标准16位多媒体器件。
其音频数据传输中使用串行接口,在接口控制部分采用8比特并行总线。
CODEC控制寄存器影射至DSP的存储空间,因而它的配制比较简单。
同样,由于这些寄存器映射到DSP的存储空间,通过PCI的主机断口,可以在主机上显示出来。
这种CODEC中,缓冲的串行端口McBSP以及DMA传输的工作方式在第4.4章节中已有详述。
3.DSP软件—标准的音频框架
音频效果应用使用标准软件框架,它能使DSP和CODEC初始化,获得并处理音频样本。
该框架作为C6xxxEVM的一个软件范例,在TI的文件SPRA598中有详细说明。
由于这里仅作简单介绍,建议感兴趣的读者参考该文件,以便更深入了解音频软件的框架。
该软件框架广泛使用DSP/BIOS任务管理软件,这部分在第2章中有过介绍。
音频处理的软件框架实际上是个能被成功编译和直接执行的核心的应用。
该框架将音频样本收集到一个叫做rx_pip的样本缓冲器中。
当rx_pip中已经收集了128个样本时,一个叫做audio(..)的用户程序被执行。
就如上文所说的那样,不做任何变动,用户程序audio(..)简单地将rx_pip中的样本复制到输出样本缓冲器tx_pip中,从而获得一个简单的audio_thro应用。
这个框架继续使用这种方式工作直到DSP停止或重新启动。
为了使用音频软件的框架,用户必须将所需的样本处理任务置于audio(..)函数中,取代从rx_pip到tx_pip的拷贝任务。
用户样本处理任务必须从rx_pip缓冲区提取音频样本,对其进行处理并将处理好的样本置于tx_pip缓冲器中,准备传回CODEC。
当然,在下一列数据到达之前,用户启动程序必须结束对128个样本全部进行处理。
顺便提下,缺省的采样速率为48kHz,数据格式为16比特立体声。
图10-15对音频框架编码的基本运算有详细说明。
由于音频软件框架是一个DSP/BIOS应用装置,比较容易启动。
所有的数据换冲器(即管道)和软件/硬件中断都由图10-16所示DSP/BIOS配置工具使用完成。
该培植工具是个简单易用的图形用户界面(GUI),能辅助用户,将实时应用中可能产生的各种事件连接到某个软件程序,这个程序负责对各个具体事件的处理。
在本应用装置中,事件管理器完成数据在McBSP,串行端口,rx_pip与tx_pip的缓冲器之间的传输。
这种硬件中断是在McBSP准备好接受新数据时触发的。
其他的事件管理器是由诸如rx_pip缓冲器满而tx_pip缓冲器空这些相关软件来触发的。
我们所指的事件,是能够触发并请求中断服务程序(即一个事件管理器)的硬件和软件中断。
图10-17是用TICCS开发一个DSP音频应用软件时的屏幕快照。
其中,数据存储器视图能够在程序运行中调整不同音频效果的控制参数。
可以在屏幕中的audio.c中看到效果处理函数的C语言程序。
4.DSP软件—音频效果算法
图10-18概括地给出了应用中使用的效果处理法。
这种算法是在第8章提出的思想上发展起来的,主要用于基本边缘提取,和声,混响和立体声扫描调制效果。
在这里我们可以考虑其他软件方法的实现。
关于音频效果算法
(1)自动音场转移(Autopanner)
自动音场转移效果是用DSP器件实现的最简单的音效之一。
基本上,一个音场转移控制器将一个单声道信号置于左右喇叭之间的某处。
自动音场转移做的是完全一样的事情,但位置却反复地在一对立体声喇叭之间变化。
音场转移是用基于软件的低频信号发生器控制的,它驱动一个增益控制模块的输入,见图3-1
图3-1简单的自动音场转移效果
软件形式的增益控制模块很简单,只需要讲进来的音频样值盒当前的增益系数相乘就可以了。
增益系数是由信号发生器产生的。
信号发生器也相当简单。
如果用的是查找表法,需要用两个独立的指针,一个用来控制左声道,另一个用来控制右声道。
如果要音频信号的电平在收听范围内保持恒定但同时也要使用面板效果,则信号发生器的波形必须基于一条对数曲线。
或者,可以选择简单的正弦波形或斜升波形来产生切换效果,但是信号的电平要被调制。
如果音场转移控制信号是基于低频正弦波的,那么左右两个声道的激励在查找表中必须要有90度的间隔。
这样可以保证能平滑地往返扫过喇叭而音频信号不会同时消失。
如果要求接收地信号幅度保持恒定,则对数形式的音场转移波形必须保证中间位置同时处在左右两个声道的-3dB处,见图3-2所示
图3-2保证接收幅度恒定的面板波形
图3-2的图表说明了用以驱动左右两个声道的波形。
显然两个声道可以使用相同的查找表,但是查找表中的指引位置是不同的,而且总是朝相反的方向移动。
只要查找表的精度是够高,由面板位置调制造成的拉链噪声就听不到。
通常长为128个采样点的查找表就足够了。
在光盘盒DSPStore上可以找到在PC机上可执行的自动面板程序以及基于C6xxx的版本。
(2)人工混响
通常,在录音棚内录制的作品缺少空间感,这是由于大多数录音棚的声学结构都是被设计成无反射的。
这么做是故意的,因为我们可以在录音完成之后在通过电子手段人为地加上声学特性,这使得录音工程师对最后录制完成地素材有更好地控制。
使用人工混响处理器,录音地环境可以模拟小房间、大厅和教堂等等。
原先模拟混响的做法是在隔音室内悬挂大面积的金属板,上面再装上传感器。
音频信号进入输入传感器,同时在金属板间产生激荡。
金属板的其他地方安装了一组接受传感器,用以接收反射信号。
还有一种叫做“延迟线”的方法,就是改为悬挂弹簧片。
虽然这种物理方法能取得混响效果,但是听起来不自然,而且录音工程师很难对混响的特性进行控制。
现在的方法都使用DSP技术,而且已经发明了很多实现途径,所以已经能够对音频信号的反射特性进行精确的控制。
在详细考虑如何设计基于DSP的混响模拟器之前,研究一下音场的特性是很值得的。
当声源在封闭空间内发出声波后,声波会在空间的边界表面上反射多次,最后声压一直衰减到听不见。
封闭空间的大小和边界表面的“质量”都会影响声音衰减的时间。
假设两个房间的素材是一样的,则大房间的衰减时间比小房间长。
声波在空间内的来回反射,反射时间的标准估算方法被称作RT60。
这种方法是由W.C.Sabine发明的,和空间的大小以及声压衰减60dB所需的时间有关。
早先提到的“质量”指的是空间内材料吸收声音的水平。
硬质材料吸收得少,反射得多;柔软得材料吸收得多,明显地削弱反射特性。
同时需要注意地是大多数材料都有各自地频率响应,有些吸收高频反射低频,有些却正相反。
使用地材料、空间的大小和音场的形状都对音场的特性有影响。
当音场内的声源发射出声波之后,声波到达收听者的方式基本上是可以预测的。
见图图3-3和图图3-4。
首先,有一部分声波是直接传播到收听者的,也就是没有经过墙壁的表面反射,然后到达的是从最近表面反射的声波。
这些声波被称作早反射,通常在50ms左右。
早反射由人的大脑进行综合后并不产生单独的回声,但是决不能低估了它们的重要性。
它们是大脑判断收听空间大小的重要依据。
通过延缓早反射到达的时间,人工混响处理器可以使虚拟的环境听起来比真实的大。
相对于整个反射过程,早反射的时间在决定音场的大小上要重要得多,反射时间是空间和吸收率得函数,而早反射开始时间则取决于到最近表面得距离。
在早反射到达之后有一段“多次反射”:
声音通过很多反射表面之后再到达收听者。
图3-3收听者听到直接传播、早反射和多次反射的示意图
图3-4由直接传播、早反射和多次反射组成的混响
·简单回声模拟器
如图3-5所示,环形缓冲区可以用来模拟简单得回声。
将接收到得采样信号和经过延迟得采样信号混合之后就能在处理器得输出端产生一个回声,当然,先决条件是延迟要大于40ms,也就是超过大脑最小的综合时间。
图3-5简单回声模拟器
图3-5的结构其实就是一个FIR滤波器,可以用一个简单的差分方程来描述其响应:
Y[n]=x[n]+ax[n-R]|a|<1
该滤波器的冲激响应和幅度响应分别见图3-6和图3-7。
从声学角度看,这种结构模拟了直接传播的声波和之后跟着的经过一次反射的声波。
延迟R表示声波从反射表面反弹的时间。
系数a控制吸收的有效电平:
如果a等于1,则反射表面不吸收声能,如果a等于0,则模拟的表面完全吸收声能。
图3-6简单回声发生器:
冲激响应
图3-7简单回声发生器:
幅度响应
虽然这种回声生成器的实现方法非常有用,但它的复杂度远远比不上实际的回声模拟器。
(3)时间延迟效应――颤音(vibrato)、和声(chorus)及回旋(flanging)
颤音、合声及回旋这些音效非常依赖于音频样值的延迟。
对于反射处理器,用DSP器件就意味着使用环形缓冲区。
这些效果的差异在于延迟的长度由某种低频信号发生器调制。
这三种效应的前馈、反馈和延迟时间均不相同。
颤音效果就是由音乐信号音高进行波动调制形成的。
可以通过正弦调制延迟线的长度来实现,见图3-8。
图3-8的模型也已经输入了Simulink。
而且经台式PC实话测试过。
图3-8简单颤音效果处理器框图
要注意的是:
这些效果的延迟长度必须是线性调制的,也就是说调制不会仅仅是延迟长度的整数变化。
在图3-8中要求输出抽头在额定延迟上平滑移动位置。
因为必须使用线性调制,所以必须使用内插法来估计在存储的真实样值之间的采样值,见图3-9。
有几种利用特殊滤波器计算所需中间结果的内插方法可供使用。
一定要记住图3-9中的延迟是一个环形缓冲区,输入的新样值以采样速率写入缓冲区。
假定没有调制存在,额定延迟长度是输入指针和输出指针之间的距离(以采样点数目计)。
总的延迟长度总是选得比所需的长一些,这样在产生深度调制的时候也不会产生输出指针“超越”输入指针的情况。
图3-9采用内插方法的线性延迟线调制
我们已经提到:
颤音是对音频信号音调进行的调制。
让我们来看一下颤音效果的频谱图像。
输入是单一的未调制正弦波。
在频谱图像上,未调制的输入信号是测试频率上的一条直线。
然后,加上了颤音效果之后,频谱图像上的音调变化是通过直线的调制来显示的。
如图3-10所示,颤音效果加在10kHz的单音信号上。
延迟长度的调制在正负1000个样值之间,而调制波形是正弦波。
在图3-10中也可以观察到由内插法得到的值。
这些可以当作附加的正弦调制。
图3-1010kHz信号加上颤音效果之后的频谱图像,延迟调制为正弦
从实现角度看,回旋和颤音效果不完成相同,多加了一条前向通路和输出加法器,见图3-11。
图3-11基本回旋效果单元的框图
从声学角度看,回旋和颤音有天壤之别。
原先在高级信号处理技术发明之前,回旋是通过将两部播放相同内容的磁带机的声音混合来合成的。
操纵者通过按住供给轮的边缘来调制其中一台机器的速度:
卷音效果的名字也由此得来。
回旋的效果是通过将信号和其自身的延迟相混合来扰乱耳朵的时间相关机理。
延迟是动态调制的,但总是在听觉系统的综合时间常数以内。
在反射处理器的讨论只能够曾强调过,信号和自身延迟的相加结果是使网络的响应呈梳状。
通过调制延迟长度,,回旋信号的频谱上出现时变的梳状响应。
图3-12的频谱图像中可以观察到回旋的时变梳状响应。
图3-12中使用的输入信号使均衡分布的白噪声。
因此,如果不加回旋效应,在频谱图像上的所有频率上会出现宽带的“模糊”。
加上回旋效果后,梳状响应的凹糙在频谱图像上会呈现可分辨的直线,这也是因为梳状响应应根据正弦调制不断地在变化。
从图3-12中也可以观察到凹槽地位置随时间变化。
图3-12回旋效果的频谱图像,显示了时变梳状响应
和声效果地实现也离不开调制延迟线这一主题。
和声单元地思想使:
它能给人多声源同时发声地感觉,使声音富有层次感。
单声道输入信号送入几个平行地调制延迟线,输出再和输入信号相加。
每条传输延迟线使用地调制速率和深度都不一样,这样使得输入信号不同地“调制拷贝”能够得到轻度地去相关,从而模拟了在真实演出中多个乐器同时演奏时音调和节拍上自然轻微地不一致。
延迟线必须用随机信号调制,这有助于进一步将声源去相关。
对于不同的输出,还可以加上一个小幅随机幅度调制,目的时模拟多声源情况下的瞬间增强和减弱。
图3-13是和声单元的框图。
在所有这些效果中,我们很少对控制参数的设定加上苛刻的要求。
这是因为通常这些参数是根据不同的应用场合和不同的处理需求而定的。
这些效果的延迟调制几乎总在10Hz以下,典型的是在1Hz左右。
正弦调制适用于颤音和回旋效果,而和声效果的调制最好,但并非必须使用随机信号。
从延迟时间角度看,回旋器的延迟时间远小于和声单元。
当调制一直深到零使,可以得到最强烈的回旋效果,梳状的凹槽很深。
对于回旋器,典型的额定延迟时间在5ms左右,也就是在耳脑机理的综合时间常数以内。
对于回旋器来说,大概在30ms左右。
和声单元的调制深度不能逼近零,否则会转化为回旋器。
所以和声调制一般在+-10ms左右。
现在看来,虽说对参数设定没有苛刻的要求,但确实还是要符合一些规则的。
当然,所有这些效果都需要大量的实验来证明。
图3-13和声效果单元的框图
我们还没有提出这些设计中所使用的反馈。
反馈当然使可以使用的。
反馈可以来自定点抽头,也可以来自调制抽头。
使用定点抽头反馈的话,可以得到精细的滤波器函数或反射器效果,这取决于所用的延迟时间。
使用调制抽头反馈的话,可以得到一些非常有趣的音节调制效果。
这是因为调制抽头的输出本身就是音节调制的,反馈调制抽头的输出使原先信号的调制进一步加深,所以音节调制信号的音调在不断地漂移。
虽然这是一个有趣地现象,但是并不适合应用在音乐上。
在回旋地讨论中,我们提到这种效果能在处理完地信号频谱图像上产生深地梳状凹槽。
对于和声单元则正相反,因为理想地情况使梳状地凹槽最好浅一点。
减小梳状深度地一个方法使引入一个定点抽头地负反馈。
这个定点抽头位于调制抽头地额定延迟位置上,也就是在调制抽头地中间。
当控制参数和延迟长度设置得当地话,这使得和声单元有全通响应。
这种类型地和声是白噪声。
为了保证取得全同响应,fixed_feedback和direct_forward两个参数必须相等,同时mon_forward参数必须设为1。
图3-14所示地是一个工业标准效果器。
通过调整表3-1中地参数,能产生所有介绍过分效果。
用这个方案同样可以实现加倍和简单回声这样的效果。
加倍,也叫做自动加倍跟踪(ADT),是对演奏者将一个部分演奏两次的模拟。
除了自动面板之外,这里所介绍的音效都是单声道处理。
尽管如此,它们完全适用于立体声处理。
可以直接处理立体声信号,也可以将单声道新先加上伪立体声效果。
一个很好的例子是立体声合声单元的设计,在这种设计中单声道输入信号能驱动两条平行和声通道。
这种和声本来就很有趣,如果将驱动左右两个调制延迟的调制信号波形隔开90度的相位,则可以进一步产生有趣的立体声面板效果。
图3-14工业标准的延时效果处理器
表3-1工业标准效果处理器饿额定设置
效果direct_forwardmod_forwardfixed_feedback额定延时延时调制
颤音0.01.00.0<5ms+-5ms
相颤音0.70710.7071-0.70715ms+-5ms
标准和声1.00.70710.030ms+-10ms
白和声0.70711.00.707130ms+-10ms
加倍0.70710.70710.050msNo
回声1.0<1.0<1.080msNo
该算法首先将左右输入的信号混合,并使用软件增益控制参数来控制整个电平。
将时延效果处理模块的单一输出与自动扫描模块的输入相连,提供简单的立体声效果。
完整的算法在前面介绍的音频框架中已有介绍。
所以,每产生一个新的输入缓冲器rx_pip或是输出缓冲器tx_pip时,就会调用音频效果算法。
尽管音频数据以每帧128个样本的速率输入效果处理算法,该算法每次只处理一个音频样本。
如程序10-1所示,简单使用for-next循环就可以按顺序取样和处理样本。
for-next循环中较短的软件模块执行所有必须的处理过程来对音频样品进行计算,时延和扫描。
图10-18中的所有控制参数都被初始化为预设的值,并存入DSP特定的数据存储区中。
有两点该引起重视。
第一,必须将参数初始化为已知状态,这样可以使算法按照一种可预知的方法进行音频处理。
更为重要的是,必须将控制参数存进一块已知的DSP数据存储区中,使主控程序可以对值存取和修改。
如果控制参数被放置在用户指定的存储区地址内,那么这些指定的地址值就会在连接时进入主应用程序。
这样保证了DSP中的控制参数的修改和存取。
这些控制参数是基于主机软件控制接口并可以通过PCI-HPI-DMA来存取和修改的(可以参见稍后对主机端口存取的讨论)。
确定C程序中某一内部参数或变量的特定存储位置,只好的方法是使用汇编语言定义变量,然后在C应用程序中引用该变量。
这样,变量就可以使用TI的汇编指示.sect,.usect和.bbs来定义,并由C编译器来确定其存储器分配情况。
如果一个程序变量的特定存储位置是在运行时确定的话,开发应用程序的主机部分将变的比较困难。
任何在汇编程序中定义的变量可用下面的方法来定义,以供C程序所引用:
程序10-1基于帧的音频处理函数,由PIP满/空事件调用
Voidaudio(pip_obj*in,pip_obj*out)
{
If(pip_getReaderNumFrame(in)==0|