Está en la página 1de 10

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

Sintetizador de Voz Basado en LPC


Gerardo Andrs Lpez galoging@gmail.com Universidad del Quindo
Resumen Este trabajo presenta el diseo de un sistema de sntesis de voz en tiempo real basado en coeficientes de prediccin lineal (LPC). Este sistema se encuentra fundamentado en el detector de actividad de voz (VAD) para determinar que segmentos de la seal que se quiere sintetizar son sonoros y cuales no sonoros, se cimenta en el uso de la autocorrelacin para detectar el periodo fundamental de cada segmento de la seal y en los coeficientes de prediccin lineal (LPC) para modelar el tracto vocal. Cada uno de los bloques que conforman el sintetizador se realiza a travs de la herramienta MATLAB para luego efectuar las simulaciones pertinentes. Palabras clave Sintetizador, detector de voz, filtro prenfasis, segmento, autocorrelacin, periodo, coeficientes, error. Abstract This paper presents the design of a speech synthesis system in real time based on linear prediction coefficients, where this is based on the detector of voice activity (VAD) to determine which segments of the signal that you want to synthesize are sound and which do not sound, the use of autocorrelation to detect the critical period of each segment of the signal and linear prediction coefficients to model the vocal tract. Each of the blocks that make up the synthesizer is performed in MATLAB tool to perform the relevant simulations. Key words Synthesizer, voice detector, preemphasis filter, frame, autocorrelation, pitch, coefficients and error.

otro lado, tambin se da un cambio en la presin del aire al salir a travs de los pliegues vocales. Todo ello produce una vibracin que al resonar por la laringe produce el sonido. Un sonido tiene tres cualidades bsicas; el tono o altura, volumen o intensidad y el timbre o resonancia. Al espacio situado entre dos cuerdas vocales se llama glotis, variando este espacio el cuerpo consigue dar al sonido las cualidades adecuadas de tono y volumen. La cualidad del timbre la determina la posicin resonadora de la garganta, boca y nariz, que son cavidades que modulan y amplifican el sonido de la laringe. II. PROCESAMIENTO DE VOZ El procesamiento de voz es el estudio de la seal de voz y las tcnicas de procesado de estas seales. Este procesamiento se divide en distintas categoras: el reconocimiento de voz, mejora de la seal voz, codificacin de la seal voz y sntesis de voz. A. Naturaleza de la seal vocal El anlisis de la seal vocal se lleva a cabo mediante un modelo que describe el proceso del habla, clasificando las seales en dos tipos: o Las seales sonoras que presentan cierta periodicidad como se muestra en la siguiente figura: Seal Sintetizada
0.15 0.1

I. INTRODUCCIN La sntesis de la seal vocal es la creacin de voz sintetizada, donde se desea que una mquina sea capaz de expresarse emitiendo sonidos que se puedan entender como palabras u oraciones. Esto conlleva a la comprensin total del proceso del habla, implicando la interaccin de disciplinas en las que est incluida la fisiologa del rgano humano as como tambin la lingstica. La voz se produce en la laringe, que es una estructura con unos cartlagos flexibles que son el soporte de las cuerdas vocales. Estas cuerdas vocales estn formadas por unos msculos finos, que dispuestos en posicin horizontal forman una especie de V. Para producir un sonido en concreto, las cuerdas vocales se contraen o se alargan. Por

0.05

Amplitud

-0.05

-0.1

-0.15

-0.2

50

100

150

200

250

Muestras (t=N/fs) Fig. 1. Periodicidad de un segmento sonoro

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

o Las seales no sonoras tambin conocidas como fricativas que presentan aleatoriedad en forma de ruido blanco como se muestra en la siguiente figura:
1.5 x 10
-3

Las siguientes ecuaciones representan la seal en segmentos, sin solapar y con solapamiento respectivamente:
= {()}=(1)+1 = {()}=(1)+1
(1)

(3) (3)

0.5

-0.5

o Enventanado Se aplica a cada segmento una funcin ventana, que suaviza los bordes del intervalo haciendo que estos tiendan a cero, y resalta la parte central acentuando las propiedades caractersticas del segmento:
() = () () ,0 1 (4)

Amplitud

-1

-1.5

50

100

150

200

250

(t=N/fs) Fig. 2. AleatoriedadMuestras de un segmento no sonoro

B. Extraccin de caractersticas La extraccin de caractersticas intenta presentar el contenido de la seal de voz de manera compacta, de tal forma que la informacin propia de la seal se preserva. o Limitacin en frecuencia Para lograr esto se aplica un filtro de prenfasis que amplifica las frecuencias ms altas y comprime la seal, donde la compresin es deseable para mejorar la respuesta del detector de voz. La seal de entrada s(n) es filtrada con el siguiente filtro para obtener una seal pre-enfatizada:
() = () ( 1) (1)

