0

Мне нужно рассчитать некоторые особенности речи в Matlab. Однако я не знаю, какие операции мне нужно выполнить после получения данных из функции wavread, прежде чем я смогу использовать формулу формулы (например, формулу RMS).Matlab вычисляет речевые функции (например, RMS)

Один 1 сайт я только что нашел это:

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

Но на другой они использовали ДПФ, а затем некоторые операции с реальными и представить себе часть матрицы/вектора, который я не понимаю.

Итак, как это должно быть?

У меня есть голосовая библиотека, но я не нашел там вычисляющих rms.
Моя версия MATLAB: R2009b

EDIT:

http://www.edaboard.com/thread163664.html см домовой и 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 

Так что я немного смущен. Какой из них правильный?

EDIT 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

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

Это правильно.

Но с другой стороны они использовали ДПФ, а затем некоторые операции с реальной и представить часть матрицы/вектора, которую я не понимаю.

Вы можете спросить об этом, однако вам необходимо предоставить более подробную информацию. О каком другом сайте вы говорите, что именно вы там не понимаете.

У меня есть библиотека голосовой почты, но я не нашел там вычислений 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 (сумма (Y1. * Призывание (Y1))/размер (Y1,1))

Это неправильно, он должен be sqrt (сумма (Y1. * conj (Y1)))/размер (Y1,1), где деление идет после sqrt. Поскольку функция FFT в Matlab не масштабируется на 1/sqrt (n) и, следовательно, несимметрична. Итак, sum (y.^2) = sum (Y. * conj (Y))/n вам нужно разделить после sqrt.

+0

Под редакцией мой вопрос. Не могли бы вы это проверить? – user3565261

+0

Я обновил ответ. –

+0

Ваше предложение о размере (Y1,1) = 1 неверно. Это выражение в случае этого wav-файла равно 52920. Размер (Y1, 2) равен 1. – user3565261

 Смежные вопросы

  • Нет связанных вопросов^_^