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