梁瑞宇, 王青云, 趙 力
(1.南京工程學院 通信工程學院,南京 211167; 2.東南大學 信息科學與工程學院,南京 210096)
·計算機技術(shù)應用·
嵌入式語音信號處理實驗系統(tǒng)的設計與實現(xiàn)
梁瑞宇1,2, 王青云1, 趙 力2
(1.南京工程學院 通信工程學院,南京 211167; 2.東南大學 信息科學與工程學院,南京 210096)
為體現(xiàn)教學與科研相互促進的教學理念,面向語音信號處理教學和科研需要,以Cortex-A8微處理器和專用音頻編解碼芯片WM8960為硬件核心,構(gòu)建一款嵌入式語音信號處理綜合實驗平臺?;谠搶嶒炂脚_,利用QT開發(fā)軟件,設計一款語音信號處理綜合實驗教學與開發(fā)軟件。文中完整地講述了系統(tǒng)的硬件構(gòu)成,驅(qū)動程序的移植,并結(jié)合基于譜減法的語音增強算法,介紹了基于QT的語音開發(fā)流程?;谠搶嶒炂脚_,學生不僅可以掌握語音信號處理的基本知識,還可以熟悉面向語音應用的嵌入式軟件開發(fā)流程。系統(tǒng)界面友好,功能強大,可有效用于高校語音及信號處理教學工作,也可用于相關(guān)科研人員進行語音信號處理相關(guān)課題的研發(fā)工作。
語音信號處理; 語音增強; 嵌入式; 實驗教學
隨著人機交互和智能機器人技術(shù)的發(fā)展,語音信號處理已成為信息科學研究領域中發(fā)展最為迅速的一個分支。語音信號處理是用數(shù)字信號處理技術(shù)和語音學知識對語音信號進行處理的一門新興學科,是一門理論性強、實用面廣、內(nèi)容新、難度大的交叉學科[1-2]。語音信號處理作為信息處理專業(yè)的一門重要的專業(yè)課,所涉及的理論知識較多。語音信號處理包括語音增強[3]、語音編碼、語音合成、語音識別[4]、說話人識別[5]、情感識別[6]、語音隱藏、聲源定位[7]等。圍繞著這些應用,該課程還會涉及一些相關(guān)理論,如矢量量化、隱馬爾科夫模型、高斯混合模型,支撐向量機等。因此,如何激發(fā)學生的學習興趣,從枯燥的理論中升華出來,是提升課堂教學質(zhì)量的關(guān)鍵。
目前,很多高校的語音信號處理課程的授課時間在32~48學時。在短暫的課堂授課時間內(nèi),使學生對各種應用有所了解,并從中選擇一到兩種進行深入研究,是非常困難的一件事。為此,很多高校都會增加實驗環(huán)節(jié)使學生對課堂內(nèi)容進行鞏固和吸收。但是,目前語音信號處理實驗主要以MATLAB仿真為主[8],雖然有助于學生快速理解理論知識,但是缺乏對語音如何采集、處理和播放整個流程的深入了解。因此,開發(fā)出一款功能強大且實用的語音信號處理綜合實驗平臺,為學生和老師從事教學科研工作提供方便,已經(jīng)成為語音信號處理教學工作的重中之重。一個有效的實驗平臺不但可以使學生掌握理論知識,還可以使學生了解語音信號處理的整個開發(fā)流程,為學生后期從事語音信號處理科創(chuàng)、競賽或工作積累經(jīng)驗。針對目前語音教學科研平臺較少的現(xiàn)狀[9-10],本文按照主流的嵌入式系統(tǒng)開發(fā)設計理念,研發(fā)了一款語音信號處理綜合實驗平臺,介紹了平臺的硬件構(gòu)成和軟件實現(xiàn),并通過語音增強實驗驗證了平臺的有效性。
嵌入式語音實驗平臺的硬件結(jié)構(gòu)如圖1所示,實驗平臺由S5PV210核心處理器、WM8960語音編解碼芯片、存儲電路、揚聲器、麥克風、外設接口、電源和時鐘電路構(gòu)成。其中,電源和時鐘電路提供系統(tǒng)工作必需的電源和時鐘。外設接口包括串口、USB接口、網(wǎng)絡接口,用來與電腦通信,實現(xiàn)人機交互等功能。
圖1 嵌入式語音實驗平臺硬件結(jié)構(gòu)圖
實驗平臺的核心處理器選用Samsung公司高端的ARM Cortex-A8微處理器S5PV210芯片。S5PV210基于ARM v7指令架構(gòu),適用于復雜操作系統(tǒng)及用戶應用,芯片功耗在300 mW以下,而性能卻高達2 000 MIPS[11-12]。S5PV210微處理器具有復雜的流水線架構(gòu),帶有先進的動態(tài)分支預測,可實現(xiàn)2.0 DMIPS/MHz。
語音編解碼芯片選用歐勝微電子公司的低功耗、高質(zhì)量的立體編解碼器芯片WM8960。該芯片內(nèi)置有麥克風接口和立體聲耳機驅(qū)動器以及立體聲24 bit sigma-delta模數(shù)轉(zhuǎn)換器和數(shù)模轉(zhuǎn)換器。其運行的模擬電源電壓低至2.7 V,數(shù)字內(nèi)核運行電壓可低至1.7 V。其高級的片上數(shù)字信號處理能夠?qū)崿F(xiàn)麥克風輸入的自動電平控制,并支持多種采樣率。該芯片與麥克風和揚聲器進行配合,可實現(xiàn)語音的采集和播放。
存儲電路由DDR2 SDRAM芯片K4T1G164QQ和NAND Flash芯片K9F2G08UOD構(gòu)成。系統(tǒng)采用4片16位128MB的SDRM芯片來構(gòu)成32位的數(shù)據(jù)接口,總大小為512MB。DDR2 SDRAM相比于老式的DDR SDRAM具有更高的運行速率與更低的功耗。SDRAM主要用來存儲臨時數(shù)據(jù),而NAND Flash主要用來存儲根文件系統(tǒng)、boot代碼、系統(tǒng)內(nèi)核代碼和簡單的數(shù)據(jù)。NAND Flash是連續(xù)存儲介質(zhì),適合存放大的數(shù)據(jù)量,其共用地址和數(shù)據(jù)總線,對一個固定大小的區(qū)域進行操作,且使用壽命長。
因為嵌入式Linux的開源性、可裁剪性和可移植性,所以其成為嵌入系統(tǒng)開發(fā)最常用的操作系統(tǒng)之一。在Linux操作系統(tǒng)中,內(nèi)核主要用來管理軟硬件資源,并提供運行環(huán)境。要想通過Linux系統(tǒng)來對硬件進行操作,必須在硬件和內(nèi)核之間架設一個通道,即Linux設備驅(qū)動。平臺以WM8960作為語音采集和播放芯片,因此下面簡單介紹WM8960芯片的驅(qū)動移植過程。
由于WM8960語音芯片是采用模塊的方式編譯進Linux內(nèi)核系統(tǒng)的,故其驅(qū)動程序的入口和出口函數(shù)分別為WM8960_modinit,WM8960_exit。所謂的入口和出口函數(shù)指的是:當系統(tǒng)上電時,內(nèi)核會將所有的驅(qū)動代碼掛載到系統(tǒng)里,而加載驅(qū)動首先執(zhí)行的就是驅(qū)動的入口函數(shù)。而當卸載不想要的驅(qū)動時,執(zhí)行的是對應驅(qū)動的出口函數(shù)。
入口函數(shù)只是將WM8960設備對應的數(shù)據(jù)結(jié)構(gòu)注冊到I2C總線中。采用的方式就是調(diào)用I2C總線的接口函數(shù)i2c_add_driver()。為增強驅(qū)動的移植性,內(nèi)核采用了驅(qū)動-設備分離的方式,即與硬件相關(guān)的信息放在一個結(jié)構(gòu)體里注冊進內(nèi)核,而與硬件無關(guān)的信息放在另一個結(jié)構(gòu)體中注冊進內(nèi)核。驅(qū)動和設備二者通過匹配注冊的name來進行識別,此處的注冊name為WM8960。
當驅(qū)動層和設備層通過name匹配成功之后,第一個會執(zhí)行的函數(shù)就是probe函數(shù)。probe函數(shù)會判斷是否是負責驅(qū)動的設備,然后完成該設備的初始化操作。代碼如下:
static __devinit int WM8960_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id){
struct WM8960_priv *WM8960; //WM8960的私有數(shù)據(jù)結(jié)構(gòu)體
struct snd_soc_codec *codec; //Codec結(jié)構(gòu)體
WM8960 = kzalloc(sizeof(struct WM8960_priv),GFP_KERNEL);//分配空間
if (WM8960 == NULL)
return -ENOMEM;
codec = &WM8960->codec;
i2c_set_clientdata(i2c,WM8960);
codec->control_data = i2c;
codec->dev = &i2c->dev;
return WM8960_register(WM8960,SND_SOC_I2C); //注冊
}
probe函數(shù)首先定義了兩個非常復雜數(shù)據(jù)結(jié)構(gòu):一個WM8960的私有數(shù)據(jù)結(jié)構(gòu)體WM8960,另一個是片上Linux音頻架構(gòu)中的Codec結(jié)構(gòu)體codec。然后,程序調(diào)用Linux內(nèi)核內(nèi)存分配接口kzalloc函數(shù)分配了一個空間,并且將空間的首地址交給了WM8960私有數(shù)據(jù)結(jié)構(gòu)體。為了讓其他函數(shù)也能使用該內(nèi)存,此處通過i2c_set_client函數(shù)將地址保存到i2c_client結(jié)構(gòu)體下面的一個void*指針里。這樣,其他函數(shù)可以通過i2c_get_client函數(shù)接口來得到保存的數(shù)據(jù)。probe函數(shù)最后調(diào)用WM8960_register函數(shù)來完成WM8960的注冊。
完成上述驅(qū)動添加和注冊工作后,音頻文件的采集和播放就可以通過調(diào)用Linux系統(tǒng)的聲卡驅(qū)動,再調(diào)用剛注冊的WM8960音頻編解碼芯片來完成。通常,在進行語音信號采集與處理前,主程序需要對音頻采集參數(shù)進行設置,主要包括采樣率的設置、單雙通道的配置、錄音與播音緩沖區(qū)大小的設置、采樣位數(shù)的設置等。配置完成后,算法便可以從錄音緩沖區(qū)讀取采集的語音數(shù)據(jù),處理完成后,送入語音播放緩沖區(qū)。
錄音程序的核心代碼如下:
......
int SIZE = 8;
int CHANNELS = 1;
int RATE = 8000;
int LENGTH = 3;
if (snd_open(SND_PCM_STREAM_CAPTURE, CHANNELS, RATE, SIZE) < 0) {
fprintf(stderr, "設備打開失敗= ");
return; }
size_t c, frame_size;
c = (off64_t)capture.chunk_bytes; //定義塊的大小
int count = (LENGTH*RATE)/c; //計算塊的數(shù)量
unsigned char data_buff[count*c]; //定義數(shù)據(jù)緩存大小
frame_size = c * 8 / capture.bits_per_frame; //求幀的數(shù)量
for(int i=0;i if (SND_readPcm(&capture, frame_size) != frame_size) { fprintf(stderr, "讀取錯誤
"); return; } memcpy(data_buff+i*c, capture.data_buf, c); //從數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù) } QVector for(int i=0;i Y1[i] = (data_buff[i]-128)/128.0; //預處理 snd_close(SND_PCM_STREAM_CAPTURE); //關(guān)閉設備 ...... 3.1 實驗設計 本文設計的語音信號處理綜合實驗平臺功能比較強大,可以面向不同層次的學生進行實驗。教師可以根據(jù)學生基礎,為學生量身定制實驗套餐。如表1所示,實驗主要分為3類。 表1 實驗套餐及適用學生 注:字母說明——學生條件:A.嵌入式底層程序開發(fā)基礎;B.QT編程基礎;C.C或C++語言基礎。提供資料——I.實驗原理及要求;II.編譯好內(nèi)核;III.QT界面及函數(shù)定義 由表可知,根據(jù)學生的學習基礎,老師可以選擇不同的套餐進行實驗設置,而學生可以跨過不同階段進行超前學習。不同于MATLAB的教學方法和實驗設置,該實驗設置并不固定在一種單一模式下,可進行選擇性擴展和加深。通過分層次的設置,教師可以通過不同層次的實例演示來激發(fā)學生的學習興趣,加深學生對知識的理解,也為學生從事語音信號處理相關(guān)的實際課題或競賽提供一種切實可行的實現(xiàn)方案和思路。對于電子類學生來說,C語言或C++是非常重要和普遍的基礎課,因此學生進行實驗困難不大,還可以鍛煉學生C語言的編程能力。下面以語音增強算法為例,介紹面向套餐3的學生實驗安排情況。 3.2 語音增強算法原理 對于任何實驗來說,學生都必須首先了解實驗的基本原理。因此,簡單介紹基于譜減法的語音增強算法的基本原理。 語音增強主要研究如何利用信號處理技術(shù)消除信號中的強噪聲干擾,從而提高輸出信噪比以提取出有用信號的技術(shù)。語音增強是語音算法中最基本,最常用的算法之一,其主要目的:①改進語音質(zhì)量,消除背景噪音,使聽者樂于接受,不感覺疲勞,這是一種主觀度量;②提高語音可懂度,這是一種客觀度量。這兩個目的往往不能兼得,所以實際應用中總是視具體情況而有所側(cè)重。根據(jù)語音和噪聲的特點,常用的語音增強算法包括譜減法、維納濾波法、卡爾曼濾波法、自適應濾波法等??紤]到學生的理解程度,本文以譜減法[13]為例來進行說明。整個算法的原理如圖2所示。 圖2 譜減法原理圖 設語音信號的時間序列為x(n),加窗分幀處理后得到第i幀語音信號為xi(m),幀長為N。任何一幀語音信號xi(m)做FFT后為 (1) 對Xi(k)求出每個分量的幅值和相角,幅值是|Xi(k)|,相角為 (2) 已知前導無話段(噪聲段)時長為IS,對應的幀數(shù)為NIS,可以求出該噪聲段的平均能量為 (3) 譜減公式為 (4) 式中:a和b是兩個常數(shù),a稱為過減因子,b稱為增益補償因子。 3.3 基于QT的算法實現(xiàn) 此處選擇QT作為編程載體目的:①為了便于學生直觀觀測結(jié)果;②QT是優(yōu)秀的跨平臺C++圖形界面應用程序開發(fā)框架?;赒T進行Linux下的圖形界面開發(fā),可以大大提高Linux下的編程效率[14-16]。 在沒有QT編程的基礎下,教師可以選擇套餐3開展實驗。此時,套餐3提供的基本資料包括:添加好語音采集設備的Linux內(nèi)核,構(gòu)建好的QT執(zhí)行界面,QT的運行說明文檔以及針對該實驗的函數(shù)定義:QVector〈double〉ssubspec(QVector〈double〉&signal, int wlen, int inc, int NIS, doublea, doubleb)。這里,譜減法的實現(xiàn)函數(shù)為ssubspec,其輸入變量包括signal(輸入語音信號),wlen(幀長),inc(幀移),NIS(前導幀數(shù)),a(過減因子),b(增益補償因子)。基于譜減法原理設計的語音增強函數(shù)如下: QVector〈double〉ssubspec(QVector〈double〉&signal, int wlen, int inc, int NIS, double a, double b) { QVector〈double〉wnd = hamming(wlen) ; //設置窗函數(shù) QVector〈double〉 output,X ; //譜減后的語音序列和幅值 QVector〈double〉Yphase,Yeng; //譜減前相位和能量 int N = signal.size();//信號長度 int nf = (N-wlen)/inc +1 ; //幀數(shù) QVector〈double〉 Y = enframe(signal,wnd,wlen,nf,inc); //信號分幀 //噪聲段平均能量,參考式(3) QVector〈double〉 D=noiseeng(Y,NIS,wlen); //計算信號相位 for(int i= 0 ; i std::complex〈double〉f[wlen]; for(int j =0 ; j f[j].real() = Y[i*wlen+j]; f[j].imag() = 0;} //求信號的傅里葉變換,參考式(1) fft(f,wlen); for(int j=0 ; j //求信號相位,參考式(2) Yphase< for(int j=0 ; j Yeng<< abs(f[j])* abs(f[j]);} //譜減法降噪,參考式(4) for(int j=0 ; j if(Yeng[j]>=a*D[j]){ X< else{ X< }} output = OverlapAdd2(X,Yphase,wlen,inc,nf); //合成譜減后的語音 return output; } 當輸入為一段信噪比為5 dB語音信號時,譜減法語音增強后的效果如圖3所示。顯示的軟件為語音信號處理平臺的綜合性實驗軟件(此處為實驗平臺的完 圖3 譜減法語音增強效果圖 整界面,在單獨實驗時可根據(jù)需要進行裁剪)。菜單欄顯示了平臺可以完成的實驗,中心區(qū)為波形顯示區(qū)域,右邊為參數(shù)顯示區(qū)域。中心區(qū)的上部為原始語音信號,下部分兩段,分別為帶噪的語音波形和譜減后的輸出信號。由圖可知,增強后的信號信噪比由5 dB變?yōu)?2.843 7 dB,提高了7.843 7 dB,改善效果比較明顯。從信號波形也可看出,譜減后的波形較帶噪語音有了明顯改善。 針對目前語音信號處理課程偏重于理論教學的現(xiàn)狀,本文秉承學以致用原則,開發(fā)了一款基于嵌入式系統(tǒng)的語音信號處理綜合實驗平臺。本文重點介紹了系統(tǒng)的硬件構(gòu)成和軟件設計架構(gòu),并通過基于譜減法的語音增強實驗,驗證了平臺的性能有效性和界面友好性。此外,該平臺涉及了語音信號處理目前的主流研究方向,因此既可用于高等學院語音信號處理課程的教學工作,也可以滿足從事語音信號處理相關(guān)科研人員學習和研發(fā)的需要。 [1] 劉衛(wèi)東, 孟曉靜,王艷芬. 語音信號處理實驗教學研究探索[J]. 實驗室研究與探索, 2008, 27(4): 72-74. [2] 趙 力, 梁瑞宇, 魏 昕,等. 語音信號處理[M].3版.北京: 機械工業(yè)出版社, 2016. [3] Deng F, Bao C, Kleijn W B. Sparse hidden markov models for speech enhancement in non-stationary noise environments[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2015, 23(11): 1973-1987. [4] 周 健, 趙 力, 梁瑞宇,等. 基于噪聲魯棒性特征和SVM的耳語音可懂度增強[J]. 東南大學學報(英文版), 2012, 28(3): 261-265. [5] Zhang X, Zhang Y, Shi Y,etal. Power control algorithm in cognitive radio system based on modified Shuffled Frog Leaping Algorithm[J]. International Journal of Electronics and Communications, 2012, 66(6): 448-454. [6] 王 薇, 楊麗萍, 魏 麗,等. 語音情感特征的提取與分析[J]. 實驗室研究與探索, 2013, 32(7): 91-94,191. [7] 張瀟丹, 胡 峰,趙 力. 基于改進的蛙跳算法與支持向量機的實用語音情感識別[J]. 信號處理, 2011, 27(5): 678-689. [8] 楊 毅, 李澤偉, 鄧北星,等. 語音信號處理實驗的改革與實踐[J]. 實驗室研究與探索, 2014, 33(4): 123-126. [9] 伍技祥, 仲元昌, 李彩玲,等. 嵌入式數(shù)字語音處理實驗系統(tǒng)的設計與實現(xiàn)[J]. 實驗室研究與探索, 2012, 31(10): 46-49. [10] 宋亞男, 林錫海, 徐榮華,等. 機器人語音識別實驗設計與實現(xiàn)[J]. 實驗技術(shù)與管理, 2013, 30(2): 36-38. [11] 楊繼森, 張 靜, 朱 革,等. 基于ARM Cortex平臺的嵌入式系統(tǒng)課程虛擬實驗平臺設計[J]. 實驗技術(shù)與管理, 2014, 31(7): 97-101. [12] 王青云, 梁瑞宇,馮月芹. ARM Cortex-A8嵌入式原理與系統(tǒng)設計[M].北京: 機械工業(yè)出版社, 2014. [13] Boll S F. Suppression of acoustic noise in speech using spectral subtraction[J]. IEEE Transactions on Acoustics, Speech and Signal Processing, 1979, 27(2): 113-120. [14] 房漢雄, 穆偉斌, 齊 跡,等. 移動終端實驗教學平臺設計與應用[J]. 實驗技術(shù)與管理, 2014, 31(8): 103-105. [15] 田 磊. 嵌入式Linux系統(tǒng)中基于QT庫的應用程序設計[J]. 實驗室研究與探索, 2014, 33(5): 84-86,115. [16] 趙明波, 謝 楠, 王亞軍, 等. 基于RFID和QT/E車輛出入監(jiān)控系統(tǒng)的設計[J]. 實驗室研究與探索, 2014, 33(11): 95-99. Design and Implementation of an Experimental System for Embedded Speech Signal Processing LIANGRuiyu1,2,WANGQingyun1,ZHAOLi2 (1. School of Communication Engineering, Nanjing Institute of Technology, Nanjing 211167, China; 2. School of Information Science and Engineering, Southeast University, Nanjing, 210096, China) To embody the idea of mutual promotion between teaching and scientific research, and to meet the needs of teaching and research for speech signal processing, an integrated experimental platform for embedded speech signal processing is design by using Cortex-A8 microprocessor and WM8960 audio coding and decoding chip as core hardware. Moreover, an integrated experimental teaching and development software is designed on this platform by using QT development software. Then, the system hardware structure and transplant of driver are described. By taking an example of the speech enhancement algorithm based on spectral subtraction, the speech development process based on QT is introduced. Based on this experimental platform, students can master not only the basic knowledge of speech signal processing, but also the development process of embedded software for the speech application. The system had friendly interface and strong functions, can be used for the teaching of speech and signal processing in colleges and universities, and for the research and development of related topics on speech signal processing. speech signal processing; speech enhancement; embedded; experimental teaching 2016-09-15 江蘇省“六大人才高峰”項目(2016-DZXX-023);江蘇省青藍工程,江蘇省高等教育教學改革研究課題(2015JSJG123);南京工程學院高等教育研究課題重點課題(2015ZD02) 梁瑞宇(1978-),男,江蘇徐州人,博士,副教授,主要研究方向語音信號處理。Tel.:15380920360;E-mail:lly1711@163.com TN 912.3;G 642.0 A 1006-7167(2017)05-0126-053 語音信號處理實驗設計
4 結(jié) 論