《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 說話人識(shí)別系統(tǒng)中VQ判決模塊的FPGA實(shí)現(xiàn)
說話人識(shí)別系統(tǒng)中VQ判決模塊的FPGA實(shí)現(xiàn)
張樹才,,張國杰,王曉雷,,高 謙
摘要: 目前,,基于PC或DSP的系統(tǒng)其處理能力無法滿足海量語音信號(hào)高速處理需求的增長,。本文分析了VQ(矢量量化)搜索算法的硬件實(shí)現(xiàn)復(fù)雜度,針對(duì)說話人識(shí)別過程中運(yùn)算量最大,、耗時(shí)最長的判決過程,,提出了一種基于標(biāo)簽的說話人判決模型實(shí)現(xiàn)方案。該設(shè)計(jì)用FPGA實(shí)現(xiàn),,可對(duì)多路電話信道說話人進(jìn)行實(shí)時(shí)判決識(shí)別,。
Abstract:
Key words :

    摘 要: 目前,基于PC或DSP的系統(tǒng)其處理能力無法滿足海量語音信號(hào)高速處理需求的增長,。本文分析了VQ(矢量量化)搜索算法的硬件實(shí)現(xiàn)復(fù)雜度,,針對(duì)說話人識(shí)別過程中運(yùn)算量最大,、耗時(shí)最長的判決過程,提出了一種基于標(biāo)簽的說話人判決模型實(shí)現(xiàn)方案,。該設(shè)計(jì)用FPGA實(shí)現(xiàn),,可對(duì)多路電話信道說話人進(jìn)行實(shí)時(shí)判決識(shí)別。
    關(guān)鍵詞: 說話人識(shí)別,;VQ,;標(biāo)簽;多路,;FPGA

 

    說話人識(shí)別和指紋識(shí)別,、虹膜識(shí)別一樣,屬于生物識(shí)別技術(shù)的一種[1],,是通過從語音信號(hào)中提取說話人信息來鑒別說話人身份的技術(shù),。與其他生物識(shí)別技術(shù)相比,說話人識(shí)別具有更為簡便,、自然,、準(zhǔn)確、經(jīng)濟(jì)及可擴(kuò)展性好等眾多優(yōu)勢(shì),。與語音識(shí)別不同,,說話人識(shí)別不考慮語音中的字詞意思,強(qiáng)調(diào)說話人的個(gè)性,。
    說話人識(shí)別由訓(xùn)練和識(shí)別兩個(gè)階段構(gòu)成,,圖1為一個(gè)典型的說話人識(shí)別系統(tǒng)結(jié)構(gòu)框圖。其中特征提取單元從輸入語音中提取出能夠反映說話人特征的參數(shù),;在訓(xùn)練階段,,用合適的模型來表征這些特征參數(shù),使得模型能夠代表該說話人的語音特性,,這一階段一般離線運(yùn)行,;在識(shí)別階段,用已經(jīng)建立的參考模型對(duì)測(cè)試語音的特征參數(shù)按一定的相似性測(cè)度和判決規(guī)則進(jìn)行模式匹配,,把相似性得分最高者作為識(shí)別結(jié)果,。

 


    基于成本和靈活性方面的考慮,當(dāng)前大部分說話人識(shí)別系統(tǒng)都是基于計(jì)算機(jī)軟件或DSP來構(gòu)建的,。但對(duì)于一些大型應(yīng)用,,如企業(yè)的客服中心,為提高服務(wù)質(zhì)量和效率,,希望自動(dòng)識(shí)別客戶身份,;公安部門為調(diào)查取證,需要對(duì)多路電話進(jìn)行實(shí)時(shí)監(jiān)控或?qū)A夸浺綦娫掃M(jìn)行高速處理,。對(duì)于這些基于電信網(wǎng)的大容量,、實(shí)時(shí)性要求比較高的應(yīng)用,,基于PC或DSP的系統(tǒng)其處理能力越來越不能滿足需求的增長。本文針對(duì)基于PC或DSP的系統(tǒng)在識(shí)別階段實(shí)時(shí)性較差的問題,,提出了一種基于VQ模型的硬件判決實(shí)現(xiàn)結(jié)構(gòu),,并用FPGA實(shí)現(xiàn)。
