【導讀】介紹了基于TMS320C6713的信號采集處理系統(tǒng)。該系統(tǒng)以TMS320C6713作為核心控制器,通過多通道音頻串行口(McASP)與A/D芯片PCM4204連接。系統(tǒng)充分利用McASP接口多通道的特點,設計了16通道麥克風陣列采集處理平臺,并通過外擴USB芯片與PC主機端進行數據傳輸,方便用戶在PC端進行數據處理。該系統(tǒng)采樣數據量大、同步性強、精確度高、傳輸速率快、可靠性好,方便為各種麥克風陣列應用提供原始數據。
作為傳統(tǒng)的語音拾取工具,單個孤立麥克風在噪聲處理、聲源定位和跟蹤,語音提取和分離等方面存在不足,嚴重影響了語音通信質量。如果使用多個麥克風組成陣列,在時頻域的基礎上增加一個空間域,對來自空間不同方向的信號進行實時處理,就可以彌補上述不足。現(xiàn)在已有的麥克風陣列采集處理系統(tǒng)中,大多采用4路麥克風陣列,這類系統(tǒng)雖然在一定程度上能解決語音增強、噪音抑制、聲源定位和回聲抵消等問題,但由于4個麥克風個數較少,只能組成一字線陣,十字陣等幾種特定的陣列形狀,三維空間的方向及距離判斷有較大的誤差。設計的16通道麥克風采集系統(tǒng)能夠組成麥克風面陣,彌補了上述不足,較好地解決了三維空間信號位置判斷的問題。
一、硬件系統(tǒng)設計
該硬件系統(tǒng)主要包括16路麥克風構成的陣列、A/D采樣模塊、DSP數據處理模塊、PC機,如圖1所示。
1.1 麥克風陣列
該系統(tǒng)中,麥克風陣列選用聲望公司的MPA416傳聲器。MPA416傳聲器的靈敏度可達50 mV/Pa;擁有低本底噪聲;頻率響應范圍20 Hz~20 kHz;當其用于陣列時,MPA416的相位差能控制在3°~5°,能滿足系統(tǒng)對精確度和穩(wěn)定性的要求。
1.2 A/D采樣模塊
A/D采樣模塊由4片PCM4204以及其外圍電路組成。PCM4204內置了4個同步采樣通道,支持音頻串口和DSD數據口。音頻串口模式時,輸出24位線性PCM碼,有主、被動兩種工作模式,支持左、右對齊,I2S和TDM數據格式,動態(tài)范圍為118 dB,最高采樣頻率216 kHz。系統(tǒng)選用1片PCM4204采用主動工作模式,其余3片PCM4204采用被動工作模式。通過音頻串口將外部采集的模擬聲音信號轉化為24位I2S格式數字信號。由于前端麥克風陣列的輸出信號不是差分信號,而PCM4204要求輸入信號為差分信號,同時要求輸入差分信號幅值在-0.3~-0.3+VccV之間,因此其每路信號的前端都應有一個緩沖電路,用來將所接收的麥克風信號轉換為差分信號并對幅值進行調整。緩沖電路主要由OPA1632和OPA22組成,OPA1632和OPA227是高精度、音頻差分放大器,緩沖電路如圖2所示。
1.3 DSP數據處理模塊
設計中數據處理模塊選擇TI公司浮點DSP芯片TMS320C6713作為模塊核心。TMS320C6713為高性能32位浮點DSP,適用于專業(yè)音頻信號處理,其主頻可達300 MHz,處理速度高達2 400 MIPS/1 800 MFLOPS。其內部采用改進的哈佛結構;具有256 kB的片內存儲空間;豐富的外設包括兩個多通道緩沖串口(McBSP)、兩個多通道音頻串口(McASP)、SPI和I2C等;增強的直接存儲器訪問(EDMA)控制器,可控制16個獨立通道完成不受CPU干預的數據傳輸;32 bit的外部存儲器接口(EMIF),能與SRAM、ERPOM、Flash、SBSRAM和SDRAM無縫連接。DSP數據處理模塊框圖如圖3所示。 其中,TMS320C6713通過McASP與前端的A/D采樣模塊相連,并利用EDMA數據傳輸速度快、傳輸量大,且不占用CPU時鐘周期的特點,將采集數據轉存至TMS320C6713的片內存儲空間。TMS320C6713外接CPLD控制EMIF接口,通過對EMIF接口上CE3空間的控制,控制USB芯片CY7C680 01,完成TMS320C6713與PC機平臺間的USB數據傳輸。
1.4 A/D采樣模塊與DSP數據處理模塊接口設計
4片PCM4204芯片與TMS320C6713的McASP1相連接,其連接示意圖如圖4所示。
圖4中,PCM4204 A采用主動工作模式,PCM4204B、PCM4204C和PCM4204D采用被動工作模式。系統(tǒng)采用I2S數據格式,PCM4204A的SDOUT1輸出的是1和2通道的數據,SDOUT2輸出的是3和4通道的數據;PCM4204B的SDOUT1輸出的是5和6通道的數據,SDOUT2輸出的是7和8通道的數據;PCM4204C的SDOUT1輸出的是9和10通道的數據,SDOUT2輸出的是11和12通道的數據;PCM4204D的SDOUT1輸出的是13和14通道的數據,SDOUT2輸出的是15和16通道的數據。
通過配置芯片引腳S/M、FMT2、FMT1、FMT0、FS2、FS1和:FS0對PCM4204進行設置。
1.5 DSP數據處理模塊USB接口設計
TMS320C6713通過EMIF的CE3存儲空間可以外擴USB2.0接口,因此在對外擴USB進行讀/寫訪問前,需要通過EMIF的CE3控制寄存器CE3C-TL來配置CE3空間存儲器接口的類型、存儲器寬度及讀寫時序。CY7C68001采用并行異步存儲器接口通過可編程邏輯芯片CPLD與TMS320C6713相連,其原理框圖如圖5所示。
CY7C68001除了存儲器接口外,還有1個中斷信號 和4個狀態(tài)信號。中斷信號 采用TMS320C6713的外部中斷EXT_INT6。TMS320C6713使用CY7C68001作為從設備。在這種模式下,DSP可以像讀/寫普通FIFO一樣對CY7C68001內部的FIFO進行讀/寫。PC主機發(fā)出命令的同時也由CY7C68001 的引腳提供中斷觸發(fā)信號給DSP的EXT_INT6。其上升沿被檢測到后,DSP就進入相應中斷服務程序,開始處理USB的傳輸。DSP通過EA[4:2]連接FIFOA[2:0]對CY7C68001內部FIFO或命令口進行選擇。讀/寫數據通過ED[15:0]與FIFO[15:0]連接進行。FIFO和命令口的選擇和地址分配如表1所示。
經實驗驗證,USB異步傳輸速率可達3 Mbit•s-1,滿足系統(tǒng)需求。
1.6 PC機平臺
DSP數據處理模塊通過USB接口與PC機相連,通過CY7C68001芯片,將前端采集的數據傳輸到PC機,方便對數據的進一步處理。
[page]
二、 程序設計
2.1 McASP接口程序設計
定義了4個寄存器組:全局寄存器組globalRegs、發(fā)送寄存器組xmtRegs、接收寄存器組mvRegs和串行化器控制寄存器組srctlRegs。通過這4個寄存器組,對McASP1的PFUNC,PDIR,SRCTL,RFMT,AFSRCTL,ACLKRCTL及AHCLKRCTL等寄存器進行設置。各寄存器組所包含的主要寄存器情況如表2所示。
依據PCM4204的I2S數據格式,將接收幀同步信號的寬度定為32 bit,接收延遲設置為1個delay;AXR[0]~AXR[7]設置為接收模式。
2.2 EDMA傳輸程序設計
為保證數據的完整性,選用Ping-Pong模式對EDMA傳輸進行配置,Ping緩存存放如表3所示,Pong緩存與Ping緩存結構相同。
依據Ping、Pong緩存數據格式,對EDMA接收進行配置,即對:EDMA的opt,src,cnt,dst,idx,及rld寄存器分別進行設置。通過opt寄存器設置數據長度為32 bit,源數據和目的數據為一維方式,源地址固定,目的地址采用索引,啟用幀同步等。源地址和目的地址分別寫入src,dst寄存器。cnt寄存器主要用于配置幀計數和單元計數。由于采用I2S的數據格式,所以1幀數據只包含2個單元數據。通過配置idex及rld寄存器,目的數據可以按照設定的索引方式存儲。
2.3 DSP端OSB接口程序設計
首先,通過調用用戶的初始化函數,使能外部中斷并初始化USB寄存器。之后,程序通過數據傳輸函數,完成DSP與PC機的數據傳輸。
USB初始化程序配置如下:
(1)使能外部中斷6(EXT_INT6)。
(2)加載USB描述表,并進行自舉檢測,如自舉不成功,則重新自舉,直到端點0收到設置包為止。
(3)配置USB為異步從FIFO(Asynchronous SlaveFIFO)模式,采用內部48 MHz時鐘源。
(4)讀取FNADDR寄存器,判斷USB工作狀態(tài)。
(5)依據USB工作狀態(tài),配置EP2、EP4、EP6、EP8,并設置一次傳送的Byte長度。設置EP2、EP4為BULK OUT,EP6、EP8為BULK IN,其緩沖大小分別為2×512 Byte。
在數據傳輸過程中,PC端通過EP2向DSP發(fā)送讀數據命令,DSP通過外部中斷收到讀命令后,使用EP6發(fā)送已采集好的數據。在聲音數據采集系統(tǒng)中,每路麥克風以96 kHz進行24位采樣,按照ping-pong方式進行存儲。在傳輸過程中還需進行判斷,當采集數據存儲在ping緩存時,發(fā)送pong緩存中的數據,當采集數據存儲在pong緩存時,發(fā)送ping緩存的數據。由于TMS320C6713通過EMIF的CE3存儲空間可以外擴USB2.0接口,需對EMIF接口的CE3寄存器進行配置,將USB接口設為16位異步存儲接口,設定讀/寫的建立時間(Setup)、促發(fā)時間(Strobe)、保持時間,使其滿足CY7C68001的讀/寫時序要求。
2.4 PC機平臺應用程序設計
PC端接口程序采用VC++6.0編寫,首先調用OpenDriver()打開USB接口設備,獲得設備的句柄hDevice,之后調用Sx2SendVendorReq()函數向外設發(fā)出命令,讀取USB配置,最后調用Sx2BulkdataTrans()進行數據傳輸,通過調用CFile類將接收到的數據存放在文本文件中。程序使用多線程技術,使得應用程序將USB數據傳輸在后臺進行處理,應用程序前臺還可進行其他操作。