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