近期比較忙, 抽空出來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]