新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 數(shù)話同傳控制器的設(shè)計與實現(xiàn)

數(shù)話同傳控制器的設(shè)計與實現(xiàn)

作者: 時間:2009-04-09 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/173789.htm

圖3中CLK_2048K為2048kHz的時鐘信號,CLK1_8K和CLK2_8K均為8kHz的時鐘信號??梢钥闯觯至⒃骷^多,時鐘源之間的干擾比較大,電路運行不太穩(wěn)定。本系統(tǒng)中用一片EPM7128,用VHDL語言編寫時序發(fā)生器,大大簡化了電路,提高了系統(tǒng)的穩(wěn)定性。圖4是在MAXPLUSII上仿真MC145480從AMBE1000話音讀取數(shù)據(jù)的波形。
  從仿真波形上可以看出,在MC145480的接收幀同步信號FSR的下降沿到來時,開始在接收位時鐘信號BCLKR的作用下采樣從AMBE1000話音傳過來的數(shù)據(jù)(AMBE1000的tx_do端)。在采樣一個字節(jié)后停止采樣,余下的FSR為低電平的時間(一個FSR的周期內(nèi))用來給MC45480的DA轉(zhuǎn)換提供緩沖時間。在下一個FSR的下降沿到來時又周而復(fù)始地重復(fù)上述操作。
2.2 話音壓縮數(shù)據(jù)的處理
  AMBE1000話音輸出數(shù)據(jù)是以幀為單位[2],每20ms輸出一幀,每幀的大小為34bytes,其中幀頭為10bytes,壓縮語音數(shù)據(jù)24bytes。數(shù)據(jù)格式如表1所示。

如果按全幀發(fā)送,1s內(nèi)必須傳送的數(shù)據(jù)位數(shù)為:
  34bytes × 8bit/bytes × 50 = 13600bit
  而 的最大傳輸速率為9600bps,根本無法進行傳輸,更談不上數(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ù)幀。為此,在程序中做了如下處理: 當(dāng)檢測到有話音數(shù)據(jù)時,單片機每20ms對AMBE1000話音Codec進行一次讀寫操作,將接收到的一幀數(shù)據(jù)存入一個緩沖區(qū),去掉不必要的幀頭和幀尾無效的0,得到純語音數(shù)據(jù)(每幀6字節(jié))。每隔60ms即連續(xù)等待三次Codec中斷處理后(共18字節(jié)的有效語音數(shù)據(jù)),將有效的語音數(shù)據(jù)與外部接收的數(shù)據(jù)一起打包發(fā)給。接收端反之,單片機將解調(diào)出來的語音數(shù)據(jù),按每6個字節(jié),先進行必要的幀頭設(shè)置,再添加上幀尾的0,恢復(fù)一幀完整的數(shù)據(jù)傳給AMBE1000話音Codec進行解壓縮。這樣充分利用了信道資源,并且語音延遲比較小,外部數(shù)據(jù)傳輸率也比較高。
2.3 數(shù)據(jù)的調(diào)制和解調(diào)
  外部輸入的數(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é)的幀尾標(biāo)志一般為0x33。這樣的一幀數(shù)據(jù)傳給FX909,帶上FEC和CRC位后,最大數(shù)據(jù)量為:(6+1+30+30+1)×8bit=544bit。在60ms的時間內(nèi),Modem有能力完成一幀數(shù)據(jù)的發(fā)送(60ms×9600bps=576bit>544bit)。這從一個側(cè)面證明了本系統(tǒng)采用的數(shù)話方案的可行性。FX909工作在任務(wù)方式下,單片機通過寫任務(wù)到FX909的命令寄存器去指示Modem的工作,當(dāng)FX909完成工作后以中斷的形式通知單片機當(dāng)前操作已經(jīng)完成。軟件發(fā)送和接收數(shù)據(jù)的過程如下[5]:發(fā)送數(shù)據(jù)時,設(shè)置FX909的工作模式為發(fā)送狀態(tài),寫幀頭數(shù)據(jù),設(shè)置任務(wù)=T7H,發(fā)7個字節(jié)幀頭(FX909內(nèi)部幀頭帶一個字節(jié)的FEC和CRC);然后往FX909 數(shù)據(jù)緩沖區(qū)中寫入18 個字節(jié)的數(shù)據(jù),設(shè)置任務(wù)=TDB,發(fā)送數(shù)據(jù)塊;若本幀未結(jié)束,繼續(xù)發(fā)送數(shù)據(jù)塊,發(fā)送結(jié)束后再發(fā)一個字節(jié)的幀結(jié)束標(biāo)志;如此反復(fù)直到所有的數(shù)據(jù)發(fā)送結(jié)束為止。接收數(shù)據(jù)時,先設(shè)置FX909 的工作模式為接收狀態(tài),檢測到載波信號后,寫幀同步字節(jié)至數(shù)據(jù)緩沖區(qū),設(shè)置任務(wù)=LFSB,進行比特同步;然后設(shè)置任務(wù)=SFH,查找?guī)^,讀出幀頭控制字節(jié)后設(shè)置任務(wù)=RDB,讀出18個字節(jié)的數(shù)據(jù);若本幀未結(jié)束,繼續(xù)讀數(shù)據(jù)塊,否則查找下一個幀頭;如此反復(fù),直至接收完所有的數(shù)據(jù)。同時還可以讀出CRC和FEC標(biāo)志位信息,進行相應(yīng)的處理。
  本文實現(xiàn)的具有話音延遲短、數(shù)據(jù)傳輸量大的特點,有效地解決了語音信號延遲比較大和外部數(shù)據(jù)傳輸量受限問題,能夠滿足絕大多數(shù)場合下話音通信和數(shù)據(jù)傳輸?shù)囊?有著廣泛的應(yīng)用前景。

51單片機相關(guān)文章:51單片機教程



上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