0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于80251的嵌入式語(yǔ)音識(shí)別

倩倩 ? 來(lái)源:lq ? 2019-06-12 14:03 ? 次閱讀

語(yǔ)音識(shí)別技術(shù),廣泛來(lái)說(shuō)是指語(yǔ)意識(shí)別和聲紋識(shí)別;從狹義上來(lái)說(shuō)指語(yǔ)音語(yǔ)義的理解識(shí)別,也稱(chēng)為自動(dòng)語(yǔ)音識(shí)別(ASR)。其關(guān)鍵技術(shù)包括選擇識(shí)別單元、語(yǔ)音端點(diǎn)檢測(cè)、特征參數(shù)提取、聲學(xué)模型及語(yǔ)音模型的建立。語(yǔ)音識(shí)別技術(shù)目前在桌面系統(tǒng)、智能手機(jī)、導(dǎo)航設(shè)備等嵌入式領(lǐng)域均有一定程度的應(yīng)用。其主要技術(shù)難題是識(shí)別系統(tǒng)的適應(yīng)性較差、受背景噪聲影響較大,未來(lái)的發(fā)展方向應(yīng)是無(wú)限詞匯量連續(xù)語(yǔ)音非特定人語(yǔ)音識(shí)別系統(tǒng)。

(1)信號(hào)處理及特征提取模塊

該模塊的主要任務(wù)是從輸入信號(hào)中提取特征,供聲學(xué)模型處理。同時(shí),它一般也包括了一些信號(hào)處理技術(shù),以盡可能降低環(huán)境噪聲、信道、說(shuō)話人等因素對(duì)特征造成的影響。

(2)統(tǒng)計(jì)聲學(xué)模型

典型系統(tǒng)多采用基于一階隱馬爾科夫模型進(jìn)行建模。

(3)發(fā)音詞典

發(fā)音詞典包含系統(tǒng)所能處理的詞匯集及其發(fā)音。發(fā)音詞典實(shí)際提供了聲學(xué)模型建模單元與語(yǔ)言模型建模單元間的映射。

(4)語(yǔ)言模型

語(yǔ)言模型對(duì)系統(tǒng)所針對(duì)的語(yǔ)言進(jìn)行建模。理論上,包括正則語(yǔ)言,上下文無(wú)關(guān)文法在內(nèi)的各種語(yǔ)言模型都可以作為語(yǔ)言模型,但目前各種系統(tǒng)普遍采用的還是基于統(tǒng)計(jì)的N元文法及其變體。

(5)解碼器

解碼器是語(yǔ)音識(shí)別系統(tǒng)的核心之一,其任務(wù)是對(duì)輸入的信號(hào),根據(jù)聲學(xué)、語(yǔ)言模型及詞典,尋找能夠以最大概率輸出該信號(hào)的詞串,從數(shù)學(xué)角度可以更加清楚的了解上述模塊之間的關(guān)系。

當(dāng)今語(yǔ)音識(shí)別技術(shù)的主流算法,主要有基于動(dòng)態(tài)時(shí)間規(guī)整(DTW)算法、基于非參數(shù)模型的矢量量化(VQ)方法、基于參數(shù)模型的隱馬爾可夫模型(HMM)的方法、基于人工神經(jīng)網(wǎng)絡(luò)(ANN)和支持向量機(jī)等語(yǔ)音識(shí)別方法。

對(duì)于語(yǔ)音識(shí)別技術(shù)實(shí)現(xiàn)的描述是相當(dāng)完整的,而且其可以作為語(yǔ)音識(shí)別技術(shù)在資源緊缺型嵌入式平臺(tái)實(shí)現(xiàn)的一個(gè)較好的參考。

基于80251的嵌入式語(yǔ)音識(shí)別

語(yǔ)音識(shí)別技術(shù)介紹

1.應(yīng)用分類(lèi)

(1)特定人與非特定人識(shí)別,特定人識(shí)別相對(duì)簡(jiǎn)單,訓(xùn)練者的識(shí)別率高,但非訓(xùn)練者的識(shí)別率很低。而非特定人不受此影響,但實(shí)現(xiàn)復(fù)雜,識(shí)別率也相對(duì)低一些。

(2)語(yǔ)音識(shí)別與身份識(shí)別,前者提取各個(gè)命令者發(fā)出的語(yǔ)音的共性特征,而后者提取差異性特征?;谡Z(yǔ)音的身份識(shí)別主要應(yīng)用于門(mén)禁等安全領(lǐng)域。語(yǔ)音識(shí)別廣泛應(yīng)用于詞語(yǔ)識(shí)別,工業(yè)控制等領(lǐng)域。

(3)連續(xù)與非連續(xù)(孤立詞)語(yǔ)音識(shí)別,很明顯,連續(xù)語(yǔ)音識(shí)別難度較大。嵌入式產(chǎn)品集中在孤立詞語(yǔ)音識(shí)別方面。

