一種簡單高效的音頻降噪演算法示例(附完整C代碼)

来源:https://www.cnblogs.com/cpuimage/archive/2019/05/01/10800768.html
-Advertisement-
Play Games

近期比較忙, 抽空出來5.1開源獻禮. 但凡學習音頻降噪演算法的朋友,肯定看過一個演算法. <<語音增強-理論與實踐>> 中提及到基於對數的最小均方誤差的降噪演算法,也就是LogMMSE. 資料見: <<Speech enhancement using a minimum mean-square erro ...


近期比較忙,

抽空出來5.1開源獻禮.

但凡學習音頻降噪演算法的朋友,肯定看過一個演算法.

<<語音增強-理論與實踐>> 中提及到基於對數的最小均方誤差的降噪演算法,也就是LogMMSE.

資料見:

<<Speech enhancement using a minimum  mean-square error log-spectral amplitude estimator.>> 

-----Ephraim, Y. and Malah, D. (1985)

之前也是花了不少時間去查閱降噪相關的思路,

但是最終發現前人的思路,有很多局限性或者說弊端.

一般都是提出一種數學先驗的假設,換句話說,在paper里講點故事.

然後最終,故事的結局都是it works.

但實際應用卻差強人意.

 

 而一般的圖像降噪流程,見圖:

也就是,一個降噪演算法的基本組成部分有:

1.雜訊提取(用於提取雜訊)

2.靜音檢測(一般檢測是否為人聲,減少誤判)

3.數學先驗假設(用於降噪)

 

當然最小均方誤差的降噪思路,用在圖像上一樣適用.

 

但是,大多數音頻降噪演算法僅僅適配某種特殊情況(特例).

工程化應用時,會發現,

一個坑接著一個坑,

然後不得不妥協.勉強能用就行,

要求太高不現實.

 

而當年看了logMMSE的思路之後,就很清楚地明白,

這思路是可行的,但是特別雞肋.

 

話說如此,但是對作為學習信號處理,音頻降噪來說,

這個是一個特別好的入門示例演算法.

至少經過實踐之後,你心中能有了個大概的印象.

音頻降噪是一個什麼樣的工作,會碰到什麼樣的難點.

 

 logmmse的各種實現,在github搜索一下,都能找得到.

這裡,並不打算解析logmmse的演算法細節.

 

只是分享一段非常簡單有效的類似logmmse演算法的c語言實現.

說是類似,不如說,

思路來自logmmse,只是更加的簡潔明瞭.(自我以為)

自己動手,豐衣足食.

稍微改進一下,可以進一步適配各種環境和情況,

當然也不是那麼容易,

例如:

+vad.

+延時記憶機制諸如此類

 

代碼基於本人最近開源的基於傅里葉變換的重採樣演算法.

https://github.com/cpuimage/FFTResampler

題外話:

在之前為了找各種重採樣演算法,費心死了.

所以,寫一個通用簡潔的重採樣演算法是我的一個待辦事項.

重採樣演算法算是暫時結束了.

https://github.com/cpuimage/resampler

https://github.com/cpuimage/FFTResampler

這兩個平時應該是夠用了,

下一步要繼續做的話,

可能就是音頻超解析度演算法了.

 

除了懶,沒別的,能復用就復用了.

回到主題上,這個簡易的演算法用來去除平穩雜訊或底噪,是非常合適的,

當然當前開源實現的演算法,是非實時的,

當然稍微改進下可以應用在實時的環境.

 

值5.1放假之際,開源出來,給大家參考學習.

權當拋磚引玉,一起玩耍.

 

項目地址:

https://github.com/cpuimage/SimpleAudioDenoise


若有其他相關問題或者需求也可以郵件聯繫俺探討。

當然一些基礎性的問題,一概忽略.

有時間給我寫郵件,不如多看點資料書籍.

 

郵箱地址是: 
[email protected]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 隨著前端業務的不斷發展,頁面交互邏輯的不斷提高,讓數據和界面實現分離漸漸被提了出來。JavaScript的MVC思想也流行了起來,在這種背景下,基於node.js的模板引擎也隨之出現。 什麼是模板引擎? 它用於解析動態數據和靜態頁面所生成的視圖文件,將原本靜態的數據變為動態,快速地實現頁面 ...
  • 通過渲染一張DEM的具體例子,瞭解在WebGL中顏色渲染的過程。 ...
  • 公司用的架構,在此找了資料作為記錄復看所用: 什麼是Service Mesh? Service Mesh的概念最早是由Buoyant公司的CEO William Morgan在一篇文章里提出,他給出的服務網格的定義是: A service mesh is a dedicated infrastruc ...
  • 服務路由的應用場景 分組調用。一般來講,為了保證服務的高可用性,實現異地多活的需求,一個服務往往不止部署在一個數據中心,而且出於節省成本等考慮,有些業務可能不僅在私有機房部署,還會採用公有雲部署,甚至採用多家公有雲部署。服務節點也會按照不同的數據中心分成不同的分組,這時對於服務消費者來說,選擇哪一個 ...
  • 微服務遠程調用可能有如下問題: 註冊中心宕機; 服務提供者B有節點宕機; 服務消費者A和註冊中心之間的網路不通; 服務提供者B和註冊中心之間的網路不通; 服務消費者A和服務提供者B之間的網路不通; 服務提供者B有些節點性能變慢; 服務提供者B短時間內出現問題。 註冊中心宕機; 服務提供者B有節點宕機 ...
  • NumPy 算術函數: 1、numpy.reciprocal(arr) 返回參數逐個元素的倒數 2、numpy.power(one, two) 將第一個輸入數組中的元素作為底數,計算它與第二個輸入數組中相應元素的冪,即 one^two 3、numpy.mod(x1, x2) 計算輸入數組中相應元素的 ...
  • Python基礎之面向對象基本概念,包括了 面向過程和麵向對象概念,類和對象,面向對象基礎語法。其中, 面向過程和麵向對象概念 包括了 面向過程,面向對象;類和對象 包括 類和對象的概念,類的設計;面向對象基礎語法 包括 dir內置函數,定義簡單的類,方法中的self函數,初始化方法,內置方法和屬性... ...
  • 首先是看到下麵這個文章想試著練習一下,結果第一步就卡住了,無法載入devtools包,繁體字都冒出來了......汗!(沒有截圖,但過程痛苦不堪~) https://www.sohu.com/a/122630261_468636 在網上遍尋不著此題的答案,但根據熱心網友的回答,我大概懂了一點裡面的門 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...