Después de haber codificado los algoritmos del sistema de segmentación en el DSP TMS320C6701, se procedió a realizar pruebas de tiempo para observar el desempeño de estos ejecutándose en el DSP. En la Tabla 5.1 se muestra el tiempo de ejecución de cada uno de los algoritmos correspondientes a las etapas de análisis del sistema, estimadas en un bloque de captura y procesamiento de 512 muestras, las cuales se deben ejecutar dentro de la rutina de servicio de interrupción (ISR) por finalización de la captura por DMA, la tabla 5.2 tiempos de conversión para la manipulación de los datos tipo float dentro de la función que procesa el bloque de 64ms, estos tiempos son de mucha importancia debido a que si el tiempo de análisis de la señal es mayor que el tiempo de captura, el sistema colapsa y no es posible llevar una implementación en tiempo real.
Debido a que el DSP trabaja a una frecuencia de reloj de 133Mhz y el sistema de segmentación procesa la señal de voz en bloques de 512 muestras a una frecuencia de muestreo de 8kHz, es de garantizar que el tiempo máximo que debe tardar la rutina del servicio de interrupción debe ser menor a:
ms
T 64
8000512 < =
Expresando el tiempo en ciclos de reloj del DSP:
ciclos Tciclos =133000000*0.064=8512000
Algoritmo Tiempo(ms) Ciclos deReloj relativo a 64ms% Tiempo
Pre-énfasis 1,201955 159.860 1.87 Dwt + Denoising 4,414361 587.110 6.89 Normalización 26,853195 3’571.475 41.95 Cálculo de Energías 0,745865 99.200 1.16 Reglas de Selección 0,292481 38.900 0.45 Realce de la Señal 0,057894 7.700 0.09 Idwt 4,587218 610.100 7.16 Total 38,152970 5’074.345 59.61
Tabla 5.1 Tiempos promedio de ejecución de las funciones dentro de la rutina del servicio de interrupción.
Algoritmo de
conversión Tiempo(ms) de RelojCiclos relativo a 64ms% tiempo Short a float 0,292955 38.963 0.45
Float a short 0,399624 53.150 0.62
Total 0,692579 92113 1.08
Tabla 5.2 Tiempos promedio de ejecución de conversión de los datos. Algoritmo de conversión Tiempo (ms) Ciclos de Reloj % tiempo relativo a 64ms Conversión 0,692579 92.113 1.08 Procesar_Segmento 38,152970 5’074.345 59.61 Total 38,845550 5’166.458 60.69
Tabla 5.3 Tiempo total de la ISR
Es de notar que el tiempo total de las funciones de análisis dentro de la ISR equivale a 59.61% con respecto al tiempo de captura máximo posible (tmax = tcaptura = 512/8000 = 64ms), y la conversión de los datos de short a float y viceversa corresponden a 1.08% sumando ambos porcentajes de tiempo obtenemos un 60.69% del tiempo máximo ( tabla 5.3), lo que nos garantiza una ejecución en tiempo real del sistema.
El código fuente de los algoritmos empleados se encuentra en el Apéndice B, y las estimaciones de sus tiempos de ejecución en la Tabla 5.1, 5.2 y 5.3.
Estos tiempos fueron estimados para un bloque de carácterısticas extraídas a partir de un segmento de captura por DMA.
Capítulo 6
Conclusiones
• Se logró implementar un sistema automático de segmentación de fonemas por medio de la transformada wavelet discreta en tiempo real sobre un procesador Digital de Señales (DSP).
• Para eliminar el ruido incorporado en la señal de voz se utilizó la técnica Wavelet Denoising con umbral diferente en cada banda para conservar información importante en los niveles de menor resolución.
• Se establecieron reglas de selección para clasificar todo el conjunto de fonemas del idioma español, analizando la evolución de la energía de los cuatro niveles de mayor resolución.
• El método empleado para el realce de la señal de voz resultó ser muy eficiente ya que nos garantiza un realce en las diferentes bandas de frecuencia y en el segmento identificado, además su costo computacional es relativamente muy bajo.
• Se adaptó el sistema de segmentación propuesto por el grupo de Investigación GDSPROC para ejecutarse en el DSP TMS320C6701, luego de realizar diversas simulaciones para clasificar los segmentos.
• Para la implementación sobre el DSP TMS320C6701, se adquirieron los datos por medio de la técnica de DMA en doble buffer y considerando para el cálculo de la transformada una continuidad en los segmentos de la señal.
Capítulo 7
Proyecciones
Ya que el proceso de segmentación juega un papel muy importante en la construcción de los sistemas de reconocimiento continuo de voz (CSR: Continuos-Speech Recognition), y con los estudios elaborados anteriormente en el grupo de investigación GDSPROC es posible fusionar los resultados de este proyecto para la construcción en tiempo real del sistema CSR.
Por otra parte se pueden realizar estudios para la implementación de un dispositivo a nivel de hardware que resulte ser de fácil manipulación y asequible en cuanto a precio, para las personas con deficiencias auditivas y con limitaciones económicas ya que el costo de estos dispositivos hoy en día aunque son de una excelente calidad resultan ser demasiado costosos.
El sistema de realce empleado nos brinda una garantía en el momento de obtener mayor intensidad de la señal de voz en una banda predeterminada, este sistema puede ser de utilidad es sistemas de ecualización de sonidos por medio de la transformada wavelet discreta ya que su costo computacional es muy pequeño, de esta manera se podría implementar un sistema de ecualización a través de una línea telefónica, ya que la frecuencia de muestreo es de 8kHz, enfocado hacia las personas con limitaciones auditivas.
Bibliografía
[ADJ03] Alain C. González G., Daniel González S., Juan M. Hernández V., Alberto R. Hernández M., Procesamiento Digital de Señales U del Corazón. Departamento de Ingeniería Eléctrica y Electrónica. Instituto Tecnológico, Toluca. 2003.
[Ala03] Alarcón A., Vicente. Anomaly Detection and Prediction in Communication
Networks using Wavelet Transform. PhD Thesis. Imperial College London.
University London. UK. 2003
[Ber69] Leo L. Beranek. Acústica. Hispano Americana S.A, 2 edition, 1969.
[BR99] Claudio Beccetti and Lucio Prina Ricotti. Speech Recognition. John Wiley and Sons, Chichester, 1999.
[Cas99] Castillo Condado, O. Evaluación de un reconocedor fonético para el
español. Escuela de Ingeniería, Universidad de las Américas-Puebla.1999.
[Dal69] Dalbor, Jhon. Spanish Pronunciation: Theory and Practice. Holt, Rinehart and Winston. New York, 1969.
[Her03] Marianito Hernández Díaz, Análisis Comparativo de Algoritmos para
Reducción de Ruido en Señales Utilizando Wavelets, Universidad de Puebla.
pag.26, 2003.
[Hur03a] Jorge Iván Marín Hurtado. Reconocimiento de Voz en Tiempo Real por
medio de la Transformada Wavelet y Procesadores Digitales de Señales.
Informe Proyecto de Investigación 195 UNIQUINDIO, 2003.
[Hur03b] Jorge Iván Marín Hurtado. Procesamiento Digital de Señales. Texto Guía para el Curso de Procesamiento Digital de Señales UNIQUINDIO, 2002. [Hur03c] Jorge Iván Marín Hurtado. Clase para el control de la tarjeta de sonido
[Jal00] Jalali, Payman. Wavelets and applications. Energy Technology Department. Lappeenranta University of Technology. August 2000.
[LD96] C.J. Long and S. Datta. Wavelet based feature extraction for phoneme recognition. Proc. ICSLP, 1:264–267, 1996.
[LF94] Paul A. Lynn and Wolfgang Fuerst. Digital Signal Processing with
Computer Applications. John Wiley and Sons, 1994.
[Mal89] S. G. Mallat, “A Theory for Multiresolution Signal Decomposition: The
Wavelet Representation”, IEEE Transactions on Pattern Recognition and
Machine Intelligence, vol. 11, nº 7, pags. 674-693, 1989.
[Mar99] Martin, Frederick N. Introducción a la Audiologia, AUDIOLOGIA, 1999. [MHLPA03] J.I. Marín-Hurtado, A. López-Parrado, and R. Arango. Segmentación de
señales de voz usando dsp y transformada wavelet. Memorias V Congreso
Colombiano de Automática, 2003.
[MMOP07] Michel Misiti, Yves Misiti, Georges Oppenheim y Jean-Michel Poggi
Wavelet Toolbox For Use with MATLAB Mathworks, 1997.
[MYG97] Michel Misiti, Yves Misiti, Georges Oppenheim y Jean-Michel Poggi
Wavelet Toolbox For Use with MATLAB Mathworks, 1997.
[Per01] Javier Ramírez Pérez de Inestrosa. “Nuevas Estructuras RNS para la Síntesis
VLSI de Sistemas de Procesamiento Digital de Señales”. Tesis Doctoral. Universidad de Granada. 2001.
[Pol96] Polikar, Robi. The Wavelet Tutorial. Dept. Of Electrical and Computer
Engineering. Rowan University. 1996.
[RB98] Raghuveer M. Rao and Ajit S. Bopardikar. Wavelet Transforms. Addison Wesley, 1998.
[Teo98] Anthony Teolis. Computational Signal Processing with Wavelets.
Birkhauser, Boston, 1998.
[Tex00] Texas Instruments. TMS320C6000 CPU And Instruction Set Reference Guide. January 2000.
[TLS94] B. T. Tan, R. Lang, H. Schroder, A. Spray, and P. Dermody. Applying wavelet analysis to speech segmentation and classification.Proc. SPIE 2242, Wavelet Application Volume:750–761, 1994.
[VK95] M. Vetterli, J. Kovacevic, Wavelets and Subband Coding. Prentice Hall, 1995.
Apéndice A
Código fuente para MATLAB
B.1 Código fuente del programa principal en matlab
% El programa está simplificado en algunas funciones % se anexa un CD adjunto para las lines de código de % funciones optimizadas
close all clear all
% lectura de un archivo de sonido previamente capturado archi = input('archivo (sin extension .wav): ');
[x,fs1] = wavread( strcat(archi, '.wav') ); [Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db8'); %Cambia la frecuencia de muestreo a 8KHz
%======================================== if (fs1 ~= 8000)
x = resample(x, 36, 100); fs1 = 8000;
end
% Ajusta la señal a determinado numero de muestras (multiplo 512)
%==================================================================% N = (length(x)/2048-fix(length(x)/2048)); if (N < 0.3) n = 2048*fix(length(x)/2048) + 512; elseif ((N > 0.3)&(N<0.7)) n = 2048*fix(length(x)/2048) + 1024; else n = 2048*fix(length(x)/2048) + 2048; end X = ajustar(x,n); maxbandas=4; w_name='db8';
% Análisis de la señal por bloques de 512 datos % y su respectiva recuperación con el realce deseado
%===================================================================== cont=1;
x=[]; XTT=[];
while muestra <= length(X) Ct=[];Cb1=[]; if ( muestra+512 > length(X) ) tx = [ X(muestra:length(X)) ]; else tx = X(muestra:muestra+511); end xa = conv(tx , [1 -0.95]); x = [x_ant+xa(1); xa(2:512)]; x_ant=xa(513); wavelet(x);
denoising( nivel_detalle, umbral); % Normalizacion de energia
% Calcula la Derivada del logaritmo del valor absoluto % XX = Der( log ( || ) )
% y la Exponencial de la Integral de los Coeficientes Wavelet % exp ( integral ( XX ) ) Cb1 = normalizacion(Coefs_wavelet); Cb1=[D1' D2' D3' D4' A4']; % Cálculo de energías lenbanda = length(Cb1)/2 ; posbanda = 1; energia=[]; E_deltas = zeros(4,16); for ibanda=1:maxbandas xbanda = Cb1(posbanda:posbanda+lenbanda-1)'; lensegmento = 32/(2^ibanda); energia_banda = []; numsegmentos = 0; for i=1:lensegmento:lenbanda energia_banda(numsegmentos+1) = sum(xbanda(i:i+lensegmento-1).^2); numsegmentos = numsegmentos+1; end energia_banda=[energia_ant(ibanda,:) energia_banda]; energia_banda1 = filter([1 1 1 1 1 1 1 1], 1, energia_banda); energia_ant(ibanda,:) = energia_banda(17:23);
e_nivel = energia_banda1(8:23); energia = [energia; e_nivel]; posbanda = posbanda+lenbanda; lenbanda = lenbanda/2;
for l=1:numsegmentos
E_deltas(ibanda,l) = sign( e_nivel(l) - Ant_eprom(ibanda) ); Ant_eprom(ibanda) = e_nivel(l);
end end
% Reglas de selección establecen el tipo de segmento etiqueta = reglas(E_bandas,E_deltas); %Realce de la señal for ik=1:numsegmentos if(etiqueta(ik)==0) D1_inv(16*ik-15 :16*ik)=zeros(1,16); D2_inv( 8*ik- 7 : 8*ik)= zeros(1,8); D3_inv( 4*ik- 3 : 4*ik)= zeros(1,4); D4_inv( 2*ik- 1 : 2*ik)= zeros(1,2); A4_inv( 2*ik- 1 : 2*ik)= zeros(1,2); end
if(etiqueta(ik)==1)
D1_inv(16*ik-15 :16*ik) = D1_inv(16*ik-15 :16*ik)* realce_Sordo; D2_inv( 8*ik- 7 : 8*ik) = D2_inv( 8*ik- 7 : 8*ik)* realce_Sordo; D3_inv( 4*ik- 3 : 4*ik) = D3_inv( 4*ik- 3 : 4*ik)* realce_Sordo; D4_inv( 2*ik- 1 : 2*ik) = D4_inv( 2*ik- 1 : 2*ik)* realce_Sordo; A4_inv( 2*ik- 1 : 2*ik) = A4_inv( 2*ik- 1 : 2*ik)* realce_Sordo; end
if(etiqueta(ik)==2)
D1_inv(16*ik-15 :16*ik) = D1_inv(16*ik-15 :16*ik)* realce_Sonoro; D2_inv( 8*ik- 7 : 8*ik) = D2_inv( 8*ik- 7 : 8*ik)* realce_Sonoro; D3_inv( 4*ik- 3 : 4*ik) = D3_inv( 4*ik- 3 : 4*ik)* realce_Sonoro; D4_inv( 2*ik- 1 : 2*ik) = D4_inv( 2*ik- 1 : 2*ik)* realce_Sonoro; A4_inv( 2*ik- 1 : 2*ik) = A4_inv( 2*ik- 1 : 2*ik)* realce_Sonoro; end end L1_inv=[D1_inv L1_ant']; L2_inv=[D2_inv L2_ant']; L3_inv=[D3_inv L3_ant']; L4_inv=[D4_inv L4_ant']; C4_inv=[A4_inv C4_ant']; % Wavelet Inversa
Ca3 = idwt(C4_inv * Realce , L4_inv * Realce , w_name); Ca2 = idwt(Ca3(1:77) , L3_inv * Realce , w_name); Ca1 = idwt(Ca2(1:139), L2_inv * Realce , w_name); Xa = idwt(Ca1(1:263), L1_inv * Realce , w_name); cont=cont+1;
muestra=muestra+512; end%fin for muestra
Apéndice B
Código fuente para el DSP TMS320C6701
B.1 Código fuente del programa principal
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> #include "captura_dma.h" #include "segmentacion.h" float *buff; float *coefs1; int bBufferProcesado = 0;
void procesa_segmento_ISR (short *buffer, int nmuestras)
{ int k; short* salidaDAC; short* entradaADC; short val; entradaADC = buffer; for(k=0;k<L;k++) { buff[k] = entradaADC[2*k] * 0.000030519; }
procesar_segmento( buff, coefs1 ); // Escribe al DAC // salidaDAC = retornar_bufferout(); if (salidaDAC!=NULL) { for(k=0;k<L;k++) { salidaDAC[2*k] = buff[k] * 32767.0;
salidaDAC[2*k+1] = 0; } } bBufferProcesado = 1; }
void main()
{puts("Proyecto Segmentacion - Realce\n"); puts("Iniciando DSP...");
if (configurar_codec(HABILITAR_CAPTURAESCRITURA,MIC_SEL)==ERROR) {
puts("Hubo un error al iniciar DSP!"); return;
}
puts("DSP [OK]");
puts("Espere, iniciando sistema..."); /*inicializacion de variables */
/****************************************************/ buff = (float*) malloc( L*sizeof(float) );
coefs1 = (float*) malloc( L*sizeof(float) ); iniciar_segmentacion(); /*****************************************************/ procesa_bufferin_func = procesa_segmento_ISR; iniciar_lectura(); retornar_bufferout(); retornar_bufferout(); iniciar_escritura(); puts("Sistema [OK]"); while (1) { while (bBufferProcesado == 0); bBufferProcesado = 0; /* mostrar la información */ } }