(4)小詞匯量和大詞匯量語(yǔ)音識(shí)別。兩者選擇的方法是不一樣的,會(huì)在識(shí)別率和識(shí)別速度上折中考慮。

(5)關(guān)鍵詞識(shí)別,如在一段語(yǔ)音中抽取帶有某個(gè)關(guān)鍵詞的句子,或者根據(jù)哼的曲子旋律去搜索對(duì)應(yīng)的歌曲等等。

本系統(tǒng)受限80251的計(jì)算和存儲(chǔ)性能,主要實(shí)現(xiàn)基于特定人的孤立詞語(yǔ)音識(shí)別。

2. 實(shí)現(xiàn)原理

基于80251的嵌入式語(yǔ)音識(shí)別

語(yǔ)音識(shí)別主要包括:預(yù)處理、特征提取、訓(xùn)練和識(shí)別四個(gè)部分。

預(yù)處理主要包括去噪、預(yù)加重(去除口鼻輻射)、端點(diǎn)檢測(cè)(檢測(cè)有效語(yǔ)音段)等過(guò)程。

特征提取是對(duì)經(jīng)過(guò)預(yù)處理后的語(yǔ)音信號(hào)進(jìn)行特征參數(shù)分析。該過(guò)程就是從原始語(yǔ)音信號(hào)中抽取出能夠反映語(yǔ)音本質(zhì)的特征參數(shù),形成特征矢量序列。主要的特征參數(shù)包括:線性預(yù)測(cè)編碼參數(shù)(LPC)、線性預(yù)測(cè)倒譜參數(shù)(LPCC)、MEL倒譜參數(shù)(MFCC)等。

語(yǔ)音模式庫(kù):即聲學(xué)參數(shù)模板,它是用聚類(lèi)分析等方法,從一個(gè)講話者或多個(gè)講話者多次重復(fù)的語(yǔ)音參數(shù)中經(jīng)過(guò)長(zhǎng)時(shí)間訓(xùn)練得到的。

語(yǔ)音模式匹配:將輸入語(yǔ)音的特征參數(shù)同訓(xùn)練得到的語(yǔ)音模式庫(kù)進(jìn)行比較分析,從而得到識(shí)別結(jié)果。常用的方法包括:動(dòng)態(tài)時(shí)間規(guī)整(DTW)、神經(jīng)網(wǎng)絡(luò)(ANN)、隱馬爾科夫(HMM)等。DTW比較簡(jiǎn)單實(shí)用,適用于孤立詞語(yǔ)音識(shí)別。HMM比較復(fù)雜,適用于大詞匯量連續(xù)語(yǔ)音識(shí)別。

三、嵌入式語(yǔ)音識(shí)別難點(diǎn)

語(yǔ)音識(shí)別的關(guān)鍵是識(shí)別率的高低。PC語(yǔ)音識(shí)別的識(shí)別率主要受限于系統(tǒng)選擇的方法,如端點(diǎn)檢測(cè)的精確度、特征參數(shù)的有效性、模式匹配方法的有效性等。而嵌入式的語(yǔ)音識(shí)別不僅受選擇方法的影響,而且受算法運(yùn)算精度的影響。PC機(jī)主要采用浮點(diǎn)數(shù),而嵌入式主要是采用定點(diǎn)算法,因此運(yùn)算精度、誤差控制非常重要。語(yǔ)音識(shí)別算法包括多個(gè)模塊,多個(gè)算法運(yùn)算過(guò)程,累積誤差對(duì)結(jié)果的影響是致命的。所以在算法設(shè)計(jì)過(guò)程中必須要仔細(xì)考慮定點(diǎn)數(shù)值的精度,既要盡量提高精度,又要防止運(yùn)算結(jié)果溢出。

嵌入式語(yǔ)音識(shí)別還需要考慮識(shí)別速度。PC機(jī)運(yùn)行速度比較快,中等詞匯量語(yǔ)音識(shí)別的用戶體驗(yàn)還是蠻好的。但在嵌入式語(yǔ)音識(shí)別中,詞匯量的大小對(duì)用戶體驗(yàn)的影響是相當(dāng)嚴(yán)重的。即使識(shí)別率高,但識(shí)別速度很慢,那這個(gè)產(chǎn)品很難推廣。所以嵌入式語(yǔ)音識(shí)別需要在識(shí)別率和識(shí)別速度上折中考慮。識(shí)別速度不僅受限于選取算法的運(yùn)算復(fù)雜度,還受嵌入式硬件的影響,如數(shù)據(jù)空間大小。如果數(shù)據(jù)RAM空間不夠大,那就需要以其他介質(zhì)(如FLASH/CARD)作為緩存。后續(xù)處理頻繁范圍該介質(zhì)將會(huì)嚴(yán)重影響識(shí)別速度。所以識(shí)別速度也受限于硬件條件。

四、80251平臺(tái)語(yǔ)音識(shí)別的硬件條件及其考慮

1. 80251平臺(tái)語(yǔ)音識(shí)別的硬件條件

