電子語音玩具設(shè)計(jì)中語音、軟件、功耗等技術(shù)的綜合考慮

趙大有 2002/10/28

   玩具設(shè)計(jì)看似簡單,但是其背后真實(shí)的技術(shù)背景并不簡單,要綜合考慮軟件和硬件方面的技術(shù)設(shè)計(jì)以及語音處理技術(shù),同時(shí)還要選擇合適的微控制器及相關(guān)外圍器件,從而實(shí)現(xiàn)低成本和低功耗設(shè)計(jì)。

  今天孩子們的玩具實(shí)際上屬于一種嵌入式系統(tǒng),本文跳過玩具產(chǎn)品設(shè)計(jì)項(xiàng)目中的"概念設(shè)計(jì)"階段,直接從項(xiàng)目的工程設(shè)計(jì)開始討論,并且假定項(xiàng)目的設(shè)計(jì)規(guī)格說明書(設(shè)計(jì)指標(biāo))已經(jīng)完成。這些設(shè)計(jì)規(guī)格說明書通常是以游戲模式流程圖的方式來詳細(xì)地描述玩具的行為。我們設(shè)想的洋娃娃游戲模式如下:

常規(guī)模式:

  A. 玩具是嬰兒洋娃娃,其腰部配備一個(gè)常態(tài)為斷開的開關(guān)(該開關(guān)用來檢測擁抱洋娃娃的動(dòng)作),還有一個(gè)重力開關(guān)(該開關(guān)用來檢測洋娃娃是站立還是躺下姿勢)。 B. 洋娃娃站立時(shí)重力開關(guān)斷開。 C. 洋娃娃站立時(shí),如果腰部開關(guān)被按下,洋娃娃將播放下列聲音中的一種:哈哈地笑、長時(shí)間地大笑、或者以愉快的聲調(diào)說話。每一次按下洋娃娃的腰部開關(guān),洋娃娃都將循環(huán)地播放上述聲音中的一種。 D. 洋娃娃躺下時(shí),如果腰部開關(guān)被按下,那么洋娃娃會發(fā)出哭聲,然后轉(zhuǎn)為無聲。E. 如果將洋娃娃的姿勢由躺下轉(zhuǎn)為站立,洋娃娃就會打哈欠。 F. 如果將洋娃娃的姿勢由站立轉(zhuǎn)為躺下,洋娃娃就會發(fā)出簡短的鼾聲,然后轉(zhuǎn)為無聲。

語音控制模式:

  A. 洋娃娃站立時(shí),如果超過2分鐘沒有外界信息輸入,他會說:"好寂寞呀,怎么沒人陪我玩"B.在這個(gè)時(shí)候,如果還沒有信息輸入,洋娃娃將播放下列聲音中的一種:哈哈地笑、長時(shí)間地大笑、或者以愉快的聲調(diào)說話。C. 洋娃娃站立時(shí),你可以和他進(jìn)行對話,如"你多大了?"、"你叫什么?"甚至可以和你對詩。D.如果給洋娃娃加上機(jī)械動(dòng)作,我們同樣可以用語音來控制它的動(dòng)作,比如你可以叫他跳舞、唱歌、行走等。

聲音處理


  

