В этом примере показано, как оценивать частоты формирования гласных с помощью линейного предсказательного кодирования (LPC). Формантные частоты получаются путём нахождения корней полинома предсказания.
В этом примере используется образец речи mtlb.mat, которая является частью Toolbox™ обработки сигналов. Речь фильтруется по нижним полосам. Из-за низкой частоты дискретизации эта выборка речи не является оптимальной для этого примера. Низкая частота дискретизации ограничивает порядок авторегрессионной модели, которую можно подогнать к данным. Несмотря на это ограничение, пример иллюстрирует методику использования коэффициентов LPC для определения формантов гласных.
Загрузите речевой сигнал. На записи женщина говорит «MATLAB ®». Частота дискретизации 7418 Гц.
load mtlbMAT-файл содержит речевой сигнал, mtlbи частота дискретизации, Fs.
Используйте spectrogram функция для идентификации озвученного сегмента для анализа.
segmentlen = 100; noverlap = 90; NFFT = 128; spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis') title('Signal Spectrogram')

Извлекают сегмент от 0,1 до 0,25 секунд для анализа. Извлеченный сегмент примерно соответствует первому гласному ,/ae/, в «MATLAB».
dt = 1/Fs; I0 = round(0.1/dt); Iend = round(0.25/dt); x = mtlb(I0:Iend);
Двумя общими этапами предварительной обработки, применяемыми к речевым сигналам перед линейным предсказательным кодированием, являются оконная и предрасчетная (высокоскоростная) фильтрация.
Окно речевого сегмента с помощью окна Хэмминга.
x1 = x.*hamming(length(x));
Примените фильтр предварительного подчеркивания. Фильтр предварительного подчеркивания является высокопроходным всеполюсным (AR (1)) фильтром.
preemph = [1 0.63]; x1 = filter(1,preemph,x1);
Получение коэффициентов линейного предсказания. Чтобы указать порядок модели, используйте общее правило, согласно которому порядок в два раза превышает ожидаемое количество формантов плюс 2. В диапазоне частот [0, | Fs |/2] ожидается три форманта. Поэтому установите порядок модели равным 8. Найти корни полинома прогнозирования, возвращенные lpc.
A = lpc(x1,8); rts = roots(A);
Поскольку коэффициенты LPC являются вещественными, корни возникают в комплексных сопряженных парах. Сохраните только корни с одним знаком для мнимой части и определите углы, соответствующие корням.
rts = rts(imag(rts)>=0); angz = atan2(imag(rts),real(rts));
Преобразуйте угловые частоты в рад/выборке, представленные углами в герц, и вычислите полосы пропускания формантов.
Полосы пропускания формантов представлены расстоянием многочленов прогнозирования от единичной окружности.
[frqs,indices] = sort(angz.*(Fs/(2*pi))); bw = -1/2*(Fs/(2*pi))*log(abs(rts(indices)));
Для определения формантов следует использовать критерий, согласно которому частоты формантов должны быть более 90 Гц с полосами пропускания менее 400 Гц.
nn = 1; for kk = 1:length(frqs) if (frqs(kk) > 90 && bw(kk) <400) formants(nn) = frqs(kk); nn = nn+1; end end formants
formants = 1×3
103 ×
0.8697 2.0265 2.7380
Первые три форманта - 869,70, 2026,49 и 2737,95 Гц.
Ссылки
[1] Снелл, Рой К. и Фаусто Милинаццо. «Формантное расположение из данных анализа LPC». Транзакции IEEE ® по обработке речи и звука. Том 1, номер 2, 1993, стр. 129-134.
[2] Лоизу, Филипос С. «COLEA: Программное средство MATLAB для анализа речи».