Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Estimación de formantes con coeficientes LPC

Este ejemplo muestra cómo estimar las frecuencias del formante de vocales utilizando la codificación predictiva lineal (LPC). Las frecuencias formantes se obtienen mediante la búsqueda de las raíces del polinomio de predicción.

En este ejemplo se utiliza el ejemplo de voz , que forma parte de cuadro de herramientas de procesamiento de señales™.mtlb.mat El habla se filtra de paso bajo. Debido a la baja frecuencia de muestreo, esta muestra de voz no es óptima para este ejemplo. La baja frecuencia de muestreo limita el orden del modelo autoregresivo que puede ajustar a los datos. A pesar de esta limitación, el ejemplo ilustra la técnica para utilizar coeficientes LPC para determinar los formantes de vocales.

Cargue la señal de voz. La grabación es una mujer que dice "MATLAB®". La frecuencia de muestreo es de 7418 Hz.

load mtlb

El archivo MAT contiene la forma de onda de voz, , y la frecuencia de muestreo, .mtlbFs

Utilice la función para identificar un segmento de voz para su análisis.spectrogram

segmentlen = 100; noverlap = 90; NFFT = 128;  spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis') title('Signal Spectrogram')

Extraiga el segmento de 0,1 a 0,25 segundos para su análisis. El segmento extraído corresponde aproximadamente a la primera vocal, /ae/, en "MATLAB".

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

Dos pasos de preprocesamiento comunes aplicados a las formas de onda de voz antes de la codificación predictiva lineal son la ventana y el filtrado de pre-énfasis (paso alto).

Ventana el segmento de voz mediante una ventana Hamming.

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

Aplique un filtro de pre-énfasis. El filtro de pre-énfasis es un filtro de paso alto (AR(1)).

preemph = [1 0.63]; x1 = filter(1,preemph,x1);

Obtenga los coeficientes de predicción lineal. Para especificar el orden del modelo, utilice la regla general de que el orden es dos veces el número esperado de formantes más 2. En el rango de frecuencias, [0,- Fs/2], esperas tres formantes. Por lo tanto, establezca el orden del modelo igual a 8. Encuentra las raíces del polinomio de predicción devuelto por .lpc

A = lpc(x1,8); rts = roots(A);

Debido a que los coeficientes LPC son de valor real, las raíces se producen en pares conjugados complejos. Conservar sólo las raíces con un signo para la parte imaginaria y determinar los ángulos correspondientes a las raíces.

rts = rts(imag(rts)>=0); angz = atan2(imag(rts),real(rts));

Convierta las frecuencias angulares en rad/muestra representadas por los ángulos a hercios y calcule los anchos de banda de los formantes.

Los anchos de banda de los formantes se representan por la distancia de los ceros polinómicos de predicción desde el círculo de la unidad.

[frqs,indices] = sort(angz.*(Fs/(2*pi))); bw = -1/2*(Fs/(2*pi))*log(abs(rts(indices)));

Utilice el criterio de que las frecuencias formantes deben ser superiores a 90 Hz con anchos de banda inferiores a 400 Hz para determinar los formantes.

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

Los tres primeros formantes son 869.70, 2026.49 y 2737.95 Hz.

Referencias

[1] Snell, Roy C., y Fausto Milinazzo. "Ubicación de Formant a partir de datos de análisis LPC." IEEE® Transacciones en procesamiento de voz y audio. Vol. 1, Número 2, 1993, págs. 129-134.

[2] Loizou, Philipos C. "COLEA: Una herramienta de software de MATLAB para el análisis de voz."