<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于短時(shí)能量和短時(shí)過(guò)零率的VAD算法及其FPGA實(shí)現(xiàn)

          基于短時(shí)能量和短時(shí)過(guò)零率的VAD算法及其FPGA實(shí)現(xiàn)

          作者:李昱 林志謀 黃云鷹 盧貴主 廈門大學(xué) 時(shí)間:2008-06-19 來(lái)源:電子設(shè)計(jì)應(yīng)用 收藏

            語(yǔ)音激活檢測(cè)(Voice Activity Detection)是一種通過(guò)特定的判決準(zhǔn)則判斷語(yǔ)音中出現(xiàn)的停頓和靜默間隔,檢測(cè)出有效語(yǔ)音部分的技術(shù)。運(yùn)用這種技術(shù)可以在確保語(yǔ)音質(zhì)量的前提下,對(duì)不同類別的語(yǔ)音段采用不同的比特?cái)?shù)進(jìn)行編碼,從而降低語(yǔ)音的編碼速率。由于在雙工移動(dòng)通信系統(tǒng)中,一方只有35%的時(shí)間處于激活狀態(tài)[1],如何降低靜音期的編碼速率對(duì)于減少傳輸帶寬、功率以及容量具有積極的作用,因此技術(shù)在語(yǔ)音通信領(lǐng)域具有重要的使用價(jià)值。隨著適合于變比特率語(yǔ)音編碼的CDMA和PRMA等多址技術(shù)的出現(xiàn),應(yīng)用于蜂窩的語(yǔ)音激活檢測(cè)的重要性也隨之提高[2]。

          本文引用地址:http://www.ex-cimer.com/article/84500.htm

            由于語(yǔ)音通信的特殊性,要求檢測(cè)過(guò)程能達(dá)到實(shí)時(shí)性的要求。而目前主流DSP芯片的并行度并不高,因此在實(shí)時(shí)處理的要求下,保證語(yǔ)音質(zhì)量和降低語(yǔ)音的編碼速率兩者難以兼顧。而現(xiàn)場(chǎng)可編程門陣列()由于其硬件具有可編程的靈活性,可以實(shí)現(xiàn)較高的并行度,從而可以在滿足實(shí)時(shí)性要求的前提下,很好地保證語(yǔ)音質(zhì)量并降低語(yǔ)音的編碼速率。

            1 算法及檢測(cè)流程

            1.1 算法簡(jiǎn)述

            語(yǔ)音激活檢測(cè)算法可以基于時(shí)域或頻域。本文采用的算法是時(shí)域分析的方法。算法對(duì)于輸入信號(hào)的檢測(cè)過(guò)程可分為檢測(cè)和檢測(cè)兩個(gè)部分。算法以檢測(cè)為主,檢測(cè)為輔。根據(jù)語(yǔ)音的統(tǒng)計(jì)特性,可以把語(yǔ)音段分為清音、濁音以及靜音(包括背景噪聲)三種。在本算法中,檢測(cè)可以較好地區(qū)分出濁音和靜音。對(duì)于清音,由于其能量較小,在短時(shí)能量檢測(cè)中會(huì)因?yàn)榈陀谀芰块T限而被誤判為靜音;則可以從語(yǔ)音中區(qū)分出靜音和清音。將兩種檢測(cè)結(jié)合起來(lái),就可以檢測(cè)出語(yǔ)音段(清音和濁音)及靜音段。

            1.2 檢測(cè)流程

            檢測(cè)流程:對(duì)輸入信號(hào)先進(jìn)行高通濾波,減弱以噪聲為主的信號(hào)能量。接著進(jìn)行窗長(zhǎng)為80個(gè)數(shù)據(jù)的加窗處理,然后計(jì)算該幀的平均能量,再利用短時(shí)能量進(jìn)行初判。若平均能量大于門限則判為語(yǔ)音幀,若平均能量小于門限則判為靜音幀。對(duì)于初判為靜音幀的幀再進(jìn)行VAD平滑,即參考前三幀的情況:如果前三幀中至少包含一幀非平滑過(guò)的語(yǔ)音幀,則將該幀平滑為語(yǔ)音幀,同時(shí)記錄下該幀為平滑所得的語(yǔ)音幀;反之,則判斷為靜音幀。如果平滑結(jié)果仍為靜音幀,且當(dāng)前幀的過(guò)零率介于30~70之間時(shí),則改判為語(yǔ)音幀;反之則仍判為靜音幀[3]。VAD算法的檢測(cè)流程圖如圖1所示。

            此外,由于人耳的聽覺具有掩蔽效應(yīng),因此有必要對(duì)短時(shí)能量門限進(jìn)行更新[3]。本算法所采用的門限更新方式是:如果連續(xù)檢測(cè)到三幀語(yǔ)音,為了更好地檢測(cè)到靜音,將短時(shí)能量門限提高3dB,但如果提高后的門限超過(guò)當(dāng)前幀的平均能量減12dB,則不提高門限;如果連續(xù)檢測(cè)到三幀靜音,為了更好地檢測(cè)到語(yǔ)音,將短時(shí)能量門限降低3dB,但如果降低后的門限小于當(dāng)前幀的平均能量加12dB,則不降低門限。此外,為了防止門限變得太高或降得太低, 還應(yīng)把門限限制在GATE_MIN、GATE_MAX范圍內(nèi)。

            2 系統(tǒng)實(shí)現(xiàn)及優(yōu)化

            本設(shè)計(jì)采用QuartusII以及ModelSim進(jìn)行開發(fā)(ModelSim是Mentor Graphics公司的仿真軟件)。QuartusII是Altera公司的一套開發(fā)/CPLD的EDA軟件,可以完成從設(shè)計(jì)輸入、功能仿真、綜合優(yōu)化、后仿真、引腳配置、布局布線到配置芯片的一系列/CPLD的開發(fā)流程,并提供調(diào)用其他EDA工具,如ModelSim、Synplify/Synplify Pro、FPGA Complier的接口。

            本設(shè)計(jì)的輸入為16位PCM編碼的數(shù)字語(yǔ)音信號(hào),輸出是每80個(gè)數(shù)據(jù)為一幀的語(yǔ)音信號(hào)的檢測(cè)結(jié)果,其中高電平表示語(yǔ)音,低電平表示靜音。根據(jù)所用算法的特點(diǎn),將本設(shè)計(jì)劃分成五個(gè)模塊:模塊、高通濾波模塊、平均能量模塊、判決模塊以及控制模塊。系統(tǒng)結(jié)構(gòu)框圖如圖2所示。

            2.1 模塊

            輸入的語(yǔ)音信號(hào)的采樣率為8kHz,如果將8kHz作為系統(tǒng)的時(shí)鐘頻率,極大地削弱了FPGA芯片的速度優(yōu)勢(shì)。因此系統(tǒng)需要兩個(gè)時(shí)鐘,一個(gè)是頻率為8kHz的采樣時(shí)鐘,另一個(gè)為系統(tǒng)主時(shí)鐘。

            在FPGA設(shè)計(jì)中,多時(shí)鐘設(shè)計(jì)會(huì)帶來(lái)不穩(wěn)定的隱患。為了提高系統(tǒng)的穩(wěn)定性,本設(shè)計(jì)采用一個(gè)雙口的作時(shí)鐘隔離。FIFO模塊具有16位的數(shù)據(jù)輸入口及16位的數(shù)據(jù)輸出口、8kHz時(shí)鐘輸入口以及系統(tǒng)主時(shí)鐘輸入口。此外,由于FIFO的讀速度大于寫速度,因此當(dāng)FIFO為空時(shí),需要輸出一個(gè)empty信號(hào)。

            在高通濾波、平均能量計(jì)算、判決、控制這四個(gè)模塊中均可采用單時(shí)鐘設(shè)計(jì),而且所使用的時(shí)鐘均為系統(tǒng)主時(shí)鐘。

            2.2 模塊

            對(duì)輸入信號(hào)進(jìn)行高通濾波的預(yù)處理。高通的傳輸函數(shù)采用CS-ACELP算法所使用的傳輸函數(shù)[4]:


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();