基于有限狀態(tài)機(jī)的Morse碼識別算法設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于有限狀態(tài)機(jī)的Morse碼識別算法設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于有限狀態(tài)機(jī)的Morse碼識別算法設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于有限狀態(tài)機(jī)的Morse碼識別算法設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于有限狀態(tài)機(jī)的Morse碼識別算法設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于有限狀態(tài)機(jī)的Morse碼識別算法設(shè)計(jì)與實(shí)現(xiàn)摘要:針對手工拍發(fā)莫爾斯碼各信號間的比例隨機(jī)性較強(qiáng),自動譯碼判斷準(zhǔn)確度不高等問題,提出了一種基于有限狀態(tài)的莫爾斯碼自動識別算法。將電鍵拍發(fā)過程劃分為六種狀態(tài),有利于C+語言編程實(shí)現(xiàn)的類化與建模。算法能根據(jù)報(bào)務(wù)員發(fā)報(bào)時(shí)碼速的變化而自動調(diào)整莫爾斯碼各個(gè)判別門限,從而大大提高了碼字識別率。最后分析了抽樣誤差等對莫爾斯判決門限的影響,給出了各種誤差消除的解決方案。在Windows平臺上的VisualC+可視化編程環(huán)境中實(shí)現(xiàn)了該算法,并給出了具體的算法設(shè)計(jì)流程圖。0引言基于莫爾斯信號的通信時(shí)人類最早的無線通信方式,具有傳統(tǒng)型、經(jīng)濟(jì)型和有效性等優(yōu)點(diǎn),所以它仍廣

2、泛被應(yīng)用在海事移動通信、航空移動通信、廣播、衛(wèi)星通信當(dāng)中。目前莫爾斯碼識別算法主要有岡瑟算法、相對比較法、絕對比較法、概率分區(qū)法等。但上述算法或要求固定參考時(shí)間作為判決,獲益碼字概率來分析判別,所以判別正確率低;且莫爾斯報(bào)多用人工手敲電鍵發(fā)報(bào),但在實(shí)際工作環(huán)境中由于報(bào)務(wù)員的個(gè)體差異,以及發(fā)報(bào)速度不斷變化,莫爾斯的判別時(shí)間門限也發(fā)生相應(yīng)地變化,所以上述算法自動識別Morse碼的準(zhǔn)確率不高,實(shí)際應(yīng)用中達(dá)不到譯碼要求。有限狀態(tài)機(jī)(FSM,FiniteStateMachine)是具有離散輸入與輸出的系統(tǒng)的一種數(shù)學(xué)模型。表現(xiàn)為有限個(gè)不同狀態(tài),在不同的輸入作用下,系統(tǒng)將從一個(gè)狀態(tài)遷徙到另一個(gè)狀態(tài)?;谟邢?/p>

3、狀態(tài)機(jī)的Morse碼算法將Morse發(fā)報(bào)過程劃分為相應(yīng)的六種狀態(tài),并在各個(gè)狀態(tài)下實(shí)時(shí)跟蹤Morse報(bào)文發(fā)報(bào)速度變化而自動修改各個(gè)判決門限范圍,簡化了識別過程并且大大提高了報(bào)文識別率。1系統(tǒng)總體設(shè)計(jì)該系統(tǒng)中終端操作平臺硬件電路不停的對手電鍵信號進(jìn)行抽樣采集,采集速率為每秒100次。根據(jù)采樣得到的一串高低電平脈沖,將點(diǎn)劃信號解碼為低電平脈沖,間隔解碼為高電平脈沖。對莫爾斯電碼的有限狀態(tài)基譯碼就是在此基礎(chǔ)上進(jìn)行的。譯碼算法流程如圖1所示。圖1基于狀態(tài)機(jī)的譯碼算法流程圖電鍵拍發(fā)開始后,首先對各個(gè)狀態(tài)基進(jìn)行判別,執(zhí)行相應(yīng)的狀態(tài)機(jī)響應(yīng)。經(jīng)過狀態(tài)機(jī)的響應(yīng)函數(shù)執(zhí)行后,確定出了每種信號的類別,并進(jìn)行適當(dāng)組合,當(dāng)

