1. 程式人生 > >speex降噪演算法流程介紹與演算法原理

speex降噪演算法流程介紹與演算法原理

一、speex降噪流程介紹

本文對speex去噪演算法步驟做一些簡要整理和介紹,以提供給對該演算法感興趣的讀者參考。

 1)preprocess_analysis()包括兩部分,主要是加窗交疊傅立葉(fft)變換等常用的訊號處理演算法。
1.1)預處理
      訊號輸入,加窗,交疊(overlap),時頻傅立葉變換(fft)
1.2)計算能量
      計算頻域能量ps,而filterbnak_compute_bank32()計算基於Bark帶(臨界頻帶)內的帶噪訊號能量。
 2)update_noise_prob()更新噪聲能量,使用的方法比較簡單,即一般的固定迭代因子平滑演算法;
 3)更新mel噪聲譜能量;
 4)計算後驗信噪比和進行先驗信噪比更新:
post_SNR = ps/noise - 1;
gamma = 0.1 + 0.89*(old/(old+noise))^2;
priori_SNR= gamma*max(0,post) + (1-gamma)*old_ps/noise;
 5)先驗信噪比平滑(zeta[i]),用於本底增益計算,計算範圍包括fft域和Bark域(Bark域計算後沒有用到)。 
 6)計算Bark帶(臨界頻帶)內的EM演算法增益和線性頻域上的EM演算法增益。
{注:EM(YARIV EPHRAIM 和 DAVID MALAH) 是語音增強領域的泰斗。}
考慮到在臨界頻帶內幅度譜並不一定符合高斯隨機分佈,所以EM演算法在Bark帶內不能嚴格適用,這一點JEAN-MARC也在c程式碼中做了說明,所以此處只以線性頻率上的EM增益為例進行說明。
     6.1 )   weiner 濾波:prior_snr=   prior_snr /(   prior_snr +1);
     6.2 )  超幾何分佈增益引數 theta= prior_snr *(1+post_snr);
     6.3)   超幾何分佈增益 MM=exp(-theta/2)*[(1+theta)*I0(theta/2)+theta*I1(theta/2)];其中I0和I1是貝塞爾函式。
     6.4)   增益 g=min(1,prior_ratio*mm);
     6.5)   p=gain2[i];gain2是由臨界頻率計算後的增益擴充套件到線性頻域後的增益。
     6.6)   約束增益:如果 g/3>st->gain  則 g=3*st->gain  ;
     6.7)  gain=g;     如果 gain<gain_floor  則  gain =gain_floor  ;
     6.8) 最終幅度譜增益
              gain2={p*sqrt(g)+(1-p)*sqrt(st->gain_floor  )}^2;
   7)將幅度譜增益gain2作用於fft幅度譜

   8)後處理,包括反傅立葉變換(ifft)、加合成窗函式、交疊相加,最終得到去噪以後的時域訊號

二、降噪演算法原理介紹

    speex降噪演算法採用一種基於MMSE短時譜幅度估計的語音增強演算法,即STSA-MMSE. 該演算法利用了人耳對語音相位變換不敏感的特性,估算得到短時幅度譜之後,利用帶噪語音相位資訊,合成增強語音。另外spee還應用了MCRA演算法進行噪聲跟蹤,此處不討論。以下是STSA-MMSE演算法原理推導:




三、演算法優化思路

 1、優化先驗信噪比的估計,先驗信噪比能反映聲場噪聲的變化,其反應速度越靈敏,消噪效果越好。speex中是採用的”直接判決法“估計先驗信噪比,該方法中平滑因子是固定的,可以採用自適應變化的平滑因子提高估計準確度。

 2、優化噪聲譜跟蹤演算法,更精準的噪聲跟蹤對消噪能力提升明顯。

 3、優化能量譜計算

相關推薦

speex演算法流程介紹演算法原理

一、speex降噪流程介紹 本文對speex去噪演算法步驟做一些簡要整理和介紹,以提供給對該演算法感興趣的讀者參考。  1)preprocess_analysis()包括兩部分,主要是加窗交疊傅立葉(fft)變換等常用的訊號處理演算法。 1.1)預處理    

請讀下面的這句繞口令:ResourceManager中的Resource Estimator框架介紹演算法剖析

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文首先介紹了Hadoop中的ResourceManager中的estimator service的框架與執行流程,然後對其中用到的資源估算演算法進行了原理剖析。 一. Resource Estimator Service的出發點與目標   估計作

k-d樹+bbf演算法介紹實現

最近還是一直在研究SIFT演算法,而SIFT特徵點匹配是一個比較經典的問題,使用暴力匹配的話確實可以得到結果,但是執行速度較慢。我的計算機處理是i5的二代系列,匹配兩張各檢測有2000+個SIFT特徵點的影象,通過正反匹配(即取影象1與影象2的匹配結果餘影象2和影象1的匹配

Zbar演算法流程介紹

演算法介紹: zbar演算法是現在網上開源的條形碼,二維碼檢測演算法,演算法可識別大部分種類的一維碼(條形碼),比如I25,CODE39,CODE128,不過大家更關心的應該是現在很火的QR碼的解碼效率,隨著現在生活中QR碼的普及,掃碼支付等行為越來越多的被人們接受,關於Q

DES演算法流程分析實現

DES(Data Encryption Standard,資料加密標準)作為一種基本結構為Feistel結構的加密演算法,其加密核心在於F函式。而Feistel結構決定了其加密解密流程是相同的,無論是硬體實現還是軟體實現都只需要一種結構,不需要分別實現。關於Fe

加密演算法簡要介紹JAVA實現

【1】MD5是什麼 MD5即Message-Digest Algorithm 5(資訊-摘要演算法5),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、雜湊演算法),主流程式語言普遍已有MD5實現。將資料(如漢字)運算為另一固定長度

