關於語音增強的一點小筆記

2021-10-16 03:10:26 字數 2419 閱讀 1842

1、什麼是白雜訊、有色雜訊?

白雜訊:功率譜密度在整個頻帶上是均勻分布的。

有色雜訊:除了白雜訊以外的雜訊

粉紅雜訊:1/f雜訊,功率譜密度隨頻率的公升高而減少

2、雜訊分類?

雜訊分為加性雜訊和非加性雜訊,一般非加性雜訊可以轉換為加性雜訊。加性雜訊包括:週期性雜訊、脈衝雜訊、寬頻雜訊、同頻帶語音干擾。非加性雜訊包括傳輸雜訊。

週期性雜訊:主要是發動機發出的週期性振動導致,在頻譜上呈現離散譜線,這些窄帶頻譜如果固定不變就用固定濾波器,如何頻譜會發生變化就用自適應濾波器

脈衝雜訊:主要是放電造成,在時域上呈現為窄脈衝,可以使用插值方法在時域平滑

寬頻雜訊:雜訊和純淨語音在時域和頻域都有交疊,一般如果是平穩雜訊可以使用譜減法、維納濾波、基於統計的方法;如果是非平穩雜訊,可以使用卡爾曼濾波

同頻帶語音干擾:一般需要預先知道雜訊源,通過自適應濾波或者頻譜增強的方法(使用梳妝濾波器提取出純淨語音的基頻和諧波分量,再重構)

傳輸雜訊:電路傳輸時造成的雜訊,和普通背景雜訊不同,在時域上表現為純淨語音和雜訊的卷積,需要使用同態處理,將非加性雜訊變為加性雜訊。

3、關於語音增強及整個行業的發展前景

語音增強是從干擾雜訊中提取出純淨語音的過程。

分類----主要分為兩大類,基於訊號處理的方法、基於機器學習的方法。基於訊號處理的方法又可以分為單通道處理和多通道處理(麥克風陣列),單通道處理主要包括基於短時譜估計(如譜減、維納濾波、基於統計的方法)、基於先驗知識(預先知道雜訊型別)的自適應濾波、另外還有像小波變換、子空間等;多通道處理主要是麥克風陣列波束形成。上述都是傳統的語音增強方法,隨著目前機器學習的廣泛使用,許多用傳統方法難以處理的雜訊,使用機器學習的方法可以容易得處理,現在流行的主要包括基於隱馬爾科夫模型、基於矩陣分解、基於淺層神經網路、基於深層神經網路。

發展----一方面使用環境越來越複雜,從近場拾音向遠場拾音發展;另外人對聲音的要求越來越高,從聽懂向聽得舒服發展,使得語音增強演算法難度越來越複雜,新的演算法不斷湧現,特別是硬體的發展帶動深度學習這些複雜演算法在工業界的實用,未來發展前景必然很廣大。

4、關於webrtc回音消除,存在什麼問題和優化點

webrtc的回音消除主要包括線性回音消除和非線性回音消除兩部分,線性回音消除採用的是nlms的自適應濾波器,使用分段塊的方式在頻域實現,非線性濾波主要對線性濾波無法消除的非線性回聲進行消除,利用遠近端、近端誤差相關性,來判斷當前狀態的回聲殘留程度來賦予不同的衰減值,同時還設定乙個目標抑制度,用以實現不同程度地衰減。存在的問題是1)自適應濾波器使用的是固定步長,在雙講階段仍然更新濾波器;2)非線性階段側重於消除回聲,對雙講會有較大的壓制。優點是1)非線性處理可以讓回聲消除比較乾淨。優化方案是1)採用變步長的自適應濾波器;2)非線性階段對雙講做保護

5、關於speex回音消除,存在什麼問題和優化點

speex回音消除主要包括線性回音消除和後處理,線性回音消除採用nlms的自適應濾波器,使用mdf(長階自適應濾波器時延大、計算量大,切分成若干個短階濾波器,分別對輸入訊號做處理,並將濾波器輸出累加求和得到最終的輸出,好處是時延小、計算量小、更新速度快)的方式在頻域實現,後處理包括殘留回聲估計和平穩雜訊的估計,最後使用mmse在對數域實現。存在的問題是1)殘留回聲是由線性濾波器估計出來的,難以消除非線性回聲。優點是1)自適應濾波器迭代步長計算方法採用mader法,是理論的最優估計演算法,2)雙濾波器結構保證單講快速更新,雙講緩慢更新。優化方向是1)增加非線性處理操作。

6、webrtc和speex的區別

speex在系統線性好的環境下表現會很好,但線性差的環境下表現較差;而webrtc則通用性更強,但是雙講效果不佳;目前webrtc已經優化到aec3,實測雙講效果確實變好了,但回聲沒能消除乾淨。沒辦法,單講回音和雙講壓制就像乙個蹺蹺板,想調整到乙個非常理想的狀態很困難,這也是最考驗演算法工程師的點。

7、如何評價演算法好壞

一是主觀判斷如mos法,讓人來聽聲音的好壞,主要是兩方面如可懂度、音質;二是客觀判斷如訊雜比、雜訊衰減程度、語音失真程度。一方面要儘量減少雜訊,另一方面要盡量避免語音失真。對於回聲消除主要看erle(回聲返回損失增強,殘留回聲能量/實際回聲能量),單講erle<-45db,雙講erle<-30db

8、調參的心得

首先得有乙個夠大夠好的資料集,以保證用資料集跑出來的引數是正確的,其次就分兩種情況:一是人工調參,把資料集扔到演算法中跑一邊,基於先驗模型得到乙個粗的引數,用這個引數再把資料集跑一邊,再得到乙個更準確一點的引數,迴圈往復就得到了乙個相對不錯的引數;另外就是機器調參,把含噪語音和純淨語音一股腦扔給機器,讓機器反覆迭代地跑,最終得到乙個好的引數。其實兩者各有利弊,傳統方法基於固定模型優點是實現簡單,只要是模型涵蓋的場景都可以處理,缺點自然是每種模型都有乙個處理範圍,超過這個範圍就沒用了;深度學習方法簡單來講就是要找到乙個萬能模型,可以適配各種場景,優點自然是一招制敵,缺點是需要大量的資料集覆蓋所有場景。目前現狀是傳統方法基本到了乙個瓶頸,想突破太困難,特別是對於非平穩雜訊,而深度學習就是新世界的大門,先不管門後面是不是乙個坑,進去再說,不然找工作都體現不出自己的段位。

jdbc一點小筆記

jdbc的常用介面的步驟,1使用driver或者class.forname 進行註冊驅動 2使用drivermanager進行獲取資料庫的鏈結 使用connection獲取語句物件 使用語句物件介面statement方法執行查詢或更新操作 查詢的resultset是結果集使用之前一定要先判斷是否存在...

關於new的一點筆記

必須delete用new建立物件的那個位址。而樓主pa getpointa 這樣其實已經改變了原來的那個new出來的位址,這時候delete就可能有問題了 如果getpointa返回的也是同一種型別的指標,且該指標也是被new出來的話,那麼delete pa這句話本身也不會出錯。否則,就錯了 另外,...

關於Binder的一點筆記

這個方法是用來將服務端的binder物件轉換成客戶端所需的aidl介面型別物件,這種轉換時區分程序的,那麼如何區分呢?咱們先做乙個實驗,建立乙個service,在乙個activity中繫結它,然後再將service設定為與activity同一程序和不再同一程序兩種情況,並列印出serviceconn...