我需要在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)
答案 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之后进行除法。