近期比較忙,git
抽空出來5.1開源獻禮.github
但凡學習音頻降噪算法的朋友,確定看過一個算法.算法
<<語音加強-理論與實踐>> 中說起到基於對數的最小均方偏差的降噪算法,也就是LogMMSE.學習
資料見:ui
<<Speech enhancement using a minimum mean-square error log-spectral amplitude estimator.>> blog
-----Ephraim, Y. and Malah, D. (1985)ip
以前也是花了很多時間去查閱降噪相關的思路,get
可是最終發現前人的思路,有不少侷限性或者說弊端.數學
通常都是提出一種數學先驗的假設,換句話說,在paper裏講點故事.it
而後最終,故事的結局都是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
如有其餘相關問題或者需求也能夠郵件聯繫俺探討。
固然一些基礎性的問題,一律忽略.
有時間給我寫郵件,不如多看點資料書籍.
郵箱地址是: gaozhihan@vip.qq.com