音AI芯片如何落地智能家居?蜂鳥(niǎo)系列實(shí)戰(zhàn)解析)
1. 為什么智能家居繞不開(kāi)離線語(yǔ)音從三座大山說(shuō)起這兩年做智能家居產(chǎn)品相信大家跟我有同一個(gè)感受用戶已經(jīng)不太為“能聯(lián)網(wǎng)”買單了大家要的是“好用”。而“好用”這件事在語(yǔ)音交互上特別明顯。你對(duì)著設(shè)備喊一句它能不能秒回、準(zhǔn)回、不回錯(cuò)直接決定這個(gè)產(chǎn)品會(huì)不會(huì)被留下。也正是在這個(gè)背景下離線語(yǔ)音AI芯片開(kāi)始大規(guī)模進(jìn)入IoT家居市場(chǎng)云知聲的蜂鳥(niǎo)系列就是這條賽道上繞不開(kāi)的一顆國(guó)產(chǎn)方案。先說(shuō)說(shuō)我理解的行業(yè)痛點(diǎn)。以前智能家居做語(yǔ)音第一反應(yīng)是上云麥克風(fēng)采音Wi-Fi傳數(shù)據(jù)云端解析返回指令。這個(gè)方案的問(wèn)題其實(shí)挺多。第一是隱私焦慮客廳臥室里的對(duì)話一直往服務(wù)器傳用戶心理上就過(guò)不去更別說(shuō)有些品類比如門鎖、攝像頭對(duì)數(shù)據(jù)安全極度敏感。第二是時(shí)延正常家庭帶寬下走一輪云少說(shuō)也要幾百毫秒播放音樂(lè)、操作家電時(shí)卡一下體驗(yàn)非常割裂。第三是斷網(wǎng)問(wèn)題很多家庭的路由器并沒(méi)有想象中穩(wěn)定網(wǎng)絡(luò)一抖整個(gè)設(shè)備就成了啞巴。離線語(yǔ)音正好把這三座大山都搬開(kāi)了。語(yǔ)音識(shí)別在設(shè)備本地完成沒(méi)有數(shù)據(jù)上傳、沒(méi)有網(wǎng)絡(luò)依賴、響應(yīng)控制在幾十到一兩百毫秒的量級(jí)而且成本能做到非常低。你可能會(huì)問(wèn)離線識(shí)別不是早就有了嗎對(duì)但早期離線識(shí)別基本是“關(guān)鍵詞表模板匹配”的路子換個(gè)說(shuō)法就聽(tīng)不懂稍微嘈雜一點(diǎn)就罷工。真正讓離線語(yǔ)音變得可用靠的是AI芯片的算力下放和端側(cè)模型能力的提升。云知聲的蜂鳥(niǎo)系列本質(zhì)上是把“前端麥克風(fēng)陣列信號(hào)處理、喚醒詞檢測(cè)、離線指令識(shí)別、自學(xué)習(xí)、本地槽位解析”這一整套語(yǔ)音鏈路集成進(jìn)一顆低成本、低功耗的AI語(yǔ)音芯片里。它的目標(biāo)很明確讓傳統(tǒng)IoT設(shè)備廠商不折騰算法團(tuán)隊(duì)就能給產(chǎn)品加上一套好用的語(yǔ)音交互。這篇文章我會(huì)把我在實(shí)際項(xiàng)目中接觸蜂鳥(niǎo)系列方案時(shí)思考的東西、踩過(guò)的坑、以及最終跑通的流程完整梳理一遍內(nèi)容偏方案級(jí)適合做照明、電工、門鎖、小家電、白電的硬件產(chǎn)品經(jīng)理、嵌入式工程師和對(duì)端側(cè)語(yǔ)音感興趣的開(kāi)發(fā)者參考。2. 蜂鳥(niǎo)系列方案核心能力拆解一顆芯片怎么把“聽(tīng)”和“懂”做完2.1 離線語(yǔ)音識(shí)別引擎不是詞典匹配是真的“聽(tīng)懂”很多朋友一聽(tīng)“離線語(yǔ)音”第一反應(yīng)是“這不就是個(gè)命令詞庫(kù)嗎”。這個(gè)印象得改一改。蜂鳥(niǎo)系列上跑的識(shí)別引擎本質(zhì)上是一個(gè)完整的端側(cè)語(yǔ)音識(shí)別框架對(duì)話法、模型、解碼都做了深度裁剪和優(yōu)化。它支持的不只是固定的“打開(kāi)燈”“關(guān)閉燈”這種短句還允許廠商自定義槽位詞比如“把客廳燈調(diào)到百分之五十”其中“客廳”“百分之五十”是通過(guò)槽位解析拿出來(lái)的動(dòng)態(tài)參數(shù)而不是把整句話做成靜態(tài)命令。從技術(shù)鏈路看一次完整的離線識(shí)別是這樣的麥克風(fēng)采集音頻先做VAD語(yǔ)音活動(dòng)檢測(cè)判斷有沒(méi)有人說(shuō)話然后提取聲學(xué)特征送入喚醒詞模型判斷是否出現(xiàn)了喚醒詞確認(rèn)喚醒后進(jìn)入指令識(shí)別階段把后續(xù)幾秒鐘的音頻做識(shí)別解碼最后對(duì)識(shí)別結(jié)果做自然語(yǔ)言理解提取出意圖和槽位輸出一個(gè)結(jié)構(gòu)化的指令結(jié)果。整個(gè)過(guò)程都在本地芯片上完成沒(méi)有網(wǎng)絡(luò)包進(jìn)出。這里有一個(gè)關(guān)鍵點(diǎn)喚醒詞和指令詞是兩套模型。喚醒詞模型的特點(diǎn)是“始終在監(jiān)聽(tīng)”必須要極低功耗、極低誤喚醒率所以通常用較小的模型只辨識(shí)那幾個(gè)固定的詞指令詞識(shí)別則是在喚醒之后才啟動(dòng)模型可以稍微大一點(diǎn)識(shí)別準(zhǔn)確率也更高。蜂鳥(niǎo)方案把這套流程做成了可配置的廠商可以自定義喚醒詞也可以配置喚醒后進(jìn)入指令識(shí)別的超時(shí)時(shí)間。我實(shí)際用下來(lái)默認(rèn)策略是“喚醒后聽(tīng)著后面3到5秒的語(yǔ)音”這個(gè)窗口可以按產(chǎn)品場(chǎng)景調(diào)。比如燈控面板用戶說(shuō)話短窗口短一點(diǎn)反饋更快智能音箱類產(chǎn)品窗口長(zhǎng)一點(diǎn)避免“小云小云再等我想想”這種情況被打斷。2.2 AI芯片架構(gòu)專用加速器才是低功耗的關(guān)鍵離線語(yǔ)音看起來(lái)是個(gè)軟件問(wèn)題但真正量產(chǎn)的時(shí)候芯片架構(gòu)才是決定成敗的硬條件。蜂鳥(niǎo)系列采用的結(jié)構(gòu)簡(jiǎn)單說(shuō)就是“CPUAI加速器音頻模擬前端”的高度集成方案。專用加速器負(fù)責(zé)跑神經(jīng)網(wǎng)絡(luò)推理而CPU只負(fù)責(zé)調(diào)度和業(yè)務(wù)處理。這個(gè)分工非常關(guān)鍵。為什么不能像早期方案那樣全部用MCU輪詢硬扛因?yàn)檎Z(yǔ)音識(shí)別里最耗算力的不是采樣而是聲學(xué)得分計(jì)算和解碼搜索。一個(gè)中等規(guī)模的喚醒詞模型一次推理的乘法次數(shù)就要幾十萬(wàn)到上百萬(wàn)次如果用通用MCU的ALU一條條算功耗和時(shí)延立刻失控。專用加速器的好處是用硬件流水線和高并行度把矩陣運(yùn)算、激活函數(shù)這些操作在幾個(gè)時(shí)鐘周期內(nèi)完成功耗可以比通用MCU低一個(gè)數(shù)量級(jí)以上。蜂鳥(niǎo)系列在低功耗上做得比較激進(jìn)。典型待機(jī)狀態(tài)下芯片一直開(kāi)著模擬前端做音頻監(jiān)聽(tīng)只有檢測(cè)到能量超過(guò)閾值才進(jìn)入喚醒判定再進(jìn)一步才啟動(dòng)完整識(shí)別。這種三級(jí)喚醒策略VAD→輕量喚醒模型→完整識(shí)別把平均工作電流控制在了一個(gè)很低的水平電池供電的設(shè)備比如智能門鎖、遙控器、溫控器都能拿它做長(zhǎng)期聆聽(tīng)而不用擔(dān)心掉電太快。這里插一句選型的經(jīng)驗(yàn)不要只看芯片標(biāo)稱的算力要關(guān)心“每毫瓦能跑多少有效推理”。有的芯片標(biāo)稱算力很高但待機(jī)功耗感人做電池設(shè)備直接出局。蜂鳥(niǎo)系列的思路是夠用就好把模型裁剪到和硬件匹配而不是用更大的模型硬套小芯片這條原則在IoT場(chǎng)景里非常對(duì)。2.3 麥克風(fēng)信號(hào)處理5米之外喚醒靠什么離線識(shí)別要落地光有喚醒模型還不夠真正拉開(kāi)體驗(yàn)差距的是前端信號(hào)處理。家里不是消聲室有電視聲、空調(diào)聲、廚房的排風(fēng)扇聲甚至說(shuō)話的人隔著好幾米還背對(duì)著設(shè)備。這時(shí)候就需要麥克風(fēng)陣列和信號(hào)處理算法來(lái)兜底。蜂鳥(niǎo)系列在麥克風(fēng)接口上做了比較靈活的設(shè)計(jì)單麥克風(fēng)、雙麥克風(fēng)、線陣都有對(duì)應(yīng)方案。單麥適合近距離場(chǎng)景比如臺(tái)燈、插排、遙控器用戶基本在1到2米內(nèi)說(shuō)話雙麥?zhǔn)悄壳暗慕^對(duì)主流一個(gè)面板、一個(gè)開(kāi)關(guān)放在客廳墻上用戶可能在3到5米外說(shuō)話雙麥可以做波束成形和底噪估計(jì)線陣或者四麥則適合本身腔體比較大、成本不敏感的產(chǎn)品比如智能音箱、智能冰箱。前端算法里AEC聲學(xué)回聲消除是我覺(jué)得最容易被低估的一項(xiàng)。智能家居設(shè)備常自帶揚(yáng)聲器比如門鎖有提示音、面板有操作反饋音、空調(diào)有蜂鳴器如果AEC沒(méi)做干凈設(shè)備自己一發(fā)聲就會(huì)把麥克風(fēng)采集的信號(hào)污染掉導(dǎo)致“設(shè)備一響它就聽(tīng)不清你說(shuō)話”。蜂鳥(niǎo)方案的AEC需要把揚(yáng)聲器的參考信號(hào)接回芯片做對(duì)消這一步在硬件設(shè)計(jì)時(shí)就要預(yù)留好通路。我在項(xiàng)目中就吃過(guò)虧第一版PCB沒(méi)把揚(yáng)聲器PWM參考信號(hào)引到語(yǔ)音芯片導(dǎo)致AEC形同虛設(shè)播放提示音時(shí)喚醒率掉了三成以上后來(lái)改版加了一條線才解決。2.4 本地指令詞自學(xué)習(xí)把“懂你”放進(jìn)設(shè)備里蜂鳥(niǎo)系列還有一個(gè)很實(shí)用的特性本地自學(xué)習(xí)。這個(gè)概念對(duì)消費(fèi)者很友好廠商可以開(kāi)放一個(gè)入口讓用戶自己錄入一個(gè)喜歡的詞作為喚醒詞或者添加一個(gè)自定義指令。技術(shù)實(shí)現(xiàn)上自學(xué)習(xí)不是簡(jiǎn)單地錄一段音頻然后模板匹配而是把用戶錄制的音頻做特征提取更新到本地的模型參數(shù)里讓設(shè)備逐漸適應(yīng)某個(gè)人的口音和表達(dá)習(xí)慣。不過(guò)我得提醒一句自學(xué)習(xí)功能的產(chǎn)品邏輯要想清楚。如果所有指令詞都開(kāi)放給用戶隨意添加詞表會(huì)失控識(shí)別性能會(huì)下降。我的做法是自學(xué)習(xí)只對(duì)“喚醒詞”和極少數(shù)關(guān)鍵指令開(kāi)放比如“打開(kāi)兒童鎖”“離家布防”這種用戶非常在意但語(yǔ)法又容易說(shuō)得五花八門的指令片斷。核心控制命令還是走出廠預(yù)設(shè)詞表保證穩(wěn)定。這個(gè)取舍在需求評(píng)審階段就應(yīng)該確定下來(lái)否則后期調(diào)模型會(huì)非常痛苦。3. 拿蜂鳥(niǎo)做一款語(yǔ)音燈控面板完整落地流程實(shí)錄3.1 需求與選型先想清楚指令詞再挑芯片紙上談兵差不多了我們直接拿一個(gè)真實(shí)項(xiàng)目來(lái)走一遍。假設(shè)我要做一款86型墻面語(yǔ)音燈控面板功能是通過(guò)語(yǔ)音控制一路燈的開(kāi)關(guān)、亮度調(diào)節(jié)同時(shí)保留物理按鍵還要有極低的待機(jī)功耗能接入傳統(tǒng)零火線。目標(biāo)成本明確整機(jī)BOM要在可控范圍內(nèi)語(yǔ)音部分不能成為成本大頭。第一件事不是畫(huà)原理圖是先列指令詞表和交互邏輯。我一般會(huì)把用戶可能說(shuō)的話全部寫(xiě)出來(lái)分成三類必須支持的、兼容更好的、直接砍掉的。比如必須支持“打開(kāi)燈”“關(guān)燈”“亮度調(diào)到百分之五十”“最亮”“暗一點(diǎn)”兼容更好“客廳燈打開(kāi)”“把燈調(diào)亮一點(diǎn)”砍掉“把餐桌上面的那盞暖光燈調(diào)暗到差不多能看書(shū)的樣子”第三類過(guò)于復(fù)雜的表達(dá)不只是離線語(yǔ)音做不了在線識(shí)別也容易翻車不如在交互設(shè)計(jì)上引導(dǎo)用戶用更簡(jiǎn)潔的指令。指令詞表定好之后再估算語(yǔ)音模型需要的存儲(chǔ)空間結(jié)合目標(biāo)Flash大小選具體型號(hào)。蜂鳥(niǎo)系列里有不同F(xiàn)lash/內(nèi)存配置的型號(hào)選型的原則是預(yù)留至少30%的存儲(chǔ)余量別把芯片塞到95%滿否則后續(xù)更新語(yǔ)音包、加指令都很難受。3.2 硬件接入與語(yǔ)音包制作從原理圖到燒錄硬件連接上語(yǔ)音芯片放在主控MCU旁邊兩者通過(guò)UART通信。語(yǔ)音芯片負(fù)責(zé)麥克風(fēng)采集、喚醒、識(shí)別輸出結(jié)構(gòu)化的指令幀主控MCU負(fù)責(zé)業(yè)務(wù)邏輯比如控制繼電器、調(diào)節(jié)PWM亮度、驅(qū)動(dòng)LED反饋。這樣分工的好處是語(yǔ)音部分和業(yè)務(wù)部分解耦主控壞了不影響語(yǔ)音芯片獨(dú)立工作反過(guò)來(lái)也方便調(diào)試。UART協(xié)議可以設(shè)計(jì)得盡量簡(jiǎn)單。下面是我這個(gè)項(xiàng)目里實(shí)際用的幀格式參考每一幀代表一次識(shí)別結(jié)果// 語(yǔ)音識(shí)別結(jié)果幀自定義協(xié)議 typedef struct { uint8_t head[2]; // 0xAA 0x55 uint8_t frame_len; // 幀長(zhǎng)度 uint8_t cmd_id; // 指令I(lǐng)D如 0x01 開(kāi)燈0x02 關(guān)燈 uint8_t slot_num; // 槽位數(shù)量 uint8_t slot_value[4]; // 槽位值如亮度百分比 uint8_t wake_score; // 喚醒置信度 uint8_t checksum; // 校驗(yàn)和 } voice_cmd_frame_t;協(xié)議不復(fù)雜但[注意]一定加上幀頭和校驗(yàn)和。離線語(yǔ)音芯片在復(fù)雜電磁環(huán)境下偶爾會(huì)輸出錯(cuò)的識(shí)別結(jié)果如果沒(méi)有校驗(yàn)主控可能把壞幀當(dāng)成有效指令執(zhí)行那個(gè)體驗(yàn)會(huì)非常糟糕。我一般還會(huì)在協(xié)議里加一個(gè)“場(chǎng)景ID”字段用于區(qū)分同一塊面板控制多路燈的場(chǎng)景。語(yǔ)音包的制作流程云知聲提供了一套工具鏈基本步驟是在電腦端配置指令詞表、選擇喚醒詞、可以導(dǎo)入一些自定義的槽位語(yǔ)法然后生成離線的語(yǔ)音識(shí)別資源包最后通過(guò)燒錄工具燒進(jìn)語(yǔ)音芯片外掛的Flash里。這個(gè)語(yǔ)音包和固件是分開(kāi)管理的好處是量產(chǎn)時(shí)語(yǔ)音包可以單獨(dú)升級(jí)、單獨(dú)燒錄不用動(dòng)主控程序。有一個(gè)很容易翻車的細(xì)節(jié)語(yǔ)音包燒錄完成后一定要做一次“讀回校驗(yàn)”。我遇到過(guò)生成工具顯示燒錄成功但實(shí)際芯片讀回的模型數(shù)據(jù)是壞的導(dǎo)致設(shè)備完全無(wú)法喚醒。后來(lái)我把燒錄后的校驗(yàn)步驟寫(xiě)進(jìn)了產(chǎn)測(cè)軟件里每次燒完都強(qiáng)制讀回比對(duì)哈希值問(wèn)題就再?zèng)]出現(xiàn)過(guò)。3.3 聯(lián)調(diào)階段怎么驗(yàn)收喚醒率、誤喚醒與用戶反饋軟硬件都通了接下來(lái)是最磨人也最有意思的聯(lián)調(diào)階段。我自己會(huì)按“實(shí)驗(yàn)室定量測(cè)試家庭場(chǎng)景實(shí)測(cè)眾測(cè)盲評(píng)”三個(gè)層次做驗(yàn)收。實(shí)驗(yàn)室定量測(cè)試要在一個(gè)相對(duì)安靜的環(huán)境里測(cè)喚醒率和識(shí)別率。測(cè)試距離從1米、3米、5米分別錄每檔測(cè)至少50次統(tǒng)計(jì)喚醒率和關(guān)鍵指令的識(shí)別率。同時(shí)要記錄誤喚醒情況比如播放電視聲音、放音樂(lè)、幾個(gè)人同時(shí)說(shuō)話看設(shè)備會(huì)不會(huì)突然冒出來(lái)回應(yīng)。如果你發(fā)現(xiàn)喚醒率很高但誤喚醒也高這不叫做得好這叫做“耳朵太好使了”用戶會(huì)被嚇到的。家庭場(chǎng)景實(shí)測(cè)我會(huì)把設(shè)備裝到自己家里或者朋友家里用真實(shí)的生活噪聲去測(cè)。這個(gè)階段找出的問(wèn)題往往和實(shí)驗(yàn)室不一樣比如廚房的排風(fēng)扇會(huì)帶來(lái)周期性噪聲、電視機(jī)的背景人聲、還有家里寵物弄出的動(dòng)靜。有一回就是設(shè)備放在客廳電視里有人喊了一聲“小云小云”面板居然真的亮了查了半天發(fā)現(xiàn)是電視音量太大喚醒詞被誤識(shí)別了。解決方案是在產(chǎn)品端把響應(yīng)反饋?zhàn)龅酶酥仆瑫r(shí)稍微調(diào)高喚醒閾值讓設(shè)備“不那么敏感”。眾測(cè)盲評(píng)是我比較推薦的一個(gè)環(huán)節(jié)找一些對(duì)這個(gè)產(chǎn)品完全不了解的普通用戶讓他們自然說(shuō)話去操作設(shè)備。你會(huì)很驚訝地發(fā)現(xiàn)用戶不會(huì)按照你預(yù)設(shè)的指令詞說(shuō)話他們會(huì)說(shuō)“把燈開(kāi)開(kāi)”“亮一點(diǎn)”“太暗了”這類沒(méi)寫(xiě)進(jìn)詞表的表達(dá)這時(shí)候就需要回到工具鏈里把高頻說(shuō)法補(bǔ)進(jìn)指令詞表再做一輪語(yǔ)音包迭代。語(yǔ)音交互產(chǎn)品的體驗(yàn)好壞往往就是靠這一輪一輪的補(bǔ)充收斂出來(lái)的。4. 量產(chǎn)階段的常見(jiàn)問(wèn)題與排查技巧4.1 遠(yuǎn)場(chǎng)識(shí)別差的共性原因逐個(gè)排查如果你在測(cè)試中發(fā)現(xiàn)設(shè)備“離遠(yuǎn)了就聽(tīng)不懂”先別急著懷疑芯片。根據(jù)我接觸過(guò)的案例絕大多數(shù)遠(yuǎn)場(chǎng)識(shí)別差的問(wèn)題出在聲學(xué)結(jié)構(gòu)上。麥克風(fēng)開(kāi)孔是不是被殼體遮擋了硅麥的進(jìn)音孔有沒(méi)有對(duì)準(zhǔn)外殼的開(kāi)孔麥克風(fēng)四周有沒(méi)有做好密封導(dǎo)致聲音從麥克風(fēng)背面繞進(jìn)來(lái)形成反相抵消這里有一個(gè)經(jīng)驗(yàn)麥克風(fēng)盡量遠(yuǎn)離結(jié)構(gòu)縫隙和揚(yáng)聲器開(kāi)孔。理想情況是每個(gè)麥克風(fēng)都獨(dú)立設(shè)計(jì)一個(gè)密閉的前腔前腔開(kāi)孔打在外殼正面孔徑控制在1mm到2mm之間開(kāi)孔處用透聲性能好的防塵網(wǎng)布做保護(hù)。如果防塵網(wǎng)布選得太厚太密高頻會(huì)衰減嚴(yán)重人聲的“嘶嘶”聲會(huì)變得模糊識(shí)別率明顯下降選太薄又擋不住灰塵和飛蟲(chóng)。這個(gè)平衡要在打樣階段多試幾種材料不要想當(dāng)然。4.2 誤喚醒和指令誤識(shí)別怎么調(diào)閾值才是對(duì)的誤喚醒這個(gè)問(wèn)題我專門拎出來(lái)說(shuō)因?yàn)樗诹慨a(chǎn)返修里占比極高。用戶最煩的不是“喊了沒(méi)反應(yīng)”而是“沒(méi)喊它自己回答”尤其大半夜設(shè)備突然來(lái)一句“哎我在”體驗(yàn)非常驚悚。碰到誤喚醒常規(guī)思路是調(diào)高喚醒閾值或降低麥克風(fēng)靈敏度。但要注意這里的閾值不是一個(gè)簡(jiǎn)單的固定數(shù)值應(yīng)該做成“動(dòng)態(tài)門限”。安靜環(huán)境用比較高的門限噪聲環(huán)境下自動(dòng)拉低門限以保持喚醒率。蜂鳥(niǎo)方案提供了置信度分?jǐn)?shù)輸出你可以在主控端再套一層策略比如連續(xù)兩次識(shí)別到喚醒詞才真正激活或者配合人體傳感器做二次確認(rèn)。這些都是低成本但有效的產(chǎn)品化手段。還有一個(gè)常被忽略的因素是揚(yáng)聲器自身的聲音。帶揚(yáng)聲器的設(shè)備每次播放提示音時(shí)MIC都會(huì)收到自己的回聲。如果AEC沒(méi)生效或者參考信號(hào)沒(méi)接對(duì)設(shè)備就會(huì)在播放完提示音之后緊接著“聽(tīng)錯(cuò)”一些指令。排查方法也很簡(jiǎn)單把揚(yáng)聲器用軟件靜音對(duì)比試驗(yàn)說(shuō)話如果靜音后誤識(shí)別明顯減少那問(wèn)題基本就鎖定在AEC鏈路上。4.3 串口通信異常與低功耗場(chǎng)景的坑量產(chǎn)出貨階段我遇到過(guò)最多的硬件類問(wèn)題是串口通信異常?,F(xiàn)象是設(shè)備偶發(fā)地不響應(yīng)指令重啟后恢復(fù)。最開(kāi)始懷疑是語(yǔ)音芯片死機(jī)后來(lái)用串口抓數(shù)據(jù)發(fā)現(xiàn)是主控和語(yǔ)音芯片之間的電平不匹配導(dǎo)致的。語(yǔ)音芯片是1.8V IO主控是3.3V IO中間只加了簡(jiǎn)單的電阻分壓上升沿太慢高速通信時(shí)偶發(fā)丟字節(jié)。改成一側(cè)加電平轉(zhuǎn)換芯片之后問(wèn)題徹底消失。低功耗設(shè)備還要特別注意喚醒后的“握手時(shí)序”。電池供電的門鎖類產(chǎn)品通常在待機(jī)時(shí)讓語(yǔ)音芯片保持監(jiān)聽(tīng)其他外設(shè)都睡死。用戶喊喚醒詞后語(yǔ)音芯片通過(guò)一個(gè)GPIO中斷把主控叫醒但主控從睡眠到準(zhǔn)備好接收數(shù)據(jù)需要時(shí)間。如果語(yǔ)音芯片不等主控準(zhǔn)備好就開(kāi)始發(fā)識(shí)別結(jié)果前幾個(gè)字節(jié)就會(huì)丟失。解決辦法是在協(xié)議里加一條主控向語(yǔ)音芯片發(fā)送的“我準(zhǔn)備好了”就緒握手語(yǔ)音芯片收到后再輸出識(shí)別結(jié)果。這個(gè)細(xì)節(jié)做不好用戶會(huì)覺(jué)得設(shè)備“反應(yīng)慢半拍”實(shí)際上不是語(yǔ)音慢是兩邊消息沒(méi)對(duì)齊。下面把我在多個(gè)項(xiàng)目里積累的常見(jiàn)問(wèn)題速查表整理出來(lái)方便大家直接對(duì)號(hào)入座現(xiàn)象可能原因排查思路解決方向遠(yuǎn)場(chǎng)喚醒率低麥克風(fēng)開(kāi)孔被遮擋、前腔泄漏檢查結(jié)構(gòu)開(kāi)孔、拆殼裸測(cè)對(duì)比改善麥克風(fēng)密封與進(jìn)音孔設(shè)計(jì)播放提示音時(shí)誤喚醒AEC未生效或參考信號(hào)未接軟件靜音對(duì)比測(cè)試補(bǔ)齊AEC參考通路待機(jī)掉電快三級(jí)喚醒策略未生效/MCU被頻繁喚醒測(cè)量各狀態(tài)電流調(diào)整VAD門限、減少中斷誤觸發(fā)偶發(fā)不響應(yīng)指令串口電平不匹配或壞幀邏輯分析儀抓波形、加校驗(yàn)電平轉(zhuǎn)換、協(xié)議加幀頭校驗(yàn)夜間自動(dòng)喚醒/誤識(shí)別環(huán)境動(dòng)態(tài)門限設(shè)置不當(dāng)觀察置信度分?jǐn)?shù)分布調(diào)高喚醒閾值二次確認(rèn)策略語(yǔ)音包燒錄后無(wú)法喚醒Flash存儲(chǔ)校驗(yàn)失敗讀回比對(duì)哈希值產(chǎn)測(cè)強(qiáng)制讀回校驗(yàn)最后再分享一個(gè)我個(gè)人的經(jīng)驗(yàn)做語(yǔ)音類產(chǎn)品不要把所有交互都?jí)涸谡Z(yǔ)音上。離線語(yǔ)音最大的價(jià)值是提供一種“更低門檻”的入口而不是替代所有操作方式。物理按鍵、遙控器、手機(jī)App這些都應(yīng)該保留語(yǔ)音只是最自然的那個(gè)補(bǔ)充。在蜂鳥(niǎo)系列上做產(chǎn)品設(shè)計(jì)時(shí)我一直堅(jiān)持一個(gè)原則語(yǔ)音喚醒后如果用戶猶豫了設(shè)備要能自己進(jìn)入待機(jī)絕不反復(fù)追問(wèn)盡量減少存在感。好的離線語(yǔ)音體驗(yàn)不是“設(shè)備多能聊”而是“該聽(tīng)懂的時(shí)候一次聽(tīng)懂不該說(shuō)話的時(shí)候絕對(duì)閉嘴”。這個(gè)度拿捏好了產(chǎn)品口碑自然就出來(lái)了。