1 VQ模型原理及算法復(fù)雜度分析
1.1 VQ模型原理
    基于VQ[2]方法的說話人識(shí)別系統(tǒng)在訓(xùn)練階段把每個(gè)人的訓(xùn)練語音數(shù)據(jù)通過標(biāo)準(zhǔn)的聚類過程生成碼本C,,假設(shè)有S個(gè)目標(biāo)說話人,,則需要建立S個(gè)碼本。在選定了失真測(cè)度和初始碼本后,,通常采用LBG[3]算法生成碼本,。識(shí)別時(shí)將測(cè)試輸入語音矢量按此碼本進(jìn)行編碼,以量化產(chǎn)生的失真作為判決標(biāo)準(zhǔn),。L幀測(cè)試語音矢量{xt},t=1,,2,,…,L的模板匹配得分z為[4]
   
其中,,測(cè)試是以最小匹配得分作為測(cè)試語音和模型相似程度的判定依據(jù),。
    采用VQ模型識(shí)別過程并不需要進(jìn)行時(shí)間對(duì)齊,從而大大減少了系統(tǒng)的復(fù)雜度,。對(duì)于文本無關(guān)的說話人識(shí)別,,其識(shí)別率較高,且判斷速度快,,對(duì)于計(jì)算量化失真的搜索過程,,目前硬件實(shí)現(xiàn)通常采用全搜索算法。
    失真測(cè)度采用歐式失真,,即均方誤差,,特點(diǎn)是易于硬件處理,且符合語音主觀感知的條件,,與系統(tǒng)所采用的MFCC參數(shù)相匹配(若采用LPC則不適宜用歐式失真)[5],。
1.2 算法適應(yīng)性修改及運(yùn)算復(fù)雜度分析
1.2.1 算法適應(yīng)性修改

    設(shè)碼本為C={c0,c1,,c2,,…,cN-1},,其中每個(gè)碼矢為k維矢量,,特征參數(shù)x也是k維矢量。在歐氏失真的條件下,,特征參數(shù)x對(duì)碼矢c的失真計(jì)算如下式:
   
其中e是和碼矢相關(guān)的固定值,,在離線生成碼本時(shí)計(jì)算出來,,并作為碼本的一部分。由上面的分析可知,,求最小距離相當(dāng)于最大化||x·c||,。因此,一幀測(cè)試矢量對(duì)一個(gè)碼本的最小距離的搜索過程可等價(jià)地描述為矩陣-矢量相乘,,即下式:
   
式中:C為N行k列碼本矩陣,,x為測(cè)試矢量,e為由各碼矢的e值組成的列向量,。
    對(duì)于一個(gè)碼本來講,,每一幀參數(shù)的量化誤差為: 
    
    在進(jìn)行說話人識(shí)別時(shí),假設(shè)需要M幀測(cè)試矢量,,則需比較每個(gè)碼本對(duì)這M幀參數(shù)的得分,,即各幀的量化誤差的累加和。對(duì)一個(gè)說話人來講,,M值對(duì)每個(gè)碼本都是固定的,,因此只需計(jì)算max{xi·c+e}的累加和即可,識(shí)別過程也由搜索最小值轉(zhuǎn)化為搜索最大值,。
    根據(jù)上面分析可知,,測(cè)試矢量和碼字矢量之間的距離可以通過計(jì)算它們之間的內(nèi)積來實(shí)現(xiàn),而不必用先相減再平方的方式,。對(duì)硬件實(shí)現(xiàn)來講,,每次求距離的過程將減少k次減法的運(yùn)算量,可帶來面積和時(shí)序上的優(yōu)化,。