工程設(shè)計(jì)的第一步是記錄聲音并且將聲音信息傳送給芯片開發(fā)系統(tǒng)。盡管以后還要進(jìn)行下采樣(downsapling),但是對聲音信號進(jìn)行高質(zhì)量的采樣仍然十分重要。從聲學(xué)意義上講,該記錄過程通常都應(yīng)該在絕對安靜的錄音棚環(huán)境下進(jìn)行,要采用44KHz 16位采樣方式錄制,并直接將聲音信號記錄在計(jì)算機(jī)硬盤上。通常情況下應(yīng)該聘請語音專業(yè)人員來從事錄制工作,而不是由項(xiàng)目工程師或辦公人員來錄制。每一個(gè)字詞或者短語最好錄音幾次,這樣就有選擇的余地。

  對于那些需要從電子樂器中獲取音樂的工程項(xiàng)目來說,更可取的方法是將藝術(shù)家的演奏效果記錄成MIDI格式。MIDI格式可以修改演奏的樂器以及播放順序,并且在必要的時(shí)候(如根據(jù)硬件進(jìn)一步調(diào)整語音性能)去掉多調(diào)(polyphonic)成分。

  有時(shí),音頻工程師還必須通過合并冗余的聲音信號來實(shí)現(xiàn)被采樣聲音的分解以壓縮ROM空間。一個(gè)典型實(shí)例就是從1到20之間計(jì)數(shù)的語音玩具。在這樣的玩具設(shè)計(jì)中,并不需要為每一個(gè)數(shù)字都單獨(dú)進(jìn)行語音采樣和錄音,語音采樣通常從數(shù)字1開始到12,然后是數(shù)字20,接下來是音節(jié)"thir-"(數(shù)字13)、"fif-"(數(shù)字15)和"eigh-"(數(shù)字18),除此之外,還有后綴"-teen"。請注意,"four"、"six"、"seven"和"nine"等語音信號既可以表示這些數(shù)字所代表的語音,也可作為音節(jié)跟語音后綴"teen"結(jié)合表示大于10的數(shù)字的語音。

  對語音信號進(jìn)行分解的程度取決于可用存儲空間的大小?梢試L試將數(shù)字31分解成"thir-"(并且這個(gè)音節(jié)還可以用于數(shù)字13和30)、"-ty"(這個(gè)音節(jié)可以用于所有帶"-ty"的數(shù)字中)以及"one"。語音的分解費(fèi)時(shí)費(fèi)力,要拆分和連接音節(jié),增強(qiáng)爆破音,測試連接音的不同組合以確保連接音的聲效像一個(gè)連貫字。有時(shí)為了得到僅僅幾個(gè)詞的比較理想的聲效,可能需要幾個(gè)星期時(shí)間,所以如果沒有必要應(yīng)該盡量避免更進(jìn)一步的分解。

  語音分解的一個(gè)極端例子是設(shè)計(jì)類似于SC-01或SPO256A-AL2這樣的音位變體語音合成芯片。芯片中存儲了(實(shí)際上是合成)一個(gè)語音片段庫,通過這個(gè)語音庫你可以組合出各種各樣的詞。舉例來說,你可以從語音片段"d"、"ah"和"g"來構(gòu)造出"dog"。然而,要保證這種合成的聲效聽起來非常接近于實(shí)際情況就十分困難。