4、遇到碼間間隔或組間間隔時(shí)就得到一個(gè)字母的莫爾斯碼的電話組合,并查“碼表”得出相應(yīng)的碼字。同時(shí)將碼速變化反饋調(diào)整點(diǎn)時(shí)間長度,重新計(jì)算各間隔判決門限,提高了譯碼準(zhǔn)確率。2有限狀態(tài)機(jī)設(shè)計(jì)與碼速的計(jì)算2.1有限狀態(tài)機(jī)判別及狀態(tài)轉(zhuǎn)移莫爾斯碼一般使用電鍵來進(jìn)行拍發(fā),根據(jù)電鍵按下與抬起可劃分為6個(gè)不同的拍發(fā)狀態(tài)。6個(gè)按鍵狀態(tài)定義如表1所示。表1狀態(tài)機(jī)與按鍵狀態(tài)的對應(yīng)關(guān)系狀態(tài)機(jī)按鍵狀態(tài)Invalid無用的KeyFirstDown第一次按下電鍵KeyDown電鍵按下KeyKeepDown電鍵保持按下KeyUp電鍵抬起KeyKeepUp電鍵保播抬起圖2按鍵狀態(tài)轉(zhuǎn)移圖根據(jù)狀態(tài)變化將有限狀態(tài)機(jī)各個(gè)狀態(tài)畫成狀態(tài)轉(zhuǎn)移圖(

5、見圖2)。用圓圈表示狀態(tài);狀態(tài)轉(zhuǎn)移用有向弧線表示;用標(biāo)有箭頭的節(jié)點(diǎn)表示初始狀態(tài);屬于終結(jié)狀態(tài)機(jī)中的狀態(tài)用雙圓表示。在任意發(fā)報(bào)狀態(tài)中,當(dāng)接收到高低電平時(shí),都可由狀態(tài)轉(zhuǎn)移圖判斷出按鍵下一步處于什么狀態(tài)。并且當(dāng)狀態(tài)變化時(shí)便可計(jì)算出各狀態(tài)持續(xù)的時(shí)間。例如現(xiàn)在按鍵處于KeyKeepDown狀態(tài),若硬件電路下一時(shí)刻對電鍵抽樣得到的是低電平,及按鍵沒有抬起,則根據(jù)狀態(tài)轉(zhuǎn)移圖可知,按鍵還在KeyKeepDown狀態(tài),并將KeyKeepDown狀態(tài)時(shí)間累加。當(dāng)對電鍵抽樣時(shí)間得到的是高電平,即電鍵抬起了,根據(jù)狀態(tài)轉(zhuǎn)移圖,按鍵此刻處于KeyUp狀態(tài),此時(shí)便可得出KeyKeepDown狀態(tài)總共所持續(xù)的時(shí)間。以此類推,

6、可以得到各個(gè)狀態(tài)持續(xù)的時(shí)間。2.2碼速計(jì)算及信號類別域界設(shè)定由于報(bào)務(wù)員發(fā)報(bào)時(shí)不可能保持恒定的碼速,所以要計(jì)算莫爾斯碼信號的實(shí)時(shí)碼速。根據(jù)莫爾斯碼的碼速,便可劃分點(diǎn)、劃、三種間隔的門限范圍,從而準(zhǔn)確地譯碼。標(biāo)準(zhǔn)碼速通常采用“Paris”制或“CODEX”制兩種計(jì)速方法。文中碼速Speed的計(jì)算公式是:Speed=(m_JS+(m_JiZu-1)*4)*60.0/intTime*(1000/500);m_JS為每組中碼的位置;m_JiZu為碼組數(shù)(4個(gè)嗎一組);intTime為抽樣時(shí)間(定時(shí)器時(shí)間為500ms)。在定時(shí)器到達(dá)時(shí)刻,按上面公式實(shí)時(shí)計(jì)算得出新的碼速,并在發(fā)報(bào)界面上顯示出來。發(fā)報(bào)訓(xùn)練前,

7、報(bào)務(wù)員可以選定一個(gè)發(fā)報(bào)碼速,根據(jù)發(fā)報(bào)碼速由碼速-點(diǎn)時(shí)間長度經(jīng)驗(yàn)曲線可計(jì)算出對應(yīng)的點(diǎn)時(shí)間長度,從而在此基礎(chǔ)上進(jìn)行判別譯碼。根據(jù)碼速計(jì)算點(diǎn)時(shí)間長度的程序流程,如圖3所示,其中碼速單位為碼/分,點(diǎn)時(shí)間長度單位為ms,Round為四舍五入取整運(yùn)算。在訓(xùn)練過程中碼速往往發(fā)生變化,則對碼速進(jìn)行動態(tài)計(jì)算,得出點(diǎn)時(shí)間長度的變化。由點(diǎn)時(shí)間長度可以推算出點(diǎn)、劃和三個(gè)時(shí)間間隔的長度,從而實(shí)現(xiàn)自適應(yīng)碼速譯碼。(弄站)_NONO碼速林處理范圍詢)丫點(diǎn)時(shí)間長度(葩-=90-Rcund(-40)*10/20)=40-Round(-180)*l(V60)圖3根據(jù)碼速計(jì)算點(diǎn)時(shí)間長度3有限狀態(tài)基狀態(tài)響應(yīng)及Morse碼識別根據(jù)從手

