聲音的基本特徵

一、音量(volume)

    基本上兩種方式來計算:

    1、每個音框的絕對值總和:

                                                  volume= Si=1n |si|

              其中si 是一個音框的第i個取樣點,而n則是每個音框的點數。這種方法的計算較簡單,只需要整數運算,適合用於低階臺

         (如微 電腦等)。

    2、每個音框的平方值的總和,再取以10爲底對數值,再乘以10:

                                                   volume = 10*log10(Si=1n si2)

        這種方法取得的值是以分貝(dB, decibels)爲單位,是一個相對強度的值,比較符合人耳對於大小聲音的感覺。

    3、一般來說,無聲段的能量最低,濁音段能量最高。(語音信號一般分爲無聲段、清音段和濁音段)

        以下用兩種方法求音量。

        程序實例:

       

waveFile='sunday.wav';

 frameSize=256;

overlap=128;

[y, fs, nbits]=wavReadInt(waveFile);

fprintf('Length of %s is %g sec.\n', waveFile, length(y)/fs);

frameMat=buffer(y, frameSize, overlap);

frameNum=size(frameMat, 2); % Compute volume using method 1

volume1=zeros(frameNum, 1);

 for i=1:frameNum

     frame=frameMat(:,i);

    frame=frame-median(frame); % zero-justified

    volume1(i)=sum(abs(frame)); % method 1

end

% Compute volume using method 2

volume2=zeros(frameNum, 1); 

 for i=1:frameNum frame=frameMat(:,i);

        frame=frame-mean(frame); % zero-justified

        volume2(i)=10*log10(sum(frame.^2)); % method 2

end

sampleTime=(1:length(y))/fs;

frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs;

subplot(3,1,1);

plot(sampleTime, y);

ylabel(waveFile);

subplot(3,1,2);

plot(frameTime, volume1, '.-');

ylabel('Volume (Abs. sum)');

subplot(3,1,3);

plot(frameTime, volume2, '.-');

ylabel('Volume (Decibels)');

xlabel('Time (sec)');


二、過零率

     "過零率"(zero crossing rate,簡稱 ZCR)是在每個音框中,語音信號通過零電平的次數,具有下列特徵:

     1)、一般而言,雜訊(噪音)及氣音(清音)的過零率均大於有聲音(具有清晰可辨之音高,例如母音)。

     2)、是雜訊和氣音兩者較難從過零率來分辨,會依照錄音情況及環境雜訊而互有高低。通常氣音的音量會大於雜訊。

    3)、通常用在端點測試,特別是用在估測氣音的起始位置及結束位置。

    4)、可用來估測信號的基頻,但很容易出錯,所以必須進行前處理。

     以下用兩種不同的方法來計算過零率。

     程序實例:

   

waveFile='csNthu8b.wav'; 
frameSize=256; 
overlap=0; 
[y, fs, nbits]=wavReadInt(waveFile); 
frameMat=buffer(y, frameSize, overlap); 
frameNum=size(frameMat, 2); 
for i=1:frameNum 
    frameMat(:,i)=frameMat(:,i)-round(mean(frameMat(:,i))); 
    % Zero justification 
end 
zcr1=sum(frameMat(1:end-1, :).*frameMat(2:end, :)


三、音高

     "音高"(pitch)是另一個音訊裏面很重要的特徵,直覺地說,音高代表聲音頻率的高低,而此頻率是“基本頻率”(fundamental frequency),也就是“基本週期”(fundamental period)的倒數。

    若直接觀察音訊的波形,只要聲音穩定,我們並不難直接看到基本週期的存在,以一個3秒的音叉聲音來說,我們可以取一個256點的音框,將此音框畫出來後,就可以很明顯看到基本週期。

     程序實例:

   

waveFile='tuningFork01.wav'; [y, fs, nbits]=wavread(waveFile);

index1=11000;

frameSize=256;

 index2=index1+frameSize-1;

frame=y(index1:index2);

subplot(2,1,1);

 plot(y);

grid on

title(waveFile);

 line(index1*[1 1], [-1 1], 'color', 'r');

line(index2*[1 1], [-1 1], 'color', 'r');

subplot(2,1,2);

plot(frame, '.-');

grid on

point=[7, 189];

 line(point, frame(point), 'marker', 'o', 'color', 'red');

 periodCount=5;

fp=((point(2)-point(1))/periodCount)/fs; % fundamental period (in sec)

ff=1/fp; % fundamental frequency (in Hz)

 pitch=69+12*log2(ff/440); % pitch (in semitone)

fprintf('Fundamental period = %g second\n', fp);

fprintf('Fundamental frequency = %g Hertz\n', ff);

fprintf('Pitch = %g semitone\n', pitch);

Output message

Fundamental period = 0.002275 second

Fundamental frequency = 439.56 Hertz

 Pitch = 68.9827 semitone

四、音色(略)


http://neural.cs.nthu.edu.tw/jang/books/audioSignalProcessing/basicFeatureVolume.asp?title=5-2 Volume (音量)

http://neural.cs.nthu.edu.tw/jang/books/audioSignalProcessing/basicFeatureZeroCrossingRate.asp?title=5-3 Zero Crossing Rate (過零率)

http://neural.cs.nthu.edu.tw/jang/books/audioSignalProcessing/basicFeaturePitch.asp?title=5-4 Pitch (音高)


源地址:http://bingxinye1.blog.163.com/blog/static/16879709820118284926410/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章