声音的基本特征

一、音量(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/


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