1.2.2 運(yùn)算復(fù)雜度分析
    假設(shè)碼本數(shù)為S,,碼本容量為N,碼字為k維矢量,,下面對(duì)運(yùn)算復(fù)雜度進(jìn)行分析,。
    由前面的分析可知,一幀測(cè)試矢量對(duì)一個(gè)碼矢的距離計(jì)算量為K次乘法,,K-1次加法,,再加上e,共K次乘加操作,,則一幀測(cè)試矢量對(duì)一個(gè)碼本(N個(gè)碼矢)完成失真計(jì)算的運(yùn)算量:N×k次乘累加,,N-1次比較。
    計(jì)算M幀測(cè)試矢量對(duì)一個(gè)碼本的距離,,共需要:(M×K×k)次乘加,,(M×N-1)次比較,另加(M-1)次加操作(完成M個(gè)誤差的累加),。
    對(duì)于有S個(gè)說話人(S個(gè)碼本)的系統(tǒng),,定義其VQ搜索復(fù)雜度為f,,即完成一次說話人判決所需的主要運(yùn)算量,這里只取乘加運(yùn)算,,則:
    f=S×M×N×k                                              (7)
    例如,,在本文中,目標(biāo)說話人S=64,碼本容量N取64,,k取24維,,完成一次識(shí)別的典型M值為1 024,共需要:f=64×1 024×64×24=100 663 296次乘加運(yùn)算,。
    VQ識(shí)別時(shí)其運(yùn)算復(fù)雜度與上面4個(gè)參數(shù)成線性關(guān)系,,對(duì)于碼本來講,其存儲(chǔ)復(fù)雜度與S,、N,、k這3個(gè)參數(shù)成線性關(guān)系。
2 硬件實(shí)現(xiàn)結(jié)構(gòu)
2.1 功能描述

    系統(tǒng)采用24維MFCC參數(shù)(12維MFCC及12維ΔMFCC),,數(shù)據(jù)位寬為32位,。因?yàn)檎麄€(gè)系統(tǒng)的典型應(yīng)用為多路電話信道(如E1信道),可完成多路電話語音的同時(shí)處理,。為了區(qū)分當(dāng)前參數(shù)屬于哪一話路,采用的方式是給每一幀參數(shù)前加上一個(gè)標(biāo)簽,,也是32位寬,,內(nèi)容包括話路號(hào)及格式信息,這都由系統(tǒng)前端處理完成,。因此VQ判決模塊的實(shí)際輸入數(shù)據(jù)可視為25維參數(shù),,以FIFO為接口串行輸入。輸入幀格式如圖2,。

 


    當(dāng)某一話路滿足判決條件,,即輸入了足夠的參數(shù)(如設(shè)定1 024幀)時(shí),判決模塊將進(jìn)行判決,。判決完成后輸出結(jié)果有效信號(hào),,持續(xù)若干個(gè)時(shí)鐘周期,使外部系統(tǒng)讀出判決結(jié)果,。輸出的判決結(jié)果為32位,,高16位為話路號(hào),低16位為碼本號(hào),,以告知外部控制系統(tǒng)當(dāng)前輸入中哪一路話出現(xiàn)了哪個(gè)說話人,。
    為了進(jìn)行實(shí)時(shí)判決,需要在下一幀測(cè)試矢量的最后一個(gè)數(shù)據(jù)到來之前完成當(dāng)前幀的量化工作,,即計(jì)算出當(dāng)前幀與每個(gè)碼本的距離,,實(shí)現(xiàn)高速的核心是使用并行乘法,。這里的“實(shí)時(shí)”是指從測(cè)試數(shù)據(jù)輸入到判決結(jié)果輸出的過程,只有算法上的延遲,,無需在前面存儲(chǔ)測(cè)試數(shù)據(jù),。
