Está en la página 1de 16

UNIVERSIDAD DE BUENOS AIRES

FACULTAD DE INGENIERA
Ao 2011 2

Cuatrimestre





REDES NEURONALES
(66.63)




TEMA:
DETECCION DE SPIKES NEURONALES A TRAVES DE FILTROS
ADAPTADOS RESULTANTES DE UNA RED DE KOHONEN





ALUMNOS:
Gena, Anabella Cecilia- # 86343
anabella.gena@gmail.com

Yegier, Ariel Alejandro- # 86888
ariyegi@hotmail.com
ndice

Objetivo 3
Especificaciones 3
FPGA: Diagramas en bloques 3
FPGA: Descripcin de las arquitecturas 6
FPGA: Diagrama de flujo de la CPU 8
Matlab: Red de Kohonen 10
Matlab: Cdigo de la red de Kohonen 11
Matlab: Instructivo de uso del aplicativo 12

















Objetivo

Clasificar spikes a travs de filtros adaptados, para poder identificar a qu neurona
pertenece cada uno de los detectados con un mismo electrodo. Esto es necesario pues cada
uno de ellos sensa el comportamiento de ms de una neurona, con el incremento de ruido en
el mecanismo de toma de muestras. Los patrones se obtendrn a travs de una red de
Kohonen y se implementarn en una FPGA, en la cual se realizar el filtrado correspondiente
de la seal.

Especificaciones

Se implement en lenguaje descriptor de hardware VHDL: una interfaz serie UART,
un controlador para la memoria RAM externa, una arquitectura compuesta por un arreglo
de tres filtros adaptados FIR y una CPU que controle todo el sistema de transmisin de
datos entre los bloques.
Se sintetiz con la herramienta ISE la descripcin de hardware para la FPGA:
- Fabricante: Xilinx
- Familia: Spartan 3
- Modelo: xc3s200
- Encapsulado: FT256
- Speed: -4
Se implement la descripcin en el kit de desarrollo Spartan-3 Starter Board" de la
empresa Digilent.
Se utiliz adems para la programacin de la red de Kohonen el programa Matlab
versin R2009B. Para la comunicacin con la PC es necesario un cable serie RS232 derecho.

FPGA: Diagramas en bloques

A continuacin se presentan los diagramas en bloques y de entradas y salidas de la
estructura en general del sistema, los filtros FIR, el controlador de la RAM externa y la uart,
cuyos funcionamientos se describirn luego:

FIGURA 1: Diagrama en bloques del sistema de filtrado implementado en la FPGA


FIGURA 2: Diagrama de entradas y salidas de la arquitectura filterFir








FIGURA 3: Diagrama en bloques del controlador de la RAM



FIGURA 4: Diagrama en bloques de la UART

FPGA: Descripcin de las arquitecturas

El proyecto est compuesto de tres bloques de comportamiento que son: uart,
ram_controler y tres instancias de filterFir, los cuales estn comandados y se relacionan entre
s a travs de la cpu. Todas las arquitecturas mencionadas son instanciadas en el archivo de
vhdl Top_board_TP_FINAL.vhd, en donde tambin son definidos cules de los switches y
pulsadores de la placa experimental sern utilizados para controlar la comunicacin y el
filtrado de las seales. Todos los archivos cuyo nombre comience con Simul, son archivos
de simulacin, utilizados para la prueba de los archivos de proceso.

UART:
Consta de tres bloques bsicos:
timing: setea las bases de tiempo para la correcta sincronizacin entre la PC y
la FPGA, dada la velocidad de transmisin, que en nuestro proyecto se ha impuesto a
115,2Kbps. Un parmetro importante a definir ha sido la variable Divisor, la cual se calcula
50
27
16. 16.115200
CLOCK
TRANSMISION
f MHz
f bps
= ~ y define la base de tiempos de la transmisin.
receive: controla la recepcin de bits serie, para devolver NDBits-1 en
paralelo, a travs de una programacin secuencial.
transmit: controla la transmisin de NDBits-1 bits en paralelo, para devolver
bits en serie, a travs de una programacin secuencial.
Luego se controlan estos tres bloques con un cuarto bloque llamado uart, el cual slo
los instancia. Un quinto bloque llamado uart_comps, declara los tres componentes.