8、電鍵接收的高低電平,并按照有限狀態(tài)機(jī)的按鍵狀態(tài)轉(zhuǎn)移圖,可以判決出發(fā)報(bào)處于什么狀態(tài)中。對各狀態(tài)機(jī)設(shè)計(jì)相應(yīng)的響應(yīng),從而最終判決出碼字與組字:(1)Invalid狀態(tài)機(jī):break(退出);(2)KeyKeepDown狀態(tài)機(jī):按鍵按下狀態(tài)時(shí)間與抽樣時(shí)間累加;(3)KeyKeepUp狀態(tài)機(jī):按鍵抬起狀態(tài)時(shí)間與抽樣時(shí)間累加;(4)KeyFirstDown狀態(tài)機(jī):按鍵按下狀態(tài)時(shí)間等于抽樣時(shí)間,電鍵開始發(fā)報(bào);(5)KeyUp狀態(tài)機(jī):可以得出KeyKeepDown狀態(tài)所持續(xù)的時(shí)間,即按鍵狀態(tài)持續(xù)的時(shí)間。根據(jù)點(diǎn)時(shí)間長度歸一化按鍵時(shí)間差(按鍵狀態(tài)時(shí)間長度點(diǎn)時(shí)間長度),對歸一化后的按鍵時(shí)間差判別碼字的點(diǎn)與劃,如大于

9、判決值則為劃,小于判決值則為點(diǎn)。標(biāo)準(zhǔn)的Morse報(bào)文中點(diǎn)長:劃長=1:3,但是在低速拍發(fā)時(shí),點(diǎn)與劃的長度比例難以達(dá)到一比三的關(guān)系,劃一般較長。否則,聽起來就會有點(diǎn)粗、劃短的感覺。所以一般用經(jīng)驗(yàn)值4.0/3.0來判決點(diǎn)與劃。判決流程如圖4所示。圖4KeyUp與KeyDown狀態(tài)機(jī)下判別流程處理(6)KeyDown狀態(tài)機(jī):按鍵狀態(tài)變化即可得出KeyKeepUp狀態(tài)下抬鍵所持續(xù)的時(shí)間。根據(jù)點(diǎn)時(shí)間長度歸一化抬鍵時(shí)間差(抬鍵狀態(tài)時(shí)間長度點(diǎn)時(shí)間長度),對歸一化后的抬鍵時(shí)間差進(jìn)行判別,得出按鍵時(shí)間差為碼內(nèi)間隔、字符間隔、字組間隔的一種。標(biāo)準(zhǔn)的Morse報(bào)文中點(diǎn)時(shí)間長度:碼內(nèi)間隔:字符間隔:字組間隔=1:1:

10、3:7,但是在低速拍發(fā)報(bào)文時(shí)往往達(dá)不到上面的要求,一般按經(jīng)驗(yàn)值判決各個(gè)間隔。判斷流程如圖4所示。每當(dāng)判別出點(diǎn)與劃時(shí),計(jì)算出當(dāng)前碼速,根據(jù)圖3中碼速與點(diǎn)時(shí)間關(guān)系將點(diǎn)時(shí)間修正反饋給各狀態(tài)機(jī),從而實(shí)現(xiàn)了莫爾斯碼的自適應(yīng)識別。將各有限機(jī)狀態(tài)識別出的點(diǎn)與劃依次存儲起來,當(dāng)識別出字符間隔時(shí),將判別出的點(diǎn)與劃進(jìn)行組合與“碼表”對應(yīng)查得相應(yīng)的字符。若“碼表”中不存在識別出的點(diǎn)、劃組合,說明拍發(fā)Morse碼有誤,并自動以“/”代替。同理,當(dāng)識別出字組間隔時(shí)按“碼表”將字符與字組譯出。4抽樣誤差等判決門限影響及解決方案4.1軟件消抖設(shè)計(jì)實(shí)現(xiàn)(1)波形抖動的產(chǎn)生。終端操作平臺硬件電路每隔10ms抽樣電鍵信號,當(dāng)電鍵