2.2 實(shí)現(xiàn)結(jié)構(gòu)及模塊劃分
    圖3為VQ判決模塊的內(nèi)部結(jié)構(gòu)框圖,給出了主要的控制信號(hào)和數(shù)據(jù),。其中包括兩個(gè)接口,,一個(gè)測(cè)試數(shù)據(jù)輸入接口,一個(gè)讀碼本接口,,測(cè)試數(shù)據(jù)通過FIFO輸入,,碼本存儲(chǔ)于外部RAM。整個(gè)架構(gòu)從功能上可分為接口部分,、控制部分和運(yùn)算部分,。下面具體介紹各子模塊功能,同時(shí)說明整個(gè)模塊的工作流程,。

 


2.2.1 測(cè)試矢量接口
    根據(jù)FIFO的空標(biāo)志rdempty,,產(chǎn)生讀請(qǐng)求信號(hào)rdreq,讀到的數(shù)據(jù)首先進(jìn)入一個(gè)24級(jí)移位寄存器,,并對(duì)讀進(jìn)行計(jì)數(shù),。計(jì)數(shù)值滿24后,發(fā)出tag_ready使能,,在下一時(shí)鐘上升沿輸出tag至初始化模塊,。第25個(gè)數(shù)讀進(jìn)來后,clr_tag有效,。該模塊接收來自初始化模塊的load_tv使能信號(hào),,持續(xù)一個(gè)時(shí)鐘周期,若load_tv有效,,在上升沿時(shí)將移位寄存器組的數(shù)據(jù)讀入寄存器組,,實(shí)現(xiàn)串并轉(zhuǎn)換,將測(cè)試矢量送至并行乘單元,。功能示意如圖4,。
2.2.2 碼本接口
    收到初始化模塊的load_code信號(hào)后,開始產(chǎn)生地址和讀信號(hào),,按順序讀出碼本數(shù)據(jù),。內(nèi)部也有移位寄存器組和數(shù)據(jù)寄存器組,實(shí)現(xiàn)串并轉(zhuǎn)換,,同圖4所示結(jié)構(gòu)相似,。讀滿一幀24個(gè)數(shù)之后,產(chǎn)生opr_en使能,在下一時(shí)鐘沿把數(shù)據(jù)加載到寄存器組,,并行乘法也將在opr_en有效后的第一個(gè)時(shí)鐘沿開始,。opr_en作為基本的使能信號(hào),同時(shí)提供給下一級(jí)的并行乘加模塊和運(yùn)算控制模塊,。
2.2.3 初始化子模塊
    初始化狀態(tài)機(jī)如圖5所示,,分為空閑、初始化和循環(huán)三個(gè)狀態(tài),。根據(jù)讀入的標(biāo)簽數(shù)據(jù)tag,,判斷該幀測(cè)試數(shù)據(jù)是否有效,從而決定是否開始運(yùn)算過程,。當(dāng)接收的clr_tag有效時(shí),,表示該幀的最后一個(gè)數(shù)據(jù)已經(jīng)進(jìn)入移位寄存器,此時(shí)判斷tag是否有效,。若有效,,則提取tag中的話路號(hào),輸出至運(yùn)算控制模塊,,同時(shí)使load_tv,、load_code兩個(gè)信號(hào)有效。load_tv為加載測(cè)試矢量使能,,load_code為加載碼本使能,。

 


2.2.4 運(yùn)算控制模塊
    對(duì)于時(shí)分復(fù)用的多路電話信道,控制模塊首先要根據(jù)標(biāo)簽對(duì)輸入的測(cè)試矢量完成分路計(jì)數(shù)的功能,。當(dāng)id_re-ady有效時(shí),,讀入話路號(hào)slice_id,進(jìn)行幀計(jì)數(shù),,對(duì)應(yīng)到說話人識(shí)別系統(tǒng)前端,就是對(duì)輸入話音進(jìn)行計(jì)時(shí),。計(jì)數(shù)結(jié)果將決定對(duì)當(dāng)前話路是繼續(xù)累加還是進(jìn)行判決,。如果計(jì)滿設(shè)定的幀數(shù)M,則使判決信號(hào)rcg_en為高,,輸出至累加/判決子模塊,。
    運(yùn)算控制模塊還要為累加和存儲(chǔ)器產(chǎn)生地址和寫請(qǐng)求信號(hào),地址和寫請(qǐng)求也輸入到累加/判決子模塊,。地址的產(chǎn)生依賴于話路號(hào)slice_id和碼本的個(gè)數(shù)S,。
