资源描述:
《语音信号处理系统中的接口设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、语音信号处理系统中的接口设计学院:______________________________姓名:_______________________________班级:_______________________________课题:语音信号处理系统中的接口设计组员:还传俊刘磊张松佳王良20世纪90年代以来,DSP芯片技术的飞速发展,为语音信号处理奠定了良好的基础,语音信号处理技术的进步促进了与其关联的相关学科的发展,尤其是在认知科学和人工智能等研究领域,因此,语音识别技术的DSP实现已成为一个重要的研究方向。目前,语音识别系统都是以高速的数字信号
2、处理器为核心,结合音频编解码芯片、存储器等外围设备来实现。本文将详细阐述音效系统中DSP与音频编解码芯片的接口设计,其中DSP芯片采用TMS320VC5402DSP(以下简称C5402),它是TI公司针对消费类电子推出一款定点DSP,其性价比高、处理速度快、接口丰富;音频编解码芯片则采用TI公司推出的一款高性能立体声Codec芯片TLV320AIC23(以下简称AIC23)。 1芯片功能特点 C5402是TI公司推出的低功耗16bit定点DSP芯片,哈佛结构,支持流水线操作,运算速度可达100MI/s(兆指令/秒),指令周期为10ns;TMS320
3、VC5402片内的16K双访问RAM可以保证系统算法程序在片内实时运行、1M的程序扩展空间也可以足够的保存算法处理的中间数据。此外,C5402具有丰富的片内外设,主要包括通用I/O引脚XF和/BIO、硬件定时器、软件可编程等待状态产生器、可编程块开关模块、增强型并行主机接口(HPI8/16)、两个多通道缓冲串口(MCBSP);带锁相环PLL的时钟发生器,DMA控制器,JTAG接口[1]。综上所述,C5402以其处理能力强、功耗低、功能丰富、性价比高等优点得到广泛的应用。 AIC23内置耳机输出放大器,支持MIC和LINEIN两种输入方式,且对输入和
4、输出都具有可编程增益调节。AIC23的模数转换(A/D)和数模转换(D/A)部件高度集成在芯片内部,采用了先进的多比特sigma-delta工艺,集成了高采样率的数字内插滤波器,同时还具有很低的能耗。AIC23通过外围器件对其内部寄存器进行编程配置,其配置接口支持SPI总线接口和I2C总线接口,数据传输格式支持右判断模式、左判断模式、I2S模式和DSP模式4种方式,其中DSP模式专门针对TIDSP设计。 C5402的多通道缓冲串口McBSP可以配置为SPI总线接口、其串行数据传输格式与AIC23的DSP模式兼容,此外,这两款芯片的I/O电压兼容,从
5、而使得二者可以无缝连接,因此,基于C5402和音频Codec芯片AIC23的硬件系统是一种非常理想的语音信号处理系统的实现方案。 2接口硬件电路设计 C5402具有2个多通道缓冲串口McBSP,即McBSP0和McBSP1。多通道缓冲串口McBSP通过6个引脚使其数据通路、控制通路与外部设备相连。数据通过McBSP的DR和DX引脚传输,同步信号则由CLKX,CLKR,FSX,FSR4个引脚实现。McBSP的数据线DR和DX带有缓存寄存器,帧同步信号FSX,FSR以及位同步信号CLKX,CLKR具有可编程性。C5402的多通道缓冲串口McBSP可以
6、配置为SPI总线接口,其串行数据传输格式与AIC23的DSP模式兼容,在C5402与AIC23的接口设计中,McBSP1以SPI接口方式与AIC23的控制接口相连,负责对其内部寄存器进行配置[2]。C5402与AIC23硬件接口原理图如图1所示。在语音信号处理系统中,AIC23主时钟为18.432MHz,A/D和D/A转换器的抽样频率为8kHz,模拟音频信号由LLINEIN/MICIN输入到该芯片,这些参数需要通过McBSP1对AIC23进行配置来实现。模拟音频信号通过A/D转换、编码后,由数字音频接口传送给DSP的串口McBSP0,并接收DSP处理
7、后的数据,收到的数字音频信号经解码、D/A转换后,从HEADPHO/LINEOUT输出。 3接口软件配置 3.1AIC初始化配置 语音识别系统只有在完成相关的配置后,才能进行音频信号的传输与算法的运算。由于是利用C5402的McBSP口来控制AIC23芯片,且2个McBSP口设置成不同的工作方式,McBSP0配置为I2C模式和McBSP1配置成SPI模式[3]。AIC23芯片初始化设置时的部分代码。 voidaic23_config(void) { WRITE_WORD(0x1E00);//复位aic23 waite_10ns(1000
8、);//等待10ms WRITE_WORD(0x0C00);//系统上电 WRITE_WORD(0x00