數(shù)話同傳控制器的設(shè)計(jì)與實(shí)現(xiàn)
摘要:介紹了一種數(shù)話同傳控制器的實(shí)現(xiàn)方法。該控制器以單片機(jī)AT89S52和EPLD芯片EPM7128為核心,采用GMSK調(diào)制解調(diào)器和AMBE話音 Codec以及新的數(shù)話同傳方案,在一個(gè)普通的模擬調(diào)頻話音信道上(帶寬25kHz)實(shí)現(xiàn)了數(shù)字化語(yǔ)音和數(shù)據(jù)的同時(shí)傳輸。實(shí)驗(yàn)證明,這種數(shù)話同傳方案有效地減小了話音信號(hào)的延遲,保持了較高的數(shù)據(jù)傳輸率。無(wú)話音信號(hào)時(shí),數(shù)據(jù)傳輸率為9600bps;數(shù)話同傳時(shí),數(shù)據(jù)傳輸率約為4800bps。 關(guān)鍵詞:數(shù)話同傳 EPLD AMBE話音 Codec GMSK Modem 話音和數(shù)據(jù)同傳有多種方案,這些方案大都先將話音信號(hào)數(shù)字化,經(jīng)過(guò)壓縮后與外部數(shù)據(jù)一起打包傳輸。主要區(qū)別在于發(fā)送一包話音數(shù)據(jù)與外部數(shù)據(jù)的占用時(shí)間,以及話音數(shù)據(jù)與外部數(shù)據(jù)在包內(nèi)的分割時(shí)長(zhǎng)。常見(jiàn)的有兩種方案。一旦日本救護(hù)車所用的數(shù)話同傳方案,可將病人的身體狀況的檢測(cè)數(shù)據(jù)與話音同傳。在這一方案中,以625ms為一個(gè)話音壓縮周期,其中187.5ms用于傳送數(shù)據(jù),437.5ms用于傳送話音,外部數(shù)據(jù)時(shí)隙占整個(gè)信道時(shí)間的30%,數(shù)話同傳時(shí)話音延遲約為200ms。另一種是UIC建議的數(shù)話同傳方案。這個(gè)方案以1040ms為一個(gè)周期,其中260ms用于傳輸數(shù)據(jù),780ms用于傳輸壓縮話音,數(shù)據(jù)時(shí)隙占整個(gè)信道的時(shí)間為25%。這一方案由于數(shù)據(jù)占用的時(shí)間較短,因此可以提供較好的通話質(zhì)量,但話音延遲260ms,在雙工通話時(shí)會(huì)使人感到不適,數(shù)據(jù)傳輸量也不高。 圖1 上述兩種方案的話音延遲都較長(zhǎng),同時(shí)外部數(shù)據(jù)時(shí)隙占信道的時(shí)間比較短,發(fā)送數(shù)據(jù)量受到一定的限制,主要用于傳送話音信號(hào)。本文在保證傳送話音質(zhì)量的基礎(chǔ)上,盡量減小話音延遲,提高外部數(shù)據(jù)分割時(shí)長(zhǎng),同時(shí)根據(jù)AMBE話音Codec和GMSK Modem的特點(diǎn),提出了如圖1所示的數(shù)據(jù)話同傳方案。 AMBE話音Codec采用基于MBE(多帶話音激勵(lì))模型的壓縮技術(shù),已被證明優(yōu)于CPLE、MP-MLQ、LPC10以及其它的壓縮技術(shù),MOS分達(dá)到3.5分,能夠在低至2.0kbps的壓縮速率下保證高質(zhì)量的話音。所以本系統(tǒng)采用2.4kbps的話音壓縮速率時(shí)仍然有很好的自然度和可懂性。當(dāng)單片機(jī)查詢到有話音數(shù)據(jù)時(shí),不中斷數(shù)據(jù)的傳輸,而是延遲60ms,單片機(jī)再將AMBE話音Codec傳過(guò)來(lái)的話音數(shù)據(jù)處理后與外部數(shù)據(jù)一起打包發(fā)給 Modem,實(shí)現(xiàn)數(shù)話同傳。從上述方案中可以看出,話音信號(hào)的延遲不會(huì)超過(guò)120ms,優(yōu)于前兩種方案,能夠很好地滿足實(shí)時(shí)性的要求;外部數(shù)據(jù)時(shí)隙占整個(gè)信道時(shí)間約為46%,分割時(shí)長(zhǎng)也比前兩種方案高,此時(shí)外部數(shù)據(jù)傳輸率約為4800bps。沒(méi)有話音數(shù)據(jù)傳輸時(shí),單片機(jī)直接對(duì)外部數(shù)據(jù)進(jìn)行打包傳送,數(shù)據(jù)傳輸率為GMSK Modem的傳輸率,即為9600bps。 1 系統(tǒng)的硬件組成及工作原理 1.1 系統(tǒng)的硬件結(jié)構(gòu) 整個(gè)系統(tǒng)的硬件結(jié)構(gòu)框如圖2所示。 圖2 系統(tǒng)以Atmel公司的單片機(jī)AT89C52和Altera公司的EPLD芯片EPM7128為主控芯片。AT89C52是一款低功耗、高性能的8位微處理器,負(fù)責(zé)整個(gè)系統(tǒng)的絕大多數(shù)工作,內(nèi)部帶有8KB可編程的FLASH存儲(chǔ)器,無(wú)需擴(kuò)展ROM,自帶ISP口,可靈活地進(jìn)行在系統(tǒng)可編程,可以通過(guò)全雙工的標(biāo)準(zhǔn)串口與外部計(jì)算機(jī)或PLC交換數(shù)據(jù)。EPM7128是Altera公司的MAX7000系列中的一款,具有高阻抗、電可擦寫(xiě)等特點(diǎn),可用門(mén)單元為 2500個(gè),管腳間最大延時(shí)為5ns,主要用來(lái)實(shí)現(xiàn)話音壓縮和解壓縮所需的時(shí)序及邏輯控制。話音預(yù)處理和ADC-DAC單元采用MC145480,其內(nèi)集成了300Hz~3400Hz的帶通濾波器、AD和DA轉(zhuǎn)換器,采樣頻率為8kHz,每個(gè)采樣值采用8比特(256個(gè)量化級(jí))編碼,可輸出A律和μ律可選的64kbps的PCM信號(hào)。話音壓縮和解壓縮通過(guò)AMBE1000完成,壓縮速率從2.4kbps~9.6kbps,A/μ律可選,具有語(yǔ)音檢測(cè)、回聲抑制和休眠等功能。數(shù)據(jù)調(diào)制解調(diào)部分的核心器件是無(wú)線單片收發(fā)芯片F(xiàn)X909。此芯片采用GMSK調(diào)制解調(diào)方式,頻帶利用率非常高,特別適合在窄帶的數(shù)傳系統(tǒng)中,內(nèi)部硬件實(shí)現(xiàn)FEC和CRC算法,同時(shí)兼容Mobitex無(wú)線廣域網(wǎng)空中接口標(biāo)準(zhǔn)。模擬調(diào)頻電臺(tái)將從Modem輸出的GMSK信號(hào)經(jīng)過(guò)二次調(diào)制到數(shù)據(jù)傳信道上傳輸,帶寬一般為25kHz,新西蘭大吉公司、美國(guó)的MDS公司、日本的建武的模擬臺(tái)都可實(shí)現(xiàn)此功能。 1.2 系統(tǒng)工作原理 在無(wú)話音數(shù)據(jù)傳輸時(shí),AT89C52將從串口接收的數(shù)據(jù)打包處理后發(fā)送給Modem,Modem對(duì)傳過(guò)來(lái)的數(shù)據(jù)增加前向糾錯(cuò)(FEC)、循環(huán)冗余校驗(yàn)(CRC)位后,按Mobitex標(biāo)準(zhǔn)的數(shù)據(jù)格式進(jìn)行交織和擾碼處理,再附上比特同步和幀同步字節(jié)后,對(duì)數(shù)據(jù)包進(jìn)行GMSK調(diào)制,輸出音頻的GMSK信號(hào),再由電臺(tái)將其調(diào)制到模擬調(diào)頻話音信道上傳送出去。當(dāng)有話音數(shù)據(jù)傳輸時(shí),模擬話音輸入MC145480,經(jīng)過(guò)8kHz的A律編碼輸出64kbps的 PCM信號(hào)。經(jīng)過(guò)AMBE1000壓縮后,輸出2.4kbps的壓縮話音數(shù)據(jù),這些話音數(shù)據(jù)經(jīng)單片機(jī)AT89S52除包延時(shí)處理后與串口接收的外部數(shù)據(jù)一起打包送到調(diào)制解調(diào)模塊,實(shí)現(xiàn)數(shù)據(jù)和話音的同時(shí)傳輸。 數(shù)據(jù)接收時(shí),Modem從模擬調(diào)頻電臺(tái)讀入音頻信號(hào)進(jìn)行GMSK解調(diào),經(jīng)檢錯(cuò)和撤包處理后,將數(shù)據(jù)傳送給AT89S52。單片機(jī)經(jīng)過(guò)判斷處理后,如果是外部的數(shù)據(jù),則直接通過(guò)串口輸出;如果是話音數(shù)據(jù),則經(jīng)過(guò)處理后送給AMBE1000解壓縮,輸出的PCM信號(hào)經(jīng)過(guò)A律解碼和DAC,還原成模擬話音信號(hào)輸出。 2 軟件設(shè)計(jì)及實(shí)現(xiàn) 整個(gè)系統(tǒng)的軟件主要包括三大部分:MC145480和AMBE1000的接口時(shí)序的實(shí)現(xiàn)、語(yǔ)音壓縮數(shù)據(jù)的處理、數(shù)據(jù)的調(diào)制和解調(diào)。 2.1 接口時(shí)序的實(shí)現(xiàn) AMBE1000話音Codec與MC145480的接口關(guān)系如圖3所示。 圖3中CLK_2048K為2048kHz的時(shí)鐘信號(hào),CLK1_8K和CLK2_8K均為8kHz的時(shí)鐘信號(hào)。可以看出,分立元器件較多,時(shí)鐘源之間的干擾比較大,電路運(yùn)行不太穩(wěn)定。本系統(tǒng)中用一片EPM7128實(shí)現(xiàn),用VHDL語(yǔ)言編寫(xiě)時(shí)序發(fā)生器,大大簡(jiǎn)化了電路,提高了系統(tǒng)的穩(wěn)定性。圖4是在 MAXPLUSII上仿真MC145480從AMBE1000語(yǔ)音Codec讀取數(shù)據(jù)的波形。 從仿真波形上可以看出,在MC145480的接收幀同步信號(hào)FSR的下降沿到來(lái)時(shí),開(kāi)始在接收位時(shí)鐘信號(hào)BCLKR的作用下采用從AMBE1000語(yǔ)音 Codec傳過(guò)來(lái)的數(shù)據(jù)(AMBE1000的tx_do端)。在采樣一個(gè)字節(jié)后停止采樣,余下的FSR為低電平的時(shí)間(一個(gè)FSR的周期內(nèi))用來(lái)給 MC45480的DA轉(zhuǎn)換提供緩沖時(shí)間。在下一個(gè)FSR的下降沿到來(lái)時(shí)又周而復(fù)始地重復(fù)上述操作。 2.2 語(yǔ)音壓縮數(shù)據(jù)的處理 AMBE1000語(yǔ)音Codec輸出數(shù)據(jù)是以幀為單位,每20ms輸出一幀,每幀的大小為34bytes,其中幀頭為10bytes,壓縮語(yǔ)音數(shù)據(jù) 24bytes。
如果按全幀發(fā)送,1s內(nèi)必須傳送的數(shù)據(jù)位數(shù)為: 34bytes%26;#215;8bit/bytes%26;#215;50=13600bit 而Modem的最大傳輸速率為9600bps,根本無(wú)法進(jìn)行傳輸,更談不上實(shí)現(xiàn)數(shù)據(jù)和語(yǔ)音同傳了;另一方面,本系統(tǒng)沒(méi)有必要將壓縮語(yǔ)音數(shù)據(jù)按全幀發(fā)送,本系統(tǒng)沒(méi)有必要將壓縮語(yǔ)音數(shù)據(jù)按全幀發(fā)送,只需傳送有效語(yǔ)音數(shù)據(jù)。壓縮速率為2400bps時(shí),每幀輸出的有效語(yǔ)音數(shù)據(jù)為: 2400bps/(50%26;#215;8bit)=6bytes 這樣在幀尾會(huì)有18bytes(24bytes-6bytes=18bytes)的無(wú)效0數(shù)據(jù),全幀傳輸時(shí)這些無(wú)用的0也參與了傳輸。從節(jié)省帶寬方面考慮,必須進(jìn)行幀頭和幀尾的處理,并重組數(shù)據(jù)幀。為此,在程序中做了如下處理:當(dāng)檢測(cè)到有話音數(shù)據(jù)時(shí),單片機(jī)每20ms 地AMBE1000語(yǔ)音Codec進(jìn)行一次讀寫(xiě)操作,將接收到的一幀數(shù)據(jù)存入一個(gè)緩沖區(qū),去掉不必要的幀頭和幀尾無(wú)效的0,得到純語(yǔ)音數(shù)據(jù)(每幀6字節(jié))。每隔60ms即連續(xù)等待三次AMBE語(yǔ)音Codec中斷處理后(共18字節(jié)的有效語(yǔ)音數(shù)據(jù)),將有效的語(yǔ)音數(shù)據(jù)與外部接收的數(shù)據(jù)一起打包發(fā)給 Modem。接收端反之,單片機(jī)將Modem解調(diào)出來(lái)的語(yǔ)音數(shù)據(jù),按每6個(gè)字節(jié),先進(jìn)行必要的幀頭設(shè)置,再添加上幀尾的0,恢復(fù)一幀完整的數(shù)據(jù)傳給 AMBE1000語(yǔ)音Codec進(jìn)行解壓縮。這樣充分利用了信道資源,并且語(yǔ)音延遲比較小,外部數(shù)據(jù)傳輸率也比較高。 2.3 數(shù)據(jù)的調(diào)制和解調(diào) 6字節(jié)的幀頭包括兩字節(jié)的位同步、兩字節(jié)的幀步以及兩個(gè)自定義的控制字節(jié)。這兩個(gè)控制字節(jié)可用于區(qū)分語(yǔ)音數(shù)據(jù)和外部數(shù)據(jù)。以及在半包發(fā)送時(shí)指示數(shù)據(jù)塊中實(shí)際數(shù)據(jù)的多少。每18個(gè)字節(jié)作為一個(gè)小數(shù)據(jù)包,數(shù)話同傳時(shí),語(yǔ)音數(shù)據(jù)和外部數(shù)據(jù)各占一小包。一個(gè)字節(jié)的幀尾標(biāo)示一般為0x33。這樣的一幀數(shù)據(jù)傳給 FX909,帶上FEC和CRC位后,這樣的一幀數(shù)據(jù)傳給FX909,帶上FEC和CRC位后,最大數(shù)據(jù)量為:(6+1+30+30+1)%26;#215;8bit=544bit。在60ms的時(shí)間內(nèi),Modem有能力完成一幀數(shù)據(jù)的發(fā)送(60ms%26;#215;9600bps=576bit>544bit)。這從一個(gè)側(cè)面證明了本系統(tǒng)采用的數(shù)話同傳方案的可行性。FX909工作在任務(wù)方式下,單片機(jī)通過(guò)寫(xiě)任務(wù)到FX909的命令寄存器去指示Modem的工作,當(dāng)FX909完成工作后以中斷的形式通知單片機(jī)當(dāng)前操作已經(jīng)完成。軟件實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù)的過(guò)程如下:發(fā)送數(shù)據(jù)時(shí),設(shè)置FX909的工作模式為發(fā)送狀態(tài),寫(xiě)幀頭數(shù)據(jù),設(shè)置任務(wù)=T7H,發(fā)7個(gè)字節(jié)幀頭(FX909內(nèi)部幀頭帶一個(gè)字節(jié)的FEC和CRC);然后往FX909數(shù)據(jù)緩沖區(qū)中寫(xiě)入18個(gè)字節(jié)的數(shù)據(jù),設(shè)置任務(wù)=TDB,發(fā)送數(shù)據(jù)塊;若本幀未結(jié)束,繼續(xù)發(fā)送數(shù)據(jù)塊,發(fā)送結(jié)束后再發(fā)一個(gè)字節(jié)的幀結(jié)束標(biāo)志;如此反復(fù)直到所有的數(shù)據(jù)發(fā)送結(jié)束為止。接收數(shù)據(jù)時(shí),先設(shè)置FX909的工作模式為接收狀態(tài),檢測(cè)到載波信號(hào)后,寫(xiě)幀同步字節(jié)至數(shù)據(jù)緩沖區(qū),設(shè)置任務(wù)=LFSB,進(jìn)行比特同步;然后設(shè)置任務(wù)=SFH,查找?guī)^,讀出幀頭控制字節(jié)后設(shè)置任務(wù)=RDB,讀出18個(gè)字節(jié)的數(shù)據(jù);若本幀未結(jié)束,繼續(xù)讀數(shù)據(jù)塊,否則查找下一個(gè)幀頭;如此反復(fù),直至接收完所有的數(shù)據(jù)。同時(shí)還可以讀出CRC和FEC標(biāo)志位信息,進(jìn)行相應(yīng)的處理。 圖4 本文實(shí)現(xiàn)的數(shù)話同傳控制器具有話音延遲短、數(shù)據(jù)傳輸量大的特點(diǎn),有效地解決了語(yǔ)音信號(hào)延遲比較大和外部數(shù)據(jù)傳輸量受限問(wèn)題,能夠滿足絕大多數(shù)場(chǎng)合下話音通信和數(shù)據(jù)傳輸?shù)囊?,有著廣泛的應(yīng)用前景。