La funcin ventana ms comnmente utilizada en el anlisis de la seal de voz, es la llamada ventana Hamming, su mayor virtud radica en que mantiene un buen equilibrio entre su duracin temporal y su resolucin en frecuencia. o Deteccin de voz La deteccin de voz se lleva a cabo a travs de los detectores de actividad de voz (VAD), estos pueden esquematizarse mediante el diagrama de bloques mostrado en la figura 3. La decisin del VAD se realiza en base a la informacin suministrada por las caractersticas de cada frame y finalmente, esta decisin se suaviza en el tiempo.

Donde tiene un valor prximo a la unidad. [1] o Segmentacin Usualmente el anlisis de las caractersticas de la seal de voz se desarrolla segmentando la seal en bloques que se tratan individualmente. Para evitar los efectos negativos provocados al tomar un segmento que contenga una transicin de una zona de la seal cuasi-estacionaria (casi estacionaria) a la siguiente, se usa la tcnica del solapamiento de segmentos. La siguiente ecuacin permite el clculo de muestras para cada segmento:
= (/) (2)

Fig. 3. Diagrama de bloques del VAD

En este caso la deteccin de voz se lleva a cabo a travs del detector de actividad de voz (VAD) propuesto por el artculo Dynamical Energy-Based Speech/Silence Detector for Speech Enhancement Applications. Se declara actividad de voz (VAD =

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

1) si los valores medidos superan los umbrales. De lo contrario, sino se detecta ninguna actividad (es decir, ruido), se declara como silencio (VAD = 0). o Sonoridad y pitch Una vez establecido qu segmentos son sonoros utilizando el VAD, se procede a determinar el pitch o periodo fundamental a partir de la funcin de autocorrelacin determinada por la siguiente ecuacin:
1 () =
=1

()

= ( )
=1

(9)

() = () () = ()

(10)

(6)

Una vez determinado el filtro, este tiene dos posibles seales de entrada que dependern del tipo de seal, sonora o no sonora. Para seales sonoras la excitacin ser un tren de impulsos de frecuencia controlada, mientras que para las seales no sonoras la excitacin ser ruido aleatorio, donde la combinacin de estas seales modela el funcionamiento de la glotis.

Si el segmento es peridico, la funcin de autocorrelacin tambin lo ser, esto se traducir en un valor mximo para aquellos retardos iguales al perodo de la seal, por lo tanto, el mximo global corresponde al retardo nulo, mientras que el segundo mximo debiese corresponder al retardo igual al perodo fundamental [2]. o Modelado del tracto vocal La idea fundamental es que a partir de una determinada muestra de la voz o trama y aplicando un modelo determinado para la generacin de la misma, se obtiene un conjunto de parmetros que definen el modelo. Ese modelo corresponde a un modelo de prediccin lineal LPC (Linear Predictive Coding), donde el tracto vocal, se puede describir por un filtro todo polo de respuesta impulsiva infinita (IIR) con una funcin de transferencia dada por:
() = 1+ 0 =1 (7)

Fig. 4. Modelo de produccin de voz

Este diagrama ensea el proceso de produccin de voz, donde los parmetros del tracto vocal se calculan a travs de la funcin LPC suministrada por la herramienta MATLAB. III. DESCRIPCIN DE BLOQUES Los siguientes bloques describen cada uno de los algoritmos que conforman el sistema sintetizador de voz; el algoritmo de prenfasis para comprimir la seal en amplitud, el algoritmo para determinar qu segmentos de la seal son sonoros y cuales son fricativos, el algoritmo que calcula la autocorrelacin para la deteccin del pitch y el algoritmo que modela el tracto vocal para sintetizar la seal voz. A. Filtro de prenfasis Este bloque tiene como funcin realizar la traduccin de la ecuacin (1) (ecuacin en diferencias del filtro) al correspondiente cdigo MATLAB.

2 Donde 0 es la varianza del ruido blanco de entrada o error de prediccin. La ecuacin en diferencias del sistema que modela el tracto vocal resulta en:

() = ( ) + ()
=1

(8)

El trmino de la sumatoria, puede interpretarse como un predictor lineal en el cual la muestra de salida se puede generar mediante una combinacin lineal de P muestras anteriores, donde se puede calcular el error de prediccin e(n) como:

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.


Seal de entrada Filtro de prenfasis Seal preenfatizada

Fig. 5. Diagrama de bloques del filtro de prenfasis

