Topologías del deseo from LessNullVoid on Vimeo.
Category: Uncategorized
Primer acto en vivo @ Index del MUAC
Impresiones en 3D
Ya están listas las primera impresiones de los discos EEG. Cada uno de los discos contiene 5 minutos de la información de electroencefalograma de personas en meditación guiada.
Torna y escáner
Aquí algunas imágenes del modelo final de la tornamesa. La base tiene entradas tanto para el motor, como la caja de circuitos.
Ensamblaje de circuitos
Los primeros circuitos que se ensamblaron fueron los sensores láser. Se trata de alrededor de 25 piezas. Cada escáner esta formado por 5 laser con 5 lectores LDR. Para los controladores estamos utilizando la tarjeta teensy 3.2 un controlador de 32 bits compatible con arduino. También utilizamos un driver para stepper para controlar el motor de la tornamesa.
Visualización de bandas EEG – Primer Grupo.
Para comenzar con el diseño de los discos EEG vimos la necesidad de primero conocer las características de las señales por cada una de las bandas que utilizamos para el registro. En este caso estamos trabajando con la zona frontal en los electrodos: AF3,F7,F3,F4,F8,AF4.
Las siguientes imagenes muestran las caracteristicas de señal de cada una de estas bandas por persona. También se agregaron algunos filtros a las señales para mostrar las señales normalizadas.
El código completo puede encontrarse en el repositorio en el siguiente link : https://github.com/Lessnullvoid/ProyectoLiquido/tree/master/Processing/Galleta_Test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
public class DataChannel { ArrayList<Float> rawPoints; ArrayList<Float> avgPoints; ArrayList<Float> maxPoints; ArrayList<Float> lpfPoints; int AVG_SIZE = 50; float LPF_ALPHA = 0.25; String channelName; String sessionName; PGraphics mDrawing = null; int MIN_RADIUS = 50; int MAX_RADIUS = IMAGE_SIZE/2-MIN_RADIUS; int TEXT_SIZE = 24; public DataChannel(Table aTable, int cColumn, String sname) { int numRows = aTable.getRowCount(); float minVal = aTable.getFloat(0, cColumn); float maxVal = aTable.getFloat(0, cColumn); rawPoints = new ArrayList<Float>(); avgPoints = new ArrayList<Float>(); maxPoints = new ArrayList<Float>(); lpfPoints = new ArrayList<Float>(); channelName = aTable.getColumnTitle(cColumn); sessionName = sname; for (int i=0; i<numRows; i++) { float v = aTable.getFloat(i, cColumn); rawPoints.add(v); if (v<minVal) minVal = v; if (v>maxVal) maxVal = v; } for (int i=0; i<rawPoints.size(); i++) { rawPoints.set(i, map(rawPoints.get(i), minVal, maxVal, 0.0, 1.0)); } for (int i=0; i<rawPoints.size()/AVG_SIZE; i++) { float sum = 0; float max = 0; for (int j=0; j<AVG_SIZE; j++) { sum += rawPoints.get(i*AVG_SIZE+j); if(rawPoints.get(i*AVG_SIZE+j) > max) max = rawPoints.get(i*AVG_SIZE+j); } avgPoints.add(sum/AVG_SIZE); maxPoints.add(max); } lpfPoints.add(avgPoints.get(0)); for (int i=1; i<avgPoints.size(); i++) { float yi_1 = lpfPoints.get(i-1); lpfPoints.add(yi_1 + LPF_ALPHA*(avgPoints.get(i) - yi_1)); } } private void createDrawing() { mDrawing = createGraphics(IMAGE_SIZE, IMAGE_SIZE); mDrawing.beginDraw(); mDrawing.background(0); mDrawing.stroke(255); mDrawing.noFill(); mDrawing.textSize(TEXT_SIZE); mDrawing.text(sessionName, TEXT_SIZE, TEXT_SIZE); mDrawing.text(channelName, IMAGE_SIZE-textWidth(channelName)-TEXT_SIZE, TEXT_SIZE); mDrawing.endDraw(); mDrawing.stroke(255); drawPoints(rawPoints); mDrawing.stroke(255, 0, 0); drawPoints(avgPoints); mDrawing.stroke(0, 255, 0); //drawPoints(maxPoints); mDrawing.stroke(255, 0, 255); mDrawing.strokeWeight(4); drawPoints(lpfPoints); mDrawing.strokeWeight(1); } private void drawPoints(ArrayList<Float> points) { float angleStep = TWO_PI/points.size(); float cAngle = 0*angleStep; float cRadius = MIN_RADIUS+points.get(0)*MAX_RADIUS; PVector lastPoint = new PVector(cRadius*cos(cAngle), cRadius*sin(cAngle)); mDrawing.beginDraw(); mDrawing.pushMatrix(); { mDrawing.translate(IMAGE_SIZE/2, IMAGE_SIZE/2); mDrawing.ellipse(0, 0, MIN_RADIUS*2, MIN_RADIUS*2); for (int i=0; i<points.size(); i++) { cAngle = i*angleStep; cRadius = MIN_RADIUS+points.get(i)*MAX_RADIUS; mDrawing.line(lastPoint.x, lastPoint.y, cRadius*cos(cAngle), cRadius*sin(cAngle)); lastPoint.set(cRadius*cos(cAngle), cRadius*sin(cAngle)); } cAngle = 0*angleStep; cRadius = MIN_RADIUS+points.get(0)*MAX_RADIUS; mDrawing.line(lastPoint.x, lastPoint.y, cRadius*cos(cAngle), cRadius*sin(cAngle)); } mDrawing.popMatrix(); mDrawing.endDraw(); } public void draw() { if (mDrawing == null) this.createDrawing(); image(mDrawing, 0, 0); } } |
Datos en CSV del primer grupo
Los datos EEG de análisis del primer grupo se encuentran en un formato CSV en el repositorio. Se tratan de dos grupos los datos los RAW que no contienen ningún tipo de filtro y los ReducFilterIC donde se encuentran las señales virtuales de los datos procesados y centrados en la zona de interes.
https://github.com/Lessnullvoid/ProyectoLiquido/tree/master/EEGdata
Guia de estimulos para experimento EEG.
Los primero 5 segundos de los datos son muestras de ruido previas al inicio de las indicaciones. Las indicaciones se presentaron como estimulo audio visual, utilizando un oculus rift como pantalla para simular un espacio aislado.
Preparación
0:00:00 – 0:00:10 (estimulo audio visual) Tome una posición relaja, respire profundo y trate de mantener su mente tranquila
0:00:12 – 0:00:38 (estimulo audio visual) Imagen para sincronización de la respiración
Registro de artefactos:
0:00:40 – 0:00:46 (estimulo audio visual) Por favor cierre y abra la boca como si estuviera masticando algo
0:00:47 – 0:00:52 (estimulo audio visual) Por favor, abra y cierre los ojos rápidamente.
0:00:54 – 0:00:58 (estimulo audio visual) Imagine que mueve sus extremidades.
0:01:00 – 0:01:03 (estimulo audio visual) Mueva su cabeza y cuello en círculos
Preparación
0:01:05 – 0:01:10 (estimulo audio visual) Una vez más respire profundo y trate de mantener su mente tranquila.
0:01:11 – 0:01:37 (estimulo audio visual) Imagen para sincronización de la respiración
Contexto
0:01:40 – 0:03:04 (estimulo audio visual)
- Ahora te invitamos a hacer consciencia del lugar en el que te encuentras. El cerro del Tepeyac, en palabras de Ignacio Manuel Altamirano es el lugar en donde están todas las razas de la antigua colonia, todas las clases de la nueva República, todas las castas que viven en nuestra democracia, todos los trajes de nuestra civilización, todas las opiniones de nuestra política, todas las variedades del vicio y todas las máscaras de la virtud, en México.
- La cuenca del valle de México es la cuna de una de las civilizaciones más complejas y poderosas de latinoamerica. En los últimos 700 años la cuenca ha sido objeto de un sin número de colonizaciones y conquistas, desde las disputas entre los pueblos indígenas hasta la llegadas de los españoles y los americanos con sus estrategias de enfoque capitalista. Cada una de estas conquista dejó su marca en nuestra psique a partir de los procesos socio culturales que llegaron a imponer.
- A partir de estos proceso hemos sido receptores de una serie de condicionamientos, que han moldeado nuestra forma de convivir. Se trata de una programación histórica, que determina profundamente lo que deseamos.
Ejercicio
0:03:07 – 0:03:34 (estimulo audio visual)
A partir de este momento te invitamos a entrar en meditación profunda y, desde tu práctica, realizar un ejercicio que manifieste la intención a hacer conscientes nuestros deseos programados. Un ejercicio de intención a distancia que canalice energía hacia el lugar en el que te encuentras ahora.
inicie la meditación ahora
Meditación 0:03:36 – 0:08:45 (ojos cerrados y audio)