微控制器的選擇

  在玩具的生產(chǎn)制造中,成本控制是一個(gè)重要的考慮因素,所以要盡量選用廉價(jià)的控制芯片。這樣一來幾乎所有帶語音的玩具都用4位語音微控制器芯片設(shè)計(jì),這些芯片都包括簡單的控制器內(nèi)核、輸入和輸出管腳、寄存器以及串行訪問的ROM,在該ROM中存入一段小程序和大量語音采樣信號。

  早期芯片采用簡單的4位PCM編碼技術(shù),能在很短的ROM空間內(nèi)存儲很長的語音編碼信號。最新的芯片都采用4位或5位ADPCM技術(shù),這是一種預(yù)測編碼系統(tǒng),它利用了模擬信號數(shù)字化過程中連續(xù)采樣之間的相關(guān)性。從算法上來說,每一個(gè)采樣值結(jié)合解碼器當(dāng)前的輸出狀態(tài)生成下一個(gè)輸出狀態(tài)。利用ADPCM技術(shù),一個(gè)5位輸入數(shù)據(jù)流可以驅(qū)動(dòng)一個(gè)8位DAC,而且可以產(chǎn)生非常好的聲效。盡管這種壓縮系統(tǒng)并不產(chǎn)生原始信號的字節(jié)流,然而這對于語音和音樂播放來說已經(jīng)足夠了,同8位PCM編碼方式相比,可以節(jié)省37.5%的ROM空間。

  許多玩具采用的外部電路都非常簡單,通常包括一個(gè)電池、一個(gè)用來設(shè)定芯片時(shí)基的外部電阻、一個(gè)小喇叭或一個(gè)用于驅(qū)動(dòng)喇叭的晶體管。這些芯片的價(jià)格如何呢?一般來說,可以容納兩分鐘音頻信號的掩膜微控制器裸片,量產(chǎn)條件下成本大約為每片1.20美元。絕大多數(shù)的玩具都使用更小的芯片,價(jià)格大約在0.15美元到0.30美元。本文討論的應(yīng)用選擇W583S10,在華邦公司推薦的6.4kHz采樣頻率下,該芯片僅能存儲10秒的語音數(shù)據(jù),如圖1所示。注意,電阻R1的值取決于采樣頻率。通常情況下,設(shè)計(jì)工程師會使用一個(gè)電阻替換盒來試驗(yàn)其它阻值。

  上述芯片的指令集并不豐富,其指令集通常包括對寄存器加載常量的指令、寄存器增/減指令、設(shè)置輸出管腳狀態(tài)指令、無條件跳轉(zhuǎn)指令、寄存器無條件跳轉(zhuǎn)指令以及根據(jù)輸入管腳狀態(tài)的條件跳轉(zhuǎn)指令。芯片中實(shí)現(xiàn)子程序的唯一方法是在一個(gè)寄存器中存儲一個(gè)返回地址。在對器件編程時(shí),要大量使用GOTO語句,對于一些較大的項(xiàng)目來說,程序中會出現(xiàn)許多冗余代碼。

語音識別(控制)系統(tǒng)的選擇

  語音識別系統(tǒng)的基本流程如圖1所示


圖1 語音識別系統(tǒng)的基本流程

  語音信號輸入后首先經(jīng)過濾波器,去除干擾及可能造成混淆的成分,然后由前端處理模塊提取語音識別所需的特征參數(shù)。當(dāng)前語音識別所用的特征參數(shù)主要有兩種類型:線性預(yù)測倒譜系數(shù)(Linear Prediction Cepstrum Coefficient, LPCC)和MEL頻標(biāo)倒譜系數(shù)(Mel Frequency Cepstrum Coefficient, MFCC)。

  LPCC系數(shù)主要是模擬人的發(fā)聲模型,未考慮人耳的聽覺特性。它對元音有較好的描述能力,對輔音描述能力及抗噪性能比較差,而其優(yōu)點(diǎn)為計(jì)算量小,易于實(shí)現(xiàn)。

  MFCC系數(shù)則考慮到了人耳的聽覺特性,具有較好的識別性能。但是,由于它需要進(jìn)行快速傅立葉變換(Fast Fourier Transform Algorithm, FFT),將語音信號由時(shí)域變換到頻域上處理,因此其計(jì)算量和計(jì)算精度要求高,必須在DSP上完成。

  在此,我們選擇準(zhǔn)確率最高、功能最全、價(jià)格最適宜的Sensory語音識別芯片(RSC164或RSC364)。

RSC-364

  由美國Sensory Integrated Circuit公司開發(fā),2000年開始生產(chǎn),是一顆為消費(fèi)類電子產(chǎn)品應(yīng)用的低價(jià)位的語音識別專用芯片,其結(jié)構(gòu)圖如圖2所示。

  RSC-364是一片以8位MCU為核心的CMOS器件,片上還集成了ROM、RAM、A/D、


  D/A、前端放大器及功率放大器件。因此,可以說它是一顆片上系統(tǒng)(SOC),只要加上很少的外圍元件就可以組成一個(gè)語音識別系統(tǒng)。其運(yùn)算能力為4MIPS(Million Instructions Per Second),為了提高運(yùn)算能力,片上包括了一個(gè)24位×24位的乘法器。

  RSC-364使用預(yù)先學(xué)習(xí)好的人工神經(jīng)網(wǎng)絡(luò)進(jìn)行非特定人語音識別,不需要經(jīng)過訓(xùn)練就可以識別"Yes"、"No"、"Ok"等簡單語句,其Data Book上稱其識別率為97%。此外,RSC-364可以識別特定人、孤立詞命令語句,約60條左右,其Data Book上稱其識別率為99%以上。

  RSC-364還具有5~15kb/s的語音合成,其語音合成由Sensory專門設(shè)計(jì),其音質(zhì)較好。它還具有改進(jìn)的ADPCM(自適應(yīng)差分脈沖調(diào)制)語音編解碼功能,用作語音回放。

