2014年10月22日 星期三

[Matlab] 去除雜訊

錄音時有背景噪音是在所難免的,可是如果錄完音後可以把背景噪音去掉,那太棒了,尤其是當訊號需要被用於分析時,總不能也把背景雜音一起分析吧,除非他有意義。我不懂去除雜音的原理以及數學運算,但網路上有人分享去除雜音的程式碼。今天就來介紹如何借用別人的程式碼吧。首先,先找到適合自己使用的程式碼連結↓↓↓↓↓image

範例來源:Choqueuse Vincent. 2010. Vuvuzela sound denoising algorithm. http://www.mathworks.com/matlabcentral/fileexchange/27912-vuvuzela-sound-denoising-algorithm. on 2014/8/24

步驟一

點選網頁右上角的下載檔案

步驟二

檔案解壓縮後就可以看到m檔案囉,還有一個WAV檔是配合m檔案一起服用的

image

步驟三

用matlab開啟m檔案,先來幫忙解讀一下,29行是讀取聲音的程式碼

image

49行是選取的背景音片段起始時間

50行是選取的背景音片段結束時間

image

118-122行看出除噪後的聲音以"output_signal"變數儲存

image

看完以後來執行吧

步驟四

對m檔案案右鍵執行

image

image

成果

可以看到變數區會變出一堆東西來,並且程式會畫出三張圖與播放聲音,其中我們所需要的output_signal也在變數區當中了,程式碼也很人性的幫我們輸出除噪的音訊檔(程式碼最後面有wavwrite)

image

透過波型圖與聲紋圖可以發現背景聲音已經去除了,如果你實際執行的話它也會播給你聽差別。

image


改一下程式碼讓它更好用

第一行改成function指令,可以使變數運算與你的主程式變數區隔離,最後只輸出你所指定的變數,在這邊我輸入3個變數,並要求輸出一個除噪完成的變數。第一個變數會在第7行使用到(指定檔案名稱),第2.3個變數會在27.28行使用到(選定噪音片段起訖秒數)。這樣用起來會更加方便。

imageimage

之後若要使用這個m檔案時就是輸入

x=denoise_zz(‘1.wav’,0,1); % x是你指定輸出後的變數名稱,可以不要是output_signal。denoise_zz是m檔案的檔名,此部分隨檔名而變。

這樣就只會跑出你要的單一個變數了

1 則留言:

有任何問題可以詢問,我們會盡量回答