You are on page 1of 16

Procesamiento Digital de Seales en Tiempo Real

Universidad Tecnolgica de Buenos Aires 2014


Trabajo Final

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

Transformada Wavelet Contnua aplicada a Implantes cocleares:


1) Introduccin al anlisis wavelet :
La transformada wavelet se diferencia de la transformada de Fourier en las seales que
utiliza para comparar con la seal a analizar :

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]

Fig. 1: Comparacin entre una seal senoidal y una wavelet.


Una wavelet es entonces una oscilacin en el tiempo de corta duracin con un valor medio
cero. Tericamente se extienden de menos infinito a ms infinito, pero se utiliza solamente una
pequea porcin del dominio de la funcin. Esto es lo que se llama Soporte de la wavelet.
Existen tanto wavelets definidas a partir de una frmula como definidas a partir de una
forma de onda, sin una frmula. La cantidad de puntos de las wavelets definidas a partir de una
frmula depende de la frecuencia de muestreo que se utilice al generalas. La cantidad de puntos de
las wavelets definidas a partir de una forma se puede variar interpolando o quitando muestras de la
frmula original.
Se denomina escala de una wavelet al sub muestreo o sobre muestreo de una wavelet
respecto a una cantidad inicial de muestras. Por ejemplo, si la wavelet original tiene 17 muestras, la
escala nmero 1 corresponde a la de 17 muestras, lo que se denomina wavelet madre. La escala
dos tendr 33 muestras, y la escala 1/2 tendr 9 muestras.
El anlisis wavelet permite obtener informacin de una seal en tiempo y frecuencia
simultneamente. Se realiza un filtrado pasabanda de la seal, donde el filtro utilizado es la
Wavelet madre decimada en una serie de escalas elegidas previamente segn la frecuencia que se
quiera analizar.
La relacin escala frecuencia de una wavelet elegida se da a partir de la frecuencia de la
oscilacin fundamental de la wavelet madre.
Al variar la cantidad de muestras de una wavelet, el Q de la misma (relacin entre frecuencia
central y ancho de banda) se mantiene constante. Por ejemplo, si modificamos la cantidad de
muestras de una seal SINC podramos ver lo siguiente :

Fig. 2 : Espectro de una misma seal variando su cantidad de muestras


En una misma wavelet pueden coexistir varias frecuencias, por lo que en el anlisis wavelet
no siempre se suele hablar de frecuencias sino directamente de escalas. Sin embargo esto no nos da
una idea concreta en relacin con una seal fsica.
La comparacin ms clara entre anlisis de Fourier y anlisis Wavelet se da en una seal
senoidal que cambia abruptamente de frecuencia. La seal temporal y su respectivo espectro pueden
verse en la siguiente figura :

Fig. 3 : Seal senoidal variando su frecuencia fundamental y su espectro.


La funcin a analizar tiene 1024 puntos. La primer mitad tiene una frecuencia fundamental
f1 = 1/8 Nyquist, y la segunda mitad tiene una frecuencia de f2 = Nyquist.
Es claro que al ver el espectro de Fourier de la seal no tenemos ninguna informacin sobre
el momento en que ocurre el cambio de la frecuencia fundamental de la seal senoidal.
Si en lugar de hacer anlisis de Fourier, quisiramos hacer anlisis Wavelet, deberamos
elegir una Wavelet madre en primer lugar. Podemos elegir una Wavelet llamada Morlet, que tiene
la siguiente ecuacin :
w = exp (-(t ^ 2) / 2 ) * cos (5 * t);
Si la variable t est en segundos, la ondita tiene un soporte efectivo que va
aproximadamente de -4 a +4. Fuera de este rango, el valor de w, es prcticamente cero.
Podemos considerar arbitrariamente la escala a = 1 para una cantidad de muestras N = 17
(como lo hace MATLAB), con un soporte de -8s a +8s.
En la escala a = 6, es decir, con una N = 97 puntos, la ondita Morlet tendr una Ts = 16s / 97
= 0.165 s. La frecuencia asociada a la oscilacin de la Wavelet es:
fr = (5 rad /seg) / ((2*pi) * (Fs/2)) = 0.26 F Nyquist.