[分享]ECC加密演算法入門介紹演算法乾貨】

前言 同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)也屬於公開金鑰演算法。目前,國內詳細介紹ECC的公開文獻並不多(反正我沒有找到)。有一些簡介,也是

Unity3D案例太空射擊(Space Shooter)流程介紹程式碼分析(上)

最近開始接觸遊戲製作,用Unity製作一些簡單的遊戲進行入門。這幾篇部落格總結了Space Shooter的製作流程,並對程式碼進行了分析。一是方便自己日後進行回顧與補充,二是為了讓讓更多的遊戲愛好者接觸遊戲開發,少走彎路。 Space Shooter是一個入門級的專案,很

Unity3D案例太空射擊(Space Shooter)流程介紹程式碼分析(下)

這部分內容關注的是遊戲性的提升,包括音效、計分等功能的實現。 傳送門: 太空射擊(Space Shooter)流程介紹與程式碼分析(下) 11.新增音效 音效分配3種,爆炸音效、發射子彈音效和背景音效。其中爆炸音效將音訊檔案直接拖入爆炸素材中即可,如下所示。 對

Unity3D案例太空射擊(Space Shooter)流程介紹程式碼分析(中)

(上)部分主要介紹了素材的新增以及基本的移動與涉及功能,這部分關注事件的實現(如碰撞檢測)。 傳送門: 太空射擊(Space Shooter)流程介紹與程式碼分析(中) 6.邊界的設定 在上述過程中,若一直髮射子彈,在Hierarchy中會一直出現子彈的程序,造成不

RPG遊戲《黑暗之光》流程介紹程式碼分析之(三):角色控制系統的實現

第三章:角色控制本篇部落格主要對人物移動及其相關操作進行分析,主要包括主角以及鏡頭的移動。在遊戲介面中,我們使用Camera作為視角。為了方便之後判斷當前tag,我們新建一個Tag指令碼,存入一些tag資訊,之後呼叫就不容易出錯using UnityEngine; using

並查集演算法的簡介演算法實現

並查集(Union-find Sets)是一種非常精巧而實用的資料結構,它主要用於處理一些不相交集合的合併問題。一些常見的用途有求連通子圖、求最小生成樹的 Kruskal 演算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用並查集時,首先會存在一組不相交的動態集合 S=

Java秒殺系統實戰系列~整體業務流程介紹資料庫設計

摘要: 本篇博文是“Java秒殺系統實戰系列文章”的第三篇,本篇博文將主要介紹秒殺系統的整體業務流程,並根據相應的業務流程進行資料庫設計,最終採用Mybatis逆向工程生成相應的實體類Entity、操作Sql的介面Mapper以及寫動態Sql的配置檔案Mapper.xml。內容:

Docker Macvlan 介紹工作原理

Docker Macvlan Network Macvlan Network:屬於Docker的網路驅動。 Macvlan Network:Docker主機網絡卡介面邏輯上分為多個子介面,每個子介面標識一個VLAN。容器介面直接連線Docker主機網絡卡介面,通過路由策略轉發到另一臺Docker主

大前端介紹直播原理

一.大前端 1.大前端需要掌握的技能 前端基本技能 Vue React Angular Webpack ES6 服務類 Node.js express.js

ACL 2018論文解讀 | 基於排序思想的弱監督關係抽取選種演算法

在碎片化閱讀充斥眼球的時代,越來越少的人會去關注每篇論文背後的探索和思考。在這個欄目裡,你會快速

non-local Means(非區域性均值)演算法及快速演算法原理實現

Non-Local Means演算法原理: Non-Local Means顧名思義,這是一種非區域性平均演算法。何為區域性平均濾波演算法呢?那是在一個目標畫素周圍區域平滑取均值的方法,所以非區域性均值濾波就意味著它使用影象中的所有畫素,這些畫素根據某種相似度進行加權平均。濾

AdaBoost 人臉檢測介紹(3) : AdaBoost演算法流程

  本系列文章總共有七篇,目錄索引如下:   AdaBoost 人臉檢測介紹(1) : AdaBoost身世之謎   AdaBoost 人臉檢測介紹(2) : 矩形特徵和積分圖   AdaBoost 人臉檢測介紹(3) : AdaBoost演算法流程   AdaBoost 人臉檢

不平衡資料分類演算法介紹比較

介紹 在資料探勘中,經常會存在不平衡資料的分類問題,比如在異常監控預測中,由於異常就大多數情況下都不會出現,因此想要達到良好的識別效果普通的分類演算法還遠遠不夠,這裡介紹幾種處理不平衡資料的常用方法及對比。 符號表示 記多數類的樣本集合為L,少數類的樣本集合為S。

利用銀行家演算法避免死鎖的介紹舉例

一、資料結構   1.多個程序: { P0,P1,P2,P4 } 代表1,2,3,4四個需要臨界資源的程序   2.幾種資源:{ A, B ,C } 代表A,B,C三種臨界資源   3.Max:最大需求矩陣(程序完成執行需要的各資源總量)     Allocation:分配矩陣(某個程序現在