В этом примере показано, как оценить частоты форманты гласного с помощью линейного предсказательного кодирования (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')
Извлеките сегмент от 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 для речевого анализа".