sábado, 6 de junio de 2015

Transmitiendo datos (imagenes) por la toma de auriculares

Bueno, pues lamentablemente aqui teneis otro articulo chorra de los que se que no os interesan XD
Si leisteis el articulo en el que imprimí canciones en formato PCM en un folio, este se trata del experimento a la inversa. Lo que hago es transmitir una imagen a traves de la toma de auriculares, la cual como sabeis trabaja con audio analogico, por lo que usaremos imagenes sin comprimir (*.BMP)

-Procedimiento:
¿Como lo haremos? Lo primero es pasar la imagen a transmitir en formato jpg o png (o el que sea) a formato BMP, ya sea abriendolo con Paint, Gimp, o vuestro programa favorito, para pasarlo a BMP.
Ahora conectamos dos equipos toma de auriculares con toma de entrada (Usando un cable de auriculares 3,5mm macho-macho). Yo en mi caso utilizo de equipo emisor una Raspberry-Pi (mas tarde un radio-cassete-cd) y de receptor mi portatil. Ahora en el equipo receptor debemos grabar la transmision, en Audacity por ejemplo, y en el emisor reproducir la imagen BMP como audio RAW sin comprimir (Unsigned 8bit PCM dará los mejores resultados). Ahora, creamos un archivo BMP usando la cabecera de archivo del archivo emitido, y mediante un editor hexadecimal como Hex Workshop, insertamos el contenido grabado con la toma de entrada (el cual deberiamos haber grabado en un archivo PCM U8) en el contenedor BMP.

-Resultados:
El primer problema que vemos con este experimento es la desincronización, aunque la tasa de bits es igual en los dos equipos, hay una ligera diferencia, la cual al no haber ningun modo de sincronización no se puede evitar. Esto hace que sea imposible transmitir una imagen en RGB, ya que se distorsionan los colores como podeis ver en la imagen de ejemplo mas adelante.

El segundo problema es el contraste. Al no conservar en la grabacion y la emisión el mismo volumen de audio, los resultados son que hay distintos niveles de color/BN.

Aunque he realizado el experimento con varias imagenes os dejo las 2 mas relevantes:

La primera es de una imagen de ejemplo de Windows, a la cual bajé bastante la resolución y transmití a 16.000 Hz desde la Raspberry-Pi. Como veis, incluso a bajos rates de audio, es imposible evitar la desincronizacion y los colores salen alterados. Si queremos obtener resultados buenos debemos utilizar imagenes B/N.

La segunda, es una imagen obtenida esta vez desde un radio-cassete-cd domestico. Grabando en un CD-RW un disco de audio con la imagen RAW, y mas tarde conectando la toma de auriculares del radio-cassete-cd a la entrada de audio del ordenador, conseguimos transmitir la imagen desde el cd (el cual lee el radio-cassete) a nuestro ordenador. De esta forma, ademas de estar limitados a usar 44.100 Hz (tasa de bits de los CD de audio), la calidad de la imagen, incluso en B/N, es inferior, ademas de que la sincronización tambien es peor, por lo que tuve que reajustar la imagen en Gimp, ya que salia torcida. En cualquier caso los resultados los podeis ver vosotros mismos, tampoco sale muy mal. En fin, cualquier comentario o duda aquí ;)


Imagen original:






Imagen obtenida desde la toma de auriculares del radio-cd

2 comentarios:

  1. Por pura casualidad entre a este blog. Sin conocer todo esto yo había hecho exactamente lo mismo hace 15 años. Como dato interesante si queres probar, la eficacia de por ejemplo comprimir una imagen rgb vía codec opus (recomiendo a partir de 64 que se ven a color 128 como aceptable). Es interesante como un codec de audio consigue tasas de compresión y una representación tan buena de una imagen (solo se ven unas pequeñas lineas horizontales sin mayor importancia). Luego he dado un paso mas y he ido por el video sin compresión. Resulta que en un video sin comprimir de a penas 5 segundos y resolución baja de 320x240 se puede guardar una cantidad increíble de audio. Lo que llama la atención en este otro caso es la velocidad. Los que se tarda en comprimir un video es nada en comparación a los minutos que llevaría comprimir lo mismo digamos en mp3. Y como no, lo contrario, comprimir un video en un opus por ejemplo. Por alguna razón al comprimir en opus a partir de los 64kbps en adelante permite leer perfectamente la información en color, siendo que de ahí para bajo solo queda en escala de grises.

    ResponderEliminar
    Respuestas
    1. ¡Hola! En primer lugar gracias por interesarte por mi blog. Lo cierto es que aunque te sorprenda, el experimento que propones ya lo hice hace mucho tiempo aunque nunca llegué a publicarlo en mi blog. Por entonces ogg vorbis me daba los mejores resultados (no llegue a probar con opus). No llegué a publicarlo porque para muchos sería dificil de entender lo que hago al codificar como audio un mapa de bits, y porque aunque así se comprime bastante respecto al mapa de bits original, no llegaba a la calidad de un JPG de temaño similar ni de casualidad. Tambien hice el experimento al reves codificando un audio en JPG escala de grises (de forma similar al experimento de imprimir audio PCM en papel que no se si habras leido) pero creo recordar que aparecia mucho ruido.
      Por si te interesa dentro de poco publicaré un post sobre comparativas de nuevos formatos de imagen.

      Eliminar