Es decir, la frecuencia fundamental asociada a la oscilacin de la Wavelet en la escala 6 es


muy similar a la frecuencia fundamental de la seala a anlizar en la segunda mitad. De la misma
manera, la wavelet analizada en la escala 12 (N = 193) la frecuencia central relativa de la wavelet
ser :
fr = (5 rad /seg) / ((2*pi) * (Fs/2)) = 0.13 F Nyquist.
Es decir, asociada a la frecuencia de la primer mitad.
Si filtramos la seal anterior con las dos seales nos quedara lo siguiente :

Fig. 4 : Seal analizada en las escalas 6 y 12 de la ondita MORLET.


Lo ltimo que puede aclararse a modo de introduccin son los diferentes algoritmos
utilizados en el procesamiento. Si bien todos los anlisis son discretos, existen principalmente los
siguientes :

CWT (Continous wavelet transform) : Las escalas de anlisis se eligen arbitrariamente.


DWT (Discrete wavelet transform) : La escala siempre se incrementa o disminuye en un
factor de 2. Adems, en lugar de utilizar solo una ondita madre, se utilizan 3 filtros
adicionales.

2) Introduccin a implantes cocleares :


La coclea es un rgano del odo interno con forma de espiral. En ella, se transforma la
energa acstica que ingresa al odo en energa elctrica para ser transmitida a traves del nervio
auditivo al cerebro. Esta conversin de sonido en una seal elctrica se hace a traves de un liquido
alojado dentro de la cclea. El lquido es desplazado por la onda sonora y esto hace excitar las
neuronas del nervio auditivo que llegan a la coclea, denominado membrana basilar. All se inicia la
transmision elctrica.

Fig. 5: rganos del odo intero y oido medio.


Si desenrollaramos la cclea y la extenderamos en forma lineal, podramos decir que se trata de
un "eje de frecuencias auditivas". Uno de los modelos auditivos plantea que la coclea transmite
las altas frecuencias al nervio auditivo en su sector ms externo, mientras que las bajas frecuencias
lo hacen sobre el final de la cclea. Es decir, se puede hacer una correlacin entre longitud y
frecuencia de la membrana basilar.

Fig. 6 : Representacin del modelo auditivo de la membrana basilar


Existen patologas que afectan la funcin de la coclea y no permiten la correcta transduccin
acstico/elctrica. Se realizan para estos casos los conocidos "implantes cocleares", en los que se
busca reemplazar la funcin de la cclea por un dispositivo electrnico.
La base del funcionamiento de los implantes cocleares consiste en un micrfono colocado en
el odo externo, conectado a algn tipo de transmisor (RF por ejemplo) que se comunica con un
controlador situado muy proximo a la cclea no funcional. Este controlador recibe la seal de audio
captada por el micrfono y estimula una serie de electrodos conectados directamente al nervio

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:

Donde f0 es la frecuencia central a analizar.


Esta Wavelet se calcul en el script analisis_wavelet_Morlet_Munich.m. Como la
Wavelet consta de una exponencial y una oscilacin, se calcularon ambas por separado.
Aprovechando la teora de Wavelets, podemos definir una Wavelet madre de 50 Hz,
utilizando por ejemplo 400 muestras, para luego decimar la misma durante el procesamiento y
obtener aproximadamente las bandas ERB antes mencionadas. Cabe destacar que en las
aplicaciones prcticas de implantes cocleares no se utilizan todas las bandas ERB ni tampoco se

determinan con exactitud cada una de ellas. Son valores de referencia.


Luego de calcular la Wavelet madre se obtuvo lo siguiente :

Fig. 7 : Clculo de la ondita Morlet Munich.