RAM_CONTROLER:
Es un nico bloque que, mediante una programacin secuencial, controla el flujo de
datos entre la FPGA y la RAM externa, a travs de seales que son seteadas desde la cpu. El
principal objetivo es controlar el puerto input-output que es triestado, segn si se encuentra
en modo lectura o escritura. La memoria es asincrnica, debido a que la lectura y escritura de
la misma se realiza con seales de esta naturaleza.

FILTERFIR:
Es un bloque de comportamiento secuencial, en donde recibe las 60 muestras de seal
a filtrar y las guarda en una memoria RAM circular de doble acceso (escritura y lectura
simultnea). Con dichas muestras realiza las multiplicaciones sucesivas con las muestras
correspondientes al filtro, y su resultado lo suma con la acumulacin de las multiplicaciones
anteriores. De esta manera se implementa la definicin de convolucin de ambas seales, con
un tiempo de desplazamiento de los vectores que conforman los multiplicadores de un ciclo
de reloj de 50MHz de frecuencia. El retardo del filtro, es decir el tiempo que demora el filtro
en procesar una muestra de la seal de entrada, se obtiene de la siguiente manera:
longitud del buffer 60 1
4.ciclos de reloj= 4. 1, 28
50 50
clock
s
f MHz MHz
+ + ~
Los cuatro ciclos de clock son los necesarios para acondicionar la seal en el filtro.
Este tiempo es ptimo, pues se desea que sea superior a la frecuencia de muestreo que es de
30KHz.
Por ltimo el resultado se coloca en un buffer de salida. El comportamiento es
esquematizado en la figura 5. Se utiliza la memoria RAM circular para ser direccionada a
travs de dos punteros, uno para lectura y otro para escritura, desplazados en una posicin de
memoria para escribir donde se ha ledo y de esta manera optimizar el tiempo de
procesamiento.

FIGURA 5: Esquema de comportamiento del filtro adaptado

CPU:
La CPU es una mquina de estados que controla cada uno de los bloques
componentes: uart, ram_controler y los tres filterFir. El proceso que se realiza est ilustrado
en el diagrama de flujo de la siguiente pgina. Todo est comandado por los switches y
pulsadores que se encuentran en la plaza experimental. Es importante mantener el orden de
cada uno de los pasos, como puede verse en el diagrama de flujo, para lograr los resultados
correctos.





FPGA: Diagrama de flujo de la CPU


Matlab: Red de Kohonen

Se implement una red de Kohonen para obtener los filtros mediante template
matching utilizando los pesos de las neuronas. La red es unidimensional y las entradas son
60, pues ese es el largo del vector de muestras que representan a cada spike. Se utiliz en el
algoritmo el doble de neuronas (6) que de spikes que se desean detectar, pues cada electrodo
sensa el comportamiento de aproximadamente esa cantidad de neuronas fsicas. La constante
de aprendizaje para la correccin de los w es de 1 q = . La funcin de vecindad utilizada es de
la forma:
( )
2
2
*
2
r r
e
o

A =

Donde * r es el vector correspondiente a la neurona ganadora, que es la cual su peso
es el ms cercano a la entrada presentada a la red en esa iteracin. La manera de variar el
valor de o de tal forma que converja la vecindad hacia slo la neurona ganadora en las
ltimas iteraciones, de 2000 que se realizan en total, fue asignarle el siguiente valor:
_ sigma cte
aux
o = con
_ 2000
_ 10
_ 200
num it
sigma cte
sigma partition
= = =

Incrementando el valor de la variable aux cada
_ sigma partition
iteraciones. Luego
cuando se cumple que 1 o s , se aplica el siguiente cambio de sigma para cada una de las
iteraciones:
1
log( _ 10) aux sigma cte
o =
+


