国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA 的聲紋識別系統(tǒng)設計

2022-10-22 03:37:08賈子龍潘士杰郭子昊唐進姚
電子器件 2022年4期
關鍵詞:聲紋識別梅爾音頻

賈子龍潘士杰郭子昊唐 進姚 燕

(北京郵電大學自動化學院,北京 100876)

隨著科技的發(fā)展,人工智能技術的廣泛應用,智能語音系統(tǒng)已廣泛融入到人們生活中,智能對話,通過語音控制設備完成指定的工作等應用隨處可見。聲音作為人與人之間最自然的交流媒介,其中包含著大量不同種類的信息。因此,語音學目前有三大主要的研究領域,包括聲紋識別、語音識別和情感識別[1]。聲紋識別是通過對一種或多種語音信號的特征進行分析進而實現(xiàn)對輸入信號的識別,這種特性對于每個人來說都是獨有的,就如同指紋一樣,每個個體之間普遍具有差異性,主要取決于人體咽喉、鼻腔和口腔等器官的形狀、尺寸和位置等因素以及人們對發(fā)聲器官的操縱方式。目前針對聲紋識別最常用的一些方法為模板匹配法、最近鄰方法、神經元網絡方法,VQ 聚類法等[2]。其基本原理大致均為通過提取說話人聲音頻譜,經處理后提取一些特征參數(shù)再與目標聲紋的參數(shù)進行比對檢測。聲紋識別同樣屬于一類模式識別問題,伴隨著人工智能的發(fā)展,也逐漸朝著深度學習的方向不斷發(fā)展,基于深度學習的聲紋識別,經過大量數(shù)據(jù)訓練后得到的模型,其識別效果有著顯著的提升。文獻[3]提出了一種深度置信網絡(Deep Belief Network,DBN)和深度神經網絡(Deep Neural Network,DNN)的自適應通用模型,利用i-Vector 構建全局通用DBN 模型。徐志京等人[4]設計了一種加權全序列的卷積神經網絡(Weighted Deep Fully Convolutional Neural Network,W-DFCNN),可以更好地適應高頻梅爾倒譜小波系數(shù)(High Mel Frequency Cepstrum Wavelet Coefficient,HMFCWC)特征。李晉等人[5]提出了一種利用全變量空間,將語音數(shù)據(jù)進行線性降維后,對聲紋模型向量i-vector 進行信道補償?shù)姆椒ā?/p>

CNN 作為機器學習領域常用技術,廣泛地應用在目標識別等方面,對于經常用于檢測的模型,為了提高檢測效果,往往都有巨大的參數(shù)量,也就需要龐大的算力支持[6-7]。CPU 為計算單元少,緩存單元多的結構,處理CNN 時速度較慢。GPU 雖然擁有大量的計算單元,可以有效加速CNN 計算,但其同時也有功耗高,成本高,不便攜的缺點。利用軟件實現(xiàn)聲紋識別,雖然具有較高的靈活性和可操作性,具有更多的資源,可構建更為復雜的網絡,但缺乏合適的硬件通路,使其在高效性及低功耗性上無法做到統(tǒng)一。

利用FPGA 根據(jù)對應算法設計加速網絡結構,可以非常有效地加速CNN 的運算,能效高,延遲低。針對不同的網絡結構可以設計對應的加速電路,可以很好地適應深度學習[8-11]。基于這些優(yōu)點,越來越多的研究者開始關注于FPGA 的硬件加速。但是FPGA 硬件加速也存在一些限制,如常常一個完整的系統(tǒng)需要多個模塊協(xié)同,均占用板卡資源,故板卡資源無法全部分配給CNN 運算,設計時要考慮對資源占用的優(yōu)化;對于不同的網絡,要實現(xiàn)最優(yōu)需要設計不同的硬件電路。盡管如此,F(xiàn)PGA 在CNN 加速方面依然有著極大的實用價值。

聲紋識別現(xiàn)在在很多領域都得到了廣泛應用,常用于刑偵破案、罪犯跟蹤、國防監(jiān)聽、個性化應用、證券交易、銀行交易、公安取證、個人電腦聲控解鎖、汽車聲控解鎖、身份驗證和識別等[12-14]。在本項目中,選擇使用的是Xilinx 旗下的PYNQ-Z2 開發(fā)板,進行基于FPGA 加速的聲紋識別技術的研究及實現(xiàn)。

1 系統(tǒng)總體設計

本研究基于Xilinx 的PYNQ-Z2 開發(fā)板,實現(xiàn)了具有聲紋識別功能的控制系統(tǒng),系統(tǒng)的硬件框圖如圖1 所示。