3)

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);

La comparacin entre las dos seales se realiz en el script test_W_Morlet, haciendo un


anlisis para diferentes escalas.
Se grafican a continuacin los resultados para la escala a = 1 :

Fig. 8: Comparacin entre Wavelet de MATLAB y calculada.


b) Desarrollo del algoritmo en punto flotante:
En primer lugar, se desarroll en MATLAB el algoritmo un punto flotante my_cwt(), para
contrastar contra la funcin ya definida de MATLAB cwt(). El script utilizado para hacer dicha
comparacin es el llamado Test_CWT.m, en el que se generan una seal arbitraria y se procesa
utilizando la ondita Morlet ya validada anteriormente.
Se evaluaron los resultados para diferentes seales y escalas obteniendose resultados
satisfactorios (error = 0). Los resultados del script se imprimen en el Command Window de
MATLAB, con resultados como el siguiente para una seal senoidal de 16 puntos y una serie de
escalas entre 1 y 10.
Los resultados son los siguientes :

Fig. 8 : Seal a analizar en punto flotante

RESULTADOS DEL SCRIPT :


FUNCION MY_CWT()
---------------------------------------------------------------Error en el clculo de coeficientes de matlab contra algoritmo:
---------------------------------------------------------------1.0e-015 *
Columns 1 through 11
0.0069 0.0069
0 0.0069
0
0
0
0 0.0139 0.0069 0.0069
0.0035
0 0.0069 0.0104 0.0030 0.0026 0.0085 0.0141 0.0015 0.0112
0.0048
0 0.0139 0.0416 0.0278 0.0139 0.0069 0.0017 0.0009 0.0121 0.0158
0.0139
0.0555 0.0278
0 0.0555 0.0278 0.0555 0.0416 0.0278 0.0278 0.0555
0.0278
0.0555 0.0278 0.0625 0.1665
0 0.0555 0.0625
0 0.0555 0.0555 0.1180
0.0555 0.1110 0.1388
0
0 0.1665 0.1388 0.3331 0.1110 0.5551 0.4163
0.0555 0.5898 0.5551 0.1110
0 0.2776 0.3053 0.3331 0.4441 0.2220
0.3053
0.1388 0.1665
0 0.2220 0.1110 0.3331 0.2776 0.3331
0 0.4441 0.6106
0
0 0.4441 0.3331 0.1110
0 0.3331
0 0.4441 0.3331 0.1665
0.4996 0.1110
0
0 0.1665
0 0.3331 0.3331
0
0 0.2220
Columns 12 through 16
0.0139
0 0.0069 0.0069 0.0069
0.0015 0.0043 0.0104 0.0208 0.0173
0.0104 0.0382 0.0486 0.0278
0
0.0555 0.1110 0.0278
0 0.0555
0.0555
0 0.1110 0.0625 0.1110
0.1665 0.1110 0.2220 0.3886 0.0555
0.3331 0.2220
0 0.0555 0.4406
0.3331 0.1110 0.3331 0.2220
0
0.6661 0.6661
0
0 0.1110
0 0.4996 0.1110 0.2220
0
---------------------------------------------------------------Valores caractersticos del error :
---------------------------------------------------------------Error medio = 0.000000
Error maximo = 0.000000
Error acumulado = 0.000000
c) Desarrollo del algoritmo en punto fijo :
Se modific el algoritmo anterior, creando una versin en punto fijo denominada
my_cwt_fp(). Se introdujo fi objects para cuantificar las seales y reproducir el sistema
numrico del LPC1769. La primer versin de este algoritmo se realiz con los numerandos en

formato Q15 y el acumulador en formato Q5.27, demostrado posteriormente. Se utiliz asimismo


aritmtica saturada :
Se realiz el anlisis con diferentes seales y diferentes escalas. El resultado que se muestra
es para una seal senoidal de 200 muestras con la ondita Morlet:

Fig. 9 : Seal a analizar en punto fijo