B. Detector de actividad de voz El siguiente diagrama de bloques extrado del artculo Dynamical Energy-Based Speech/Silence Detector for Speech Enhancement Applications, describe el algoritmo empleado para determinar qu segmentos de la seal, son sonoros y cules no.

El algoritmo caracteriza su comportamiento a travs de la energa de raz media cuadrtica (RMSE) de un segmento de voz; la estimacin del umbral se basa en la observacin de que la energa a corto plazo exhibe distintos picos y valles correspondientes a perodos de actividad o de silencio de la voz. C. Detector de Pitch El detector de pitch se basa en el clculo de la autocorrelacin de cada segmento extrado de la seal, para luego buscar los dos picos mximos que permitan determinar el periodo fundamental.
S[n] Clculo de autocorrelacin R[ ] Bsqueda del pico maximo Pico mximo Posicin

Fig. 7. Diagrama de bloques del detector de pitch

El siguiente diagrama de flujo contiene los detalles de cmo determinar el pitch:


signal frame

N=length(signal frame); index=0 max=0

Calculate R[ ]

R[ ]>max

++

+
max=R[ ]; index=

>N

+
return index & max
Fig. 8. Diagrama de flujo del detector de pitch Fig. 6. Diagrama de flujo del VAD

D. Modelo del tracto vocal Este bloque representa el filtro final con el que se obtiene la seal sintetizada, este recibe los

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

parmetros producidos por la funcin lpc (Linear Predictor Coefficients) de MATLAB y el tipo de excitacin; tren de impulsos, con periodo igual a la frecuencia fundamental calculada en el bloque anterior, para segmentos sonoros y ruido para segmentos no sonoros.
Parmetros del tracto vocal

B. Bloque VAD Para llevar a cabo la deteccin de los segmentos sonoros y no sonoros se aplica el algoritmo VAD descrito anteriormente, donde a partir del clculo del valor cuadrtico de la energa, del establecimiento del valor mximo y mnimo de la energa y del umbral establecido para cada frame se obtienen las siguientes curvas caractersticas:
Energas de la Seal de Entrada y Umbral de Energa
0.1 Energa de la seal Energa mnima Umbral de energa 0.09

Ruido Tren de impulsos

Filtro todo polo IIR

Voz Sintetizada

Fig. 9. Diagrama de bloques del modelo del tracto vocal

0.08

0.07

IV. RESULTADOS MATLAB Despus de haber establecido cada uno de los bloques que conforman el sistema, se procede a realizar la experimentacin con la seal grabada sintetizador de voz a una frecuencia de muestreo de 8000Hz durante dos segundos. A. Bloque de prenfasis La siguiente figura ensea la seal de entrada graficada con respecto al nmero de muestras en contraste con la misma seal pero procesada por el filtro de prenfasis.
Seal de Entrada
1

0.06

Amplitud

0.05

0.04

0.03

0.02

0.01

20

40

60

80

100

120

140

Segmentos

Fig. 11. Energa RMS, energa mnima y umbral de energa


Energa de la Seal de Entrada y su Energa Mxima
0.1 Energa de la seal Energa mxima 0.09

0.08

0.5

0.07

Amplitud

0.06

Amplitud
0 2000 4000 6000 8000 10000 12000 14000 16000

-0.5

0.05

-1

0.04

Muestras

Seal con Filtrado de Prenfasis


1

0.03

0.02

Amplitud

0.5

0.01

0
0

20

40

60

80

100

120

140

Segmentos

-0.5

Fig. 12. Energa RMS y energa mxima


0 2000 4000 6000 8000 10000 12000 14000 16000

Muestras

Fig. 10. Seal de entrada sin filtro y con filtro de prenfasis

Se observa la compresin del rango dinmico de la seal a partir de la utilizacin de dicho filtro, cuyo objetivo no es ms que facilitar la decisin del VAD, realzar las frecuencias altas y suavizar el espectro.

Los parmetros anteriores, representados en las grficas, son el fundamento de la decisin del VAD, lo que da lugar al resultado de la figura 13, se observa la alta sensibilidad del VAD frente frames de la seal que presentan una amplitud cercana al umbral que se establece, lo que se traduce en un valor binario clasificatorio (como voz o ruido) para esos frames sin ser realmente frames de voz:

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.


Grfica del VAD y de la Seal de Entrada
0.8

0.6

0.4

Amplitud

0.2