降低功耗

  功耗是設(shè)計(jì)中另一個(gè)非常重要的考慮因素。絕大多數(shù)配備語音功能的玩具從工廠郵寄出去之前都預(yù)先安裝了電池,而且都希望擺放在貨架上的玩具內(nèi)的電池經(jīng)久耐用。許多玩具都沒有電源開關(guān),并且絕大多數(shù)的玩具還提供一種"試用"模式,所以商店里所有的顧客都可能按一下某一個(gè)按鈕來看一看或聽一聽玩具會做什么樣的反應(yīng)。因此,關(guān)閉芯片中所有不需要使用的電路就至關(guān)重要,而且必須確保玩具在演奏完所有的語音序列之后應(yīng)該盡可能完全將其功耗降下來。

  功耗方面一個(gè)非常重要的問題在于ADPCM編碼的使用。如果在演奏完一段聲音之后簡單地停止該微控制器芯片,輸出DAC會出現(xiàn)一個(gè)非零的輸出電壓(大約接近最大電壓值的一半)。如果在每一個(gè)采樣數(shù)據(jù)之后關(guān)閉DAC,那會發(fā)出非常討厭的滴答聲。考慮到這些原因,芯片制造廠商提供一段匯編程序來實(shí)現(xiàn)DAC輸出電壓值從0V到半峰值的線性變化,或者半峰值到0V線性變化。當(dāng)一段采樣數(shù)據(jù)播出之后,可以調(diào)用該宏來實(shí)現(xiàn)DAC輸出逐漸減弱到0V;當(dāng)重新開始演奏一段新的采樣數(shù)據(jù)時(shí),可以調(diào)用該宏將DAC輸出數(shù)據(jù)逐漸增大到半峰值電壓。通過這種方法可以有效地降低功耗。

  為了達(dá)到延長電池壽命的目的,程序大量采用中斷驅(qū)動(dòng)的方式。一旦系統(tǒng)加電啟動(dòng),如果程序允許輸入管腳上的中斷信號有效,對輸入管腳上的每一個(gè)事件(對應(yīng)一個(gè)中斷),微控制器芯片都會在一個(gè)預(yù)先定義好的位置開始執(zhí)行。而一旦遇到"STOP"指令時(shí),微控制器的功耗就會完全降下來。

軟件代碼

  一個(gè)實(shí)際玩具的行為通?赡鼙容^復(fù)雜。例如,我們更喜歡在打鼾或者是打哈欠語音之前插入半秒鐘的停頓,這樣會使得聲效的感覺更逼真。實(shí)際應(yīng)用中,可能希望在播放聲音信號時(shí)讓中斷信號無效,以便該玩具在識別進(jìn)一步的輸入時(shí)能夠完成聲音信號的播放。有關(guān)這些問題的最佳解決方案就是創(chuàng)建和測試這些代碼,并且需要豐富經(jīng)驗(yàn)以及個(gè)人的判斷。另外,也可采用"試用"模式,在這種模式下洋娃娃僅僅會對按下腰部開關(guān)的動(dòng)作做出響應(yīng)(這樣可以避免在產(chǎn)品郵寄過程中消耗電池)。通常是在洋娃娃的一對觸點(diǎn)之間插入一根塑料抽條來隔離接觸點(diǎn),除非購買該產(chǎn)品的最終用戶去掉了這根塑料條,重力開關(guān)將始終無效。