2.2.5 并行乘加及比較選擇模塊
    并行乘加模塊由24個(gè)乘法器構(gòu)成并行乘法陣列,24個(gè)乘結(jié)果直接輸出到5級(jí)流水式加法器樹,,并行乘加結(jié)果為||x·c||+e,,在以opr_en為基準(zhǔn)進(jìn)行相應(yīng)延遲后得到的使能信號(hào)的作用下,進(jìn)行流水輸出,。這里的乘法是有符號(hào)數(shù)乘法,,利用FPGA內(nèi)部的DSP塊實(shí)現(xiàn),,在用HDL語言描述時(shí),需指明乘法器輸入為有符號(hào)數(shù),。并行乘法是提高速度的關(guān)鍵,,在一個(gè)時(shí)鐘周期內(nèi)即可完成24次乘法,結(jié)果直接相加,,加法器樹也在使能信號(hào)作用下以流水線形式輸出,。比較選擇模塊由寄存器和比較器構(gòu)成,與并行乘加單元共同完成量化功能,,并暫存量化誤差,。
2.2.6 累加/判決模塊及緩存結(jié)構(gòu)
    累加/判決模塊及緩存結(jié)構(gòu)是實(shí)現(xiàn)分路判決的關(guān)鍵,上面提到的并行乘加和比較選擇模塊實(shí)現(xiàn)的是矢量量化的功能,,其目的是得到量化誤差,,而接下來則需要對(duì)量化誤差進(jìn)行累加,并根據(jù)累加和進(jìn)行判決,。累加和緩存采用以碼本號(hào)為橫坐標(biāo),、以話路號(hào)為縱坐標(biāo)的二維結(jié)構(gòu),這樣做的好處是在進(jìn)行分路的同時(shí),,可以利用地址信息作為判決結(jié)果,。圖6以32路話、64個(gè)碼本為例,,其中坐標(biāo)為(i,,j)的單元格的內(nèi)容為第i路說話人對(duì)第j個(gè)碼本的距離累加和。

 


    為了防止累加和溢出,,該部分緩存利用片內(nèi)RAM實(shí)現(xiàn),,并采用增加位寬的方式,增加16位,,即可提供最多65 536幀的誤差累加而保證無溢出,。利用FPGA可相對(duì)自由的定義數(shù)據(jù)及存儲(chǔ)格式來處理溢出問題,這是DSP系統(tǒng)無法比擬的優(yōu)勢(shì)之一,。當(dāng)判決使能rcg_en為低時(shí),,根據(jù)地址值,將到來的數(shù)據(jù)累加到相應(yīng)的存儲(chǔ)單元,;當(dāng)rcg_en高時(shí),,依次讀出該話路所對(duì)應(yīng)的行中每個(gè)存儲(chǔ)單元的值,進(jìn)行比較,,同時(shí)保存并更新最大值所對(duì)應(yīng)的地址,,作為結(jié)果輸出。
