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

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

 

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

 


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

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

    系統采用24維MFCC參數(12維MFCC及12維ΔMFCC),數據位寬為32位。因為整個系統的典型應用為多路電話信道(如E1信道),可完成多路電話語音的同時處理。為了區分當前參數屬于哪一話路,采用的方式是給每一幀參數前加上一個標簽,也是32位寬,內容包括話路號及格式信息,這都由系統前端處理完成。因此VQ判決模塊的實際輸入數據可視為25維參數,以FIFO為接口串行輸入。輸入幀格式如圖2。

 


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

 


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

 


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

 


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

 


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

 


    從資源利用情況來看,因為設計采用了并行乘法,所以消耗最多的是FPGA內置的DSP資源,其次是片上RAM資源,主要用于累加和緩存,當話路數或碼本數發生改變時,消耗的RAM資源也會相應變化。整個系統可穩定運行于100MHz時鐘,對于一個E1鏈路、64個碼本,完成一幀測試矢量量化誤差計算所需時間為64×64×10=40960ns,遠小于完成一個2M鏈路實時判決所需時間0.5ms(16ms內到來32幀測試矢量,即每幀最慢處理時間為0.5ms),留有充足的設計裕量,可擴展性較好。
    隨著FPGA技術的發展,其在數字信號處理領域的應用范圍迅速擴大,使得利用FPGA實現復雜算法成為現實。利用VQ原理進行說話人識別,其硬件結構從功能上可分為兩個部分:矢量量化部分和利用量化誤差累加和進行判決的部分。其中矢量量化部分的結構可根據應用需求和所選器件的資源情況靈活改變。例如,若器件的內置DSP塊資源緊張,則可以減少乘法器及加法器的數量,改為乘累加的形式,用兩個以上時鐘周期完成一次矢量距離運算。本設計中矢量量化部分和多路判決部分是相對獨立的,量化部分結構改變并不影響判決部分;若話路數或碼本數發生變化,則只需對累加和緩存大小進行調整即可。
    目前,本設計已成功應用于多路實時說話人識別系統,可滿足至少1個2M鏈路、64個說話人集合的閉集判決,并可根據實際情況擴展。
參考文獻
[1] 王炳錫.實用語音識別基礎[M].北京:國防工業出版社,2005.
[2] 吳樂南.數據壓縮[M].北京:電子工業出版社,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] 王煒.文本無關的連續自然語音的說話人識別及基于DSP的實現[D].鄭州:解放軍信息工程大學,2004.
[5] 王炳錫.語音編碼[M].西安:西安電子科技大學出版社,2002:102-104.
[6] [美]PARHI K K著.VLSI數字信號處理系統:設計與實現.陳弘毅譯.北京:機械工業出版社,2004.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 一级做a爰全过程免费视频 一级做a爰片鸭王 | 成人无遮挡免费网站视频在线观看 | 人人做人人插 | 欧美日韩国产手机在线观看视频 | 成人性生活视频 | 国产欧美精品一区aⅴ影院 国产欧美成人一区二区三区 | 国产欧美一区二区三区视频 | 成人女人a毛片在线看 | 一本大道香焦在线视频 | 色秀影院| 美女天天干 | 天天色天天干天天 | 亚洲无遮挡| 欧美妞干网 | 中文字幕 日韩在线 | 婷婷免费高清视频在线观看 | 天天舔天天操天天干 | 曰韩一级片 | 日日日日操 | 亚洲国产情侣偷自在线二页 | 国产大片www | 九九热视频在线免费观看 | 日韩美在线 | 欧美人成人亚洲专区中文字幕 | h片在线| 免费啪啪社区免费啪啪手机版 | 国产网站麻豆精品视频 | 狠狠色狠狠色综合久久第一次 | 羞羞视频在线观看 | 亚洲首页国产精品丝袜 | 国产精品久久久尹人香蕉 | 九九精品在线播放 | 欧美在线视频免费播放 | 手机看理论片 | 免费一级欧美大片视频在线 | 国产麻豆精品高清在线播放 | aaa国产| 亚洲欧美日韩中文高清一 | 国产精品久久久久一区二区 | 欧美日韩视频在线第一区二区三区 | 成人免费网站久久久 |