exponenta event banner

Оценка форманта с коэффициентами КНД

В этом примере показано, как оценивать частоты формирования гласных с помощью линейного предсказательного кодирования (LPC). Формантные частоты получаются путём нахождения корней полинома предсказания.

В этом примере используется образец речи mtlb.mat, которая является частью Toolbox™ обработки сигналов. Речь фильтруется по нижним полосам. Из-за низкой частоты дискретизации эта выборка речи не является оптимальной для этого примера. Низкая частота дискретизации ограничивает порядок авторегрессионной модели, которую можно подогнать к данным. Несмотря на это ограничение, пример иллюстрирует методику использования коэффициентов LPC для определения формантов гласных.

Загрузите речевой сигнал. На записи женщина говорит «MATLAB ®». Частота дискретизации 7418 Гц.

load mtlb

MAT-файл содержит речевой сигнал, mtlbи частота дискретизации, Fs.

Используйте spectrogram функция для идентификации озвученного сегмента для анализа.

segmentlen = 100;
noverlap = 90;
NFFT = 128;

spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis')
title('Signal Spectrogram')

Figure contains an axes. The axes with title Signal Spectrogram contains an object of type image.

Извлекают сегмент от 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 для анализа речи».