11、為抬起狀態(tài)時(shí),抽樣信號為高電平,系統(tǒng)解析為符號“0”;當(dāng)電鍵為按下狀態(tài)時(shí),抽樣信號為低電平,系統(tǒng)解析為符號“1”。但是,在實(shí)際拍發(fā)中,抽樣電路會產(chǎn)生毛刺,或發(fā)報(bào)人員在拍發(fā)點(diǎn)劃時(shí)電鍵發(fā)生極短時(shí)間的彈起,而當(dāng)抽樣時(shí)間剛好發(fā)生在毛刺或電鍵非正常抬起的時(shí)刻,系統(tǒng)會解析為電鍵處于KeyUp狀態(tài),下一個(gè)抽樣時(shí)刻又解析為KeyDown狀態(tài),如果不將這個(gè)毛刺出去,會對點(diǎn)時(shí)間的計(jì)算有極大的影響。波形抖動的產(chǎn)生如圖5所示。(2)軟件消抖設(shè)計(jì)消抖出去在KeyDown狀態(tài)基下,判斷抬起時(shí)間(timeSpaceInterval)是否小于某個(gè)特定值,如果抬起時(shí)間小于該值時(shí),說明為電鍵波形抖動狀態(tài),繼續(xù)保持KeyKeepD

12、own狀態(tài);如果抬起時(shí)間大于設(shè)定值,則表示電鍵上一狀態(tài)處于KeyUp狀態(tài),從而計(jì)算點(diǎn)時(shí)間變化。軟件消除抖動if(timeSpacelnterval50)小于5ms,去抖動算法timeKeylnterval+=timeSpaceInterval;回歸“保持按下”狀態(tài)機(jī)m_EnumKeyStatus=KeyKeepDown;Break;else按鍵加入修正:當(dāng)前一時(shí)刻值的1/2timeKeyInterval=timeSimpleInterval/2.0;表示按下一按鍵時(shí)間差:點(diǎn)或劃(變化)4.2抽樣誤差修正抽樣的任務(wù)是對模擬信號進(jìn)行時(shí)間上的離散化處理。所以它的做法為,將時(shí)間上連續(xù)的模擬信號M(t)

13、,送到一個(gè)叫作抽樣門的開關(guān)電路,每隔一段時(shí)間對模擬信號抽取一個(gè)樣值。在電鍵拍發(fā)中,電鍵的KeyKeepDown狀態(tài)和KeyKeepUp狀態(tài)下為一個(gè)時(shí)間連續(xù)的波形,當(dāng)電鍵各狀態(tài)基轉(zhuǎn)變時(shí),抽樣電路不可能計(jì)時(shí)發(fā)現(xiàn)并會產(chǎn)生大小不等的延遲T,T的范圍為010ms。雖然誤差值比較小,但是狀態(tài)基轉(zhuǎn)變時(shí)都會產(chǎn)生抽樣誤差,誤差時(shí)間疊加將對點(diǎn)時(shí)間的計(jì)算帶來較大的誤差,所以應(yīng)該將該誤差平均化到各抽樣時(shí)間點(diǎn),減小其對碼判決的干擾。抽樣誤差的產(chǎn)生如圖6所示。具體編程實(shí)現(xiàn)是在KeyUp和KeyDown狀態(tài)基下,將上一時(shí)刻的持續(xù)時(shí)間timeKeyInterval加上誤差估測值timeSimplemis。代碼如下:按鍵時(shí)間加

14、入修正:當(dāng)前一時(shí)刻值的1/2timeKeyInterval+=timeSimpleInterval/2.0;間隔時(shí)間加入修正:前一時(shí)刻值的1/2timeSpaceInterval+=timeSimpleInterval/2.0;表示空、空時(shí)間差4.3二次譯碼判決設(shè)計(jì)報(bào)務(wù)人員在訓(xùn)練時(shí)不可能以一個(gè)恒定的碼速進(jìn)行拍發(fā)。在拍發(fā)過程中,提速或降速時(shí)碼間間隔過小,會發(fā)生兩個(gè)碼緊連一起的情況。一般情況下一個(gè)莫爾斯碼的點(diǎn)和劃不會超過5個(gè),然后在提速或減速時(shí)碼間間隔很有可能不夠長,導(dǎo)致兩個(gè)碼的點(diǎn)或劃連在一起變成一個(gè)碼,使碼的點(diǎn)與劃的個(gè)數(shù)超過5個(gè),識別不出碼字。二次譯碼判決為在點(diǎn)與劃組合識別不出某個(gè)碼時(shí),再將儲存點(diǎn)與劃的組合與對應(yīng)的報(bào)底的兩個(gè)碼字進(jìn)行對比,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論