圖1 硬件結構框圖

系統(tǒng)首先對PYNQ-Z2 開發(fā)板進行初始化,讀取經過語音數(shù)據(jù)集訓練出的權重和偏置,初始化完成后開始工作。按下按鍵開始錄音,通過麥克風采集48 kHz 采樣率、24 bit、雙通道語音信號。取其中一個通道的音頻信息,提取梅爾頻率倒譜系數(shù)(Mel Frequency Cepstral Coefficients,MFCC)參數(shù),輸入到Xilinx ZYNQ7020 作卷積和池化的并行運算,而后從ZYNQ7020 中輸出得到標簽和準確率。若輸入音頻的標簽相符,即身份正確,將語音信號進行格式轉換,轉成API 輸入要求的16 kHz 采樣率、16 bit、單通道語音信號,并輸入到百度API 中進行語音轉文字操作,得到字符串形式命令。對命令字符串進行關鍵字檢索,進而調用Arduino I/O 和MIC 執(zhí)行命令。如果身份驗證失敗,輸出音頻“沒有權限”。命令執(zhí)行完成后或者身份錯誤時,重新跳轉到按鍵開始處,等待下一次命令輸入。

1.1 MFCC 特征提取

梅爾頻率倒譜系數(shù)與梅爾標度(Mel scale)有著密不可分的關系。梅爾標度是基于人耳對于不同頻段聲音的敏感度不同的特性提出來的,在這個標度下,人耳對頻率的感知度能成為線性關系。為此,出現(xiàn)了梅爾濾波器(Mel-filter banks),它的通帶在低頻處較窄且密,高頻處較寬且疏,從而達到由低頻到高頻分辨率逐漸降低的效果,聲音轉換為梅爾頻譜(Mel Bank Features),來模擬人耳對聲音的感知。梅爾倒譜系數(shù)便是在梅爾頻譜的基礎上,做倒譜分析后的特征系數(shù),通過它及其一階、二階動態(tài)系數(shù),能夠很好地表示聲音的特征[15-16]。

MFCC 特征提取流程如圖2 所示。

圖2 MFCC 特征提取流程圖

MFCC 的提取,一般可分為以下幾個環(huán)節(jié):(1)音頻預處理;(2)離散傅里葉變換;(3)梅爾濾波;(4)動態(tài)特征系數(shù)的提取。

1.1.1 音頻預處理

由于采集設備或人發(fā)聲器官自身的原因可能會出現(xiàn)信號的混疊、高頻失真的問題,對語音信號的質量會產生一定影響,因此在對音頻信號進行分析前,必須對其進行預加重、分幀、加窗等預處理操作,從而盡可能保證后續(xù)的語音處理得到的信號更均勻、平滑,為MFCC 的提取提供優(yōu)質的參數(shù),提高語音處理質量。

預加重:語音信號的平均功率譜受聲門激勵和口鼻輻射的影響,高頻端大約在800 Hz 以上,按6 dB/oct(倍頻程)衰減,頻率越高相應的成分越小,為此要在對語音信號x(n)進行分析與處理之前對其高頻部分加以提升。預加重網絡的輸出y(n)和輸入的語音信號x(n)的關系為:

式中:a為預加重系數(shù)。

分幀:語音信號具有時變特性,而同時也具有短時平穩(wěn)性,一般認為在10 ms~30 ms 的較短時間內,其特性基本保持不變,便可以看作一個準穩(wěn)態(tài)過程。因此對任何語音信號來說,分析與處理必須建立在“短時”的基礎上,即進行“短時分析”,將語音信號分成數(shù)個小段來分析其特征參數(shù),其中每一段稱為一“幀”,幀長取10 ms~30 ms。實際操作時,是將N個采樣點集合成一幀,N的取值與信號的采樣頻率有關,對于MkHz 的采樣率,一般讓N/M落在10~30 內。為避免相鄰兩幀的變化過大,會讓兩相鄰幀之間有一段重疊區(qū)域,此重疊區(qū)域包含了L個取樣點,一般L的值約為N的1/2 或1/3。

加窗:分幀之后,需要緊接著進行加窗處理,加強兩端的連續(xù)性,防止頻譜的泄露。常用的有漢寧窗、漢明窗、矩形窗。本項目采用漢寧窗。

1.1.2 離散傅里葉變換

預處理好的信號,需要利用傅里葉變換將其轉換為頻域下的表征,以更好地觀察信號的特性。

式中:xn為長為N的信號序列。

1.1.3 梅爾濾波

梅爾濾波需要先將信號從Hz 頻率轉變?yōu)槊窢栴l率,具體變換關系為