這里我們假定SOC集成了251內(nèi)核,而其能實(shí)現(xiàn)錄音的功能,這是語(yǔ)音識(shí)別的最基本要求。語(yǔ)音識(shí)別的硬件條件就是系統(tǒng)分配給錄音應(yīng)用的所有資源。

錄音應(yīng)用的資源一般包括:

1) audio buffer(512字節(jié)),其主要是作為audio錄音時(shí)采樣處理后的數(shù)據(jù)緩存,即采樣后audio會(huì)把512字節(jié)錄音數(shù)據(jù)放到該BUFFER,應(yīng)用再調(diào)用文件系統(tǒng)寫(xiě)接口把該BUFFER數(shù)據(jù)寫(xiě)到FLASH。

2) EDATA變量數(shù)據(jù)空間(1024字節(jié)),其主要是錄音應(yīng)用和中間件模塊的變量數(shù)據(jù)空間。錄音應(yīng)用和中間件已經(jīng)用掉622字節(jié),剩下402字節(jié)。

3) PCMRAM(12K字節(jié)), 其主要是用于錄音時(shí)的數(shù)據(jù)采樣處理。

4) 代碼空間(9K字節(jié)),錄音應(yīng)用和中間件代碼運(yùn)行空間。

2. 80251平臺(tái)語(yǔ)音識(shí)別可用資源

在80251平臺(tái)上實(shí)現(xiàn)語(yǔ)音識(shí)別就需要在錄音應(yīng)用基礎(chǔ)上增加語(yǔ)音識(shí)別功能,因此語(yǔ)音識(shí)別需要與錄音應(yīng)用共享以上資源。語(yǔ)音識(shí)別分預(yù)處理、特征提取、訓(xùn)練和匹配識(shí)別四個(gè)子過(guò)程,四個(gè)子過(guò)程在運(yùn)行的時(shí)間上是不重復(fù)的。以下根據(jù)各個(gè)子過(guò)程的運(yùn)行時(shí)間考慮以上資源的復(fù)用性??紤]到80251采用硬件BANK機(jī)制,所以語(yǔ)音識(shí)別的代碼空間不受影響。因此著重考慮數(shù)據(jù)空間的復(fù)用性。另外,語(yǔ)音識(shí)別一般是對(duì)PCM數(shù)據(jù)進(jìn)行處理,80251的PCM數(shù)據(jù)的量化比特?cái)?shù)為16BIT,即2個(gè)字節(jié)。人的有效語(yǔ)音頻率在4KHZ以下,所以采用率選擇8KHZ,滿足奈奎斯特采樣定理。

預(yù)處理的預(yù)加重比較簡(jiǎn)單,是一個(gè)低通濾波器,不需占用額外的數(shù)據(jù)空間。對(duì)于去噪,本系統(tǒng)暫時(shí)不予考慮。預(yù)處理主要的部分在于語(yǔ)音端點(diǎn)檢測(cè),即去除靜音段,保留有效語(yǔ)音段。類(lèi)似于錄音中的聲控錄音,但語(yǔ)音識(shí)別的語(yǔ)音端點(diǎn)檢測(cè)比聲控錄音更加復(fù)雜,也要求更加精確。本系統(tǒng)采用實(shí)時(shí)在線的端點(diǎn)檢測(cè)算法,因此在端點(diǎn)檢測(cè)過(guò)程(即在偵聽(tīng)命令的錄音過(guò)程)需要實(shí)時(shí)地對(duì)audio buffer的數(shù)據(jù)進(jìn)行處理,檢測(cè)是否為有效語(yǔ)音。在這個(gè)過(guò)程,audio buffer和PCMRAM都是不可使用的。能夠使用的就是402字節(jié)的EDATA空間。由于語(yǔ)音識(shí)別各個(gè)過(guò)程都要進(jìn)行分幀處理(后續(xù)再講),本系統(tǒng)設(shè)定每幀128點(diǎn),因此需要申請(qǐng)一個(gè)256字節(jié)的幀處理BUFFER。剩下402-256 = 146字節(jié)作為語(yǔ)音識(shí)別的變量數(shù)據(jù)空間。

