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 vocal usando la codificación predictiva lineal (LPC). Las frecuencias de formantes se obtienen encontrando las raíces del polinomio de predicción.

En este ejemplo se utiliza la muestra de voz, que forma parte de Signal Processing Toolbox™.mtlb.mat El discurso es filtrado 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 autorregresivo que se puede ajustar a los datos. A pesar de esta limitación, el ejemplo ilustra la técnica para utilizar los coeficientes LPC para determinar los formantes de la vocal.

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 expresado para el 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 el 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 formas de onda de voz antes de la codificación predictiva lineal son ventanas y preénfasis (paso alto) filtrado.

Ventana del segmento de voz utilizando una ventana de Hamming.

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

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

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

Obtenga los coeficientes de predicción lineales. 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 de modelo igual a 8. Encuentre las raíces del polinomio de predicción devuelta por.lpc

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

Debido a que los coeficientes LPC son de valor real, las raíces ocurren en pares de conjugados complejos. CONSERVE solo las raíces con un signo para la parte imaginaria y determine los ángulos correspondientes a las raíces.

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

Convierta las frecuencias angulares en Rad/Sample representadas por los ángulos a Hertz y calcule las anchuras de banda de los formantes.

Los anchos de banda de los formantes están representados 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 de 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.

References

[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, PP. 129-134.

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