Las seales obtenidas para las escalas 1 y 2 son las siguientes :

Los resultados del script son entregados en el Command Window :


FUNCION MY_CWT()
Escala Frec.
1.0000 0.0008
2.0000 0.0004
---------------------------------------------------------------MY_CWT_FP() Valores caracteristicos del error :
---------------------------------------------------------------Error medio = 0.000292
Error maximo = 0.032976

Error mnimo = 0.000000


Puede verse que el error obtenido est dentro de los mrgenes esperables. Este clculo se
hizo teniendo en cuenta lo siguiente :
Error mximo de cuantificacin :
En el sistema Q15 el error mximo de cuantificacin es 2^(-15) / 2, es decir : 15.25. E-6
En el peor de los casos, con una wavelet de 33 muestras en las escalas elegidas, el error
puede acumularse 33 veces, multiplicado dos muestras en las que ocurra el mximo error
de cuantificacin, con lo que nos quedara como mrgen inferior EMAX = 4 E-3. El
error mximo es 8 veces ms grande que este lmite inferior de EMAX.
4) Algoritmo CWT en LPC1769 :
Resumen de la arquitectura Cortex-M3 :
Se implement el algoritmo en un LPC1769. Se eligi este microcontrolador porque cuenta
con instrucciones de saturacin y multiplicacin y acumulacin. Asimismo incorpora un un pipeline
de 3 etapas con arquitectura Harvard, teniendo un bus separado para datos e instrucciones, y un
tercero para perifricos.
El Cortex-M3 tres buses, un bus de sistema, un bus de instrucciones (I-Bus) y un bus de
datos (D-Bus). El pipeline se divide en Ejecucin Decodificacion Fetch de instrucciones.
La AHB-Matrix permite el acceso optimizado del CPU y el DMA a la SRAM y la Flash,
reduciendo la cantidad de colisiones de memoria.

Fig. 10 : Diagrama de la arquitectura CM3

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

// Acc0 = (Acc0 + (x1 * c1))[1.15]*[4.12] = [5.27]

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

Donde el primer parmetro es el registro de salida de la instruccin, el segundo parmetro es


nmero de bit donde hacemos la saturacin, y el tercer parmetro es el parmetro de entrada del
algoritmo. De esta manera, se realiz la saturacin de uno de los resultados almacenados en uno de
los acumuladores en el bit nmero 27, que contiene el primer bit entero del formato de salida ya
demostrado de 5.27.
Script de comparacin :
El proyecto CWT_Offline se utiliz para hacer las pruebas en conjunto con el script
script_Comprobar_Algoritmo_C.m.
En dicho script, se generan 2 seales en Q15 que se utilizarn como entrada tanto en
MATLAB como en el algoritmo en C. Estas seales son guardadas con el nombre Sgn.h y

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 :

Fig. 11 : Seales de entrada y resultado en MATLAB

Fig.12 : Seales de salida de MATLAB y C. Seal de error

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,

Fig. 12 : Tiempo de procesamiento para la escala a = 1.


5) Conclusiones :
La evaluacin realizada del algoritmo de CWT sobre el microcontrolador elegido, LPC1769
demuestra que el poder de procesamiento del mismo no es muy recomendable para la aplicacin
elegida, ya que utilizando su mxima performance (utilizando DMA y las instrucciones especficas
de DSP), el tiempo de procesamiento es muy cercano al tiempo entre bloques de muestras.
Las ventajas del microcontrolador en otros aspectos, como por ejemplo el consumo y la
velocidad, se ven comprometidas por el tiempo de procesamiento.
Valdra la pena evaluar para esta aplicacin un procesador con ms instrucciones de DSP
especficas como loops por hardware, MACs simultneas, acceso memoria dual, mayor frecuencia
de trabajo, para comparar con el procesamiento, consumo y facilidad de implementacin del
LPC1769 en esta aplicacin donde todas estas variables son vitales.

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