在端點(diǎn)檢測(cè)過(guò)程中,根據(jù)當(dāng)前幀的短時(shí)能量或者過(guò)零率確認(rèn)語(yǔ)音開(kāi)始時(shí),對(duì)該幀數(shù)據(jù)的處理有兩種,一是將當(dāng)前512字節(jié)數(shù)據(jù)(一個(gè)扇區(qū))COPY到一段語(yǔ)音BUFFER,另一種是調(diào)用文件系統(tǒng)寫(xiě)接口寫(xiě)到FLASH中。對(duì)于前者,其速度肯定優(yōu)于后者,因?yàn)槠洳恍枰谔幚淼倪^(guò)程中調(diào)用文件系統(tǒng)接口。還有,突然的脈沖噪聲也會(huì)讓系統(tǒng)誤認(rèn)為語(yǔ)音的開(kāi)始,所以在確認(rèn)噪聲后又需重新開(kāi)始檢查。如果有一塊大的語(yǔ)音BUFFER,語(yǔ)音識(shí)別的性能將會(huì)大幅提高。一般認(rèn)為一個(gè)人說(shuō)出的孤立詞語(yǔ)音持續(xù)時(shí)間在2秒以?xún)?nèi),即2×8000×2 ≈ 32K字節(jié)。但80251平臺(tái)明顯沒(méi)有這個(gè)資源。所以選擇了將當(dāng)前扇區(qū)數(shù)據(jù)寫(xiě)入文件,即用FLASH作為語(yǔ)音BUFFER使用。另外,80251文件有個(gè)缺陷,寫(xiě)操作不能調(diào)用FSEEK。這樣會(huì)帶來(lái)端點(diǎn)檢測(cè)速度的下降。如前所講,脈沖噪聲會(huì)滿足語(yǔ)音開(kāi)始的條件,因此脈沖噪聲起始點(diǎn)之后的一段聲音數(shù)據(jù)都會(huì)寫(xiě)入到FLASH文件中,檢測(cè)算法后來(lái)發(fā)現(xiàn)前面是脈沖噪聲會(huì)將之前的數(shù)據(jù)沖掉,沖頭再寫(xiě)。如果能調(diào)用FSEEK,那一條語(yǔ)句就完成。但因?yàn)樵撊毕荩虼诵枰{(diào)用FSCLOSE關(guān)閉文件,再調(diào)用FS_REMOVE刪除文件,接著調(diào)用FS_CREATE重新創(chuàng)建一個(gè)文件。

語(yǔ)音識(shí)別后面的3個(gè)子過(guò)程運(yùn)行在非錄音時(shí)態(tài),因此可以利用audio buffer和PCMRAM。由于后續(xù)的處理過(guò)程都需要從FLASH的文件中讀取數(shù)據(jù)來(lái)處理,每次一個(gè)扇區(qū),所以用audio buffer作為緩沖。因此語(yǔ)音識(shí)別的后續(xù)過(guò)程可采用的數(shù)據(jù)空間即是12K字節(jié)的PCMRAM。

語(yǔ)音識(shí)別的特征提取過(guò)程主要需要一個(gè)緩沖特征參數(shù)的BUFFER。其他需要申請(qǐng)的BUFFER都可以放到FAR DATA空間(即代碼空間當(dāng)數(shù)據(jù)用,但只允許當(dāng)前BANK代碼能夠使用)。如果在對(duì)語(yǔ)音分幀進(jìn)行特征提取并立刻寫(xiě)數(shù)據(jù)到FLASH特征文件,那也不需要緩沖特征參數(shù)的BUFFER,但目前80251平臺(tái)的文件系統(tǒng)暫不支持一邊讀一邊寫(xiě),所以必須給特征參數(shù)分配緩存BUFFER,等每個(gè)語(yǔ)音命令處理后再一起寫(xiě)進(jìn)FLASH特征文件。以一個(gè)命令語(yǔ)音最長(zhǎng)2秒計(jì),幀移為64點(diǎn),則共有2×8000/64 = 250幀,而每幀數(shù)據(jù)的LPC特征參數(shù)個(gè)數(shù)選16(即算法選16階LPC,每個(gè)參數(shù)2個(gè)字節(jié)),因此共需250×16×2 = 8000字節(jié)??紤]到在做模式匹配識(shí)別時(shí)需要緩沖模塊庫(kù)的一個(gè)參考詞條的特征參數(shù)和待識(shí)別詞條的特征參數(shù),2個(gè)8000字節(jié)將超過(guò)12K的PCMRAM。所以特征參數(shù)的緩沖BUFFER最多只能分配6K。有兩個(gè)選擇,一是特征參數(shù)個(gè)數(shù)選16,那最大的有效語(yǔ)音持續(xù)時(shí)間為:6×1024/(2×16×(8000/64) = 1.536秒。正常一個(gè)人說(shuō)一個(gè)命令的時(shí)間約束是可以滿足在1.5秒以?xún)?nèi)的。另一個(gè)辦法是縮小每幀數(shù)據(jù)的LPC參數(shù)個(gè)數(shù),一般語(yǔ)音識(shí)別選12階,本程序?yàn)榱颂幚砀?,選的是16階。如果選8階那會(huì)更快,但精度下降。

語(yǔ)音識(shí)別的模式匹配過(guò)程主要是需要以上講述的兩個(gè)緩沖特征參數(shù)的BUFFER。由于采用DTW算法,因此算法涉及的中間緩存都分配在FAR DATA空間。

綜上所述,80251平臺(tái)能夠在速度受限的情況下實(shí)現(xiàn)語(yǔ)音識(shí)別功能。

五、語(yǔ)音識(shí)別算法設(shè)計(jì)

基于80251的嵌入式語(yǔ)音識(shí)別

