Оценка форманты с коэффициентами LPC

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

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

Загрузите речевой сигнал. Запись является женщиной, говорящей "MATLAB®". Частота дискретизации составляет 7 418 Гц.

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 object. The axes object with title Signal Spectrogram contains an object of type image.

Извлеките сегмент от 0,1 до 0,25 секунд для анализа. Извлеченный сегмент соответствует примерно первому гласному, / один/, в "MATLAB".

dt = 1/Fs;
I0 = round(0.1/dt);
Iend = round(0.25/dt);
x = mtlb(I0:Iend);

Два общих шага предварительной обработки применились к речевым формам волны, прежде чем линейное предсказательное кодирование будет работой с окнами и предварительным акцентом (highpass) фильтрация.

Окно речевой сегмент с помощью Окна Хэмминга.

x1 = x.*hamming(length(x));

Примените фильтр перед акцентом. Фильтр перед акцентом является все-полюсом highpass (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, и 2 737,95 Гц.

Ссылки

[1] Закрепите крючок на поводке, Рой К. и Фаусто Милинассо. "Местоположение форманты из аналитических данных о LPC". IEEE® Transactions о Речи и Обработке аудиоданных. Издание 1, Номер 2, 1993, стр 129-134.

[2] Loizou, Филипос К. "COLEA: программный инструмент MATLAB для речевого анализа".