Я новичок в Matlab и пытаюсь написать простой алгоритм обнаружения речи на основе частоты. Конечная цель состоит в том, чтобы запустить сценарий в файле wav и вывести время начала/окончания для каждого сегмента речи. Если использовать код:
fr = 128;
[ audio, fs, nbits ] = wavread(audioPath);
spectrogram(audio,fr,120,fr,fs,'yaxis')
Я получаю полезный график зависимости частоты от времени:
Глядя на него, очень легко увидеть, когда происходит речь. Я мог бы написать алгоритм для автоматизации процесса обнаружения, просматривая каждый кадр по оси X, выясняя, какие частоты являются доминирующими (имеющими наибольшую интенсивность), проверяя доминирующие частоты, чтобы увидеть, достаточно ли они превышают определенный порог интенсивности ( разница между желтым и красным цветом на графике), а затем пометить этот кадр как речевой или неречевой. После того, как кадры будут помечены, будет просто получить время начала/окончания для каждого речевого сегмента.
Моя проблема в том, что я не знаю, как получить доступ к этим данным. Я могу использовать код:
[S,F,T,P] = spectrogram(audio,fr,120,fr,fs);
чтобы получить все функции спектрограммы, но результаты этого кода не имеют для меня никакого смысла. Границы массивов и матриц S, F, T, P не коррелируют ни с чем, что я вижу на графике. Я просмотрел файлы справки и API, но меня смущает, когда они начинают перебрасывать названия алгоритмов и аббревиатуры - мой опыт работы с DSP довольно ограничен.
Как мне получить массив значений частотной интенсивности для каждого кадра анализа этой спектрограммы? Я могу понять остальное оттуда, мне просто нужно знать, как получить соответствующие данные.