资源目录
压缩包内文档预览:(预览前20页/共24页)
编号:552657
类型:共享资源
大小:19.15MB
格式:ZIP
上传时间:2015-12-05
上传人:QQ28****1120
认证信息
个人认证
孙**(实名认证)
辽宁
IP属地:辽宁
6
积分
- 关 键 词:
-
毕业设计论文
- 资源描述:
-
基于DSP的音频处理器,毕业设计论文
- 内容简介:
-
基于 DSP 的音频处理器 这个应用例子,我们将了解个人计算机主机内部音频效果处理器的发展。尽管我们选用的的应用很简单,它却是研究大量 DSP 系统应用设计与实现的重要手段。就本例的应用开发平台而言,我们选择 C6xxx EVM 板,因为它不仅集合了前面几个章节中讨论的内容,而且提供了本例音频效果处理器的理想模型。 C6xxx EVM 包含了必需的CD 品质立体音频编 /解码器,一个快速的 DSP 处理器以及一个 PCI 界面,通过这个接口,可以实时控制音频效果。基本配置 下 图所示。 1.设计目标 这个设计实例可分为三部分,( 1)硬 件平台设计,( 2)应用算法设计,即音频处理计算法,( 3)主机软件设计。正如上面所提,硬件平台是 TI 的 C6xxxEVM 板。这是一个明智的选择,因为它包含了系统应用所需的主要系统部件,并且, TI 免费提供这一模板的设计。因而这将成为开发特定系统平台的良好开端。此处介绍的音频效果处理器能有效使用时间延续以及可调性时间延续功能来达到简单的样本混响,截边以及和声效果。输出调制器的应用使得输出幅度平坦。所有这些效果都是由主机软件界面来控制的。主机软件通过 PCI 总线进行通信,并控制实时 DSP 算法。主机软件也也能在开始阶段对 DSP 进行初始化,下载必要的音频处理算法,因而并不需要 EPROM 进行引导。当DSP 卡被初始化后,它就可以自主运行,几乎不许要对主机输入。作为主机软件的一部分,效果控制界面提供对对效果算法的异步控制。这使得调制深度,调制速率,延时长度可以实时变化,而不必停止或中断原算法。在下面的章节中,我们将从硬件平台着手,依次研究设计的各个部分。图 10-11 显示了该应用的总结,不同软件的组成部分和接口。 nts 2.硬件平台 作为此项应用的基本平台, C6xxxEVM 开发平台在第 2.4 章节中有详细叙述。该平台使用的编 /解码器接口 在第 4.4 章节中有详细介绍。有关直接存储器存取传输,主机端口和高速串行端口部分在第 4 章中也有介绍。因而,我们没有必要再在本章中赘述这部分内容。图 10-12,完整描绘了 TI 的 C6xxxEVM 板,包括 C6xxxDSP,编 /解码器,存储器部分,主机端口接口和 PCI 总线。 C6xxxEVM 板上的 PCI 接口具有即插即用的功能,并且能支持高速数据传输的主副模nts式:即 PCI 总线通信初始化可由目标或主机方来驱动。 PCI 的即插即用特性管理着寻找地址以及中断分配的各个方面,从而保证不会出现资源冲突的情况。 在计算机启 动阶段,具有 PCI 接口的器件能自动由计算机的 BIOS 来配置。这意味着插入 PCI 总线的一块 C6xxxEVM 卡将具有动态分配的个人计算机记忆存储地址和中断线。从编程者的角度来看,为了简便起见, TI 提供了软件驱动器来支持 EVM 板。驱动程序是用来查询 EVM 板的 PCI 控制器,并获得该板相关的存储地址和中断分配信息。这是非常有用的,以为它使得用户只需插卡和启动计算机。 EVM 的驱动器自动处理用户软件与 EVM 硬件实体间的接口问题,并考虑分配中断与存储器配置。 标准 PCI 总线能够以 132MB/S 数据速率进行突发的通信。同样, 在主动模式下,每块独立的 PCI 卡能够在很短的时间内完全控制总线,从而完全达到突发的传输速率。这就意味着个人计算机和 PCI 卡双方都不会落后。当然,也可以在典型系统中使用多个外部PCI 器件,所有器件以时分复用方式工作。所以,连续的传输率将低于 132Mhz的速率。 为了使任何系统中的传输速率最大化,最好使用突发模式传输,而不是重复单个字的传输。因为这样可以减少总线请求和请求允许的总耗费。 基于工业标准的应用的专用集成电路, ASIC, C6xxx EVM 实现了一个标准的 PCI。使用标准 PCI 器件的一个优势是所有的数据 传输都是由该器件自行管理的,从而保证了C6xxx EVM 器件本身不需要处理时间的消耗。 PCI 和 ASIC 以及与 C6xxx DSP 接口的图示如 10-13 所示: C6xxx EVM 提供的 PCI 允许以下三种方式与 C6xxx DSP 通信。第一种方法是使用一组nts先进先出列队和邮箱寄存器,每一方可以通过这些来传输数据。当主机方填满了邮箱,DSP 处将会相应产生一个中断信号,从而引发中断服务线 ISR 来收集邮箱数据。同样如果 DSP 方填满了回复邮箱,并在主机方产生一中断信号,就触发了主机数据收集的中断程序。第二种通信方式是应用 JTAG 接口。这一接口可对 DSP 的所有运算进行检测和实时控制。一般而言,这个接口多为软件和硬件调试所使用。 CCS 在 C6xxx EVM 上调试软件时,也使用 JTAG 界面。 PCI 的特殊应用集成电路的第三种界面是 HPI。这个接口允许异步导入 DSP 中的任意内存或外存空间。 HPI 使用 DMA 来访问 DSP 的可寻址可存储空间。由于 HPI 使用 DMA 来传输数据,所以当数据在传输过程中,它对核心的实时处理能力的影响很小或几乎没有。 HPI 是最佳的用于音频效果处理的接口,并且它将从主机软件控制面板的控制信息传送到 DSP 算法中去 。 C6xxx EVM HPI 在传输中使用小恩迪安数据格式,即首先传输的半个字的最低位的字组。也就是说,数据必须使用低字 /高字的传输次序来传送。 这本身与 PCI 总线和个人计算机相兼容。 EVM PCI 接口以及支持的软件允许以字节,字,双字的方式访问DSP 的任何可寻址存储器空间。 HPI 的自动增量功能也支持顺序数据传输。这样可以快速传输一大块数据,而不需要在单个字的传输上表明目的地址。这种顺序地址传输模式使得 PCI 总线真正以群发模式工作。同时,它的数据传输速率接近 PCI 总线的最大数据传输速率。 我们已 经说过,传输速率不可能达到全速 132MB/s 数据速率。 C6xxx EVM 板上的立体声 CODEC 是 Crystal Semiconductors 生产的标准 16 位多媒体器件。 其音频数据传输中使用串行接口,在接口控制部分采用 8 比特并行总线。CODEC 控制寄存器影射至 DSP 的存储空间,因而它的配制比较简单。 同样,由于这些寄存器映射到 DSP 的存储空间,通过 PCI 的主机断口,可以在主机上显示出来。 这种 CODEC 中,缓冲的串行端口 McBSP 以及 DMA 传输的工作方式在第 4.4 章节中已有详述。 nts3.DSP 软件 标准的音频框架 音频效果应用使用标准软件框架,它能使 DSP 和 CODEC 初始化,获得并处理音频样本。该框架作为 C6xxx EVM 的一个软件范例, 在 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 的缓冲器之间的传输。 这nts种硬件中断是在 McBSP 准备好接受新数据时触发的。其他的事件管理器是由诸如 rx _ pip 缓冲器满而 tx _ pip 缓冲器空这些相关软件来触发的。我们所指的事件,是能够触发并请求中断服务程序(即一个事件管理器)的硬件和软件中断。 图 10-17 是用 TI CCS 开发一个 DSP 音频应用软件时的屏幕快照。其中,数据存储器视图能够 在程序运行中调整不同音频效果的控制参数。可以在屏幕中的 audio.c 中看到效果处理函数的 C 语言程序。 nts4.DSP 软件 音频效果算法 图 10-18 概括地给出了应用中使用的效果处理法。这种算法是在第 8 章提出的思想上发展起来的,主要用于基本边缘提取,和声,混响和立体声扫描调制效果。在这里我们可以考虑其他软件方法的实现。 关于音频效果算法 ( 1)自动音场转移( Autopanner) 自动音场转移效果是用 DSP 器件实现的最简单的音效之一。基本上,一个音场转移控制器将一个单声道信号置于左右喇叭之间的某处 。自动音场转移做的是完全一样的事情,但位置却反复地在一对立体声喇叭之间变化。音场转移是用基于软件的低频信号发生器控制的,它驱动一个增益控制模块的输入,见图 3-1 图 3-1 简单的自动音场转移效果 软件形式的增益控制模块很简单,只需要讲进来的音频样值盒当前的增益系数相乘就可以了。增益系数是由信号发生器产生的。信号发生器也相当简单。如果用的是查找表法,需要用两个独立的指针,一个用来控制左声道,另一个用来控制右声道。如果要音频信号的电平在收听范围内保持恒定但同时也要使用面板效果,则信号发生器的波形必须基于一条对 数曲线。或者,可以选择简单的正弦波形或斜升波形来产生切换效果,但是信号的电平要被调制。如果音场转移控制信号是基于低频正弦波的,那么左右两个声道的激励在查找表中必须要有 90 度的间隔。这样可以保证能平滑地往返扫过喇叭而音频信号不会同时消失。如果要求接收地信号幅度保持恒定,则对数形式的音场转移波形必须保证中间位置同时处在左右两个声道的 -3dB 处,见图 3-2 所示 nts 图 3-2 保证接收幅度恒定的面板波形 图 3-2 的图表说明了用以驱动左右两个声道的波形。显然两个声道可以使用相同的查找表,但是查找表中的指引位置是不同 的,而且总是朝相反的方向移动。只要查找表的精度是够高,由面板位置调制造成的拉链噪声就听不到。通常长为 128 个采样点的查找表就足够了。在光盘盒 DSPStore 上可以找到在 PC 机上可执行的自动面板程序以及基于 C6xxx 的版本。 ( 2)人工混响 通常,在录音棚内录制的作品缺少空间感,这是由于大多数录音棚的声学结构都是被设计成无反射的。这么做是故意的,因为我们可以在录音完成之后在通过电子手段人为地加上声学特性,这使得录音工程师对最后录制完成地素材有更好地控制。使用人工混响处理器,录音地环境可以模拟小房间、大厅和教堂 等等。原先模拟混响的做法是在隔音室内悬挂大面积的金属板,上面再装上传感器。音频信号进入输入传感器,同时在金属板间产生激荡。金属板的其他地方安装了一组接受传感器,用以接收反射信号。还有一种叫做“延迟线”的方法,就是改为悬挂弹簧片。虽然这种物理方法能取得混响效果,但是听起来不自然,而且录音工程师很难对混响的特性进行控制。现在的方法都使用 DSP 技术,而且已经发明了很多实现途径,所以已经能够对音频信号的反射特性进行精确的控制。在详细考虑如何设计基于 DSP 的混响模拟器之前,研究一下音场的特性是很值得的。 当声源在封闭 空间内发出声波后,声波会在空间的边界表面上反射多次,最后声压一直衰减到听不见。封闭空间的大小和边界表面的“质量”都会影响声音衰减的时间。假设两个房间的素材是一样的,则大房间的衰减时间比小房间长。声波在空间内的来回nts反射,反射时间的标准估算方法被称作 RT60。这种方法是由 W.C.Sabine 发明的,和空间的大小以及声压衰减 60dB 所需的时间有关。早先提到的“质量”指的是空间内材料吸收声音的水平。硬质材料吸收得少,反射得多;柔软得材料吸收得多,明显地削弱反射特性。同时需要注意地是大多数材料都有各自地频率响应,有些 吸收高频反射低频,有些却正相反。使用地材料、空间的大小和音场的形状都对音场的特性有影响。 当音场内的声源发射出声波之后,声波到达收听者的方式基本上是可以预测的。见图图 3-3和图图 3-4。首先,有一部分声波是直接传播到收听者的,也就是没有经过墙壁的表面反射,然后到达的是从最近表面反射的声波。这些声波被称作早反射,通常在50ms 左右。早反射由人的大脑进行综合后并不产生单独的回声,但是决不能低估了它们的重要性。它们是大脑判断收听空间大小的重要依据。通过延缓早反射到达的时间,人工混响处理器可以使虚拟的环境听起来比真 实的大。相对于整个反射过程,早反射的时间在决定音场的大小上要重要得多,反射时间是空间和吸收率得函数,而早反射开始时间则取决于到最近表面得距离。在早反射到达之后有一段“多次反射” :声音通过很多反射表面之后再到达收听者。 图 3-3 收听者听到直接传播、早反射和多次反射的示意图 图 3-4 由直接传播、早反射和多次反射组成的混响 nts简单回声模拟器 如图 3-5所示,环形缓冲区可以用来模拟简单得回声。将接收到得采样信号和经过延迟得采样信号混合之后就能在处理器得输出端产生一个回声,当然,先决条件是延迟要大于 40ms,也就是超过大脑最小的综合时间。 图 3-5 简单回声模拟器 图 3-5的结构其实就是一个 FIR 滤波器,可以用一个简单的差分方程来描述其响应: Yn=xn+axn-R |a|0; size-) sLeft = (*src & 0xFFF0000)16; /* split L+R chan* data -*/ sRight = (*src+ & 0x0000FFFF); /* set L+R input gain -*/ sLeft = _mpy(sLeft , i in Gain)15; sRight = _mpy(sRight , i in Gain)15; sMono =_mpy( sLeft + sRight),I Run Stop)15; sByPass = sMono; p = I Fxn%FxBufLngth; /* set modulo pntrs to delay buffer- */ q = (i Fxn-iFxDly1-iFxi)%FxBufLngth; nts q_1 = FxBufLngth;-iFxi-1) % FxBufLngth; r = (iFxn-1) % FxBufLngth; s = (i Fxn-iFxDly1) % FxBufLngth; s FxBuf P = sMono; /*delay modulation & vibrato calcs-*/ sFxVib = (fFxfrac) * sFxBuf q_1) + ( 1- fFxfrac) * sFxBuf (q); sMono = (iFxBlend*sFxBufr /1000) + (iFxFdFwd *sFxVib/1000); sFxBufp = sFxBuf p iFxFxdFvk * sFxBuf s/1000-iFxVarFbk *sFxvib/1000; iFxn+; sLeft = sRight = sMono; if (iByPassFlag = = 1) /* test for time delay FX bypass -*/ sLeft = sRight = sByPass; If (ipanFlag = = 1) /* enable or disable auto-pan effect -*/ sLeft = _mpy (sLeft , sPanL_ gain)15; sRight = _mpy (sRight, sPanR_ gain)15; *dst+ = (Uns) (sLeft & 0x0000FFFF) HANDLE evm6x_open ( int board_index, BOOL exclusive _flag ); 板索引用标识系统中每一块连接的 EVM 板。索引为零,如果系统中只有一块 EVM 板,该板的 board _ index 值即为零。 Exclusive _ flag 定义了 EVM 板的打开方式。在互相排斥的模式下,任何时刻只能有一个主应用程序与 EVM 板相连接和通信。但是在互相排斥模式下,可以打开任意数量的主应用程序。 evm6x_open 返回的句柄被其他的 API 函数所调用,来标示和连接打开的 EVM 板。接下来的 C 语言代码(程序 10-2)用来打开,重新启动一块 EVM 板,下载并运行 COFF 应用程序。事实上,我们不赞成这样简单的执行顺序,以为它并没有进行错误检查。在某些情况下,它会导致 EVM, PCI 总线甚至PC 被锁乃至死机。第 10.2.6 中我们曾讨论过一个更好的代码。这种代码使用异常软件来捕获错误信息,并终止主机应用程序以防止主机死机。 程序 10-2 TI C6xxx EVM 主机示范程序 # include evm6xdll.h Handle BrdHandle = NULL; BrdHandle = evm6x_open(0, true); Evm6x_reset_board (BrdHandle); Evm6x_reset_dsp (BrdHandle, MapMode0); Evm6x_coff_load (BrdHandle, Null, audCOFF. Out, false, false, false); Evm6x_unreset_dsp (BrdHandle); / DSP application runs from here Evm6x_close (BrdHandle); nts 6 主机应用软件 音频效果控制界面 在开始主机数据传输之前,使用 EVM6x 主机库函数的任何应用程序会执行一些操作。这是很重要的。在运行任何软件之前,将 DSP 初始化为已知是比较明智的。同时, HPI的某些部分以及 PCI 总线必须正确设置,这样才能防止 PCI 阻塞。音频效果应用的主机部分调用程序 10-3,对 DSP, PCI 和 HPI 接口进行初始化,并下载 DSP COFF 目标文件。 程序 10-3 使用 Borland C+ Builder 编写的 C6xxx EVM 主机启动应用程序 Void_ fastcall TForm1:EVM Reset Button Click ( Tobject * Sender) Try BrdHndl = evm6x_open (0, true) ; If (BrdHndl = = INVALID _ HANDLE _ VALUE) Throw Unable to open board with ID 0 If ( ! Evm6x_reset_board (BrdHndl) Throw Unable to RESET the board; If ( ! Evm6x_reset_dsp (BrdHndl, HPI_BOOT) Throw Unable to set required target MAP MODE; HpiHndl = evm6x_hpi_open (BrdHndl); If (HpiHndl = = NULL) Throw host port Interface cannot be initialized; If ( ! Evm6x_init_emif (BrdHndl, 1000) Throw C6xxx EMIF interface cannot be initialized; If ( ! Evm6x_set_timeout(BrdHndl,1000) Throw Time_out set opration failed; RtrnLngth=SndLngth; Data = 0x00000010; If ( ! Evm6x_hpi_write (HpiHndl,&Data,&RtrnLen,0x01840070) Throw Cannot set HPI interrupt priority,PCI bus may hang; If (SndLngth! = RtrnLngth) Throw Problem with HPI timeout initialisation; If ( ! Evm6x_coff_load (BrdHndl, HpiHndl,aCOFF.out,false,false,false) Throw Unable to load DSP Fx application ; If ( ! Evm6x_unreset_dsp(BrdHndl) nts Throw Unable to start DSP application; Catch(char *message) ShowMessage (Message); Close(); 用 Borland C+ Builder 编写的主机应用程序代码段使用 try-if throw-catch 的结构顺序来初始化 C6xxx EVM 和下载软件。如果运行失败,有可能发生异常,相关错误信息传出之后,程序自动退出。程序 10-3 所示的函数是一个事件句柄,它与 GUI 按钮 EVM Reset Button 的点击相连。 该 应用程序的 GUI 设计使用大量相似的事件句柄,利用 E
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。