基于定点DSP 的人工混响算法实时处理系统
摘 要:提出了基于定点DSP 的人工混响算法实时处理系统。讨论了DSP芯片TMS320VC5509与音频编解码芯片TLV320AIC23的硬件接口和软件设计,并在此基础上论述人工混响算法实时播放的设计方法和工作原理,最后提出系统实时性实现的关键。
关键词:DSP 实时处理 人工混响
引言
DSP高速的运算使数字滤波器和各种复杂算法有了实现平台。目前,人工混响算法的研究越趋成熟,在软件上已获得很好的自然声效,但关于数字音效实时处理的资料还不多。
本设计采用的高速C55x DSP芯片,能够很好的解决系统的实时混响播放;数字编解码芯片TLV320AIC23具有16~32位采样精度和回放模式下功率仅为23mW低功耗,它与C55x DSP的结合是可移动数字音频处理系统的非常理想器件。
1 实时混响处理系统结构
1.1音频处理平台
实时混响处理系统对当前输入的音频信号采集后,添加混响效果,进行实时播放。包括音频采集和播放、DSP对语音信号的处理、SDRAM存储三部分。音频平台的结构如图1。
DSP作为主芯片实现各模块间的通信,初始化音频编码芯片,完成语音混响算法处理。
AIC23对来自话筒输入或线路输入的语音信号进行编码和译码。当输入为音乐或歌曲的线路输入时,为保证得到良好的混响效果,采样频率可以设定为44.1KHz。
SDRAM动态存储器用于DSP芯片扩展的外部数据存储器,存放混响处理的大量中间数据。为加快SDRAM的读写速度,可直接与DSP的数据线和地址线连接。
实时系统播放中,语音混响处理模块需求较多的系统资源,故语音信号使用中断的输入输出方式。算法需要涉及过去时刻的语音数据,因此在输出输入分别采取了三个循环缓冲区。
1.2器件选择
1.2.1 DSP芯片的选择
主芯片是TI公司的一款低功耗高性能16位定点DSP:TMS320VC5509,它达到C54x两倍的周期效率,功耗只有C54x的1/6。在核心电压1.6V下可以运行在144MHz的主频。
C5509具有3个MCBSP多通道缓冲串口,片内有128K×16位RAM和32K×16位ROM,并具有EMIF接口,可以与SDRAM无缝连接,为完成复杂的语音算法提供了可能。
1.2.2 语音编码芯片的选择
本系统选择TLV320AIC23,既满足实时性又简化设计。AIC23工作电压3.3伏特,能在数字和模拟电压下工作,与C5509的I/O电压相兼容,其控制接口和数字接口与DSP的MCBSP端口能够无缝连接。AIC23的AD和DA转换部件高度集成在芯片内部,采用先进的过采样技术,可以在8K到96K的频率内提供16bit、20bit、24bit和32bit采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。
2 系统硬件设计
AIC23与C5509的接口有两个:一个是控制接口,用于设置AIC23的工作参数;另一个是数字音频接口,用于输入、输出AIC23的A/D和D/A的数据。本系统利用DSP的MCBSP0和MCBSP1,分别与AIC23的控制和数据接口相连。DSP与AIC23的接口电路如图2。
2.1 音频控制接口
MCBSP1接 AIC23的控制接口。AIC23的接口有I2C和SPI两种工作方式。由于C5509具有I2C总线,所以系统直接使用I2C方式来接制AIC23,这时将AIC23的MODE引脚置低。AIC23的控制口为接收DSP的控制字,因此这里DSP作为主设备,AIC23为从设备。SCLK和SDIN是AIC23控制端口的移位时钟和数据输入端,它们分别与C5509的SCL和SDA相连。SDIN为串行数据输入端,它接收DSP串行数据。SCLK为控制端口串行数据时钟输入,DSP串口对CPU时钟分频后得到串口的发送时钟BCLKX1,产生的时钟通过SCLK引脚驱动AIC23。
2.2 音频数据接口
MCBSP0接 AIC23的数据交换接口。AIC23数字音频接口一般采用IIS与DSP两种模式,由于MCBSP接口与AIC23的DSP模式相兼容,故采用DSP模式。处理模块中,DSP为从设备,AIC23为主设备。AIC23的串行数据传输时钟BCLK提供收发时钟信号CLKX0和CLKR0, AIC23的帧同步信号LRCIN、LRCOUT启动串口数据传输。C5509的McBSP0数据发送端DX0和数据接收端DR0分别与AIC23的DIN和DOUT相连,可完成DSP与AIC23之间的数字通信。
2.3 语音数据存储模块
为满足处理过程中大量数据存储的要求,现给DSP扩展一个外部动态存储器SDRAM(1M*4位*16Bit)。DSP与SDRAM连接如图3。C5509使用扩展存储器接口(EMIF)与片外扩展存储器SDRAM实现无缝连接。这接口提供地址连线、数据连线和一组控制线。 DSP的扩展存储映射空间被分为CE0~CE3。系统中,SDRAM映射在DSP的CE0空间处。
3 软件设计
系统采集现场的线路输入信号,用人工混响算法处理后存于SDRAM。在采集的过程中,同时通过耳机播出。音频系统程序流程如图4。
3.1初始化
初始化I2C总线包括:复位总线、设置模块时钟频率、设置主模式(SCL引脚)时钟频率、设置I2C总线上器件接口地址、设置总线工作模式。代码具体实现如下:
PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR;
ClearMask(pI2C -> icmdr, ICMDR_IRS); // I2C复位
pI2C -> icpsc = dspclk.pllmult; //设置模块时钟频率12MHz
Write(pI2C -> icclkl, 10); //设置主模式(SCL引脚)时钟频率400 MHz
WriteMask(pI2C -> icoar, 0x007f, 0x007f);//设置I2C总线上器件接口地址
SetMask(pI2C -> icmdr, 0x0020 | 0x0400); //工作模式主模式,初始化完成
初始化AIC23芯片包括:设置输入方式为线路输入、输入音量增益为0、运行模式为主模式,数据帧长度为16位、数据初始化使用DSP初始化模式、采用率为44.1K、耳机音量增益衰减+6dB、激活数字接口ACT=1。
初始化串口McBSP0流程:复位串口→根据收发数据包长度、相位、时延等要求设置寄存器→等待以保证内部同步→使能接收和发送寄存器。
初始化中断向量包括:设定中断向量地址、开放中断使能寄存器中的串口接收中断、中断标志寄存器清、开放全局中断标志位。另外,还必须编写中断向量表.
3.2音频数据三缓冲接收发送
语音的混响处理算法占用较多资源,故采用中断的收发方式。输入输出放在同一个中断程序,每中断一次发送和接收一个数据,中断若干次完成一个缓存数组的收发,才通知主程序调用混响模块处理,避免了每个数据调用一次处理函数,减少调用函数次数,降低处理时间,利于实时性实现。算法中每个IIR滤波器的当前信号都与过去时刻的数据有关,因此不采取双缓冲区,而用三缓冲区。现三个输入缓冲区命名为IA、IB、IC,输出部分命名为OA、OB、OC。在处理每个数组时,可用前一数组数据。I/O收发与混响处理时序如图5。
3.3 人工混响处理程序设计
3.3.1 Schroeder模型简介
系统采用Schroeder提出的著名模型,由四个梳状滤波器并联和两个全通滤波串联所得,如图6。4个或更多不同延时时间的梳状滤波器并联产生与真实房间整体相似的频率响应特性,两个全通滤波器串联可提高回声密度,减轻梳状滤波器引入的渲染成分。
单个梳状滤波器和全通滤波器的时域表达式分别是:
y[n]=g*y[n-m]+x[n-m] (3.1) y[n]=g*y[n-m]-g*x[n]+x[n-m] (3.2)
m为延时的样本点数,g 为衰减系数。系统根据文献[4]建议设置各滤波器的m和g值。
3.3.2各滤波器的实现
各滤波器按时域计算出各自的当前输出,再按串并联关系运算,便可实现混响功能。由式3.1、3.2可见,IIR滤波器当前数据涉及两个前m时刻数据。为此,每个滤波器都须有两个数组轮流保存输出数据。可把它们放在连续地址段。通过修改指针找到公式中的y[n-m]数据,代入时域表达式计算实现滤波功能。
3.3.3 实时混响播放的关键
实时播放要求混响处理时间比声音收发时间短。混响处理模块利用每次中断收发的间隙处理数据。处理比I/O收发快,才来得及处理每次新读入的声音数据,实现实时播放。因中断前后需要一定时间保护和恢复现场,故混响处理时间最大是中断收发时间的80%。当前人工混响算法运算量较大,实验发现主频设在30MHz时,能实现48K采样率的人工混响算法实时处理。若采样率提高,主频需提高。
为满足实时系统对处理速度的要求,系统不用浮点型存放声音数据。实验发现,声音数据用整型保存,主观视听声音效果满意。
4结论
系统基于DSPC5509利用外围AIC23芯片,实现了经典混响算法的实时处理和播放。
本文创新点:一是充分利用了DSP的片内资源和丰富的外围设备,在MCBSP串口与音频芯片之间和DSP与SDRAM之间都实现了无缝连接,具有非常简单的硬件设计。二是软件设计上考虑算法特点,开辟三个I/O缓冲区,实现了混响的实时播放。设计发挥了DSP高速的优势,使经典混响算法从软件仿真迈向了硬件实现,让数字音频处理应用到实际场合。
|