逆變換:

選取Hz 頻率下的最低頻率與最高頻率,根據(jù)需求濾波器個數(shù)等間隔插入頻率點,這些會是梅爾三角濾波器的對稱中點,再將這些坐標轉化為Hz頻率下的表示,并尋求對應位置數(shù)組f,濾波器傳遞函數(shù)為:

以此便能構建梅爾濾波器組。將預處理好的音頻信號通過前一步設計的梅爾濾波器,就能夠得到音頻的MFCC。再注意將能量為0 的地方調整為eps,以便對數(shù)運算,而后作離散余弦變換

式中,L為升倒譜系數(shù),得到的結果就是MFCC 的特征系數(shù)。

1.1.4 動態(tài)特征系數(shù)的提取

有了MFCC 的特征系數(shù),還需要對其求一階和二階導數(shù)。原因是MFCC 系數(shù)只反映語音在靜態(tài)情況下的特性,而動態(tài)特性亦是語音的另一大特征,只有動靜結合,才能獲得更好的識別性能。

至此,MFCC 及其一、二階系數(shù)提取完畢,每一幀得到13×3 的數(shù)組,可用于后續(xù)神經網絡輸入,將每幀的特征系數(shù)平鋪開來,視作一個矩陣,便能將其運用于卷積神經網絡CNN,并利用FPGA 對其卷積和池化運算進行加速。

1.2 卷積神經網絡分類模型

神經網絡主要由卷積層和池化層組合形成,卷積層可以獲取輸入的特征,池化層會對卷積結果進行子采樣以降低運算復雜度[17]。本文所建立的卷積神經網絡分類模型結構如圖3 所示,其中主要有4 個卷積層、3 個池化層、1 個全連接層。

圖3 CNN 網絡結構圖

表1 為神經網絡各層的卷積核大小及輸出特征的大小,每一層的卷積核大小均為3×3,卷積完成后利用核為2×2 的池化層進行降維,最終輸出為一1×1 的結果。

表1 CNN 各層的卷積核大小及輸出特征大小

1.3 格式轉換

PYNQ 得到的是48 kHz 采樣率、24 bit、雙通道的輸入音頻信號,而語音轉文字所用API 的輸入要求是16 kHz 采樣率、16 bit、單通道音頻信號。利用soundfile 庫優(yōu)先將輸入信號轉化為16 bit,而后由wave 讀取輸入音頻的時間序列,該序列采用二進制記錄。雙通道下,可視序列的奇數(shù)項為左聲道,偶數(shù)項為右聲道,簡單篩去右聲道即可,這樣就能讓雙聲道變單聲道。而后48 kHz 采樣率和16 kHz 采樣率的聯(lián)系在于,48 kHz 采樣率下每隔3 個點是16 kHz采樣率下的一個點,故要48 kHz 采樣率轉16 kHz采樣率,只需對序列隔3 取1。又因為是雙聲道轉單聲道,就變成了對序列隔6 取1。之后再將序列保存為wav 文件,即可滿足格式要求。

2 聲紋識別基于FPGA 的實現(xiàn)

系統(tǒng)數(shù)據(jù)流如圖4 所示,對于Zynq 芯片主要包含兩大功能模塊:PS(Processing System) 與PL(Programmable Logic)。其中PS 模塊是一個基于ARM 處理器的處理系統(tǒng),PL 模塊是基于Xilinx 7 系列架構的可編程邏輯單元。

圖4 系統(tǒng)數(shù)據(jù)流圖

系統(tǒng)的工作流程為:系統(tǒng)先從外設中獲取音頻并將其存儲在PS 存儲單元中,經過處理器提取處理后驅動AXI-DMA 單元將數(shù)據(jù)輸送到片上處理器,之后ARM 會控制CNN 硬件加速單元讀取特征和權重來進行計算,并將結構送回片上存儲器再經由AXI_DMA 送回到PS 的存儲器中,再進一步處理輸出。

2.1 基于FPGA 的MFCC 特征參數(shù)提取

實際所使用的PYNQ-Z2 開發(fā)板的環(huán)境是一個簡易的32 位Linux 系統(tǒng),而不幸的是,TensorFlow 對于32 位系統(tǒng)的支持僅僅停留在1.0 版本之前,而這階段版本跨度變化巨大,從靜態(tài)圖網絡變?yōu)榱藙討B(tài)圖網絡,代碼書寫規(guī)范和要求也有很大改變。另一方面,開發(fā)板難以安裝librosa 包,不能簡單地依靠librosa 進行聲音特征的提取,也要求構建一套音頻特征采集的方案。

