王青云, 梁瑞宇,, 趙 力, 馮月芹, 包永強(qiáng)
(1.南京工程學(xué)院 信息與通信工程學(xué)院,南京 211167; 2.東南大學(xué) 信息科學(xué)與工程學(xué)院,南京 210096)
伴隨人工智能領(lǐng)域的突破性發(fā)展,語音信號處理技術(shù)愈來愈受到人們關(guān)注[1]。語音技術(shù)走進(jìn)通信、機(jī)器人、智能家居、健康醫(yī)療等各個領(lǐng)域,百度小度、蘋果Siri、微軟小娜幾位語音機(jī)器人詼諧機(jī)智的對話引爆世界[2]。為了緊跟行業(yè)發(fā)展方向,眾多高校在本科生和研究生教學(xué)階段開設(shè)了語音信號處理類課程[3]。但是這類課程在教學(xué)實施中存在一些難點。由于專業(yè)性強(qiáng)、對數(shù)學(xué)和信息處理基礎(chǔ)要求高、新技術(shù)層出不窮且知識更新速度快,同時高校授課學(xué)時普遍緊張,導(dǎo)致課程體系、授課內(nèi)容和深度難以把握,理論與實際應(yīng)用容易脫節(jié)。
實驗是語音信號處理課程重要的教學(xué)環(huán)節(jié)。以往該類實驗往往采用Matlab平臺,以離線處理方式進(jìn)行[4]。楊毅等[5]研究了基于Matlab的語音信號處理系列實驗開設(shè)方法,通過基礎(chǔ)實驗和自主實驗培養(yǎng)學(xué)生對語音信號處理領(lǐng)域的科研興趣與動手能力。劉衛(wèi)東等[6]探索了基于Matlab的語音信號處理實驗教學(xué)輔助軟件的設(shè)計。還有一些針對機(jī)器人語音處理應(yīng)用研究了相關(guān)的教學(xué)實驗方法[7]。
對本科生及初學(xué)者而言,Matlab平臺簡單易學(xué)。但是,對于研究生或其他專業(yè)人員而言,Matlab平臺和實際應(yīng)用的開發(fā)系統(tǒng)相差甚遠(yuǎn)。離線處理和實際在線語音處理所關(guān)注的性能指標(biāo)也完全不同。這種實驗方式無法評估實驗程序在真實系統(tǒng)中的效能、時延和資源占用情況。為了解決上述問題,需要研究基于嵌入式實時語音處理的教學(xué)方法與實驗平臺,但由于該領(lǐng)域的教學(xué)涉及到的專業(yè)知識面廣,實驗方法復(fù)雜,目前所提出的可行性方案較少[8-9]。
本文研究實時語音信號處理的教學(xué)方法與實驗方案,提出基于嵌入式硬件平臺、借助嵌入式Linux系統(tǒng)聲音框架(Advanced Linux Sound Architecture,ALSA)[10]來實現(xiàn)實時語音信號處理單元實驗及綜合性實驗的方法。為更好地介紹提出的實驗教學(xué)方法,本文以動態(tài)語音情感識別為例,介紹了系統(tǒng)的硬件構(gòu)成、嵌入式語音處理框架的移植、面向可視化編碼的語音處理實現(xiàn)以及面向具體應(yīng)用的算法實現(xiàn)。該方法在兼顧基礎(chǔ)知識的前提下兼顧實用性與前沿性,能夠加快授課內(nèi)容與行業(yè)應(yīng)用的接軌,提高學(xué)生的專業(yè)能力和工程能力。
語音信號處理課程的目的是講授語音信號處理的基本理論、基本分析方法,使學(xué)習(xí)者了解本領(lǐng)域中相關(guān)研究熱點,激發(fā)學(xué)習(xí)者對語音處理相關(guān)研究方向中的有關(guān)興趣,為以后開展相關(guān)領(lǐng)域研究打下良好的基礎(chǔ)。因此,在授課內(nèi)容上應(yīng)兼顧基礎(chǔ)性與先進(jìn)性,教學(xué)方法上可結(jié)合集中授課與分組討論等多種方式。具體授課內(nèi)容與階段劃分如下。
(1) 語音信號處理的基礎(chǔ)知識。該部分內(nèi)容包括語音信號的產(chǎn)生、特性、數(shù)學(xué)模型等。教學(xué)方法方面,應(yīng)結(jié)合具體實例講授,快速培養(yǎng)學(xué)生對課程的學(xué)習(xí)興趣,需要時給予一些中英文參考文獻(xiàn),階段性作業(yè)可以為綜述性報告。
(2) 語音信號的分析方法。該部分內(nèi)容包括語音信號的數(shù)字化和預(yù)處理、短時能量分析、短時過零分析、短時相關(guān)分析、短時傅里葉變換、復(fù)倒譜與倒譜分析、線性預(yù)測分析等。本階段學(xué)習(xí)內(nèi)容多,難度大,對數(shù)學(xué)知識要求高。在教學(xué)中,采用“抽象”變“形象”的方法可以加深學(xué)生的理解。如:用彩色語譜圖講解短時傅里葉變換域時頻分析。結(jié)合具體實例講解也可以提高學(xué)生的興趣。
(3) 語音信號處理的典型應(yīng)用。其中語音增強(qiáng)、語音合成和語音識別為重點講授的典型應(yīng)用。在以往的語音領(lǐng)域研究中,這些典型應(yīng)用都涉及很多不同的實現(xiàn)方法。針對不同的授課對象,該部分授課內(nèi)容和方法可以進(jìn)行調(diào)整。針對本科生授課對象,講解這些典型應(yīng)用的基本方法,每種典型應(yīng)用詳細(xì)介紹1~2種具體算法。針對研究生授課對象,除講解典型應(yīng)用的基本方法外,給予大量的中英文參考文獻(xiàn),要求學(xué)生閱讀并完成文獻(xiàn)綜述,最后安排一次研討課,提交研究報告。
(4) 語音信號處理新領(lǐng)域。該部分內(nèi)容的講授將緊隨行業(yè)發(fā)展方向,伴隨最新研究進(jìn)展進(jìn)行及時調(diào)整。除語音隱藏之隱秘通話內(nèi)容外,隨著人工智能領(lǐng)域的飛速發(fā)展,語音機(jī)器人得到廣泛關(guān)注。在語音機(jī)器人研究中,情感語音機(jī)器人又是最前沿的研究熱點。語音情感識別和情感語音生成是本階段授課重點講授的內(nèi)容之一。該階段學(xué)習(xí)完成后,可以布置大作業(yè),要求學(xué)生廣泛收集本領(lǐng)域的最新研究進(jìn)展,提交進(jìn)展報告或PPT,分組進(jìn)行研討,開拓學(xué)生視野,指出未來的研究方向和研究方法。
針對實時語音信號處理實驗要求,本方案構(gòu)建嵌入式實時語音信號處理實驗平臺,采用C語言進(jìn)行程序設(shè)計,和傳統(tǒng)的Matlab實驗平臺相比,具有如下特點:① 更接近實際應(yīng)用系統(tǒng),強(qiáng)化學(xué)生的工程能力,提高設(shè)計水平;② 能夠以實時方式進(jìn)行語音信號處理算法的在線調(diào)試;③ 便于評估算法的計算量、延時、存儲容量等性能指標(biāo),可以為算法的硬件化提供參考。
嵌入式實時語音信號處理實驗平臺框圖如圖1所示。
圖1 嵌入式實時語音信號處理實驗平臺框圖
嵌入式語音信號處理實驗平臺主芯片采用ARM Cortex-A8微處理器Samsung S5PV210。該微處理器具有豐富的外設(shè)接口,可以滿足各類應(yīng)用需求。系統(tǒng)主頻1 GHz,可以直接針對硬件進(jìn)行裸機(jī)程序編程,也可以安裝Linux操作系統(tǒng)或Android系統(tǒng)進(jìn)行驅(qū)動代碼或應(yīng)用程序編程。
4路麥克風(fēng)輸入語音信號經(jīng)過調(diào)理電路后輸入2塊WM8960編解碼芯片中。WM8960是24位低功耗、高質(zhì)量的立體聲編解碼器,內(nèi)置有麥克風(fēng)接口和立體聲耳機(jī)驅(qū)動器以及立體聲24 bit Σ-Δ模數(shù)轉(zhuǎn)換器(ADC)和數(shù)模轉(zhuǎn)換器(DAC),每塊芯片支持兩路麥克風(fēng)輸入。為了實現(xiàn)聲源定位等麥克風(fēng)陣列信號處理算法,嵌入式實時語音信號處理實驗平臺采用2塊WM8960芯片實現(xiàn)4路麥克風(fēng)信號輸入,通過系統(tǒng)時鐘進(jìn)行數(shù)據(jù)同步。
嵌入式Linux操作系統(tǒng)由于其完全開源的策略得到廣泛應(yīng)用。在嵌入式Linux操作系統(tǒng)中運行語音信號處理程序要使用到高級Linux聲音框架(Advanced Linux Sound Architecture,簡稱ALSA)。ALSA高效支持所有的音頻接口,完全模塊化設(shè)計,支持應(yīng)用開發(fā)庫,為程序設(shè)計提供簡單便捷的設(shè)計方法。使用ALSA編程需要調(diào)用庫函數(shù),其基本結(jié)構(gòu)如圖2所示。在這些庫中,ALSA-LIB為應(yīng)用函數(shù)庫、ALSA-DRIVER為常見音頻芯片的ALSA驅(qū)動代碼、ALSA-FIRMWARE為DSP或ASIC的專用微碼、ALSA-UTILS為ALSA測試工具、ALSA-OSS則提供了用ALSA接口模擬舊的OSS接口的方法。
圖2 ALSA函數(shù)庫基本結(jié)構(gòu)
在嵌入式語音信號處理實驗平臺中,首先需要移植WM8960驅(qū)動函數(shù)。由于ALSA中WM8960驅(qū)動默認(rèn)單聲道,并且只實現(xiàn)了單片WM8960的驅(qū)動,而嵌入式語音信號處理實驗平臺采用4路麥克風(fēng)輸入,需要2片WM8960芯片,每片分左右聲道輸入,故需修改驅(qū)動代碼中的入口和出口函數(shù)WM8960_modinit,WM8960_exit這兩個函數(shù)。
static int __init WM8960_modinit(void) //wm8960模塊初始化函數(shù)
{
int ret;
ret = i2c_add_driver(&WM8960_i2c_driver); /*添加i2c驅(qū)動設(shè)備*/
if (ret != 0)
{
printk(KERN_ERR "Failed to register WM8960 I2C driver: %d ", ret);
}
return ret;
}
static void __exit wm8960_exit(void) //wm8960模塊
退出函數(shù)
{
i2c_del_driver(&wm8960_i2c_driver);
}
驅(qū)動里的配置默認(rèn)采用的是I2C0和I2S0,為了使2塊WM8960芯片都能工作,還需要添加I2C1和I2S1,因此還需要修改內(nèi)核的板級配置文件mach-mini210.c。 mini210_devices[]中已有&s3c_device_i2c0,為使用I2C1,還要添加&s3c_device_i2c1。同樣,在已有的&s5pv210_device_iis0后面添加&s5pv210_device_iis1。最后,修改I2S的初始化函數(shù),成功激活I(lǐng)2S1。
在WM8960驅(qū)動移植成功之后,結(jié)合ALSA-LIB庫函數(shù),可以實現(xiàn)音頻信號的采集與處理編程。其主要使用到的ALSA函數(shù)集包括:SND_readPcm(),SND_writePcm(),SND_P_getFormat(),SND_setParams(),SND_P_saveRead(),snd_open(),snd_close(),snd_playback(),snd_capture()等。
在嵌入式Linux系統(tǒng)中實現(xiàn)具體的應(yīng)用時,常用的方式是采用QT開發(fā)環(huán)境編寫圖形顯示界面并進(jìn)行語音信號處理編程。例如,短時傅里葉函數(shù)short_fa實現(xiàn)代碼如下:
/*Y為輸入序列,H為窗函數(shù),wlen為窗長,nf為幀數(shù),inc為幀移,startPosition為幀位置即第startPosition幀*/
QVector
(constQVector
{
QVector
QVector
QVector
F1 = enframe(Y,H,wlen,nf,inc); //分幀
for(int i = 0 ;i E[i] = F1[startPosition*wlen+i]; } int width = 2 ; //fft長度 while(width width = width*2 ; //取大于窗長的最小2的整數(shù)次方 } std::complex for(int i = 0 ; i f[i].imag() = 0 ; f[i].real() = E[i]; } for(int i = wlen ; i f[i].imag() = 0 ; f[i].real() = 0 ; } fft(f,width); //傅里葉變換 for(int i = 0 ; i R[i] = log(sqrt(f[i].imag()*f[i].imag()+f[i].real()*f[i].real())); } return R; } 考慮到實驗教學(xué)的時間限制,本文介紹基于K近鄰(K-Nearest Neighbor,KNN)分類算法的語音情感識別算法在上述嵌入式實時語音信號處理平臺的實現(xiàn)方法。KNN分類算法,是一種較為簡單直觀的分類方法,雖然簡單,但在語音情感識別中表現(xiàn)出的性能卻很好。KNN分類器的分類思想是:給定一個在特征空間中的待分類的樣本,如果其附近的K個最鄰近的樣本中的大多數(shù)屬于某一個類別,那么當(dāng)前待分類的樣本也屬于這個類別。 設(shè)待分類樣本的特征參數(shù)為X,已知類別的訓(xùn)練樣本集樣本的特征參數(shù)集為{X1,X2,…,Xn};對于待測樣本X,計算其與{X1,X2,…,Xn}中每一樣本的歐氏距離D(X,Xl),l=1,2,…,n即: (1) l=1,2,…,n 式中:i為時間標(biāo)號;N為特征向量的維數(shù)。min{D(X,Xl)}稱為X的最近鄰,而將D(X,Xl)從小到大排列后的前K個值稱為X的K近鄰。分析K近鄰中屬于哪一類別的個數(shù)最多,則將X歸于該類。 KNN算法大致可分為4步: (1) 由特征提取函數(shù)提取訓(xùn)練樣本的特征向量,構(gòu)成訓(xùn)練樣本特征向量集合{X1,X2,…,Xn}。 (2) 設(shè)定算法中K的值。K值的確定沒有一個統(tǒng)一的方法(根據(jù)具體問題選取的K值可能有較大的區(qū)別)。一般方法是先確定一個初始值,然后根據(jù)實驗結(jié)果不斷調(diào)試,最終達(dá)到最優(yōu)。 (3) 利用特征向量提取函數(shù)提取待測樣本的特征向量X,并計算X與{X1,X2,…,Xn}中每一樣本的歐氏距離D(X,Xl),l=1,2,…,n。 (4) 統(tǒng)計D(X,Xl),l=1,2,…,n中K個最近鄰的類別信息,給出X的分類結(jié)果。 實際程序中,可以將訓(xùn)練樣本集與待測樣本的特征提取合并一起,得到總特征向量集合,然后劃分出訓(xùn)練樣本集和待測樣本集,以提高測試時的效率。 實現(xiàn)的動態(tài)情感分析界面如圖3所示。通過麥克風(fēng)采集語音,軟件可以實時分析每段語音的情感成分,并將統(tǒng)計結(jié)果以餅狀圖進(jìn)行顯示。該界面直觀有效,可以激發(fā)學(xué)生興趣,進(jìn)而可以誘導(dǎo)學(xué)生去深入理解原理,發(fā)現(xiàn)算法問題,從而查閱資料進(jìn)行改進(jìn)。 圖3 動態(tài)情感分析界面 開設(shè)與應(yīng)用接軌、行業(yè)同步的實驗是提高語音信號處理課程教學(xué)質(zhì)量的關(guān)鍵點?;谇度胧狡脚_的實時語音信號處理實驗平臺可以借助嵌入式Linux高級聲音框架(ALSA),實現(xiàn)實時語音信號分析、增強(qiáng)、特征提取等單元實驗,以及一些功能性擴(kuò)展實驗。同時,本文以情感識別算法為例,介紹了其需要的軟硬件環(huán)境以及實時實現(xiàn)方法。本文所提出的方法與當(dāng)前智能語音產(chǎn)品常用研發(fā)環(huán)境一致,有利于學(xué)生在掌握理論知識的同時提高研發(fā)能力和工程能力。2.4 基于K近鄰分類算法的語音情感識別實現(xiàn)
3 結(jié) 語