基于80251的嵌入式語(yǔ)音識(shí)別

基于80251的嵌入式語(yǔ)音識(shí)別

基于80251的嵌入式語(yǔ)音識(shí)別

六、PC端語(yǔ)音識(shí)別算法設(shè)計(jì)

任何一個(gè)移植到嵌入式平臺(tái)的算法都應(yīng)該在PC環(huán)境上調(diào)試驗(yàn)證通過(guò)后再進(jìn)行移植,而為了移植的高效,PC環(huán)境的算法設(shè)計(jì)應(yīng)該建立在熟悉目標(biāo)平臺(tái)的硬件結(jié)構(gòu)和編譯集成環(huán)境的基礎(chǔ)上。盡可能深刻地熟悉兩者,將為后面的移植帶來(lái)極大的好處,否則事倍功半。

1.模擬80251錄音過(guò)程進(jìn)行端點(diǎn)檢測(cè)

PC機(jī)用讀文件的形式模擬80251錄音的過(guò)程,詳細(xì)的端點(diǎn)檢測(cè)過(guò)程如下圖:

為了數(shù)據(jù)的一致性,PC機(jī)調(diào)試的文件都是80251錄出來(lái)的錄音文件(8K,PCM,16BIT,單聲道)。另外,因?yàn)?0251是分BANK處理語(yǔ)音識(shí)別的四個(gè)子過(guò)程,為了讓各個(gè)模塊去耦合,在WAV文件頭的一些保留區(qū)寫(xiě)入語(yǔ)音端點(diǎn)檢測(cè)的有效幀數(shù)。這樣參數(shù)提取過(guò)程就可以從文件中直接讀出該參數(shù)并進(jìn)行處理。

80251錄音結(jié)束時(shí)會(huì)自動(dòng)準(zhǔn)備好文件頭所屬的一個(gè)扇區(qū)數(shù)據(jù),而這個(gè)文件頭是包括直接的靜音段,所以最后寫(xiě)入文件頭時(shí)需要對(duì)文件頭的一些參數(shù)(如文件長(zhǎng)度)進(jìn)行修改再寫(xiě)入。

其實(shí),語(yǔ)音數(shù)據(jù)完全可以作為一個(gè)單獨(dú)的二進(jìn)制文件存在,并不需要文件頭信息。但為了調(diào)試的有效性,仍然寫(xiě)入正確的文件頭,這樣語(yǔ)音端點(diǎn)檢測(cè)結(jié)果仍然是一個(gè)WAV文件,通過(guò)聽(tīng)這個(gè)WAV文件就知道算法是否有效。

算法的結(jié)果如果能夠圖形化那會(huì)比較直觀,所以借助了MATLAB工具進(jìn)行畫(huà)圖,以輔助調(diào)試,加快調(diào)試進(jìn)度。

2.數(shù)據(jù)處理精度

80251平臺(tái)的PCM數(shù)據(jù)為16比特量化,但事實(shí)上語(yǔ)音處理時(shí)采用8比特量化就足夠了。因此對(duì)錄音數(shù)據(jù)的處理都是取高8位。這樣減少了一半的運(yùn)算量,也防止計(jì)算溢出。

雖然采用高8位數(shù)據(jù)進(jìn)行處理,但為了程序的整體運(yùn)算平滑過(guò)渡,仍然用一個(gè)16位有符號(hào)短整型去表述每一個(gè)采樣點(diǎn)。VC為short int,80251為signed int。其獲取的特征參數(shù)也選用16位有符號(hào)短整型去表述。而在運(yùn)算過(guò)程有時(shí)會(huì)采用32位有符號(hào)整型以提高運(yùn)算精度。

3.類(lèi)型移植

如上節(jié)所講,為了方便移植,必須讓VC中程序的變量和KEIL代碼的變量的類(lèi)型一致。因此在VC中需要重定義一份KEIL環(huán)境的typeext.h文件。如:

#define int16signed short int

#define int32signed int

等等。

這樣VC的主要算法可以不做任何改動(dòng)就可以放入KEIL環(huán)境進(jìn)行編譯調(diào)試。

4.浮點(diǎn)算法定點(diǎn)化

這是語(yǔ)音識(shí)別的最關(guān)鍵部分。如果在浮點(diǎn)算法定點(diǎn)化的過(guò)程中控制好累積誤差,是本系統(tǒng)最關(guān)鍵的問(wèn)題。第四部分所闡述的算法都是浮點(diǎn)算法。PC上語(yǔ)音識(shí)別的識(shí)別率很高很大程度一部分原因是因?yàn)槠溥x擇復(fù)雜的算法,另一部分原因是因?yàn)樗褂酶↑c(diǎn)數(shù),較好地控制了累積誤差。其所有的參數(shù)均通過(guò)歸一化使得運(yùn)算都在-1到1之間進(jìn)行。