La funcin recibe tres parmetros:
W = Kohonen_Learning(Sample,w_orig,N);
Donde Sample son vectores de las muestras de la seal que se desea aprender, w_orig
son los pesos de las neuronas iniciales antes de comenzar el algoritmo y N es la cantidad de
neuronas. La funcin devuelve W que son los pesos de las neuronas, cuyos valores luego se
utilizarn en los filtros.


Matlab: Cdigo de la red de Kohonen

function W = Kohonen_Learning(Sample,w_orig,N);
% Sample deben ser tantos vectores columna como cantidad de seales se
% desea aprender
% Las filas de w_orig son cada uno de los vectores pesos aleatorios para
% cada neurona
% N es la cantidad de neuronas

num_it = 2000;
Eta = 1;
num_ent = size(Sample,1);
num_signals = size(Sample,2);

w = w_orig; % valores iniciales de los pesos de las neuronas
ind = [1:N]';
sigma = 10;
sigma_partion = 200; % en intervalos de sigma_partion se cambiara el valor de Sigma
sigma_cte = num_it/sigma_partion;
aux = 2; % variable que se incrementara cada cierta cantidad de iteraciones

distanc = zeros(N,1);

for i = 1:num_it
for k = 1:num_signals
for j = 1:num_ent
distanc = distanc + (w(:,j)-Sample(j,k)).^2;
end
distanc = sqrt(distanc);
[min_distancance,winer_neuron] = min(distanc);
if mod((i-1),sigma_partion)==0
sigma = sigma_cte/aux;
aux = aux+1;
end
if sigma<=1
sigma = 1/log10(aux-sigma_cte+10);
aux = aux + 3;
end
vec_function = exp(-((ind-winer_neuron).^2)/(2*sigma^2));
for m = 1:num_ent
delta_w(:,m) = Eta*vec_function.*(Sample(m,k)-w(:,m));
end
w = w + delta_w;
end
end
W = w;

return
Matlab: Instrucciones de uso del aplicativo

Se deber ejecutar el archivo tpFinal.m en Matlab versin R2009B para que se haga
visible la interfaz que se muestra en la figura 6. Desde all se podr, tanto para un vector de
muestras de una seal neuronal o para una seal de prueba compuesta de tres patrones de
60 muestras con distintas formas y sin ruido aadido:

- Procesar la seal por una red de Kohonen para obtener los filtros mediante el
mtodo de template matching. Ellos podrn ser observados en la interfaz para
elegir luego los que se consideren ms representativos.
- Enviar a la memoria de la placa experimental la seal
- Enviar a la memoria interna de la FPGA los filtros
- Enviar a la memoria interna de la FPGA los umbrales de deteccin para ser
utilizados por las arquitecturas implementadas.
- Reenviar desde la FPGA la seal original almacenada en la memoria de la placa
experimental para verificar el correcto funcionamiento de la comunicacin.
- Enviar desde la FPGA hacia la PC la seal filtrada por cierto filtro, pudiendo
elegir uno por vez.
- Enviar una secuencia de nmeros compuesto por la ocurrencia del spike
detectado segn cada filtro preseleccionado. Ej: 1-2-1-3-2. La secuencia
detectada ser:
o 1 spike correpondiente al 1 filtro seleccionado
o 2 spike correpondiente al 2 filtro seleccionado
o 3 spike correpondiente al 1 filtro seleccionado
o 4 spike correpondiente al 3 filtro seleccionado
o 5 spike correpondiente al 2 filtro seleccionado
- Realizar el mismo procesamiento que se realiz con la FPGA mediante Matlab.


FIGURA 6: Interfaz de Matlab para control de comunicacin y procesamiento
El esquema de la placa experimental se presenta en la figura 7. All pueden verse los
pulsadores y switches para comandar la comunicacin y filtrado de las seales.


FIGURA 7: Esquema de la disposicin de los componentes de la placa experimental