3 仿真與綜合結(jié)果
    本系統(tǒng)選擇的目標(biāo)器件為Altera公司的StratixII 系列中的EP2S60F1020C3,配置有36個(gè)36×36bit硬件乘法器,,能對(duì)本設(shè)計(jì)中的并行乘加結(jié)構(gòu)提供足夠的支持,。設(shè)計(jì)采用Verilog HDL語言描述,利用QuartusII 7.1自帶的綜合工具綜合,,用Modelsim6.1進(jìn)行仿真,。圖7為模塊聯(lián)調(diào)時(shí)部分信號(hào)的仿真波形圖,顯示了初始化完成新一幀開始運(yùn)算的情況,,當(dāng)加載測(cè)試矢量和碼本矢量的使能信號(hào)load_tv和load_code有效后,,運(yùn)算開始。其中前面處理單元寫入FIFO的特征參數(shù)為低速數(shù)據(jù),,判決模塊在讀滿下一幀之前要處理完當(dāng)前寄存器中的數(shù)據(jù),。

 


    表1為在32路話、64個(gè)碼本,、時(shí)鐘約束100M的條件下,,利用QuartusII進(jìn)行綜合、布局布線后的主要資源利用率及時(shí)序情況,。

 


    從資源利用情況來看,,因?yàn)樵O(shè)計(jì)采用了并行乘法,所以消耗最多的是FPGA內(nèi)置的DSP資源,,其次是片上RAM資源,,主要用于累加和緩存,當(dāng)話路數(shù)或碼本數(shù)發(fā)生改變時(shí),,消耗的RAM資源也會(huì)相應(yīng)變化,。整個(gè)系統(tǒng)可穩(wěn)定運(yùn)行于100MHz時(shí)鐘,對(duì)于一個(gè)E1鏈路,、64個(gè)碼本,,完成一幀測(cè)試矢量量化誤差計(jì)算所需時(shí)間為64×64×10=40960ns,遠(yuǎn)小于完成一個(gè)2M鏈路實(shí)時(shí)判決所需時(shí)間0.5ms(16ms內(nèi)到來32幀測(cè)試矢量,,即每幀最慢處理時(shí)間為0.5ms),,留有充足的設(shè)計(jì)裕量,可擴(kuò)展性較好,。
    隨著FPGA技術(shù)的發(fā)展,其在數(shù)字信號(hào)處理領(lǐng)域的應(yīng)用范圍迅速擴(kuò)大,,使得利用FPGA實(shí)現(xiàn)復(fù)雜算法成為現(xiàn)實(shí),。利用VQ原理進(jìn)行說話人識(shí)別,其硬件結(jié)構(gòu)從功能上可分為兩個(gè)部分:矢量量化部分和利用量化誤差累加和進(jìn)行判決的部分,。其中矢量量化部分的結(jié)構(gòu)可根據(jù)應(yīng)用需求和所選器件的資源情況靈活改變,。例如,若器件的內(nèi)置DSP塊資源緊張,則可以減少乘法器及加法器的數(shù)量,,改為乘累加的形式,,用兩個(gè)以上時(shí)鐘周期完成一次矢量距離運(yùn)算。本設(shè)計(jì)中矢量量化部分和多路判決部分是相對(duì)獨(dú)立的,,量化部分結(jié)構(gòu)改變并不影響判決部分,;若話路數(shù)或碼本數(shù)發(fā)生變化,則只需對(duì)累加和緩存大小進(jìn)行調(diào)整即可,。
    目前,,本設(shè)計(jì)已成功應(yīng)用于多路實(shí)時(shí)說話人識(shí)別系統(tǒng),可滿足至少1個(gè)2M鏈路,、64個(gè)說話人集合的閉集判決,,并可根據(jù)實(shí)際情況擴(kuò)展。
參考文獻(xiàn)
[1] 王炳錫.實(shí)用語音識(shí)別基礎(chǔ)[M].北京:國防工業(yè)出版社,,2005.
[2] 吳樂南.數(shù)據(jù)壓縮[M].北京:電子工業(yè)出版社,,2000.

[3] LINDE Y,BUZO A,,GRAY R M.An Algorithm for Vector Quantizer Design[J].IEEE Transactions on Communications,,1980,28(1):84-95.
[4] 王煒.文本無關(guān)的連續(xù)自然語音的說話人識(shí)別及基于DSP的實(shí)現(xiàn)[D].鄭州:解放軍信息工程大學(xué),,2004.
[5] 王炳錫.語音編碼[M].西安:西安電子科技大學(xué)出版社,,2002:102-104.
[6] [美]PARHI K K著.VLSI數(shù)字信號(hào)處理系統(tǒng):設(shè)計(jì)與實(shí)現(xiàn).陳弘毅譯.北京:機(jī)械工業(yè)出版社,2004.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。