Matlab计算语音特征(例如RMS)

时间:2014-09-03 12:05:20

标签: matlab speech-recognition wav voice-recognition feature-extraction

我需要在matlab中计算一些语音特征。但是,在我可以使用特征公式(例如RMS公式)之前,我不知道从wavread函数获取数据后需要执行哪些操作。

我刚发现一个网站:

rmsVec(m) = sqrt(sum(wavData{m}(:).^2)/length(wavData{m}(:)));

但另一方面,他们使用DFT,然后使用真实的一些操作,并想象矩阵/矢量的一部分,我不明白。

那该怎么办?

我有语音库,但我没有找到计算rms 我的matlab版本:R2009b

编辑:

http://www.edaboard.com/thread163664.html见hobgoblin和petejonze答案

由于petejonze,我是否使用时域或频域并不重要

[y, fs, aa] = wavread('C:\Users\lukasz\Desktop\semestr 7\inzynierka\dzwieki\uczace\dol\dol_50')
y1 = y(:,1)
Y1 = fft(y1)
rms1 = sqrt(mean(y1.^2))
rms2 = sqrt(sum(Y1.*conj(Y1))/size(Y1,1))

和结果:

rms1 =

0.0577

rms2 =

13.2706

所以我有点困惑。哪一个是正确的?

编辑2:

另一个例子:

>> y = [1;2;3]

y =

 1
 2
 3

>> Y = fft(y)

Y =

6.0000          
-1.5000 + 0.8660i
-1.5000 - 0.8660i

>> rms1 = sqrt(mean(y.^2))

rms1 =

2.1602

>> rms2 = sqrt(sum(Y.*conj(Y))/size(Y,1))

rms2 =

3.7417

>> size(Y,1)

ans =

 3

>> Y.*conj(Y)

ans =

36
 3
 3

所以这个公式

sqrt(sum(Y1.*conj(Y1))/size(Y1,1))

不正确,应该是

sqrt(sum(Y1.*conj(Y1))/size(Y1,1)^2)

1 个答案:

答案 0 :(得分:1)

  

rmsVec(m)= sqrt(sum(wavData {m}(:)。^ 2)/ length(wavData {m}(:)));

这是正确的。

  

但另一方面,他们使用DFT,然后使用真实的一些操作,并想象矩阵/矢量的一部分,我不明白。

您可以询问它,但是您需要提供更多详细信息。你在谈论其他什么网站,你到底知道的是什么。

  

我有语音库,但我没有找到计算rms。

如果您使用melcepst

http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/doc/voicebox/melcepst.html

您可以指定E0dD以包含能量(RMS)

          (2) c=melcepst(s,fs,'E0dD')   % include log energy, 0th cepstral coef, delta and delta-delta coefs

您可以分析代码以了解幕后发生的事情

  

rms1 = sqrt(mean(y1。^ 2))

这是正确的

  

rms2 = sqrt(sum(Y1。* conj(Y1))/ size(Y1,1))

这是错误的,它必须是sqrt(sum(Y1。* conj(Y1)))/ size(Y1,1),其中除法在sqrt之后。因为matlab中的FFT函数不能在1 / sqrt(n)上缩放,因此是非对称的。所以sum(y。^ 2)= sum(Y。* conj(Y))/ n你需要在sqrt之后进行除法。