Я использую функцию melcepst
в подпрограмме Matlab Voicebox для получения MFCC из звукового файла. Ниже приведен код, который я использую, с примером файла wav. Мои фактические файлы - это 1-секундные файлы wav, сэмплированные с частотой 48000 Гц и глубиной 24 бита. Исходный код для melcepst
можно найти здесь http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/doc/voicebox/melcepst.html, на который я буду ссылаться.
Загрузить wav-файл:
load handel.mat
filename = 'handel.wav'
[y,Fs] = audioread('handel.wav');
audiowrite(filename, y, Fs)
Запустите функцию melcepst
. Файл имеет частоту дискретизации 8192 Гц. Я указываю окно Хэмминга ('M'), 12 кепстральных коэффициентов, 30 треугольных фильтров, длину кадра 245, приращение кадра 81 выборку и фильтры самого низкого и самого высокого уровня по умолчанию.
[c,tc] = melcepst('handel.wav', 8192, 'M', 12, 30, 245, 81, 0, 0.5)
Это возвращает следующую ошибку:
Error using max
Matrix dimensions must agree.
Error in melcepst (line 111)
y=log(max(m*abs(f(a:b,:)),ath));
Более глубокое изучение исходного кода melcepst
позволяет выявить источник проблемы (строка 111): Начиная со строки 101:
[z,tc]=enframe('handel.wav',0.54-0.46*cos(2*pi*(0:245-1)'/(245-1)),81)
f=rfft(z.');
[m,a,b]=melbankm(30,245,8192,0,0.5,'t');
pw=f(a:b,:).*conj(f(a:b,:));
pth=max(pw(:))*1E-20;
ath=sqrt(pth);
y=log(max(m*abs(f(a:b,:)),ath));
Матрицы, использованные в последней строке, ath
и m*abs(f(a:b,:))
, несовместимы. ath
— это пустой столбец двойного вектора 0 x 1, а m*abs(f(a:b,:))
— пустой столбец двойного вектора 30 x 0.
Я понимаю, в чем проблема, но мне непонятно, почему эта проблема вообще возникает, если только в исходном коде нет ошибки (что кажется маловероятным). Есть ли проблема ранее в коде, которая позже дает несовместимые матрицы? Я пробовал это с моими собственными файлами и их собственными переменными, которые немного отличаются от тех, которые я указал для этого примера, и я все еще возвращаю ту же ошибку. Любые идеи очень приветствуются.
ath
пусто, тоpw
тоже, а это значит, что либоf
пусто, либоa>b
. Может ли это быть вызвано вашим выбором входных аргументов? - person Cris Luengo   schedule 12.05.2018f
действительно пуст, как иz
, который он вызывает. Мои входные аргументы должны быть правильными, и я также получаю ту же ошибку, когда использую все аргументы по умолчанию. Я продолжал работать над этим и думаю, что моя проблема заключалась просто в том, что я использовал полный звуковой сигнал (исходный файл wav) в качестве входного речевого сигнала, а не просто вектор сэмплов. Таким образом, в приведенном выше примере, если я ввожуy
вместоhandel.wav
в функциюmelcespt
, код работает нормально. Задача решена![c,tc] = melcepst(y, 8192, 'M', 12, 30, 245, 81, 0, 0.5)
- person Amanda S   schedule 14.05.2018