張驍,韓凱
(海軍潛艇學(xué)院,山東青島,266000)
摩爾斯碼又被稱為摩斯電碼,是通過點、劃、點和劃之間的停頓、每個字符之間的停頓以及單詞之間的停頓來實現(xiàn)不同的英文字母、數(shù)字和標點符號發(fā)送的編碼方式。從19 世紀初開始,摩爾斯碼就廣泛應(yīng)用于電報通信、緊急救援以及軍事通信中,至今仍是一些緊急情況下的備用通訊形式。尤其是在艦船和陸地之間、艦船之間的通訊中,摩爾斯碼發(fā)信作為穩(wěn)定、簡捷的通訊手段,是部分專業(yè)船員的必修課程。
摩爾斯電碼對應(yīng)的字符是全球統(tǒng)一的,直接采用代碼發(fā)送的文字字符稱作明碼,也就是不加密的信息,任何收到明碼的電報員都可以通過電碼表翻譯出發(fā)送者的原文。[1]摩爾斯碼收發(fā)信通常需要結(jié)合燈光進行,通過目力觀察燈光閃爍的長短和間隔,來實現(xiàn)報文內(nèi)容的收發(fā)。海上收信環(huán)境復(fù)雜,要求船員對摩爾斯碼非常熟悉才能準確收到報文,這需要通過持續(xù)性的日常訓(xùn)練維持收信水平。以往的摩爾斯碼的訓(xùn)練以一人發(fā)送、一人手抄練習(xí)為主,效率低且受場地制約較大。使用智能終端為載體,基于Android 平臺開發(fā)以語音識別為主的摩爾斯碼訓(xùn)練系統(tǒng)能很好地解決船員出海時摩爾斯碼的日常訓(xùn)練問題,大大提高船員摩爾斯碼訓(xùn)練水平。
語音識別從根本上來說是根據(jù)語音特征參數(shù)的模式識別,目標的語音輸入后經(jīng)過預(yù)處理階段,隨后通過具體的識別系統(tǒng)提取目標聲紋特征,再根據(jù)重復(fù)性訓(xùn)練的成果,將輸入的語音按一定特征模式進行歸類并保存下來。當(dāng)再次遇到輸入的語音后,系統(tǒng)將結(jié)合目標聲紋特征,選取與之匹配的聲紋類別,從而實現(xiàn)語音識別的目的。目前,大多數(shù)語音識別系統(tǒng)中都已經(jīng)應(yīng)用了模式匹配這一原理,圖1 是基于模式匹配原理的語音識別系統(tǒng)框圖。
圖1 基于模式匹配原理的語音識別系統(tǒng)框圖
模式識別一般包括預(yù)處理、特征提取、模式匹配等基本模塊。預(yù)處理又可以分為分幀,加窗,預(yù)加重等,是對目標輸入的語音信號進行初次處理,以凸顯其聲紋特征。其次是特征提取,對采集到的聲音信號特征提取,從而區(qū)分不同的聲音信號,根據(jù)聲紋特征選擇合適的特征參數(shù)。語音識別之前,要針對要識別的語音對識別系統(tǒng)進行重復(fù)性的訓(xùn)練,根據(jù)語言中的規(guī)律,將音素或音素序列轉(zhuǎn)化為文本信息,最后根據(jù)失真判決準則來實現(xiàn)語音識別。
摩爾斯碼標準是通過時間間隔來進行分辨的。在發(fā)送摩爾斯碼時,一個點的時長是一個單位時間,一個劃的時長是三個單位時間,點和劃之間的間隔是一個單位時間,字母之間是三個單位時間,單詞之間是七個單位時間,通過燈光明暗、聲音持續(xù)時間等來體現(xiàn)時間間隔。對于訓(xùn)練系統(tǒng)的設(shè)計,首先要解決的問題就是如何將摩爾斯碼的發(fā)送,通過訓(xùn)練設(shè)備外置的燈光信號實現(xiàn),從而通過燈光信號完成人機交互。
我們將信號的發(fā)送部分設(shè)置為亮燈,間隔部分設(shè)置為滅燈,通過控制亮燈和滅燈時長來實現(xiàn)摩爾斯碼的發(fā)送。例如摩爾斯碼:-...(B)..(I) --.(G) -.-.(C).-(A) -(T)可以轉(zhuǎn)換為二進制:1110101010001010001110111010000000111010111 0100010111000111,根據(jù)此序列設(shè)計程序來對外置燈光進行控制,從而實現(xiàn)對摩爾斯碼的發(fā)送。
其次要達到階梯型訓(xùn)練目的,在系統(tǒng)設(shè)計上要實現(xiàn)發(fā)送速度的可調(diào)節(jié)性,通常根據(jù)受訓(xùn)者的學(xué)習(xí)階段不同,訓(xùn)練系統(tǒng)要完成每分鐘30 碼~45 碼的發(fā)送速度調(diào)節(jié)。在輸入發(fā)送報文后,系統(tǒng)將要發(fā)送的報文所包含的字符量根據(jù)上述規(guī)則轉(zhuǎn)化為單位時間,再根據(jù)受訓(xùn)者設(shè)置的發(fā)送碼速計算單位時間的發(fā)送時長,通過軟件控制一個單位時間的實際時長,從而實現(xiàn)對發(fā)送速度的調(diào)節(jié)。
最后要滿足船員訓(xùn)練的實時性和便捷性,在系統(tǒng)中加入語音識別功能。由于燈光信號的訓(xùn)練需要受訓(xùn)者同步翻譯成明碼報文,采用打字輸入的方式會影響到后續(xù)報文的接收。所以在接收到燈光信號后,通過麥克風(fēng)說出接收到的摩爾斯碼代音的方式能很好解決這一問題。訓(xùn)練系統(tǒng)實時識別語音內(nèi)容并判斷對錯,記錄在訓(xùn)練系統(tǒng)后臺,在本次訓(xùn)練結(jié)束后顯示正確率及錯誤點,能夠有效幫助船員及時了解自己不足并進行糾錯。
目前人工智能在語音處理方面已經(jīng)達到了比較精確的階段,但是基本上都需要連接互聯(lián)網(wǎng)來實現(xiàn)功能。由于船員出海訓(xùn)練時經(jīng)常會處于無網(wǎng)絡(luò)狀態(tài),所以本系統(tǒng)需要在不聯(lián)網(wǎng)的情況下進行語音識別,這就需要對摩爾斯碼語音識別方面進行深入研究。經(jīng)過對比選型,科大訊飛的離線產(chǎn)品可以基本滿足不聯(lián)網(wǎng)狀態(tài)下語音識別的要求,通過不同船員提供的大量語音訓(xùn)練模型,可以使訓(xùn)練系統(tǒng)的語音識別率準確度達到90%以上,識別響應(yīng)時間小于1s。
語音識別技術(shù)中的特征提取是語音識別技術(shù)應(yīng)用的關(guān)鍵部分,將標準語言通過 AI 處理技術(shù)轉(zhuǎn)換成數(shù)字信息,并從中提取出需要的特征參數(shù)[2]。為了便于區(qū)分不同摩爾斯碼,不發(fā)生混淆,我們在訓(xùn)練時經(jīng)常將摩爾斯碼的讀法通過代音來區(qū)別,例如將字母k 讀作客人,r 讀作日光等,這一訓(xùn)練方法也可以應(yīng)用于語音識別當(dāng)中。代音讀法可以在訓(xùn)練中增強特征參數(shù),提高語音識別成功率。
船員訓(xùn)練時通過語音收集裝置將聲音以波的形式錄入到智能終端中,錄入的聲音文件通常需要轉(zhuǎn)成非壓縮的純波形文件來處理,如wav 文件就是常用的文件形式。wav 文件里存儲的內(nèi)容包含一個文件頭,以及聲音波形的一個個點,便于我們提取出聲音的分段波形。圖2 是提取的一個聲音波形示例:零零客人日光(00kr)。
圖2 提取聲音波形示例
聲學(xué)模型的建模也即對似然概率部分的建模,即給定文本序列之后生成對應(yīng)語音的概率, 是整個語音識別中最核心的部分,也是最復(fù)雜的部分[3]。在開始語音識別之前,首先需要用到信號處理技術(shù)把首尾端的靜音切除,降低對后續(xù)步驟造成的干擾,這種靜音切除的操作被稱為VAD。對于濁音音素,聲帶的振動產(chǎn)生諧波豐富的聲音,具有50~250 Hz 之間的明顯音調(diào)。所有元音及也有一些輔音,可能會表現(xiàn)出這種諧波結(jié)構(gòu),因此這種特征被認為是語音的特征。然而單獨使用基于諧度或基于音調(diào)的特征不能預(yù)期無聲語音部分(例如一些摩擦音),所以在靜音切除時要避免誤識別。如圖3 所示,是字母c “瓷器”的發(fā)音,上方波形是未進行降噪和切除靜音,下方是進行降噪和靜音消除之后的波紋。
圖3 VAD 前后聲音波紋對比
在此基礎(chǔ)上要對聲音進行分析,就需要對聲音進行分幀,也就是把聲音切開成一小段一小段,每小段稱為一幀。通過分幀處理,我們可以將聲音波形分成數(shù)段,便于對波形進行深入分析。此時聲音波形的特征并不凸顯,為了提取聲音波形的特征,我們要對波形進行變換。常見的一種變換方法是提取MFCC 特征,根據(jù)人耳的生理特性,把每一幀波形變成一個多維向量,可以簡單地理解為這個向量包含了這幀語音的內(nèi)容信息。這個過程叫做聲學(xué)特征提取[4]。在提取到一定數(shù)量的聲學(xué)特征后,將聲學(xué)特征輸入到訓(xùn)練系統(tǒng)中,通過機器學(xué)習(xí)進行訓(xùn)練,并形成聲學(xué)模型。在程序調(diào)用過程中會根據(jù)實際輸入的聲音,通過模型對比分方式來獲取對應(yīng)的文字。如圖4 所示,分別是兩個“瓷器”的發(fā)音,經(jīng)過模型對比計算可以對應(yīng)出“瓷器”詞組,從而實現(xiàn)摩爾斯碼的語音識別功能。
圖4 聲學(xué)模型對比圖
圖5 語音識別效果評估
同理,系統(tǒng)通過不斷的訓(xùn)練將逐步完善聲學(xué)模型,將摩爾斯碼的字母、數(shù)字、符號與各個代音關(guān)聯(lián)起來,從而實現(xiàn)訓(xùn)練中的實時語音識別和糾錯功能。在識別過程中可能會遇到同音漢字詞組的產(chǎn)生,可以采用詞組聲母識別的方式可以消除同音詞和音類似詞的混淆。
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它使用易于讀寫的文本格式來表示數(shù)據(jù)對象。JSON 是一種常見的數(shù)據(jù)格式,主要用于傳輸數(shù)據(jù)。科大訊飛返回是json 格式,首先要對返回的 JSON 格式的數(shù)據(jù)進行解析,具體代碼如下:
進行結(jié)果解析之后,我們就可以將聲音波形與預(yù)先訓(xùn)練的模型進行匹配,從而轉(zhuǎn)換為實際讀出的中文文字,接著進行下一步識別。
通過解析可以得到返回的中文文字,此時將得到的中文文字通過代音對應(yīng)的方式轉(zhuǎn)為相應(yīng)的字母,便于進行下一步識別:
再根據(jù)模型結(jié)果進行語音識別過程,通過聲學(xué)模型對比的方式進行匹配,部分摩爾斯碼識別過程示例如下:
經(jīng)過測試比對,此系統(tǒng)的語音識別率達到95.2%,識別時間平均時長為0.63s,通過實機測試,能夠滿足船員摩爾斯碼離線語音識別學(xué)習(xí)訓(xùn)練需求。
基于語音識別技術(shù)的摩爾斯碼訓(xùn)練系統(tǒng)研究,在Java編程技術(shù)基礎(chǔ)上對語音識別系統(tǒng)的功能實現(xiàn)、程序代碼進行了設(shè)計。同時基于語音識別完成了人機交互系統(tǒng)的設(shè)計,將摩爾斯碼訓(xùn)練通過語音識別功能進行實現(xiàn)。結(jié)果表明,該系統(tǒng)能夠滿足船員摩爾斯碼訓(xùn)練需求,其在系統(tǒng)的測試中展現(xiàn)出良好的識別率和識別速度,可用于船員摩爾斯碼日常學(xué)習(xí)訓(xùn)練中。