聲效問題值得關(guān)注

  如果這些代碼的執(zhí)行效果令人滿意,就可以開始對這些聲音文件進(jìn)行壓縮和優(yōu)化。壓縮過程包括低通和/或高通濾波,消除那些不需要的回聲并且改進(jìn)聲效。細(xì)心的設(shè)計(jì)工程師可能會注意到爆破音或摩擦音的處理,以便將這些聲音容易地區(qū)別開來,這對于拼寫類游戲和教育類產(chǎn)品來說很有必要。而對于嘴唇運(yùn)動(dòng)與語音同步的玩具,嘴形控制信號會同時(shí)嵌入到聲音文件中。

  要對16位44.1kHz的WAV文件進(jìn)行濾波和編輯,然后對這些文件進(jìn)行下采樣以達(dá)到最終芯片所要求的采樣速率(通常情況下為6kHz到8kHz內(nèi))。利用芯片廠商的工具鏈可以將輸入的文件轉(zhuǎn)換為微控制器芯片所采用的ADPCM格式。選擇精確的采樣率可以最大限度地利用ROM空間。微控制器和ROM空間選擇之后,在保證編譯器能將全部的聲音信號存入到芯片的條件下,要選用最高的采樣頻率。

  就編譯器而言,不要指望為價(jià)值10美分的芯片提供一個(gè)高品質(zhì)的開發(fā)系統(tǒng)。開發(fā)系統(tǒng)很普通,絕大多數(shù)廠商提供的軟件可能還非常糟糕,可能存在大量奇怪的問題和難以解釋的行為。在編譯過程中可能還會產(chǎn)生很多問題,例如:某個(gè)聲音文件被拒絕處理,在對其長度作稍微的刪減或增加后又能執(zhí)行了;而代碼間空格太多或太少會產(chǎn)生錯(cuò)誤報(bào)表。

  該階段的測試最好用具備真實(shí)外形的玩具樣品進(jìn)行。在可能的情況下,最好使用設(shè)計(jì)所指定的喇叭來測量,因?yàn)槔鹊念愋蛯τ谧罱K的聲效有很大的影響。廉價(jià)的玩具語音芯片也可以驅(qū)動(dòng)設(shè)計(jì)很好的優(yōu)質(zhì)喇叭并產(chǎn)生高保真度的聲音。喇叭的類型、大小和安裝位置對最終產(chǎn)品聲效有很大影響,并直接影響到產(chǎn)品的銷售。

  至今為止,所有的開發(fā)都在芯片商提供的開發(fā)板上完成,并采用閃爍存儲器來存儲程序。最終的產(chǎn)品實(shí)際上都采用一個(gè)板上掩膜ROM,該裸片直接邦定在PCB上,然后由一小團(tuán)樹脂材料封裝起來。

本文總結(jié)

  新玩具產(chǎn)品要得到公司主管的欣賞并不容易,抱怨通常會很多,例如會笑的玩具聽起來像"惡魔的聲音"(實(shí)際上就存在這樣的訴訟案例);詼諧的玩具又"太低級趣味";有的玩具很容易引起驚慌,這是因?yàn)橥婢咄话l(fā)大聲或猛然動(dòng)作的緣故;馬達(dá)或齒輪噪聲太大等。要解決這些問題,工程師還要進(jìn)行一系列的調(diào)整。

深圳捷通公司供稿 CTI論壇編輯



相關(guān)鏈接:
捷通82語音識別模塊產(chǎn)品說明書 2003-06-09
語音合成芯片情況介紹和產(chǎn)品設(shè)想 2003-05-06
數(shù)字可視復(fù)讀機(jī)方案 2003-04-09
語音識別控制電話機(jī)方案 2003-04-04
智能早教機(jī)方案 2003-04-03

分類信息:  語音合成TTS_與_語音識別ASR     技術(shù)_語音合成_文摘   技術(shù)_語音識別_文摘