浮點(diǎn)庫(kù)對(duì)于嵌入式平臺(tái)是一個(gè)極大的負(fù)擔(dān),而且運(yùn)算速度很慢。所以嵌入式產(chǎn)品的關(guān)鍵也在于浮點(diǎn)算法定點(diǎn)化過(guò)程中如何更好地控制誤差??刂普`差的一個(gè)很有效的方法就是提高數(shù)據(jù)運(yùn)算精度,但是一味地提高運(yùn)算精度會(huì)導(dǎo)致運(yùn)算溢出,所以必須在兩者之間折中考慮,以獲得一個(gè)平衡。

調(diào)試此部分功能時(shí)曾遇到一個(gè)很大的困難就是求取LPC參數(shù)時(shí)的對(duì)E的處理,因?yàn)槠湓谘h(huán)過(guò)程中曾被作為除數(shù)進(jìn)行處理,如果在循環(huán)的過(guò)程中沒(méi)做好誤差控制,那其就會(huì)在某次運(yùn)算過(guò)程中為0,所以造成結(jié)果溢出。調(diào)試過(guò)程還算比較艱辛,曾經(jīng)讓自己想起要不用浮點(diǎn)庫(kù)試試。但最后還是堅(jiān)持下來(lái)用定點(diǎn)算法繼續(xù)調(diào)試。

針對(duì)本系統(tǒng)的算法,浮點(diǎn)算法定點(diǎn)化過(guò)程主要做了以下幾個(gè)方面的考慮。

1. 如5.2節(jié)所講,錄音數(shù)據(jù)采用高8位進(jìn)行處理。

2. LPC算法的自相關(guān)系統(tǒng)進(jìn)行歸一化處理,取12比特有效數(shù)據(jù),即R(0) = 4096。而且在運(yùn)算過(guò)程中若發(fā)現(xiàn)累積和大于0x7fff時(shí)就進(jìn)行相應(yīng)移位,保證累積和在0x7fff以?xún)?nèi)。因?yàn)樗凶韵嚓P(guān)系統(tǒng)同時(shí)除以一個(gè)值,對(duì)后面的結(jié)果沒(méi)有影響。

3. LPC算法的E取32位有符號(hào)數(shù),算法運(yùn)算的中間變量也取32位。

4. LPC算的a,k等參數(shù)取12位有效數(shù)值,即在4096以?xún)?nèi)。

5. LPC算法中的除法精度到0.5以?xún)?nèi),即考慮余數(shù)與除數(shù)的關(guān)系。

6. DTW算法運(yùn)算使用32位運(yùn)算精度。

浮點(diǎn)算法定點(diǎn)化調(diào)試的一個(gè)好的經(jīng)驗(yàn)時(shí)在VC中用兩個(gè)工程分別實(shí)現(xiàn)浮點(diǎn)算法和定點(diǎn)算法,然后跟蹤每一步的運(yùn)算結(jié)果。發(fā)現(xiàn)誤差過(guò)大就及時(shí)修改調(diào)整。

5.速度優(yōu)化

算法設(shè)計(jì)時(shí)考慮到80251的乘除運(yùn)算能力有限,所以盡肯能地采用移位,查表操作,以提高運(yùn)算速度。舉例如下:

1. 預(yù)加重等過(guò)程需要乘以0.9375,就先乘120,再右移7位,即除以128。

2. 窗化處理時(shí)如果按公式調(diào)用cos等數(shù)學(xué)函數(shù),那代碼量的增長(zhǎng)和運(yùn)算速度的影響都是致命的。在這里使用查表的方式進(jìn)行處理。即在MATLAB中用hamming(128)得到127點(diǎn)信號(hào)點(diǎn),由于該信號(hào)點(diǎn)是-1到1的小數(shù),所以再將其放大1024倍,將這些數(shù)值保存到一張表中(使用FAR DATA空間),代碼運(yùn)算時(shí)先分別相乘,再右移10位就可以了。所以這里巧妙地避免了除法操作。

七、 80251平臺(tái)語(yǔ)音識(shí)別實(shí)現(xiàn)

1.算法移植

由于PC端的算法已經(jīng)盡可能地考慮了80251的錄音過(guò)程和KEIL C環(huán)境約束,所以算法移植還算比較順利,尤其是語(yǔ)音端點(diǎn)檢測(cè)部分。幾乎不做任何算法改動(dòng)就實(shí)現(xiàn)了該部分功能。當(dāng)然錄音應(yīng)用是需要進(jìn)行調(diào)整的。主要的改動(dòng)主要是UI控制和顯示,以及中間件錄音流程的修改。即在之前的寫(xiě)入操作前加入調(diào)用wav_vad函數(shù)進(jìn)行端點(diǎn)檢測(cè),確定語(yǔ)音開(kāi)始才寫(xiě)進(jìn)FLASH錄音文件。

對(duì)于特征提取、訓(xùn)練識(shí)別部分的調(diào)整,主要是分配好代碼運(yùn)行空間和FAR DATA空間。DTW算法運(yùn)算過(guò)程中的中間變量近1k字節(jié),但由于只有該部分使用,所以都分配在FAR DATA空間。

2. VC和KEIL C的比較

調(diào)試過(guò)程中還是發(fā)現(xiàn)了VC和KEIL C編譯器有不一致的地方。但由于比較隱藏,所以發(fā)現(xiàn)這部分特性也花費(fèi)了不少時(shí)間。列舉幾點(diǎn):

1. int32 m = (int32)(int16 val1* int16 val2);VC會(huì)自動(dòng)把32位的相乘結(jié)果賦給m,而KEIL C是將32位相乘結(jié)果的高16位清零再付給m。這個(gè)好像挺奇怪的,但事實(shí)就是這樣。只有把前面的強(qiáng)制類(lèi)型轉(zhuǎn)換去掉才正確。所以有時(shí)強(qiáng)制類(lèi)型轉(zhuǎn)換也未必是好事。

2. VC中用到的一部分BUFFER會(huì)自動(dòng)初始化為0,而KEIL C中不會(huì)。所以LPC算法運(yùn)算結(jié)果出現(xiàn)偏差。因?yàn)樾C(jī)和PC的識(shí)別率差別很大,所以只好用同一個(gè)文件在小機(jī)上和PC機(jī)上同時(shí)調(diào)試,以跟蹤每一步結(jié)果,最終才發(fā)現(xiàn)這個(gè)問(wèn)題。其實(shí)是編程習(xí)慣不夠好,一般在使用某段BUFFER前都應(yīng)該先清零才行。

3. VC中的short int左移會(huì)向32位擴(kuò)展,而KEIL C左移時(shí)其數(shù)值范圍并沒(méi)有加大,即丟棄超過(guò)16位的數(shù)值,沒(méi)能真正實(shí)現(xiàn)左移相乘的目的。

八、 80251平臺(tái)語(yǔ)音識(shí)別結(jié)果及其分析

80251平臺(tái)語(yǔ)音識(shí)別的識(shí)別率可以控制在93%以上(詞匯量在50以下,憑經(jīng)驗(yàn)),50以上還沒(méi)測(cè)試過(guò)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5060

    文章

    18980

    瀏覽量

    302243
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4749

    瀏覽量

    100434
  • 語(yǔ)音識(shí)別
    +關(guān)注

    關(guān)注

    38

    文章

    1713

    瀏覽量

    112504
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Spansion與Nuance共推嵌入式語(yǔ)音識(shí)別創(chuàng)新

      Spansion公司日前宣布與Nuance合作以期推動(dòng)嵌入式技術(shù)的語(yǔ)音識(shí)別創(chuàng)新。Spansion和Nuance分別是半導(dǎo)體產(chǎn)品和語(yǔ)音識(shí)別
    發(fā)表于 03-23 08:19 ?714次閱讀

    嵌入式語(yǔ)音識(shí)別技術(shù)

    嵌入式語(yǔ)音識(shí)別技術(shù)
    發(fā)表于 07-22 20:30

    怎么設(shè)計(jì)基于嵌入式系統(tǒng)的語(yǔ)音口令識(shí)別系統(tǒng)?

    回答等。在數(shù)字信號(hào)處理芯片上已經(jīng)實(shí)現(xiàn)了語(yǔ)音口令識(shí)別系統(tǒng)或語(yǔ)音口令識(shí)別系統(tǒng)的部分功能,然而隨著嵌入式微處理器處理能力的大幅度提高,計(jì)算量大的
    發(fā)表于 09-03 08:27

    基于STM32嵌入式的孤立詞語(yǔ)音識(shí)別系統(tǒng)設(shè)計(jì)

    語(yǔ)音識(shí)別是機(jī)器通過(guò)識(shí)別和理解過(guò)程把人類(lèi)的語(yǔ)音信號(hào)轉(zhuǎn)變?yōu)橄鄳?yīng)文本或命令的技術(shù),其根本目的是研究出一種具有聽(tīng)覺(jué)功能的機(jī)器。本設(shè)計(jì)研究孤立詞語(yǔ)音
    發(fā)表于 08-06 08:32

    怎樣去設(shè)計(jì)基于嵌入式Linux的語(yǔ)音識(shí)別系統(tǒng)

    該設(shè)計(jì)運(yùn)用三星公司的S3C2440,結(jié)合ICRoute公司的高性能語(yǔ)音識(shí)別芯片LD3320,進(jìn)行了語(yǔ)音識(shí)別系統(tǒng)的硬件和軟件設(shè)計(jì)。在嵌入式Li
    發(fā)表于 11-04 09:03

    如何利用ARM實(shí)現(xiàn)嵌入式語(yǔ)音識(shí)別模塊的設(shè)計(jì)

    介紹了一種以ARM為核心的嵌入式語(yǔ)音識(shí)別模塊的設(shè)計(jì)與實(shí)現(xiàn)。模塊的核心處理單元選用ST公司的基于ARM Cortex-M3內(nèi)核的32位處理器STM32F103C8T6。本模塊以對(duì)話管理單元為中心,通過(guò)
    發(fā)表于 11-09 06:18

    嵌入式語(yǔ)音識(shí)別系統(tǒng)中的電路設(shè)計(jì)是如何的

    現(xiàn)在社會(huì)發(fā)展的這么快,什么高科技都涌現(xiàn)出來(lái),什么智能機(jī)器人啦,智能手機(jī)等,有很多在這里就不一一列舉了,在這里我們要說(shuō)的就是語(yǔ)音識(shí)別系統(tǒng)了,現(xiàn)在嵌入式產(chǎn)品如此的多,就像一些智能空調(diào)啦,我們可以對(duì)著他說(shuō)
    發(fā)表于 12-20 07:52

    嵌入式語(yǔ)音識(shí)別系統(tǒng)在生活中的應(yīng)用有哪些呢

    嵌入式語(yǔ)音識(shí)別系統(tǒng)是什么?嵌入式語(yǔ)音識(shí)別系統(tǒng)在生活中的應(yīng)用有哪些呢?
    發(fā)表于 12-23 08:27

    嵌入式語(yǔ)音識(shí)別技術(shù)在80251內(nèi)核中該如何去實(shí)現(xiàn)呢

    語(yǔ)音識(shí)別技術(shù)有哪些應(yīng)用?嵌入式語(yǔ)音識(shí)別技術(shù)在80251內(nèi)核中該如何去實(shí)現(xiàn)呢?
    發(fā)表于 12-23 07:42

    分享一種基于嵌入式系統(tǒng)開(kāi)發(fā)語(yǔ)音識(shí)別語(yǔ)音合成應(yīng)用

    基于微軟嵌入式系統(tǒng)該怎樣去添加語(yǔ)音識(shí)別及朗讀功能呢?
    發(fā)表于 12-23 06:42

    嵌入式與DSP的語(yǔ)音識(shí)別機(jī)器人研究

    嵌入式與DSP的語(yǔ)音識(shí)別機(jī)器人研究
    發(fā)表于 10-21 08:44 ?17次下載
    <b class='flag-5'>嵌入式</b>與DSP的<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>識(shí)別</b>機(jī)器人研究

    嵌入式語(yǔ)音識(shí)別系統(tǒng)是什么

    嵌入式語(yǔ)音識(shí)別系統(tǒng)分為封閉域識(shí)別和開(kāi)放域識(shí)別,封閉域識(shí)別范圍圍繞指定的字/詞語(yǔ)集合,也就是說(shuō)在開(kāi)
    發(fā)表于 06-12 11:38 ?3201次閱讀

    基于UniSpeech芯片和語(yǔ)音識(shí)別算法實(shí)現(xiàn)嵌入式語(yǔ)音識(shí)別系統(tǒng)的設(shè)計(jì)

    介紹語(yǔ)音識(shí)別技術(shù)在嵌入式系統(tǒng)中的應(yīng)用狀況與發(fā)展,以及在嵌入式系統(tǒng)中使用HMM語(yǔ)音識(shí)別算法的優(yōu)點(diǎn),
    的頭像 發(fā)表于 10-04 16:46 ?4079次閱讀
    基于UniSpeech芯片和<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>識(shí)別</b>算法實(shí)現(xiàn)<b class='flag-5'>嵌入式</b><b class='flag-5'>語(yǔ)音</b><b class='flag-5'>識(shí)別</b>系統(tǒng)的設(shè)計(jì)

    基于STM32的嵌入式語(yǔ)音識(shí)別模塊設(shè)計(jì)實(shí)現(xiàn)

    介紹了一種以ARM為核心的嵌入式語(yǔ)音識(shí)別模塊的設(shè)計(jì)與實(shí)現(xiàn)。模塊的核心處理單元選用ST公司的基于ARM Cortex-M3內(nèi)核的32位處理器STM32F103C8T6。本模塊以對(duì)話管理單元為中心,通過(guò)
    發(fā)表于 11-04 09:36 ?61次下載
    基于STM32的<b class='flag-5'>嵌入式</b><b class='flag-5'>語(yǔ)音</b><b class='flag-5'>識(shí)別</b>模塊設(shè)計(jì)實(shí)現(xiàn)

    使用微型嵌入式設(shè)備實(shí)現(xiàn)嵌入式語(yǔ)音識(shí)別應(yīng)用程序

    電子發(fā)燒友網(wǎng)站提供《使用微型嵌入式設(shè)備實(shí)現(xiàn)嵌入式語(yǔ)音識(shí)別應(yīng)用程序.zip》資料免費(fèi)下載
    發(fā)表于 12-09 10:00 ?0次下載
    使用微型<b class='flag-5'>嵌入式</b>設(shè)備實(shí)現(xiàn)<b class='flag-5'>嵌入式</b><b class='flag-5'>語(yǔ)音</b><b class='flag-5'>識(shí)別</b>應(yīng)用程序