除此之外,還有一些其他常用的語音信號處理函數(shù)如pyaudio、pydub,開發(fā)板也不支持,因而無法使用,需要按照上述原理手寫代碼以實現(xiàn)對讀取到的音頻進行分切和梅爾頻譜的提取,即對語音信號分別作預加重、分幀、加窗、快速傅里葉變換FFT、取絕對值、經過Mel 濾波器、取對數(shù)、離散余弦變換,最終取得MFCC 特征參數(shù)。而后再對其作一階差分和二階差分,獲取其一階參數(shù)和二階參數(shù)。

經過上述幾步獲得的MFCC 參數(shù)組,是基于語音信號分幀后的每一幀語音信號,因此,理論上,對于每個人,每一幀的語音信號的MFCC 參數(shù)組是大致相同的。為了優(yōu)化運算速率,同時保證一定的準確度,對MFCC 參數(shù)組作裁剪,只取連續(xù)80 幀的語音信號對應的MFCC 參數(shù)組。取20 幀~100 幀,可以在一定程度上避免最初的靜音干擾。同時,為了方便后續(xù)的卷積和池化運算,篩掉最后3 個二階特征參數(shù),只取前36 個MFCC 特征參數(shù)。這樣處理之后,得到一個80×36 的特征矩陣,以供后續(xù)處理。

本項目利用TensorFlow1.0 對代碼進行重寫后采用Adma 算法做訓練,同樣在得到聲紋識別的模型后,錄入音頻并提取梅爾頻譜,放入模型中比對。

以上便是在32 位FPGA 開發(fā)板上的實現(xiàn)方式,由于很多庫函數(shù)不支持而無法使用,因此有不少方面需要單獨寫代碼實現(xiàn),但實現(xiàn)后經驗證與在win10 環(huán)境下的效果基本一致。

2.2 基于FPGA 的卷積網絡實現(xiàn)

由于卷積神經網絡具有特有的計算模式,利用通常的方式實現(xiàn)很難滿足其性能要求,為此,采用FPGA 加速的方式可以非常有效地提高CNN 的性能,主要目的為充分利用FPGA 平臺所提供的計算資源以實現(xiàn)高效的循環(huán)展開及流水線化[18]。

2.2.1 卷積和池化ip 核的建立

如果直接基于python 作卷積運算,每次卷積將作j×k次循環(huán)乘法,時間復雜度較高。而FPGA 能進行多路并行運算,為了充分利用其并行運算優(yōu)勢。本研究通過HLS 生成conv 卷積IP 和pool 池化IP,重構base.bit 并將上述兩個IP 核添加到base 中,之后依據(jù)輸入輸出地址重寫python 函數(shù)。如此操作后,雖然能夠正常生成bit,但是卻無法進行正常的卷積和池化運算,判斷原因為加入這兩個IP 核后,片上資源利用率過高,或是引腳間沖突,故對電路進行一定裁剪,去掉沒有使用而資源占比很大的video模塊后,能正常生成bit,并且功能正常。對于一個神經網絡,通常其運算量是非常大的,通??梢岳肍PGA 硬件的并行化來設計一個運算通路,即使用硬件來對這個網絡進行加速。

對于一個卷積神經網絡,其進行的操作主要有三個,即卷積、池化和全連接運算。其中全連接運算還可以看成卷積運算的一種特殊形式。故而只需要設計兩種通用數(shù)據(jù)通路即可實現(xiàn)該網絡。這樣做可以節(jié)省很多的資源并且具有更高的靈活性。

從圖5 中可以看出,只需要實現(xiàn)兩大通用模塊,一塊實現(xiàn)卷積及Relu 運算,另一塊實現(xiàn)池化運算,通過CPU 可以對兩大模塊的工作參數(shù)及運算結果分別進行配置。

圖5 數(shù)據(jù)通路設計圖

其中卷積的核心為一三維的累加乘法,定義式如下

式中:Fo(co,y,x)表示輸出特征中在(x,y)處的神經元,F(xiàn)i(ci,y,x)表示輸入特征中在(x,y)處的神經元。卷積核的大小為Ky×Kx,輸入特征映射總數(shù)為c層。

對于池化操作,主要有三類:最小池化,最大池化和平均池化,分別作為三種模式,根據(jù)CPU 的指令來選擇。該模塊主體為三個大循環(huán),分別為層數(shù)、寬度、高度,遍歷每一個元素,之后按照模式要求取最大、最小或平均值。