El incremento del umbral supone una mejora en el momento de sintetizar la seal, puesto que segmentos que no son sonoros no sern excitados con el tren de impulsos, como si ocurre inicialmente con el VAD calculado (figura 13), donde ciertos segmentos no sonoros sern excitados con el tren de impulsos y no con ruido, como debiera ocurrir. C. Bloque sintetizador Este bloque calcula la frecuencia fundamental de cada segmento clasificado como sonoro por el VAD. Se emplea el filtro todo polo IIR, que representa el tracto vocal, para sintetizar la seal de voz a partir de los coeficientes lpc extrados con la herramienta MATLAB y la excitacin que corresponda, tren de impulsos para segmentos sonoros y ruido para segmentos no sonoros. Inicialmente se sintetiza la seal haciendo uso de un nivel de umbral reducido en el VAD para ensear lo anteriormente expuesto:
Seal de Entrada
1

-0.2

-0.4

-0.6

2000

4000

6000

8000

10000

12000

14000

16000

Muestras

Fig. 13. Detector de actividad de voz

Para reducir la sensibilidad del VAD al nivel de ruido se utiliza un valor de cota superior para el nivel del umbral, lo que produce el siguiente resultado:
Energas de la Seal de Entrada y Umbral de Energa
0.1 Energa de la seal Energa mnima Umbral de energa

Amplitud

0.09

0.08

-1

0.07

2000

4000

6000

8000

10000

12000

14000

16000

Muestras

Seal Prenfasis y VAD


0.06
1

Amplitud

Amplitud

0.5 0 -0.5

0.05

0.04

2000

4000

6000

8000

10000

12000

14000

16000

Muestras
0.03
0.1

Seal Sintetizada
Amplitud

0.02

0.01

-0.1

2000

4000

6000

8000

10000

12000

14000

16000

Muestras
0 20 40 60 80 100 120 140

Segmentos

Fig. 14. Energa RMS, energa mnima y umbral de energa


Grfica del VAD y de la Seal de Entrada
0.8

Fig. 16. Sintetizador de voz

Para luego incrementar el umbral y obtener el siguiente resultado:


Seal de Entrada
1

Amplitud

0.6

0.4

-1

2000

4000

6000

8000

10000

12000

14000

16000

Muestras

Amplitud

0.2

Seal Prenfasis y VAD


1

Amplitud

0.5 0 -0.5

2000

4000

6000

8000

10000

12000

14000

16000

-0.2
0.1

Muestras

Seal Sintetizada
-0.4

Amplitud

-0.6

-0.1

2000

4000

6000

8000

10000

12000

14000

16000

2000

4000

6000

8000

10000

12000

14000

16000

Muestras

Muestras

Fig. 15. Detector de actividad de voz

Fig. 17. Sintetizador de voz

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

Observndose una seal sintetizada con menos ruido con respecto a la del umbral inicial (figura 17).
Voz Sintetizada
0.15

0.1

0.05

Amplitud

otras tcnicas, la seal de excitacin de nuestro sistema sintetizador. Gracias a la versatilidad en el manejo de vectores de MATLAB, fue posible realizar cada subsistema del sintetizador sin mayor dificultad; la parte de prenfasis de la seal, el establecimiento del algoritmo VAD, el clculo del periodo fundamental a travs de la autocorrelacin, el clculo de los coeficientes lpc y el establecimiento del filtro todo polo IIR. Permitiendo de esta manera ahondar en la comprensin de la forma en la que un tipo de seal puede ser analizada y procesada. REFERENCIAS

-0.05

-0.1

2000

4000

6000

8000

10000

12000

14000

16000

[1]http://hera.ugr.es/tesisugr/16128503.pdf, pg. 50 [2]http://www.tesis.uchile.cl/tesis/uchile/2009/robles_i/s ources/robles_i.pdf, pg. 23

Muestras

Fig. 18. Voz sintetizada

IV. CONCLUSIONES Se comprendi en trminos generales el proceso de sintetizado de una seal de voz, entendiendo de qu manera una de las tcnicas ms usadas en el procesamiento de seales permite, de modo eficiente, parametrizar cualquier seal en un conjunto pequeo de patrones o coeficientes que admiten la reconstruccin adecuada de dicha seal. Haciendo uso del mtodo de deteccin de pitch a travs de la autocorrelacin se logra obtener, de manera sencilla, la frecuencia fundamental de cada segmento, donde su baja complejidad computacional hace de este el mtodo ideal para entender por qu ciertos segmentos de voz presentan caractersticas estacionarias caracterizadas por un periodo fundamental. Establecer un umbral adecuado en el algoritmo que realiza el clculo de segmentos sonoros y no sonoros permite al sistema ejecutar una mejor discriminacin sobre los frames que representan voz y sobre los que representan ruido, obtenindose una reconstruccin de la seal de voz ms fidedigna. Matlab como herramienta para el procesamiento de seales es indispensable, a travs de esta es posible realizar un adecuado anlisis de la voz, determinando a partir de pequeos segmentos de la misma, caractersticas o patrones importantes con respecto a su naturaleza, patrones que permiten determinar de manera adecuada, en conjunto con

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

