??? 摘? 要: 提出了一種基于DSP的廣播級(jí)數(shù)字音頻延時(shí)器,可以實(shí)現(xiàn)直播節(jié)目的安全播出。詳細(xì)闡述了MCU—DSP主從式硬件系統(tǒng)的構(gòu)成和音頻數(shù)據(jù)、存儲(chǔ)器接口設(shè)計(jì),分析了音頻信號(hào)處理流程和延時(shí)功能的實(shí)現(xiàn)方案。?
??? 關(guān)鍵詞: 音頻數(shù)字信號(hào)處理? 主從式系統(tǒng)? 延時(shí)器
?
??? 音頻延時(shí)器可用于廣播電臺(tái)直播節(jié)目。它將音頻信號(hào)延時(shí)一段時(shí)間后播出,以避免主持人的口誤或聽(tīng)眾熱線中聽(tīng)眾的一些不健康言論通過(guò)廣播媒體傳播,從而實(shí)現(xiàn)直播節(jié)目的安全播出。作為廣播級(jí)設(shè)備,音頻延時(shí)器對(duì)動(dòng)態(tài)范圍、失真、信噪比和頻率響應(yīng)等性能指標(biāo)要求很高,因此一般采用數(shù)字技術(shù)。采用計(jì)算機(jī)內(nèi)置全雙工聲卡和硬盤,可以以軟件方式實(shí)現(xiàn)音頻信號(hào)延時(shí),但使用操作不方便,可靠性較差,性能價(jià)格比較低。本文提出的基于高精度Σ-ΔADC 和DSP芯片的廣播級(jí)數(shù)字音頻延時(shí)器,具有性能指標(biāo)高、操作簡(jiǎn)便、功能齊全等特點(diǎn),該設(shè)計(jì)方案已產(chǎn)品化。?
1 系統(tǒng)結(jié)構(gòu)?
1.1 系統(tǒng)構(gòu)成?
??? 延時(shí)器硬件為主從式結(jié)構(gòu),如圖1所示,主要由單片機(jī)M68HC05C8、DSP芯片TMS320C32和音頻編解碼器CS4224等組成。M68HC05C8作為整個(gè)系統(tǒng)的主機(jī),完成系統(tǒng)的控制功能。TMS320C32作為系統(tǒng)的核心,完成音頻信號(hào)的延時(shí)功能。CS4224及音頻輸入輸出調(diào)理電路共同完成音頻信號(hào)的A/D和D/A轉(zhuǎn)換。?
?
?
??? CS4224是高性能的24位音頻編碼解碼器,使用Σ-Δ技術(shù)提供全雙工立體聲數(shù)/模和模/數(shù)轉(zhuǎn)換,動(dòng)態(tài)范圍達(dá)105dB,諧波失真和噪聲為-97dB,采樣頻率為32kHz、44.1kHz和48kHz可選。芯片采用差動(dòng)輸入和輸出,片上自帶抗混疊濾波器和輸出平滑濾波器以及數(shù)字去加重濾波電路,具有模擬音量控制,支持主或從工作方式。?
??? TMS320C32為低成本、高性能的浮點(diǎn)DSP芯片,非常適合語(yǔ)音數(shù)字信號(hào)處理。它支持24位地址總線和32位數(shù)據(jù)總線,可以尋址延時(shí)器所需的大容量存儲(chǔ)器。它還具有串行接口,便于和串行音頻數(shù)據(jù)輸入輸出的CS4224接口。?
??? M68HC05C8實(shí)現(xiàn)人機(jī)接口,管理鍵盤顯示和延時(shí)器遙控接口,并控制CS4224和TMS320C32的運(yùn)行。?
1.2 存儲(chǔ)器接口?
??? TMS320C32具有增強(qiáng)型的外部存儲(chǔ)器接口,程序存儲(chǔ)器的寬度可以是16位和32位,數(shù)據(jù)存儲(chǔ)器可以是8/16/32位三種寬度。TMS320C32采用兩組選通信號(hào)其尋址范圍不同。每組選通信號(hào)由四個(gè)引腳組成,作為片選和額外的地址線,引腳的特性由每組選通信號(hào)對(duì)應(yīng)的總線控制寄存器確定。通過(guò)設(shè)置總線控制寄存器的某些域,可以指定數(shù)據(jù)類型和外部存儲(chǔ)器寬度。?
??? 延時(shí)器采用了兩組不同寬度的存儲(chǔ)器。SRAM存儲(chǔ)音頻數(shù)據(jù),設(shè)置存儲(chǔ)器寬度為32位,數(shù)據(jù)類型為32位。由于音頻編解碼器CS4224為24位,因此實(shí)際使用24位,由三片8位SRAM構(gòu)成,FLASH芯片28F512存儲(chǔ)用戶音頻信號(hào)處理程序,存儲(chǔ)器寬度為8位,?
??? 存儲(chǔ)器接口主要考慮存儲(chǔ)器速度,以確定需要插入幾個(gè)等待狀態(tài)。由于TMS320C32時(shí)鐘頻率為40MHz,而FLASH存儲(chǔ)器的存取速度為150ns,SRAM的存取速度為70ns,因此必須插入等待狀態(tài)。TMS320C32具有內(nèi)部可編程的軟件等待狀態(tài)發(fā)生器,通過(guò)控制寄存器的SWW域選擇等待狀態(tài)發(fā)生器的工作模式,并在WTCNT域?qū)懭胄枰却臋C(jī)器周期數(shù)。由于程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分別采用因此可以根據(jù)各自的存取速度分別設(shè)置所需的機(jī)器周期數(shù)。?
??? TMS320C32具有程序引導(dǎo)功能。硬件復(fù)位時(shí)令引腳為高電平,則工作于微計(jì)算機(jī)模式,執(zhí)行片內(nèi)的引導(dǎo)程序,將FLASH存儲(chǔ)器中的用戶程序裝入內(nèi)部高速RAM中運(yùn)行。可以通過(guò)引腳確定引導(dǎo)模式,外部存儲(chǔ)器裝入地址根據(jù)存儲(chǔ)器的連接方式選為Boot3區(qū),不采用握手信號(hào)。FLASH存儲(chǔ)器的前端為程序頭,包括引導(dǎo)時(shí)TMS320C32必需的信息,如外部存儲(chǔ)器寬度、引導(dǎo)結(jié)束后總線控制寄存器內(nèi)容、各數(shù)據(jù)塊長(zhǎng)度、目標(biāo)存儲(chǔ)器寬度和數(shù)據(jù)類型等。?
1.3 音頻數(shù)據(jù)接口?
??? CS4224和TMS320C32采用串行方式連接。CS4224的串行數(shù)據(jù)線SDIN和SDOUT分別與TMS320C32的串口數(shù)據(jù)線DR和DX直接相連,數(shù)據(jù)移位時(shí)鐘SCLK與數(shù)據(jù)收發(fā)時(shí)鐘CLKX和CLKR相連,左右聲道時(shí)鐘LRCK經(jīng)二倍頻后作為收發(fā)幀同步時(shí)鐘FSX和FSR。工作時(shí)序見(jiàn)圖2。?
?
?
??? TMS320C23串口可以工作于可變或固定數(shù)據(jù)速率方式,進(jìn)行連續(xù)或猝發(fā)傳輸。延時(shí)器選用可變數(shù)據(jù)速率方式和猝發(fā)傳輸,并工作于最高幀速率,即前面一幀和后面一幀之間沒(méi)有停頓。?
1.4 控制接口?
??? 可以通過(guò)兩種接口方式控制CS4224:SPI和I2C,通過(guò)引腳延時(shí)器采用SPI模式控制CS4224的工作方式。CDIN和CCLK分別為片選、數(shù)據(jù)線和位時(shí)鐘,由M68HC05C8的內(nèi)置SPI接口控制。給定CS4224控制寄存器地址,單片機(jī)可以讀寫控制寄存器的內(nèi)容。M68HC05C8通過(guò)端口PC6復(fù)位CS4224。?
??? TMS320C32芯片本身提供的I/O線只有XF0和XF1,利用這兩根線分別作發(fā)送數(shù)據(jù)線和接收數(shù)據(jù)線,構(gòu)成一個(gè)異步串行口,通過(guò)軟件模擬與M68HC05C8進(jìn)行雙機(jī)通信,由單片機(jī)控制TMS320C32的運(yùn)行。同時(shí),單片機(jī)通過(guò)端口PC0~5控制TMS320C32的復(fù)位端、工作方式選擇端?
2 工作流程?
2.1 音頻信號(hào)處理?
??? 立體聲音頻信號(hào)首先經(jīng)過(guò)輸入調(diào)理電路。輸入調(diào)理電路的主要作用是對(duì)音頻信號(hào)進(jìn)行緩沖和交流耦合,同時(shí)進(jìn)行電平偏移,產(chǎn)生CS4224所需的2.3V共模輸入電壓,并滿足CS4224滿量程輸入電壓有效值為2V的要求。?
??? 音頻信號(hào)送入CS4224后,進(jìn)入片內(nèi)一階高通濾波器,濾除輸入信號(hào)中可能存在的直流偏置。為避免高通濾波器影響頻率響應(yīng),可以通過(guò)ADC控制寄存器HPD域禁止該功能。CS4224具有輸入電平監(jiān)測(cè)功能,通過(guò)狀態(tài)寄存器LV域指示峰值數(shù)字信號(hào)。A/D轉(zhuǎn)換以后的左右聲道數(shù)字信號(hào)由內(nèi)部數(shù)字輸入濾波器濾波后,在數(shù)據(jù)移位時(shí)鐘SCLK作用下分時(shí)從SDOUT引腳串行送出,左右聲道時(shí)鐘LRCK指示是左聲道還是右聲道信號(hào),并開始一個(gè)新的采樣周期。?
??? 從引腳SDIN輸入的數(shù)字音頻信號(hào),經(jīng)內(nèi)部數(shù)字輸出濾波器濾波后,再經(jīng)過(guò)D/A轉(zhuǎn)換,由片內(nèi)緩沖放大器提供有效值最大為2V的差模輸出電壓。音頻輸出電壓大小通過(guò)片內(nèi)衰減器調(diào)節(jié),模擬音量控制范圍113.5dB;并以0.5dB步長(zhǎng)步進(jìn)調(diào)整,由輸出衰減寄存器設(shè)置。音量調(diào)節(jié)過(guò)程采用淡入淡出方式,從當(dāng)前音量到新設(shè)置音量以0.5dB的斜率逐漸變化,變化速率通過(guò)DAC控制寄存器RMP域可設(shè)置為4、16或32倍采樣周期。如果通過(guò)DAC控制寄存器SOFT域禁止淡入淡出,音量變化通常發(fā)生在音量過(guò)零點(diǎn),以便減小信號(hào)失真。如果未檢測(cè)到過(guò)零點(diǎn),則在512和1024個(gè)采樣周期之間完成音量切換。CS4224同時(shí)具有輸出靜音功能,通過(guò)DAC控制寄存器MUT域設(shè)置,靜音的實(shí)現(xiàn)和音量控制一樣,也是以淡出方式進(jìn)行。?
??? 輸出調(diào)理電路采用兩個(gè)二階Butterworth濾波器,以便濾除帶外噪聲。CS4224在采樣頻率附近為片外濾波器進(jìn)行了3dB預(yù)補(bǔ)償,可以在通帶范圍提供平坦的頻率響應(yīng)和線性相位。輸出信號(hào)為差動(dòng)平衡信號(hào)。?
??? SDOUT引腳的47kΩ下拉電阻將CS4224設(shè)置為主機(jī)工作方式,LRCK和SCLK作為輸出引腳。主時(shí)鐘從CS4224的XT1引腳輸入,頻率為24.576MHz,經(jīng)內(nèi)部8分頻,得到3.072MHz的串行數(shù)據(jù)移位時(shí)鐘SCLK,再經(jīng)64分頻,得到48kHz的左右聲道時(shí)鐘LRCK,也是采樣頻率。分頻關(guān)系通過(guò)時(shí)鐘輸出寄存器的MCK域來(lái)設(shè)置。?
??? CS4224提供四種串行數(shù)據(jù)輸入和輸出格式,可以通過(guò)DSP端口模式寄存器的DDI和DDO域設(shè)置。延時(shí)器均采用格式1(FORMAT1),數(shù)據(jù)為24位左對(duì)齊方式。數(shù)據(jù)輸入和輸出時(shí)序如圖2所示。?
2.2 延時(shí)功能的實(shí)現(xiàn)?
??? M68HC05C8軟件主要由初始化程序和主程序等組成。在初始化程序中,完成CS4224的復(fù)位和初始化、TMS320C32復(fù)位和引導(dǎo)。主程序主要是按鍵和顯示處理程序,完成各種按鍵的分析處理、刷新光柱和數(shù)碼管顯示,并將有關(guān)信息送至CS4224和TMS320C32。?
??? 首先,M68HC05C8復(fù)位CS4224,通過(guò)SPI接口初始化ADC、DAC和DSP端口模式控制寄存器,設(shè)置音頻輸入輸出格式,使音頻輸出靜音。?
??? 接著,M68HC05C8通過(guò)端口PC0~5設(shè)置TMS320C32然后在引腳給出復(fù)位脈沖,TMS320C32進(jìn)入外部存儲(chǔ)器程序引導(dǎo),將FLASH存儲(chǔ)器中的程序裝入內(nèi)部RAM,并從目標(biāo)地址開始執(zhí)行程序。?
??? TMS320C32軟件由主程序、初始化程序和串行中斷服務(wù)程序等組成。初始化程序首先復(fù)位串口,并設(shè)置端口控制寄存器,令串口的所有引腳工作在串口方式,而非通用I/O口;設(shè)置串行口全局控制寄存器,數(shù)據(jù)長(zhǎng)度設(shè)為24位,開放串口中斷,對(duì)串口信號(hào)進(jìn)行極性控制;使用外部時(shí)鐘CLRX/R,并設(shè)置為低電平有效,其余信號(hào)均為高電平有效,以便與CS4224接口線相適應(yīng),然后啟動(dòng)串口工作。?
??? 數(shù)據(jù)讀寫操作均在TMS320C32串口接收中斷服務(wù)程序中進(jìn)行。24位音頻輸入數(shù)據(jù)從DR引腳全部左移進(jìn)入接收移位寄存器RSR后,TMS320C32將RSR內(nèi)容寫入DRR接收寄存器,并產(chǎn)生串口接收中斷XINT。在串口接收中斷服務(wù)程序中,將DRR數(shù)據(jù)寫入SRAM,同時(shí)從SRAM中讀入需要輸出的音頻數(shù)據(jù),寫入發(fā)送寄存器DXR,等待下一個(gè)幀同步信號(hào)FSX有效后送入發(fā)送移位寄存器XSR,在移位脈沖CLKX作用下左移,從DX引腳輸出。?
??? 延時(shí)器有4種工作模式,即直通狀態(tài)(BYPASS)、緊急狀態(tài)(DUMP)、2秒模式(-2s)和咳嗽模式(COUGH)。直通狀態(tài)下,音頻輸入和輸出端通過(guò)繼電器直接連在一起,輸出不再通過(guò)延時(shí)器,延時(shí)器關(guān)機(jī)時(shí)也處于直通狀態(tài)。在延時(shí)狀態(tài)下,每按一次2秒模式鍵,刪除最新輸入延時(shí)器的2秒音頻數(shù)據(jù),避免剛讀錯(cuò)的內(nèi)容被播出。按住咳嗽按鈕鍵,刪除按住該鍵時(shí)輸入的音頻數(shù)據(jù),可讓主持人打噴嚏、咳嗽或作短暫停頓而不被發(fā)現(xiàn)。延時(shí)時(shí)間1~10秒可調(diào),可以通過(guò)按鍵設(shè)定。按下START鍵進(jìn)入延時(shí)狀態(tài),此時(shí)整個(gè)播出靜音或重放預(yù)先錄入的墊樂(lè),直到正式進(jìn)入延時(shí)狀態(tài)。按下EXIT鍵可退出延時(shí)狀態(tài)。在延時(shí)狀態(tài)時(shí),如遇到惡意電話等緊急情況,可迅速按動(dòng)DUMP鍵,此時(shí)設(shè)定延時(shí)時(shí)間內(nèi)的全部音頻數(shù)據(jù)被刪除,并切斷正常播出,播出處?kù)o音狀態(tài)。?
??? 用戶通過(guò)按鍵選擇延時(shí)器的工作模式,M68HC05C8根據(jù)工作模式控制CS4224音頻輸出處于靜音或正常輸出狀態(tài),并在TMS320C32串口中斷服務(wù)程序中改變讀出或?qū)懭胍纛l數(shù)據(jù)的SRAM地址。M68HC05C8根據(jù)延時(shí)時(shí)間和采樣頻率,計(jì)算出音頻數(shù)據(jù)的寫入地址和讀出地址,通過(guò)接口線XF0/1進(jìn)行串口通信,將地址傳送給TMS320C32。當(dāng)讀出地址和寫入地址相同時(shí),音頻輸入和輸出沒(méi)有延時(shí)。如果將寫入地址減去某一增量后作為讀出地址,則讀出內(nèi)容為一段延時(shí)時(shí)間前的音頻輸入,從而達(dá)到延時(shí)功能。?
??? 綜上所述,廣播級(jí)數(shù)字音頻延時(shí)器采用DSP和MCU的主從式結(jié)構(gòu)以及高精度Σ-ΔADC芯片,實(shí)現(xiàn)了靈活的工作模式控制,具有較高的音頻性能指標(biāo),可以滿足電臺(tái)直播節(jié)目安全播出的需要。