數話(huà)同傳控制器的設計與實(shí)現

圖3中CLK_2048K為2048kHz的時(shí)鐘信號,CLK1_8K和CLK2_8K均為8kHz的時(shí)鐘信號??梢钥闯?,分立元器件較多,時(shí)鐘源之間的干擾比較大,電路運行不太穩定。本系統中用一片EPM7128實(shí)現,用VHDL語(yǔ)言編寫(xiě)時(shí)序發(fā)生器,大大簡(jiǎn)化了電路,提高了系統的穩定性。圖4是在MAXPLUSII上仿真MC145480從AMBE1000話(huà)音Codec讀取數據的波形。
從仿真波形上可以看出,在MC145480的接收幀同步信號FSR的下降沿到來(lái)時(shí),開(kāi)始在接收位時(shí)鐘信號BCLKR的作用下采樣從AMBE1000話(huà)音Codec傳過(guò)來(lái)的數據(AMBE1000的tx_do端)。在采樣一個(gè)字節后停止采樣,余下的FSR為低電平的時(shí)間(一個(gè)FSR的周期內)用來(lái)給MC45480的DA轉換提供緩沖時(shí)間。在下一個(gè)FSR的下降沿到來(lái)時(shí)又周而復始地重復上述操作。
2.2 話(huà)音壓縮數據的處理
AMBE1000話(huà)音Codec輸出數據是以幀為單位[2],每20ms輸出一幀,每幀的大小為34bytes,其中幀頭為10bytes,壓縮語(yǔ)音數據24bytes。數據格式如表1所示。
如果按全幀發(fā)送,1s內必須傳送的數據位數為:
34bytes × 8bit/bytes × 50 = 13600bit
而Modem 的最大傳輸速率為9600bps,根本無(wú)法進(jìn)行傳輸,更談不上實(shí)現數據和語(yǔ)音同傳了;另一方面,本系統沒(méi)有必要將壓縮語(yǔ)音數據按全幀發(fā)送,只需傳送有效語(yǔ)音數據。壓縮速率為2400bps 時(shí),每幀輸出的有效語(yǔ)音數據為:
2400bps / (50 × 8bit) = 6 bytes
這樣在幀尾會(huì )有18bytes(24bytes-6bytes=18bytes)的無(wú)效0數據,全幀傳輸時(shí)這些無(wú)用的0也參與了傳輸。從節省帶寬方面考慮,必須進(jìn)行幀頭和幀尾的處理,并重組數據幀。為此,在程序中做了如下處理: 當檢測到有話(huà)音數據時(shí),單片機每20ms對AMBE1000話(huà)音Codec進(jìn)行一次讀寫(xiě)操作,將接收到的一幀數據存入一個(gè)緩沖區,去掉不必要的幀頭和幀尾無(wú)效的0,得到純語(yǔ)音數據(每幀6字節)。每隔60ms即連續等待三次AMBE話(huà)音Codec中斷處理后(共18字節的有效語(yǔ)音數據),將有效的語(yǔ)音數據與外部接收的數據一起打包發(fā)給Modem。接收端反之,單片機將Modem解調出來(lái)的語(yǔ)音數據,按每6個(gè)字節,先進(jìn)行必要的幀頭設置,再添加上幀尾的0,恢復一幀完整的數據傳給AMBE1000話(huà)音Codec進(jìn)行解壓縮。這樣充分利用了信道資源,并且語(yǔ)音延遲比較小,外部數據傳輸率也比較高。
2.3 數據的調制和解調
外部輸入的數據和來(lái)自AMBE1000話(huà)音Codec的數據被單片機打包成如表2所示的數據格式。
6 字節的幀頭包括兩字節的位同步、兩字節的幀同步以及兩個(gè)自定義的控制字節。這兩個(gè)控制字節可用于區分語(yǔ)音數據和外部數據,以及在半包發(fā)送時(shí)指示數據塊中實(shí)際數據的多少。每18個(gè)字節作為一個(gè)小數據包,數話(huà)同傳時(shí),語(yǔ)音數據和外部數據各占一小包。一個(gè)字節的幀尾標志一般為0x33。這樣的一幀數據傳給FX909,帶上FEC和CRC位后,最大數據量為:(6+1+30+30+1)×8bit=544bit。在60ms的時(shí)間內,Modem有能力完成一幀數據的發(fā)送(60ms×9600bps=576bit>544bit)。這從一個(gè)側面證明了本系統采用的數話(huà)同傳方案的可行性。FX909工作在任務(wù)方式下,單片機通過(guò)寫(xiě)任務(wù)到FX909的命令寄存器去指示Modem的工作,當FX909完成工作后以中斷的形式通知單片機當前操作已經(jīng)完成。軟件實(shí)現發(fā)送和接收數據的過(guò)程如下[5]:發(fā)送數據時(shí),設置FX909的工作模式為發(fā)送狀態(tài),寫(xiě)幀頭數據,設置任務(wù)=T7H,發(fā)7個(gè)字節幀頭(FX909內部幀頭帶一個(gè)字節的FEC和CRC);然后往FX909 數據緩沖區中寫(xiě)入18 個(gè)字節的數據,設置任務(wù)=TDB,發(fā)送數據塊;若本幀未結束,繼續發(fā)送數據塊,發(fā)送結束后再發(fā)一個(gè)字節的幀結束標志;如此反復直到所有的數據發(fā)送結束為止。接收數據時(shí),先設置FX909 的工作模式為接收狀態(tài),檢測到載波信號后,寫(xiě)幀同步字節至數據緩沖區,設置任務(wù)=LFSB,進(jìn)行比特同步;然后設置任務(wù)=SFH,查找幀頭,讀出幀頭控制字節后設置任務(wù)=RDB,讀出18個(gè)字節的數據;若本幀未結束,繼續讀數據塊,否則查找下一個(gè)幀頭;如此反復,直至接收完所有的數據。同時(shí)還可以讀出CRC和FEC標志位信息,進(jìn)行相應的處理。
本文實(shí)現的數話(huà)同傳控制器具有話(huà)音延遲短、數據傳輸量大的特點(diǎn),有效地解決了語(yǔ)音信號延遲比較大和外部數據傳輸量受限問(wèn)題,能夠滿(mǎn)足絕大多數場(chǎng)合下話(huà)音通信和數據傳輸的要求,有著(zhù)廣泛的應用前景。
51單片機相關(guān)文章:51單片機教程
評論