ANEXOS A continuacin se presenta la traduccin de los algoritmos, realizados en Matlab, en lenguaje C: A. Filtro LPC
void filter_lpc(float error, float *coef, float *signal_x) { short i, k; float x_n=0, y_n=0, signalpc=0; float y[numcoef+1]; for(k=0; k<numcoef+1; k++) for(k=0; k<N; k++) y[k] = 0.0;

output_filter[k] = 0.0;

for(i=N; i>0; i--){ x_n = error*signal_x[i]; y_n = y[0]*coef[1]; for(k=numcoef-1; k>0; k--){ y_n = y_n + coef[k+1]*y[k]; y[k] = y[k-1]; } signalpc = x_n - y_n; y[0] = signalpc; output_filter[i-1] = signalpc; } }

B. Funcin de sintetizado
void dsp_main() { uint32_t k; uint32_t j, i, m; float max_abs; //buffer que almacena el numero total de coeficientes por cada frame float buffer_coef[numcoef+1]; //vector que almacena la seal sintetizada en punto flotante float synthesizer[size_signal_total]; //vector que almacena el absoluto de toda la seal sintetizada float synthesizer_abs[size_signal_total]; //vector que almacena la seal sintetizada en punto fijo int16_t synthesizer_int[size_signal_total]; //creacion de ficheros para almacenar los resultados char name[] = "fichero.xls"; char name2[] = "fichero2.xls"; char name3[] = "fichero3.xls"; for(k=0; k<size_signal_total; k++) synthesizer[k] = 0.0;

//el siguiente algoritmo es una traduccion de lo realizado en MATLAB for(j=0; j<size_pitch; j++){ if(Npitch_total[j] != 0){ printf("frame sonoro\n"); //se genera la seal de excitacion pulse_train(N, Npitch_total[j]); //se almacenan los coeficientes en el buffer

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales. for(k = j*(numcoef+1), i=0; k<=(numcoef+1)*j+numcoef; k++, i++) buffer_coef[i] = coef_total[k]; // se aplica el filtro que representa el tracto vocal filter_lpc(sqrt(error_total[j]), buffer_coef, dirac_train); for(k = j*Nsub, i=0; k<=(j+1)*N-j*Nsub; k++, i++) synthesizer[k] = output_filter[i]; } else{ printf("frame NO sonoro\n"); //ruido aleatorio para excitar los frames no sonoros for(i=0; i<N; i++) noise[i] = (float)rand()/(float)RAND_MAX-0.5; //se almacenan los coeficientes en el buffer for(k = j*(numcoef+1), i=0; k<=(numcoef+1)*j+numcoef; k++, i++) buffer_coef[i] = coef_total[k]; // se aplica el filtro que representa el tracto vocal filter_lpc(sqrt(error_total[j]), buffer_coef, noise); for(k = j*Nsub, i=0; k<(j+1)*N-j*Nsub; k++, i++) synthesizer[k] = output_filter[i]; } } //se calcula el valor absoluto de la seal for(k=0; k<size_signal_total; k++) synthesizer_abs[k] = fabs(synthesizer[k]); //se calcula el maximo absoluto de la seal max_abs = max_pos(synthesizer_abs, sizeof(synthesizer_abs)/sizeof(float)); if(max_abs>=1) m = floor(16 - 1 - log2(max_abs)); else m = 15; //se pasa el vector que contiene la seal sintetiza a punto fijo for(k=0; k<size_signal_total; k++) synthesizer_int[k] = (short)round(synthesizer[k]*pow(2, m)); //se escribe en ficheros la informacion generada write_file_float(synthesizer, sizeof(synthesizer)/sizeof(float), name); write_file_int(synthesizer_int, sizeof(synthesizer_int)/sizeof(int16_t), name2); write_file_float(synthesizer_abs, sizeof(synthesizer_abs)/sizeof(float), name3); }

Obtenindose el siguiente resultado, tanto en punto flotante como en punto fijo:

Sintetizador de Voz, punto flotante


0,15

0,1

0,05

0 0 -0,05 2000 4000 6000 8000 10000 12000 14000 16000 18000

-0,1

Universidad del Quindo, Lpez Orozco. Procesamiento Digital de Seales.

10

Sintetizador de Voz, punto fijo


5000
4000 3000 2000 1000 0 -1000 -2000 -3000 -4000

2000

4000

6000

8000

10000

12000

14000

16000

18000