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