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