En la figura 8 se detallan los nombres utilizados para cada uno de los pulsadores y los
switches.


FIGURA 8: Esquema de disposicin de los pulsadores y switches de la placa experimental

Los pasos a seguir para el correcto filtrado de la seal son:
1. Cargar la seal pulsando el botn correspondiente, ya sea de la seal de prueba
o de la neuronal. Sobre esta ltima se pueden seleccionar la cantidad de
muestras a analizar, las cuales se deben colocar en el rectngulo blanco que se
encuentra debajo del botn Cargar seal neuronal. Cuando finaliza este
proceso se muestra una figura con la seal cargada. En la figura 9 se presenta
un ejemplo de la seal de prueba.

FIGURA 9: Seal de prueba compuesta por tres patrones que se suceden de manera aleatoria

2. Procesar la seal presionando el botn correspondiente. Se obtendrn de esta
manera los pesos de la red neuronal, los cuales conforman los filtros que se
muestran en pantalla.


FIGURA 10: Resultado del procesado de la seal neuronal

3. A continuacin se seleccionan los tres filtros ms representativos, para el
posterior envo y uso en la FPGA.
4. En primera instancia se deber resetear la FPGA presionando el pulsador L14.
5. A partir de este paso se comienzan a enviar las herramientas necesarias para el
filtrado. Se debe preparar la FPGA para la recepcin de la seal colocando
todos los switches en posicin baja (la que se muestra en la figura 8) y
presionando luego el pulsador L13. Para comenzar la transmisin se coloca la
opcin en el aplicativo de Matlab Seal y se presiona Enviar.
6. La recepcin finaliza cuando los leds de la placa experimental terminan de
parpadear, y para colocar a la FPGA nuevamente en reposo se deber
presionar el pulsador M14.
7. Para enviar los filtros se repiten los pasos 5 y 6 pero se deber seleccionar en
el aplicativo la opcin Filtros y todos switches en posicin baja con
excepcin del F12.
8. Para enviar los umbrales, los cuales se pueden ver en la parte inferior derecha
de la ventana, se debern repetir los pasos 5 y 6 pero seleccionando la opcin
Umbrales y todos los switches en bajo con excepcin del G12. Se ilustra en
la figura 11.
9. A partir de ahora se podr filtrar la seal y enviar los resultados a la PC, pero
tambin es posible enviar la seal original para verificar la correcta
comunicacin. Para ello se debe preparar para la recepcin a la PC
seleccionando Seal original y presionando Recibir. Luego se colocan
todos los switches en bajo y se presiona el pulsador M13.
10. Para enviar a la PC las seales filtradas, se deber aplicar a cada uno por vez.
Primero se debe preparar a la PC para la recepcin colocando la opcin Seal
filtrada y segn por qu filtro se desee procesar se pondr en alto el Switch
correspondiente:
a. Primer filtro: K13 en alto
b. Segundo filtro: K14 en alto
c. Tercer filtro: J13 en alto
11. Una vez seleccionado el filtro se presionar el pulsador M13. Finalizado el
envo se representar en la pantalla el resultado, como puede verse en la figura
12.

FIGURA 11: Envo de umbrales hacia la FPGA


FIGURA 12: Seal de prueba filtrada por los tres filtros
12. Se puede enviar tambin desde la FPGA la secuencia de spikes detectados en
el fragmento de seal analizado. Se puede seleccionar la cantidad de datos a
recibir colocando la cantidad en el cuadrado blanco del extremo inferior
derecho, como se ilustra en la figura 13. En la figura 14 se presenta un ejemplo
de secuencia detectada, los resultados sern siempre 1,2 o 3.


FIGURA 13: Seleccin de la cantidad de datos a enviar a la PC


FIGURA 14: Secuencia de spikes detectados enviados a la PC

13. Por ltimo se pueden comparar los resultados obtenidos con el procesamiento
equivalente realizado por Matlab presionando el botn Procesar con Matlab.