《智能家居語音控制系統(tǒng)設計10000字【論文】》_第1頁
《智能家居語音控制系統(tǒng)設計10000字【論文】》_第2頁
《智能家居語音控制系統(tǒng)設計10000字【論文】》_第3頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

智能家居語音控制系統(tǒng)的設計學生:指導教師:(三峽大學電氣信息學院)摘要:本課題通過采集聲音信息對關鍵字進行識別作為命令來觸發(fā)開關,再通過網(wǎng)絡傳輸將數(shù)據(jù)傳輸至物聯(lián)網(wǎng)平臺,將物聯(lián)網(wǎng)平臺作為中介實現(xiàn)數(shù)據(jù)的處理和傳輸。設計了一個智能家居語音控制系統(tǒng),整個系統(tǒng)可以通過人的聲音識別判斷來執(zhí)行相應的動作,比如電視機的打開與關閉,室內(nèi)燈光的調控,通過一系列簡單的關鍵字組合來進行判斷執(zhí)行。使用戶在使用該系統(tǒng)的過程中與設備有更多的互動,從而增加體驗度。該課題功能的實現(xiàn)主要采用由esp8266芯片連接WIFI并對數(shù)據(jù)進行計算處理和采集聲音的語音識別芯片LD3320來實現(xiàn)。首先,在程序中預設每個家電的切換動作語音命令。當使用者有聲音信息發(fā)出時,系統(tǒng)自動獲取信息進行識別對比和命令的判斷,語音識別模塊識別指令成功之后,控制相應的家電可以做出相應的狀態(tài)切換。如果采集到的聲音不能被識別或者識別之后與預設命令不符合,它將不會觸發(fā)任何動作。同時數(shù)據(jù)可以通過網(wǎng)絡傳輸?shù)娇蛻舳?,以顯示家庭的運行狀態(tài),用戶只要通過網(wǎng)絡即可訪問云端,進行遠距離設備的控制。關鍵詞:單片機LD3320語音識別WIFI通信 前言智能家居系統(tǒng)功能的實現(xiàn)方式其實就是通過一些網(wǎng)絡把家里面的設備給綜合管控,實現(xiàn)資源的控制與調配,一般來說都比較日常的家電,空調,排風,空氣循環(huán)系統(tǒng),燈光設備,以及家庭安全保護系統(tǒng)。通過物聯(lián)網(wǎng)平臺只要在有可用網(wǎng)絡的情況下實現(xiàn)智能控制。在現(xiàn)代生活中人們已經(jīng)不僅僅滿足于基礎的衣食住行,更注重生活的完美體驗與享受。目前社會科技的發(fā)展速度非常之快,讓人們的生活與科技相結合已經(jīng)成為日趨重要的傾向,更多的人都希望能有一個智能完美懂得自己的家。自己還沒下班,家里的電飯煲已經(jīng)為你煮上了飯,還沒下班,冰箱會發(fā)來提示,家里所剩的蔬菜或者蛋類其他事物存貨已經(jīng)不多,需要緊急添加;當上了車回家的路上,通過手機遠程操控打開空調,室內(nèi)的燈光,讓你已進入家門就感受到家庭的溫馨,走進廚房,香噴噴的飯菜已經(jīng)做好[1]。如此一來可以節(jié)約使用者更多的時間來做其他事情。而語音識別控制系統(tǒng)在整個家居系統(tǒng)中負責開關的第一系統(tǒng)。本次課題就從簡單的如何遠程控制相應的家電設備來做起。當前社會中,在科技發(fā)展的推動下,語音識別的功能已經(jīng)越來越強大。語音識別和各種設備加在一起都可以成為一個全新的系統(tǒng),語音對話機器人,語音導航,甚至AI助手,都是語音識別系統(tǒng)與其他設備結合的產(chǎn)物。這里提到的“先進”將反映在設備的技術水平以及用電量的概念上。智能家居的語音控制系統(tǒng)將對用戶日常起居生活習慣做出重大影響,提高生活水平舒適度。在智能家居蓬勃發(fā)展的狀況下,本課題在原有的基礎上用語音識別作為開關,通過使用物聯(lián)網(wǎng)技術為載體進行數(shù)據(jù)的傳輸,以及超遠距離的監(jiān)控。在室內(nèi)的時候,用戶發(fā)出聲音指令,語音識別系統(tǒng)在感知并捕捉識別成功指令后,控制系統(tǒng)發(fā)出相應的指令,比如打開空調,這樣空調就開始工作。本文只要研究了語音識別系統(tǒng)具體工作的實現(xiàn),把一些預設命令關鍵字通過預先編寫程序寫入到處理器中。識別系統(tǒng)通過聲音采集分析匹配預先設定的命令,首先過濾掉噪音,還有一些無用詞匯,避免識別正確率太低,或者控制系統(tǒng)發(fā)出錯誤的指令,從而影響整個系統(tǒng)的運行。通過一系列措施使得智能家居語音控制系統(tǒng)更符合人們生活的使用習慣,給用戶更完美的體驗。國內(nèi)語音識別的發(fā)展也是非常的迅速,從上個世紀末一直到現(xiàn)在也取得了非常好的成績。語音識別技術的飛速發(fā)展同時也帶動了很多其他行業(yè),比如計算式行業(yè),家電行業(yè),尤其近些年社會所提倡的往智能方向發(fā)展,整個行業(yè)大的方向趨勢都非常良好。從智能語音識別技術應用一開始,我們國家也在這一時間投入了大量的人力財力物力,當然也取得了非常令人驕傲的成績。近些年在科技發(fā)展的推動下,語音識別技術也日漸成熟,有了更加大的應用環(huán)境,從物流行業(yè)物件分發(fā),交通方面的無人駕駛汽車,以及移動端的人機交互系統(tǒng),各個行業(yè)都取得了比較好的成績?,F(xiàn)在物聯(lián)網(wǎng)技術的興起也必將改變?nèi)藗兊纳罘绞?,從單一功能的使用,到增加人機互動。將語音識別系統(tǒng)與物聯(lián)網(wǎng)相結合作為連接手段把家庭里的家用設備連接在一起,通過聲音來控制設備的運行。而目前來說這個系統(tǒng)功能市場上很少有成型實物應用。本課題結合兩個系統(tǒng)與家具連接一起來實現(xiàn),將智能語音控制系統(tǒng)的實際應用更加完善,為今后的智能家居系統(tǒng)研究做出一些最初的嘗試[4]。1系統(tǒng)總體方案論述1.1主要模塊選擇方案(1)本設計選用的WIFI模塊,該模塊上面已經(jīng)有處理器,可以直接把程序下載進去,高度的集成,最小的縮小了所占的面積。ESP8266WIFI模塊,集成高性能處理器,可以連接到WIFI而且支持Wi-Fi協(xié)議棧,而且能夠在大的溫差下正常運行[5]。(2)根據(jù)課題功能的需求,只需要對聲音信息采集之后做出識別和判斷,因此選用LD3320模塊,該模塊在聲音距離,喚醒率,誤喚率,回聲及噪聲的消除能力方面都要優(yōu)于其他語音識別芯片。LD3320芯片已經(jīng)有集成的很多元器件,本身就可以完成空中聲源的感知及識別,不用再添加其他芯片。而且,LD3320芯片可以自由加入程序中運行,可添加關鍵字等優(yōu)勢。在整個系統(tǒng)電路中,語音識別模塊負責對聲音信息的采集和識別,在STC11L08XE單片機中把預設命令關鍵字通過程序編寫的方式下載到處理器中,該單片機負責完成所有的語音采集與識別工作,在語音識別模塊識別正確的命令之后將識別的結果傳輸?shù)娇刂破?,另外語音識別模塊的正常運行都需要通過配置寄存器數(shù)據(jù)來協(xié)助,同時LD3320讀取到信息后,通過SPI通信方式將數(shù)據(jù)傳輸?shù)教幚砥鞫丝?。整個語音識別過程分為以下幾個部分,首先模塊的初始化化,把預設的關鍵字命令寫入,語音識別相應方式。程序用KEIL4軟件編寫下載,在設備供電啟動后,對周圍聲音信息進行采集,預程序中預設的關鍵字做判斷,并根據(jù)識別判斷得到的結果進行相應的設備運行狀態(tài)的改變。1.2通信技術方案的選擇目前數(shù)據(jù)的傳輸方式有很多種,常見的有使用ZIGBEE組網(wǎng)節(jié)點與節(jié)點之間進行數(shù)據(jù)傳輸,紅外數(shù)據(jù)信息傳輸,和WIFI無線傳輸?shù)确绞?。WIFI無線傳輸具有傳輸速率快,傳輸信息量大的優(yōu)點,同時基本上都裝有WIFI,所以采取WIFI傳輸?shù)脑挄容^便利,便于設備的廣泛使用,也可以降低成本,同時又因為要連接到公網(wǎng),遠程操控設備。所以鑒于此需求,采用WIFI來把運行信息數(shù)據(jù)傳輸?shù)皆破脚_和客戶端[7]。1.3系統(tǒng)框架根據(jù)設計要求得出系統(tǒng)架構圖如圖1.1所示。各模塊功能如下:手機端:負責控制各功能模塊,并接收開門的數(shù)據(jù);物聯(lián)網(wǎng)云平臺:負責連接手機端和硬件電路,以及數(shù)據(jù)的傳輸;PC:在電腦網(wǎng)頁端進行遠程監(jiān)控操作;MCU:負責數(shù)據(jù)的處理,當接收到語音識后做出相應的判斷,并且對家居做出相應的控制;LD3320語音識別模塊:該部分獲取聲源信息,根據(jù)預設的聲音產(chǎn)生信號傳輸ESP8266中央處理模塊。手機端手機端物聯(lián)網(wǎng)云平臺中央處理器WIFI語音識別模塊聲源家電設備圖1.1系統(tǒng)架構圖1.4系統(tǒng)工作原理本設計主要由esp8266芯片加語音識別芯片LD3320芯片來實現(xiàn),esp8266模塊負責對網(wǎng)的連接,通過網(wǎng)絡將數(shù)據(jù)傳輸?shù)皆破脚_以及將數(shù)據(jù)從云平臺下載傳輸?shù)娇蛻舳?,這一過程使用MQTT協(xié)議。同時esp8266模塊通過物聯(lián)網(wǎng)云平臺進行對設備的檢測,可以實時獲取設備的運行狀態(tài),也可以對設備的狀態(tài)做出改變,比如打開或者關閉相應的設備。LD3320語音模塊對聲源讀取并判斷的識別,通過對比存儲在MCU中的預設聲源來判斷命令是否正確[8]。系統(tǒng)開始工作后,當語音模塊獲取并判別正確的聲源之后,通過程序來控制相應的繼電器從而實現(xiàn)電路開關的閉合或打開。網(wǎng)絡數(shù)據(jù)傳輸中使用物聯(lián)網(wǎng)云平臺,設置事件觸發(fā),當夜晚長時間亮燈達到一定時間后,為節(jié)約用電考慮設計會通過網(wǎng)絡MQTT協(xié)議發(fā)送數(shù)據(jù)給WIFI模塊,關掉相應的家居。同時移動客戶端也可登錄到服務器通過網(wǎng)絡來發(fā)送命令來控制家居的開關。1.5系統(tǒng)特點本設計以物聯(lián)網(wǎng)技術為信息傳輸載體和語音識別模塊相結合,語音識別模塊控制對應家居也可通過網(wǎng)絡來進行操控。(1)以esp8266芯片和LD3320作為核心,高度的集成化可以在任何場合使用,方便簡單。因為整個系統(tǒng)的體積較小,可以嵌入到各種設備中,容易安裝,而且對電力的供應需求也很低。同時如果在以后的使用中發(fā)生故障也容易維修。(2)本設計采用網(wǎng)絡在云平臺和客戶端之間進行數(shù)據(jù)的傳遞,這樣的話可以更有效的降低系統(tǒng)的延遲,保證設備能正常穩(wěn)定共作。2系統(tǒng)硬件設計2.1WIFI模塊硬件2.1.1esp8266模塊功能ESP8266模塊:ESP8266內(nèi)置超低功耗TensilicaL10632位RISC處理器,CPU時鐘速度最高可達160MHz,支持實時操作系統(tǒng)(RTOS)和Wi-Fi協(xié)議棧,可將高達80%的處理能力留給應用編程和開發(fā),超低功耗ESP8266專為移動設備、可穿戴電子產(chǎn)品和物聯(lián)網(wǎng)應用而設計,通過多項專有技術實現(xiàn)了超低功耗,ESP8266EX具有的省電模式適用于各種低功耗應用場景[9]。ESP8266EX集成了32位Tensilica處理器、標準數(shù)字外設接口、天線開關、射頻balun、功率放大器、低噪放大器、過濾器和電源管理模塊等,僅需很少的外圍電路,可將所占PCB空間降低。ESP8266的工作溫度范圍大,且能夠保持穩(wěn)定的性能,能適應各種操作環(huán)境。2.1.2ESP8266模塊引腳圖ESP8266模塊的引腳信息如圖2.1所示圖2.1ESP8266引腳圖2.1.3電源電路LD3320語音識別模塊使用的是3.3V電源,ESP8266需要轉化5V電源為3.3V,使用SPX3819M5-L-3-3穩(wěn)壓電路將輸入的5V。電源電路如圖2.2所示:圖2.2電源電路2.2語音識別模塊2.2.1語音識別流程LD3320語音識別模塊可以采集到兩種數(shù)據(jù)結果:在程序預設的初始時間里,芯片會采集外部的聲音存儲到寄存器中,然后進行分析比較,最后給出判定的結果。一般這個時候,可以理解為只給芯片設置了5秒是時間去采集記錄,而且,語音識別芯片在這5秒鐘的時間結束后,會產(chǎn)生中斷信息,再次請求獲取時間來采集記錄,這樣循環(huán)多次最終將外部聲音識別出來。LD3320語音識別模塊通過使用VAD技術來檢測識別語音[10]。當檢測到外部有聲音時,開始記錄數(shù)據(jù),直到說話聲音停止,開始分析聲音數(shù)據(jù),同時判斷識別的結果。VAD采集聲音的方式是如果檢測到有聲音的產(chǎn)生,則認為此時是聲源開始發(fā)出,在一段時間里,如果可以一直檢測到聲音,則一直檢測,直到檢測不到則認為這個聲源結束。LD3320識別芯片采用了一種更加簡單快捷的計算方式,第一次就可以識別聲音,也不需要提前教芯片學會判定聲音,只需要將預設命令的漢語拼音寫入,程序既可以根據(jù)拼音來和聲源作對比,判定正確的聲源。同時識別精度也是非常的精準。每個預設關鍵字的長度不能太長,同時也不能有太多的控住語句,語句的個數(shù)要低于50個??刂泼羁梢栽O置相對不容易混淆的短語,詞組,或者英文單詞也可以。如果是漢字的話,則一句話不能多于10個漢子。同時,因為每個句子也是可以隨便調換字的位置,就一位置,同一個系統(tǒng)可以在多種場合中應用。LD3320模塊電路中已經(jīng)配置了D/A轉換器和放大電路。MIC音頻信息采集、單聲揚聲器和咪頭可以非常容易地連接到芯片的引腳[11]。立體聲耳機能發(fā)出清晰響亮的聲音,最罕見的是其輸出端口的功率只有20mW。并且它的狀態(tài)可以被設置為休眠模式并且可以很容易地進入工作模式。2.2.2工作原理語音識別技術其實就是采用ASR技術來實現(xiàn)的,同時LD3320芯片和STC單片機相結合,組成簡單的非特定人聲語音識別系統(tǒng)。本設計中語音識別模塊和STC10L08XE單片機相結合進行聲音的采集判斷。LD3320語音識別模塊是ICRoute公司的新一代產(chǎn)品,該芯片通過采用AutomaticSpeechRecognition技術,該模塊預留16個I/O接口,還有按鍵,可以和各種系統(tǒng)相結合使用,具有非常好的可移植性能[11]。在使用的時候,芯片中已經(jīng)有了之前傳入的關鍵字,程序的編寫時就可以通過設置字符串來預設,這樣的話在以后的使用時即可識別生效。程序下載后把預設的關鍵字命令存儲在處理器中,命令可以是一些簡單詞組,英文單詞或者任何短句,只要把中文拼音寫入程序中程序就可以自動識別。語音識別的過程一般分為以下兩種:一是為聲音信息觸發(fā)來識別,觸發(fā)識別就是在系統(tǒng)的處理器接收到一個聲源信號時,比如使用者說“開始”,LD3320識別模塊接收到該命令后才開始下一次的聲音采集識別,開始啟動整個語音識別模塊開始工作。就是需要兩次觸發(fā)來實現(xiàn)系統(tǒng)的工作,這樣可以是整個識別更加的準確。第二種方式是循環(huán)觸發(fā)方式:就是只要有聲音發(fā)出并被語音識別模塊采集到,該模塊就會識別,不停的反復識別的過程,如果正好和預設命令相匹配就做出相應的動作,比如,打開LED燈,在識別一個命令之后自動進入下一次循環(huán)。一直這樣循環(huán)采集。整個語音識別系統(tǒng)的實現(xiàn)方式包括各個軟件控制的編寫,計算比對命令是否匹配是整個處理系統(tǒng)的最重要部分分工作,軟件的編寫用KEIL4編寫,把所有的操作數(shù)據(jù)都需要記錄下來,同時對應相應的操作過程需要進行回放。將需要的預設口令和相應的動作,以及實現(xiàn)方式事先寫入代碼中。語音識別的結果通過檢測系統(tǒng)來傳輸并執(zhí)行,傳輸?shù)娇刂破骱?,中央處理器對識別的結果加以處理,如果能和預設命令相匹配,同時查找預設命令,執(zhí)行相應的動作,通過串口來執(zhí)行開關動作。在該系統(tǒng)中命令控制相應家具設備運行狀態(tài)的改變,啟動或者停止。LD3320語音識別系統(tǒng)在識別正確的命令會將結果傳輸?shù)捷敵隹刂瓶冢瑘?zhí)行相應的命令,如果在預設的有限時間里沒有收到識別結果或者錯誤的識別結果后,則說明有錯誤發(fā)生,這個時候控制系統(tǒng)就需要重新發(fā)送命令。該系統(tǒng)中采集數(shù)據(jù)的傳遞方式如圖2.3所示。通過對輸入的語音進行分析,提取出聲源的信息,再和程序中預設的命令關鍵字做匹配,然后輸出對應的結果。圖2.3數(shù)據(jù)接收流程圖2.3LD3320外圍電路設計為了讓LD3320芯片能夠正常工作并且實現(xiàn)與上位單片機的通行,需要為LD3320芯片設計外圍電路,電路設計如圖2.4所示。其中紅色LED用于指示LD3320芯片的工作狀態(tài),當LD3320正常工作時,紅色LED將會閃亮。圖2.4LD3320外圍電路圖3系統(tǒng)軟件設計3.1WIFI模塊軟件設計3.1.1中央控制系統(tǒng)模塊工作流程整個系統(tǒng)數(shù)據(jù)處理的過程如圖3.1所示,系統(tǒng)初始化后,WIFI模塊搜索并連接到可用WIFI,中央處理器獲取LD3320數(shù)據(jù)包資料,判斷是否與源程序中設定相對應,如果是預設的語音命令,則打開或者關閉相應的設備。如果系統(tǒng)沒有采集到聲源,或者采集判斷的聲源不是程序中預設的關鍵字命令,則系統(tǒng)不發(fā)出任何指令,繼續(xù)檢測獲取用戶聲音信息。開始開始模塊連接到WIFI判斷指令是否匹配?獲取數(shù)據(jù)系統(tǒng)初始化執(zhí)行動作不執(zhí)行動作YN圖3.1中央控制系統(tǒng)模塊工作流程圖3.1.2模塊間的通信方式由于采用SPI通信方式占用的接口線線只有4根,通信簡單快捷而且效率還很高,市場上很多的處理器都可以采用SPI通信,所以說這是是一種比較好的選擇方案。數(shù)據(jù)傳輸方式通過4根線進行數(shù)據(jù)的傳遞,SPI傳輸數(shù)據(jù)最明顯的特征是設備時鐘由所連接的設備時鐘決定,等主設備產(chǎn)生時鐘信號后,主從設備間開始通信。幾個接口類型分別是:SDI:負責數(shù)據(jù)輸入(2)MISO:負責數(shù)據(jù)傳入和數(shù)據(jù)傳出;SDO:數(shù)據(jù)輸出(1)MOSI–兩個設備間數(shù)據(jù)的傳輸SCLK:時鐘(3)SCLK–時鐘信號,由所連接的主設備傳出CS(片選)。(4)CS–如果連接設備多取決于主設備的時鐘,如果連接了多個從設備,每個設備上都必須有引腳要連接到主設備,這時候片選引腳電平必須是拉低主設備產(chǎn)生時鐘信號給相連接的設備,相連接的設備之間的數(shù)據(jù)發(fā)送和接收速率由主設備的頻率來決定。在設備連接的時候各個接口需要與對應的連接起來,采用相同的接口。在數(shù)據(jù)傳輸時,如果傳輸?shù)臄?shù)據(jù)小于16位,數(shù)據(jù)在傳輸?shù)臅r候必須要左對齊[12]。而且接收的數(shù)據(jù)如果也是小于16位就要采用程序來屏蔽掉無用數(shù)據(jù)。3.1.3WiFi模塊關鍵代碼3.1.3.1搜尋連接到WIFI數(shù)據(jù)通信通過WIFI實現(xiàn),設備供電之后,WiFi模塊啟用,用os-timer定時器循環(huán)設置每隔一秒搜尋可用WiFi,為了使設備更普遍使用,通過物聯(lián)網(wǎng)平臺來輸入WIFI名稱及密碼,用os-printf打印連接WIFI的信息來驗證程序的執(zhí)行。模塊需要用戶預設要連接的WIFI名稱和WIFI密碼,這里需要把這兩項存儲到結構體里面,首先定義兩個變量存儲,然后聲明一個結構體用來放置所有的變量信息。 structstation_configstation_cfg; uint8ssid="xxx";//wifi名 uint8password="xxx";//wifi密碼 模塊出廠時默認都是作為AP來使用的,必須把模塊修改成Station[13]。只有這樣,才能連接到指定的預設WIFI。WIFI的運行需要以下的程序設置 voidICACHE_FLASH_ATTR user_set_station_config(void) { //把模塊設置為客戶端模式 //寫入要連接WIFI的SSID和PASSWORD }esp8266芯片內(nèi)的空間有限,為節(jié)省空間,只用用到的時候才把信息存到其中,首先添加一個宏定義,在上電啟動后,把所需要的數(shù)據(jù)載入,通過添加的宏定義實現(xiàn),這樣就可以把整個函數(shù)實現(xiàn)。 voiduser_init(void) { 設置程序下載時的波特率為115200 os_printf("SDKversion:%s\n",system_get_sdk_version());//打印sdk版本 user_set_station_config();//setSTATIONconfig 中調用wifi_station_set_config(&station_cfg) //3.1.3.2手機端遠程操控通過物聯(lián)網(wǎng)云平臺設置,添加設備及上下通道,向上通道代表訂閱,向下代表發(fā)布命令。創(chuàng)建一個觸發(fā)任務,將設備UUID填入,并填寫之前添加的應用場景和數(shù)據(jù)類型,相應的詳細數(shù)值如圖。在連接到公網(wǎng)的情況下即可通過云平臺查閱家居的使用情況,和控制開關[14]。參數(shù)如圖3.2.(a)(b)圖3.2物聯(lián)網(wǎng)云平臺參數(shù)控制第一步:創(chuàng)建一個服務器并啟動首先需要創(chuàng)造一個服務端,最直接快捷的方式就是使用MqttServer的方法直接建造,但是使用這個方法必須要有相應的參數(shù)設置。varoptions=newMqttServerOptions();varoptions=newMqttServerOptions();使用以上方法建造的對象之后,通過使用Start的方式就可以打開MQtt服務。第二步:驗證客戶端的正確性在使用客戶端時必須要加以驗證,通過連接到服務器的客戶端的標識ID號碼,用戶的訪問名字和用戶密碼。 ConnectionValidator=c=^ { if(c.ClientId.Length^10) returnMqttConnectReturnCode. if(c.Username!="xxx"||c.Password!="xxx") returnMqttConnectReturnCode.第三步:創(chuàng)建并連接到客戶端 首先要創(chuàng)建一個MQTT,使用MQTTnet來新創(chuàng)建就可以,通過使用Clientact就可以新建一個Client對象。 在完成所用客戶端的建造之后,通過調取異步處理方式來連接到云平臺。 在使用這個方式是一般都需要一個載體進行數(shù)據(jù)傳遞,這個載體必須要有客戶端的唯一標識ID號,以及服務器的網(wǎng)絡地址,端口號碼,和用戶的姓名以及密碼等重要信息。 varoptions=newMqttClientTcpOptions { Server="127.0.0.1", ClientId="c001", UserName="u001", Password="p001", CleanSession=true };第四步:訂閱消息首先客戶端和服務器需要連接在一起,在聯(lián)通之后,通過使用異步傳輸?shù)姆绞絹碛嗛喯ⅲ@樣的話就可以使用可一一列舉的方式把和主題無關的給過濾排除掉。再把整個系統(tǒng)可用的有用信息加以傳輸發(fā)布。mqttClient.SubscribeAsync(newList^TopicFilter^{newTopicFilter("家/客廳/空調/#",MqttQualityOfServiceLevel.) };第五步:發(fā)布消息 在信息的發(fā)布時,首先要創(chuàng)造一個信息載體也就是對象,通過采用最快捷的方法,通過建造一個函數(shù),把信息的主題,主要內(nèi)容,以及各種參數(shù)發(fā)送到網(wǎng)絡。 MQTT_Publish(client,pub_topic_id[0],"0",1,0,0); MQTT_Publish(client,pub_topic_id[0],"response:1",10,0,0); 在客戶端的到傳輸?shù)南⑷罩竞?,客戶端再通過對象是publish消息進行數(shù)據(jù)的傳輸,再通過mqtt把消息發(fā)送到網(wǎng)絡給用戶。 mqttClient.PublishAsync(appMsg);第六步:跟蹤消息 Mqttnet協(xié)議根據(jù)Mqttnet信息來實現(xiàn)數(shù)據(jù)傳輸這個Mqttnettrace可以在服務端傳輸數(shù)據(jù)給客戶端。Trace的傳輸用來做服務器與客戶端傳輸信息記錄,包括該信息的發(fā)布源頭,以及進程ID,日志的等級程度,有錯誤不識別的消息也會實時顯示出來。 MqttNetTrace.TraceMessagePublished+=MqttNetTrace_TraceMessagePublished; privatestaticvoidMqttNetTrace_TraceMessagePublished(objectsender,MqttNetTraceMessagePublishedEventArgse) Console.WriteLine($"運行ID:{e.ThreadId}數(shù)據(jù)來源:{e.Source}程序查看:{e.Level}訂閱消息:{e.Message}"); if(e.Exception!=null) Console.WriteLine(e.Exception);3.2語音識別模塊軟件設計3.2.1語音識別模塊工作過程整個系統(tǒng)工作數(shù)據(jù)傳輸過程如圖3.3所示。LD3320模塊在初始化后隨時收集聲源信息,并在收集后將信息存儲在寄存器中。MCU模塊讀取剛剛收集的聲源信息,并將其與預設的聲源進行比較。如果它符合預設的聲源,它會產(chǎn)生一個中斷信號,發(fā)送到ESP8266模塊,從而控制相應家庭的開關。如果不是預設信息,則屬于垃圾信息,并清空以繼續(xù)監(jiān)視和收集。MCUMCU讀取LD3320的寄存器LD3320音頻采樣并識別根據(jù)單片機里編好的程序進行具體判斷ESP8266模塊結果存儲在LD3320中的寄存器中圖3.3語音識別模塊工作過程3.2.2語音識別模塊關鍵代碼3.2.2.1初始化代碼硬件初始化工作的時候很有可能會因為一些電路問題不能正常工作,解決辦法是多啟動幾次,這里我用了5次啟動流程。把一些識別的數(shù)值也要初始化設置。程序的具體識別計算方式來改寫。初始化過程中一般都需要把一些詳細的參數(shù)給設置了。參數(shù)包括,語音識別工作的時間,讀取背景音的時間,同時靈敏度也要做修改,靈敏度越高識別的正確率就會相應的降低。靈敏度指的是采集語音的距離,所以要多次調整,才能合適。ASR初始化voidLD_Init_ASR(void){ nLD_Mode=LD_MODE_ASR_RUN; LD_Init_Common(); GUI_DispDecAt(LD_ReadReg(0xBD),300,20,3); //text LD_WriteReg(0x17,0x48); LD3320_delay(10); LD_WriteReg(0x3C,0x80); GUI_DispDecAt(LD_ReadReg(0x3C),300,40,3); //1text LD_WriteReg(0x3E,0x07); GUI_DispDecAt(LD_ReadReg(0x3e),300,60,3); //text LD_WriteReg(0x38,0xff); GUI_DispDecAt(LD_ReadReg(0x38),300,80,3); //text LD_WriteReg(0x3A,0x07); GUI_DispDecAt(LD_ReadReg(0x3a),300,100,3); //text LD_WriteReg(0x40,0); GUI_DispDecAt(LD_ReadReg(0x40),300,120,3); //text LD_WriteReg(0x42,8); GUI_DispDecAt(LD_ReadReg(0x42),300,140,3); //text LD_WriteReg(0x44,0); GUI_DispDecAt(LD_ReadReg(0x44),300,160,3); //text LD_WriteReg(0x46,8); GUI_DispDecAt(LD_ReadReg(0x46),300,180,3); //text LD3320_delay(1);}uint8RunASR(void){ uint8i=0; uint8asrflag=0; for(i=0;i<5;i++) // { LD_AsrStart(); //初始化ASR LD3320_delay(100); if(LD_AsrAddFixed()==0) //添加關鍵詞語到LD3320芯片中 { LD_reset(); // 看門狗檢測到硬件采集聲源信息出現(xiàn)錯誤,硬件重新供電復位 LD3320_delay(50); // continue; } LD3320_delay(10); if(LD_AsrRun()==0) { LD_reset(); // 硬件出現(xiàn)致命錯誤,系統(tǒng)重新啟動 LD3320_delay(50); // 并從初始化開始重新ASR識別流程 continue; } asrflag=1; break; // } returnasrflag;}3.2.2.2聲音采集代碼語音識別模塊在對聲源識別之后將數(shù)據(jù)結果傳輸?shù)接嬎銠C的控制系統(tǒng),把采集的數(shù)據(jù)結果加以計算處理,得到的命令將通過中斷傳輸?shù)姆绞竭M行命令的傳輸或者接收。把寄存器中存儲的識別結果與預設關鍵字作對比。通過定義字符串存放在MCU中,然后一起把程序下載到單片機中。采集過程如圖3.4所示:設定編號設定編號等待芯片空閑將字符串中的字符按順序寫入將字符串長度寫入寄存器B9向寄存器B2寫入FF循環(huán)結束?結束開始NY圖3.4聲音采集流程圖 uint8nAsrResCount=0; ucRegVal=LD_ReadReg(0x2B); if(nLD_Mode==LD_MODE_ASR_RUN) { //GUI_DispDecAt(2,20,70,5); //text //通過語音識別結果發(fā)出的中斷 //(當接收到聲音輸入,無論如何都會有中斷信號產(chǎn)生) LD_WriteReg(0x29,0); LD_WriteReg(0x02,0) GUI_DispDecAt(ucRegVal,200,100,3); GUI_DispDecAt(LD_ReadReg(0xb2),200,120,3); GUI_DispDecAt(LD_ReadReg(0xbf),200,140,3); if((ucRegVal&0x10)&&LD_ReadReg(0xb2)==0x21&&LD_ReadReg(0xbf)==0x35) { GUI_DispDecAt(3,20,90,5); //text if(nAsrResCount>0&&nAsrResCount<=4) { } } else { GUI_DispDecAt(4,20,100,5); //不會執(zhí)行識別 } LD_WriteReg(0x2b,0); //這里開關設置為空閑 } 3.2.2.3聲音識別過程要控制整個語音采集識別系統(tǒng),首先要通過設置數(shù)據(jù)的存儲方式。通過定義的系統(tǒng)變量來實現(xiàn)對整個處理過程的控制。識別過程如圖3.5所示:LD_RUNING狀態(tài),這些命令需要在編程的時候提前加入到LD3320啟動識別之前。定義語句nAsrStatus=LD_ASR_RUNING;這個地方需要聲明設置一個全局變量。把這一局程序放置在在LD3320正式啟動開始工作之前:將寄存器29和02清零將寄存器29和02清零檢查寄存B2,2B,是否正常寄存器BA的值在[1..4]之間?最佳識別結果在寄存器C5,如有必要可獲取其他備選結果。結束運算結果是無法識別開始圖3.5聲源識別流程圖nAsrStatus=LD_ASR_RUNING;LD_AsrRun();在寫入關鍵字的時候需要注意一些事項,每個關鍵字都需要指定一個編號,如表3.6所示,但是不同的識別關鍵字是可以用同一個編號的,但是相同的編號一定會有相同的結果輸出。LD3320語音識別芯片,關鍵字的條數(shù)最多只能寫入50條,而且寫入的關鍵字必須是普通話,否則不能識別。寫的關鍵指令如果是多個拼音,拼音之間必須要有占位,另外關鍵字的總占位不能超過256個。在聲音的采集過程中,只要咪頭采集到聲音,就算是不能正確識別或者識別成功,系統(tǒng)都會生成一個中斷信號。然后把聲音信息存儲到寄存器中,處理器再根據(jù)生成的中斷信號與寄存器中的預設關鍵字拼音作分析判斷。通過提取寄存器中的值,就可以知道有哪些相似的預備答案,然后在進一步挑選出與聲源最為相似的關鍵字,做出相應狀態(tài)切換。表3.6編號表編號字符串1開燈1開白燈3打開紅燈7關紅燈8打開風扇4系統(tǒng)調試4.1語音識別準確度調試語音識別調試時用不同人的聲音,非特定人聲代表不同的人聲,分別在安靜環(huán)境和吵鬧環(huán)境下對系統(tǒng)進行測試。調試結果如表4.1和圖4.1所示表4.1語音識別精準度調試識別環(huán)境次數(shù)語句安靜吵鬧非特定人1非特定人2非特定人3非特定人1非特定人2非特定人3開燈19/2018/2016/2016/2015/2016/20關燈20/2017/2017/2015/2014/2014/20打開風扇20/2017/2019/2017/2016/2015/20關閉風扇18/2018/2019/2015/2015/2016/20打開紅燈19/2018/2018/2015/2014/2015/20關紅燈17/2016/2018/2016/2012/2014/20正確率94.16%86.67%85.0%78.33%72.5%75.0%圖4.1語音識別精準度調試解決辦法:(1)通過在程序中增加無用關鍵字來降低錯誤。在程序預設關鍵字的時候可以通過加入另外一些其他容易和關鍵字混淆的詞語或者句子,當語音識別時,如果識別到無用垃圾詞匯則不執(zhí)行任何動作,這樣就可以大幅度吸收錯誤的識別結果,增加正確率。比如在本課題設計中:需要識別的關鍵詞語是4條,“打開”,“關閉”,“打開風扇”,“關閉風扇”,“打開紅燈”,“關閉紅燈”。在把這6個關鍵詞語在程序中寫入D3320后,可以再另外設置10~30個詞語進LD3320,比如“開的”,“卡卡”,“阿阿阿”,“嗚嗚嗚”等等。(2)使用口令觸發(fā)識別方式。在實際應用中,肯定是希望識別正確率越高越好,但是肯定不可能通過一個按鍵來觸發(fā),太繁瑣。在程序編寫時,通過定義不同的短語來做為觸發(fā)口令方式。因為一個家居語音控制系統(tǒng)肯定不是僅僅控制一個家電。這樣的話,比如要控制LED燈,先把整個系統(tǒng)設置為循環(huán)識別模式,先喊一句“打開燈泡”,這樣一個提示音接下里的任何聲音識別結果都是對LED等來進行操作,就算有聲源和和別的家電命令關鍵字相匹配也不會有任何操作。通過這樣的方式系統(tǒng)在識別聲源信息的時候就會降低很多錯誤。然后再喊一句退出LED,則系統(tǒng)再次進入循環(huán)模式,再次等待有其他命令的傳出。通過采用這種口令方式會大大提高了正確識別率,但同時也增加了用戶的體驗,因為要加入別的詞語,會影響系統(tǒng)的運行速度。4.2遠程監(jiān)控調試遠程控制的延時主要取決于網(wǎng)絡狀況,設備幾乎沒有影響,設備在剛上電時WiFi正在連接,所以延時會高一點,另一方面也與物聯(lián)網(wǎng)云平臺有關系。調試結果如表4.4表4.2延時測試結果

語句執(zhí)行次數(shù)延時開燈20/200.5s關燈19/200.1s打開風扇20/200.1s關閉風扇20/200.1s打開紅燈19

溫馨提示

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

評論

0/150

提交評論