天天看點

基于Matlab的男女聲音信号分析與處理

文章目錄

首先本人使用的自己制作的聲音和來自一位女同學的錄音分别儲存為boy.mp3和girl.mp3,然後在matlab平台上運用audioread函數記住采樣頻率和采樣點數。

file='girl1.mp3'
[x,fs]=audioread(file);      

其中x表示音頻資料,檔案中的音頻資料,傳回為 m×n 矩陣,其中 m 是讀取的音頻樣本數,n 是檔案中的音頻通道數。

fs表示采樣率。

由于男性和女性生理結構的不同,男性和女性呈現出不同的聽覺特征,男聲的基音頻率大約在100-200Hz之間。而女聲的基音頻率大都在200—350Hz之間,鑒于男女聲的基音頻存在明顯的差異,是以基音頻可以作為男女聲識别的依據。

是以,本文将上述采集到的自制男音和女音信号進行提取頻率。從開始的data=x(:,1)提取單聲道,使用xcov()函數對資料進行協方差處理,做協方差的意義度量各個次元偏離其均值的程度。協方差的值如果為正值,則說明兩者是正相關的(從協方差可以引出“相關系數”的定義),結果為負值就說明負相關的,如果為0,也是就是統計上說的“互相獨立”。通過這三段代碼計算出提取音頻的頻率。

yy=y(halflen: ylen);%選中見到末尾一段資料
[~,maxindex] = max(yy);%yy矩陣的最大值傳遞出去
fmax=fs/(maxindex+30);%頻率計算      

通過頻率200作為界限來判斷男女聲音:

基于Matlab的男女聲音信号分析與處理

優點:本次實驗簡單的通過頻率來判斷男女聲。比較普遍性使用,整個過程思想也很簡單。

缺點:雖然我們通過200Hz作為判斷男女,但是個人認為這也不是很合理。比如有些男生的聲音就很像女生的聲音,那麼我們測試的時候有可能會将男生的聲音識别為女生,這樣的資料我實際去測試過,是以不是很合理。如果想要擷取更加真實的判斷,我們可能需要使用神經網絡來訓練再來識别,可能效果會好很多。

繼續閱讀