在IP 核建立方面主要使用了高層次綜合工具(HLS)來實現(xiàn),其工作流程如圖6 所示。本研究利用C++編寫并實現(xiàn)了池化和卷積的IP 核,并利用Vivado 將其合并入板卡中,圖7、圖8 即為調整單元模塊前后板卡資源使用情況。如圖7 所示,加入兩個IP 核后,線路復雜,資源將近占滿,運行效率低且容易出錯。其中無用的video 模塊是造成這種情況的主要原因,可以看到,刪去video 模塊后,情況得到了很大改善,其資源使用情況如圖8 所示。

圖6 HLS 總覽

圖7 重建修改前的資源使用情況

圖8 重建修改后的資源使用情況

3 實驗結果

本研究整合了聲紋識別和語音識別,完成了一個比較完善的語音控制系統(tǒng),能夠完成語音輸入、身份驗證、命令識別、命令執(zhí)行等一系列操作。為了展示成果,共尋找了20 人錄制樣本,分別經過CPU、GPU、FPGA 三個平臺測試,如表2 及表3 所示,可以看出,CPU 耗時最長,GPU 最短,F(xiàn)PGA 遠快于CPU,略慢于GPU。

初始化時長:

表2 初始化時長

正常工作時長:

表3 不同平臺處理時間對比

本次實驗成功實現(xiàn)了聲紋識別在PYNQ-Z2 的片上運行并且利用FPGA 對卷積運算進行加速。識別樣本數(shù)量20 人,輸出范圍為包括“未成功識別“在內的20+1 種結果,能夠在較高正確率(3 人測試共100 次,成功識別次數(shù)為88 次)情況下識別出20人中的特定說話人,在遇見20 人以外的其他說話人時,也能夠返回“未能識別”。未采用FPGA 硬件加速時,PYNQ-Z2 實現(xiàn)單詞聲紋識別需要耗時3 s 左右,然而加速之后,該時間明顯降低不少,可以明顯看到FPGA 對聲紋識別速率的提升。

4 結束語

本文主要介紹了基于FPGA 實現(xiàn)聲紋識別的一些關鍵技術,聲紋識別作為一種生物特征識別技術,可以有效地解決語音方面的安全性問題,是將來身份驗證、身份識別等方面的一種有效解決方案。梅爾倒譜系數(shù)可以有效地提取和描述出語音信號中的聲紋特征,利用卷積神經網絡結合FPGA 的并行運算優(yōu)勢可以有效地提高運算速度及識別準確率。同時,該設計仍然有很多可拓展之處

對于Windows+GPU 版,能夠依賴成熟的音頻特征提取庫來獲取梅爾倒譜,因此該過程在單次采樣時幾乎感受不到耗時。但是對FPGA 開發(fā)板而言,即使使用的是PYNQ-Z2,能夠支持Linux 系統(tǒng),但由于其32 位的限制,一些PC 端能使用的庫功能無法正常調用。故針對音頻特征,雖然依照了梅爾倒譜提取的數(shù)學原理對其進行功能復現(xiàn),但是效果并不是很好,占用時間較長。關于這一點,可以如聲紋識別一樣,利用FPGA 做加速運算,同時可以對數(shù)學方法的代碼實現(xiàn)進行優(yōu)化,進而能減少時長占用。

猜你喜歡
聲紋識別梅爾音頻
基于聲紋識別技術的機車司機身份識別與安全控制研究
時代汽車(2024年12期)2024-07-05 22:35:03
基于梅爾頻譜分離和LSCNet的聲學場景分類方法
女詩人梅爾詩集《十二背后》三人談
必須了解的音頻基礎知識 家庭影院入門攻略:音頻認證與推薦標準篇
基于Daubechies(dbN)的飛行器音頻特征提取
電子制作(2018年19期)2018-11-14 02:37:08
聲紋識別中的區(qū)分性訓練
淺談一種基于聲紋識別的教室上課點名系統(tǒng)
音頻分析儀中低失真音頻信號的發(fā)生方法
電子制作(2017年9期)2017-04-17 03:00:46
面向移動終端的語音簽到系統(tǒng)
Pro Tools音頻剪輯及修正
人間(2015年8期)2016-01-09 13:12:42
临高县| 永嘉县| 伊宁县| 两当县| 和静县| 阳东县| 承德市| 开化县| 永福县| 怀安县| 绍兴市| 辽阳县| 增城市| 华池县| 和林格尔县| 新田县| 韩城市| 旬阳县| 嘉峪关市| 镇沅| 砚山县| 云南省| 漳州市| 肇州县| 左权县| 金沙县| 保康县| 永宁县| 海口市| 河西区| 闽清县| 米林县| 手游| 南雄市| 中卫市| 延边| 洮南市| 望奎县| 集安市| 呼伦贝尔市| 丰城市|