余培 鄧世國 劉華珠 張志
摘 要:文章介紹了用MATLAB軟件的幾個函數(shù)來處理音頻信號的基本流程。
關(guān)鍵詞:MATLAB;數(shù)字信號處理;音頻信號;wavread;resample
正文:
一、引言
語音信號是基于時間軸上的一維數(shù)字信號,本文主要是對語音信號進行頻域上的分析。在信號分析中,頻域往往包含了更多的信息。對于頻域來說,我們都可以用一種方法來分析,就是傅立葉變換:將時域的波形轉(zhuǎn)化到頻域來分析。
本文就從頻域的角度對信號進行分析,并利用MATLAB函數(shù)進行重采樣,MATLAB軟件在數(shù)字信號處理上發(fā)揮了相當(dāng)大的優(yōu)勢。
二、設(shè)計方案
1、利用MATLAB中的wavread命令來讀入(采集)語音信號,將它賦值給某一向量。再將該向量看作一個普通的信號,對其進行FFT變換實現(xiàn)頻譜分析,對于波形圖與頻譜圖都可以用 MATLAB畫出。
2、我們可以利用resample函數(shù)改變語音信號的采樣率,并可以通過sound命令來對語音信號進行回放,以便在聽覺上來感受聲音的變化。
3、利用MATLAB中的wavwrite命令
這個方案用到的軟件MATLAB語句。
三、主體部分
(一)、語音的錄入與打開
A、設(shè)計內(nèi)容、
用matlab對實際聲卡采集的男聲語音信號(‘ns.wav)和女聲語音信號(‘nvs.wav進行分析,比較基音的頻率有何區(qū)別.
程序如下:
[s2,fs2,nbits2]=wavread('nvs');
f2=fft(s2);
f=(0:length(f2)-1)'*fs2/length(f2);
figure(1);plot(f,abs(f2));axis([0,3000,0,1400]);
xlabel('Hz');title('女聲頻譜');
[s1,fs1,nbits1]=wavread('ns');
f1=fft(s1,50000);
f=(0:length(f1)-1)'*fs1/length(f1);
figure(2);plot(f,abs(f1));axis([0,3000,0,2500]);
xlabel('Hz');title('男聲頻譜');
結(jié)果如圖:
B、結(jié)論
由圖可知,女聲頻譜的最高峰出現(xiàn)在700Hz左右,頻帶寬度在1500Hz左右。而男聲頻譜的最高峰出現(xiàn)在400Hz左右,頻帶寬度在1000Hz左右。因此女聲的基音頻率要比男聲的基音頻率要高。
(二)、用resample函數(shù)進行重采樣、
A、分析
resample函數(shù)可以改變語音信號的采樣率,s=resample(s1,fs,fs1),即可將采樣率為s1的fs1信號變成采樣率為fs的s信號,而信號的大致形狀不變。
B、設(shè)計內(nèi)容
對一段采樣率為fs2=44100Hz的女聲語音‘nvs.wav進行分析,將采樣率分別變?yōu)?0000Hz,5000Hz,1000Hz,畫出波形圖,和原信號做比較。
程序如下:
[s2,fs2,nbits2]=wavread('nvs');
subplot(2,2,1);plot(s2);
title('fs=44000');
fs=10000;
s=resample(s2,fs,fs2);
subplot(2,2,2);plot(s);
title('fs=10000');
fs=5000;
s=resample(s2,fs,fs2);
subplot(2,2,3);plot(s);
title('fs=5000');
fs=1000;
s=resample(s2,fs,fs2);
subplot(2,2,4);plot(s);
title('fs=1000');
結(jié)果如圖:
C、結(jié)論
因為由上組實驗可知女聲語音‘nvs.wav的帶寬約為1500Hz??梢?,當(dāng)采樣率fs為10000Hz,5000Hz時,采樣率大于帶寬的兩倍,此時,采樣率減小導(dǎo)致信號采集的樣點數(shù)就越少,波形圖也越稀松,但大致的形狀不變。但是,如果采樣率過于低,如fs=1000Hz時,采樣率低于帶寬的兩倍,則波形圖發(fā)生較大的失真。
結(jié)束語
語音看作了一個向量,于是語音數(shù)字化了,則可以完全利用數(shù)字信號處理的知識來解決。我們可以像給一般信號做頻譜分析一樣,來給語音信號做頻譜分析。
廣東省省級科技計劃 2014B090911001