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

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

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

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

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

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] Loizou, Philipos C. «COLEA: A MATLAB Software Tool for Speech Analysis».