Professional Documents
Culture Documents
Alumno :
Legajo :
Materia :
Profesor :
Fecha :
Roux, Federico G.
120660-6
Procesamiento de Seales en Tiempo Real
Ing. Bruno, Ing. Martinez Garbino, Ing. Atencio.
01/10/2014
La transformada de Fourier utiliza como base una seal senoidal a frecuencias mltiplo de
una frecuencia fundamental. Las seales senoidales son predecibles y por lo tanto son
ideales para describir procesos estacionarios.
La transformada Wavelet utiliza como base una seal irregular de corta duracin en tiempo.
Esto la hace ideal para describir procesos transitorios. [1]
auditivo.
La forma de estimular los electrodos es motivo de constante investigacin. La ms bsica
fue estimular directamente los electrodos con la seal de audio entera. Luego se mejoro la tcnica
reemplazando el controlador por un DSP que permita realizar una FFT de la seal de entrada y
estimular selectivamente cada electrodo con el rea de frecuencias que le correspondera a esa zona
de la cclea en un paciente sano. Esto tambin puede lograrse con una serie de filtros pasabanda
sintonizados a la frecuencia de inters.
Con el desarrollo de la teoria de wavelets se verific que el comportamiento de la cclea es muy
similar al resultado que arroja la CWT, y posteriormente una modificacion de la misma,
denominada BWT. Esto permite lograr un mejor aprendizaje en pacientes implantados.
Las bandas de inters donde el odo tiene cambios de sensibilidad frecuencial se denominan
bandas ERB. Se listan en la siguiente tabla :
Estas bandas de frecuencia se pueden lograr con bastante exactitud con una Wavelet que es
una modificacin de la wavelet Morlet. Se denomina Morlet Munich y su frmula es la siguiente:
Proyecto Offline :
a) Desarrollo de la ondita :
Para poder hacer clculos en contraste con el algoritmo predefinido de MATLAB cwt(), se
defini la ondita ms similar a la que se va a utilizar finalmente, que es la ondita Morlet. El
algoritmo cwt tiene el siguiente prototipo :
coefs = cwt(x,scales,'wname');
Donde los parmetros significan :
x : seal a analizar
scales : array con las escalas a analizar
'wname' : Nombre de la ondita a utilizar en el procesamiento.
Es decir, para poder contrastar nuestro algoritmo contra el de MATLAB, es necesario que
tengamos previamente calculada la seal de una ondita que utilice por definicin dicho algoritmo.
Como se dijo anteriormente, se eligi la ondita Morlet cuya ecuacin es la siguiente (ver funcion
my_Morlet.m):
W = exp(-(t.^2)/2).*cos(5*t);
Algortimo Offline :
La funcin de procesamiento se escribi en assembler para utilizar las instrucciones de
multiplicacin, acumulacin y de saturacin.
Se realiz un Loop-Unrolling de 4 muestras de los coeficientes de la ondita para tener mayor
velocidad en el bucle de muestras.
Manejo del Punto Fijo : El ADC del microcontrolador utilizado tiene 12 bits. Puedo
representarlo sin problemas con un formato Q1.11. El segundo de los operandos representa a los
coeficientes de la ondita, que estn calculados en Q15. Es decir, en cada multiplicacin, el formato
de salida ser :
Wordlength de multiplicacin : 16 bit * 16 bit = 32 bits
Fraclength de multiplicacin : 11 bit * 15 bit = 27 bits
Es decir, el acumulador tendr un formato de 27 bits si utilizo las muestras del ADC en
formato Q1.11. La ventaja que obtengo es que en un acumulador de 32 bits en total, tengo 5 bits de
guarda para la acumulacin. La desventaja de usar el formato Q1.11 para el ADC en lugar de
simplemente utilizar Q15 es que pierdo 4 bits de resolucin. Pero como el DAC del
microcontrolador es de 10 bits, y al final estar recortando bits, elijo tener 5 bits de guarda.
Instrucciones especficas DSP :
Las multiplicaciones y acumulaciones se hacen con la instruccin MLA. La sintaxis es la
siguiente :
mla Acc0,x1,c1,Acc0
Donde Acc0, x1 y c1 son constantes del precompilador que hacer referencia a registros de
propsito general. La arquitectura del Cortex-M3 tiene un banco de 14 registros de propsito
general, y todas las instrucciones pueden recibir como parmetro un registro o una constante.
Una vez finalizado el clculo de una tanda de 4 coeficientes de salida (despus de barrer
todo el vector de coeficientes de la wavelet), se procede a hacer la saturacin de la salida. Para ello,
el LPC1769 cuenta con dos instrucciones, USAT y SSAT, para realizar la saturacin de un registro
sin signo y con signo respectivamente. La sintaxis utilizada es la siguiente :
ssat Acc1, #ACC_FLEN, Acc1
Krn.h en formato de punto fijo, con las muestras en hexadecimal para incluir en C.
En el proyecto de C CWT_Offline simplemente se cargan en memoria los dos arrays
generados en MATLAB, y se pasan a la funcin vF_dspl_blockfir32(). Se coloca un
BREAKPOINT despus de terminar el procesamiento en la funcin para luego realizar la descarga
del contenido de memoria, como se detalla en [5]. Se descarga de esta manera el contenido del array
dac_buff_pong declarado en forma global.
Se utilizaron diferentes formas de seal para realizar los clculos. En todos los casos los
resultados son idnticos, obteniendo una seal de error nula.
A continuacin se grafican los resultados para dos seales de prueba :
Algoritmo online :
Ajuste numrico a registros del LPC1769 :
El ADC del LPC1769 tiene 12 bits de resolucin sin signo, con lo que la seal digital que
entrega tiene un rango dinmico que va desde 0x0000 hasta 0x0FFF. Para poder operar con seales
con signo, lo primero que hacemos es convertir dicha seal del ADC a una seal con signo, es decir,
complementamos el MSB. Esto hace que la seal que antes tena valor medio 0x07FF ahora tenga
valor medio 0x0000, yendo desde 0x0800 hasta 0x07FF.
Adems, el valor de cada muestra del ADC se puede leer del registro de 32 bits ADCR, cuyo
formato consiste en tener los 12 bits de la muestra alineados al bit 15, es decir, tiene los 4 bits
menos significativos en cero. Por lo dicho anteriormente, los 12 bits de la muestra del ADC se
alinean al bit 0.
Asimismo, el registro de 32 bits DACR, el registro de salida del DAC, guarda los 10 bits a
convertir alineados contra el bit 15, es decir, teniendo los 6 bits menos significativos en cero. El
formato de estos 10 bits de salida es sin signo, es decir, cubre un rango desde 0x0000 hasta 0x03FF.
Es necesario convertir nuevamente del formato con signo que tiene nuestro algoritmo a este formato
sin signo, complementando el MSB del valor de salida. Al convertir los 27 bits de resolucin del
acumulador a los 10 bits del DAC, simplemente se enmascaran los 10 bits ms significativos. Esto
puede mejorarse realizando un redondeo del LSB en lugar de truncar los bits.
Programa principal :
El programa principal inicializa el ADC y el DAC para realizar conversiones a la mxima
frecuencia posible. El ADC tiene conectado un clock denominado PCLK, que es un submltiplo de
la frecuencia central PCLK = CLK / 8. Se necesitan 65 ciclos de este clock para realizar una
conversin, con lo que la frecuencia de muestreo del ADC es :
Fs_ADC = 100 Mhz / (8*65) = 192.3 kHz.
Esta es entonces la frecuencia con que se escribe el registro ADCR.
Luego se inicializa un timer para funcionar a una frecuencia determinada, en nuestro caso
20kHz. Este timer es el que dispara el pedido de transferencia de memoria del registro ADCR al
buffer de delay de procesamiento a travs de un canal del DMA, y el que realmente fija la
frecuencia de muestreo del sistema.
Este mismo timer dispara el pedido de transferencia de memoria de otro canal del DMA
desde el buffer de salida del algoritmo al registro DACR.
Medicin de tiempos :
Finalmente se ejecut el programa CWT_Online y se midieron los tiempos de
procesamiento entre un bloque de 1200 muestras del ADC y un filtro de 400 muestras.
Para medir el tiempo de procesamiento se cambi el estado de un pin de salida antes y
despus del algoritmo de procesamiento. Se midieron las seales con un DSO GW Instek GDS1052-U.
El tiempo de procesamiento para la escala a = 1 es de aproximadamente 10 ms, es decir, un
cuarto del tiempo. Al ser el tiempo de procesamiento geomtrico para las sucesivas escalas,
Bibliografa :
[1] Conceptual Wavelets in Digital Signal Processing : an in-depth, practical approach for the nonmathematician. D. Lee Fugal.
[2] Cortex-M3 Instruction Set TECHNICAL USER'S MANUAL Texas Instruments.
[3] UM10360 LPC176x/5x User Manual
[4] Help de MATLAB 2008.
[5] Tutorial DSP LPC1769
[6] LPCXpresso LPC1769 rev B
[7] Understanding Digital Signal Processing, Lyons
[8] Cochlear Implant Stimulation Strategy Based on Wavelet Transform: Toward DSP Real Time
Implementation, Derbel, Ghorbel, 2011
[9] Mimicking the human ear, Loizou, 1998