Mitsubishi VisiTel: comunicación Zoom de los años 80

Fuera de la ventana es 2020. El trabajo remoto ya es completamente normal. Décadas de publicidad para las principales empresas de telecomunicaciones finalmente hicieron su trabajo: le enseñaron a mi mamá a hacer videollamadas. Es cierto que los acontecimientos de los últimos meses, que han provocado un interés público inesperado en la comunicación por vídeo, han provocado una escasez sin precedentes de cámaras web . Pero no podemos permitir que esto nos impida llevar una vida normal. Después de todo, cada uno de nosotros necesita mucha gente a la que llamar. Tengo una solución para el problema de la falta de cámaras web. ¡Esto es Mitsubishi VisiTel!





Mitsubishi VisiTel



Cuando se introdujo este dispositivo en 1988, definitivamente representaba el futuro. Y con su bajo precio, solo $ 399, ¿cómo no podría volverse popular instantáneamente? En la revista Popular Mechanics, publicada en febrero de 1988, se dedicó una página entera a Mitsubishi VisiTel. El dispositivo se describió allí, mencionando una cantidad inesperadamente grande de detalles técnicos. Y los presentadores de Gadget Guru en el canal de televisión WSMV, justo después de comenzar a hablar sobre VisiTel, hicieron una pregunta increíblemente importante: "¿Puedo seguir usando un teléfono normal mientras esto está conectado a la línea?"



Nos tomó 30 años y una pandemia global para que finalmente aceptamos el hecho inevitable de que antes de llamar a los colegas debemos tomar una ducha y ponernos en orden. Ahora bien, digan lo que digan, no hay escapatoria a la videotelefonía.



No soy el primero en pensar que hay algo particularmente cursi en VisiTel. La gente ha estado jugando con este dispositivo durante mucho tiempo. A pesar de que no transmite una señal de video, sino que solo te permite compartir fotos, es uno de esos productos que se consideran logros destacados en ingeniería. Este es un desarrollo que se adelantó a su tiempo.



Mi interés en VisiTel apareció después de esto.vídeo. Su autor mostró cómo, al ralentizar o acelerar la captura de una imagen enviada por VisiTel, se puede distorsionar la imagen en la pantalla. Al enterarme de esto, me di cuenta de inmediato de que el dispositivo utiliza un esquema de modulación de amplitud simple. Sabiendo esto, fui a eBay y encontré una copia adecuada de VisiTel allí. Mi objetivo era hacer que esta increíble "cápsula del tiempo" con los avances técnicos de finales de la década de 1980 funcionara junto con las tecnologías modernas que había elegido. En particular, quería organizar la comunicación con los colegas de Zoom. Además, quería lograr esto sin tener que modificar el hardware VisiTel. Hay algo especial en este dispositivo, por lo que quieres dejarlo en su forma original.



Paso 1. Conexión





Empiece a experimentar con VisiTel



VisiTel es ridículamente fácil de poner en marcha. Desde la parte posterior del dispositivo viene un cable largo con un divisor en forma de Y hacia el final (más sobre esto a continuación) y un par de conectores. Uno de ellos es un conector de alimentación de 2,1 mm. El dispositivo necesita 15 voltios. Es algo extraño que los desarrolladores del dispositivo decidieran escribir el número 15 en una fuente tal que la inscripción se lee como "IS Voltios". El segundo conector es un RJ-11 normal, que utiliza dos pines. Esta es una toma de teléfono estándar. Si recuerda los teléfonos con cable normales, también puede recordar que el auricular está conectado al dispositivo mediante el conector RJ-9 y el teléfono está conectado a la línea mediante el conector RJ-11. El significado de esto es que sería posible conectar no solo un auricular al teléfono, sino también algo más, así como el hecho de quepara que puedas sustituir el cable o el tubo en caso de que les ocurra algo. Es cierto que no se puede decir que algo sucediera a menudo con los cables que van de los teléfonos a los microteléfonos, ya que en su fabricación se utilizaron cables especiales y muy flexibles.





VisiTel





, VisiTel



Volviendo a la parte posterior del VisiTel, hay, además del cable, un conector RJ-11. Después de pensar durante algún tiempo acerca de por qué lo necesitaban allí, me di cuenta. El dispositivo actúa como intermediario entre un teléfono regular y una línea telefónica. Esto permite a VisiTel monitorear la línea o transmitir imágenes durante llamadas telefónicas regulares. Esto conduce a un problema obvio. Es decir, estamos hablando del hecho de que, dado que VisiTel utiliza la línea telefónica simultáneamente con el teléfono, el suscriptor escuchará los sonidos que acompañan a la recepción y envío de imágenes. Pero los ingenieros de Mitsubishi se encargaron de eso. Antes de enviar o recibir una imagen, puede escuchar un fuerte clic, lo que indica que algún relé apaga el teléfono por un tiempo. Vamos a utilizar VisiTel para que la señal de audio recibida del dispositivo no nos interese,por lo tanto, no conectaremos nada al conector RJ-11 en la parte posterior del dispositivo. Esto hace que el relé correspondiente sea innecesario, lo que significa que puede eliminarse para deshacerse de los clics asociados con el envío de la imagen.



¿Cómo organizar el intercambio de datos con este dispositivo? Por ejemplo, mi computadora no tiene un conector RJ-11. Es cierto que esto no da miedo, ya que hay adaptadores a la venta para conectar teléfonos con conectores RJ-9 a teléfonos inteligentes. Una de las opciones de conexión es que puede cortar el conector RJ-11 y soldar un enchufe de 3,5 mm al cable, organizando la transmisión de audio mono. Tenga en cuenta que originalmente asumí que VisiTel tenía un conector RJ-9 y no un conector RJ-11.



Con el enchufe de 3,5 mm, conectar VisiTel a su computadora es extremadamente fácil. Es decir, necesita obtener un adaptador USB con salidas separadas para conectar un micrófono y un auricular (no TRSS) y conectar VisiTel a un conector adecuado.



Arriba, dije que volvería al divisor en forma de Y. Mi VisiTel tuvo algún tipo de problema con los cables alrededor de este divisor. Además, el cable no se rompió cuando todo simplemente se niega a funcionar y cuando el problema es completamente obvio. Fue uno de esos desagradables desperfectos cuando todo funciona por la noche y a la mañana siguiente no. Sería bueno que los creadores de VisiTel usaran alambres flexibles especiales en su producto. Este problema, que apareció y desapareció, me costó muchos días en una búsqueda insensata de su solución. Busqué problemas de sobrecalentamiento sin mucho éxitodispositivos, verificó la configuración de la tarjeta de audio tres veces. Terminé encontrando el problema cuando levanté el dispositivo durante la prueba. Después de eso, encontré signos característicos de una conexión rota en la grabación. Una lección que aprendí de esta historia es cómo trabajar con hardware antiguo. Consiste en que, durante el funcionamiento del dispositivo, es necesario moverlo un poco y ver si todo en este momento funciona igual que antes.





El lugar del daño del cable está marcado con un círculo.



Paso 2. Investigación del mecanismo de transmisión de imágenes



Después de resolver el problema con los cables complicados y conectar el dispositivo a la computadora, es hora de averiguar qué protocolo se utiliza para codificar las imágenes transmitidas. Los videos y artículos sobre VisiTel nos permiten concluir que las imágenes se codifican mediante modulación de amplitud de la señal de audio. La modulación de amplitud es la codificación de datos que se realiza cambiando la amplitud de una señal portadora. La modulación de amplitud se usa comúnmente para codificar el sonido transmitido usando ondas de radio, pero el mismo enfoque se puede usar para transmitir imágenes usando ondas de radio o incluso ondas de sonido. aquíPuede encontrar una excelente descripción detallada de este proceso con ejemplos de código Python, destinado a aquellos que están acostumbrados a aprender cosas nuevas a través de la práctica.



Sabiendo que los datos están codificados mediante el mecanismo de modulación AM de la señal de audio, podemos dar el primer paso para decodificar estos datos. Este paso consiste en grabar una señal modulada que transmite una imagen de muestra con propiedades previamente conocidas. Para capturar audio, usé Audacity , mi software de audio habitual.





Representación gráfica de la señal de audio Lo



anterior muestra cómo, en un esfuerzo por comprender mejor cómo se codifican los datos, envié una imagen muy simple, especialmente preparada por VisiTel. Esta imagen, que se muestra a continuación, era un par de tarjetas, en blanco y negro, que sostuve frente a la cámara del dispositivo. La señal correspondiente está marcada en el programa comoblackWhiteV.





Imagen utilizada en el experimento



Echemos un vistazo más de cerca a la señal de audio recibida.





Echando un vistazo más de cerca a la señal de audio



Puede escuchar esta señal aquí .



Como puede ver, al comienzo de cada bloque hay un encabezado o secuencia que indica la inicialización (de 17.55 a 17.80 en este ejemplo). Esto permite al dispositivo receptor saber que otro dispositivo está a punto de transmitir una imagen y determinar la amplitud máxima de la señal. Este indicador se utiliza luego como factor de escala al decodificar la imagen. Como resultado, las imperfecciones de la línea telefónica no provocarán una pérdida de contraste o brillo de la imagen. La señal transmitida en algunas líneas puede ser ruidosa o debilitada. Tenga en cuenta que la señal hasta 17,55 es solo ruido, no es importante para el protocolo de datos utilizado por VisiTel.



Para asegurarme de que la secuencia de encabezado que encontré indicaba a VisiTel que otro dispositivo estaba a punto de enviarle una imagen, dejé que el dispositivo escuchara solo esta pequeña parte de la grabación y fue recompensado con un clic de relé. Era obvio que esta secuencia pone en marcha algunos mecanismos. Pero después de enviar el dispositivo solo 30 milisegundos del encabezado, me di cuenta de que el dispositivo detecta que la imagen después del encabezado no se transmite. El relé se apaga unos milisegundos después del final de la transmisión del encabezado. Si reproduce el título y los primeros milisegundos del sonido que le siguen, VisiTel comienza a mostrar la imagen en la pantalla. Si apaga el sonido mientras el dispositivo muestra una imagen en la pantalla, entonces el trabajo continúa,VisiTel continúa recibiendo algunos datos hasta que el búfer utilizado para almacenar la imagen está lleno. Esto demuestra una vez más que después de que VisiTel comienza a procesar datos gráficos, el dispositivo no depende de un oscilador externo para averiguar exactamente dónde están codificados en la señal los datos que necesita. Tiene su propio generador de reloj que le dice exactamente dónde lo que necesita.dónde está exactamente lo que necesita.dónde está exactamente lo que necesita.



Dado que la parte del encabezado de la señal solo se encarga de establecer la conexión, y dado que no depende de la imagen transmitida, no tenía ganas de profundizar en el estudio de sus características. Para conseguir nuestros objetivos, basta con saber que el encabezado es el encargado de establecer una conexión, y también basta con tener una idea aproximada de cómo se ve.



Y ahora es el momento de pasar a la parte más difícil: descubrir exactamente cómo se codifica la información gráfica, cómo "suenan" los píxeles. Primero, necesitaba comprender cómo se representan los datos de píxeles en una señal de audio. Mi primera suposición fue que cada onda completa representa un píxel. Probé esta idea contando el número de ondas entre las repeticiones del patrón de prueba. Lo que obtuve estaba en línea con las especificaciones de VisiTel del anuncio anterior. Es decir, tiene 96x96 píxeles, con varias líneas que se emiten antes del inicio de la imagen.



Todo esto significa que el dispositivo analiza la amplitud de cada onda y escribe los datos en forma de píxel de búfer, que representa una imagen digital en VisiTel. Sabemos por los materiales de marketing de VisiTel que cada píxel de la imagen que muestra tiene 16 tonos de gris. Pero yo, analizando los píxeles de la señal "analógica", no sentí la necesidad de aplicar el efecto de posterizarlos al decodificarlos o codificarlos.



Curiosamente, el brillo de los píxeles se invierte antes de la modulación. Como resultado, las ondas más grandes corresponden a los píxeles más oscuros. Además, la imagen se refleja de izquierda a derecha, es decir, se forma una imagen especular. Me gustaría saber qué piensan los lectores de este material sobre el motivo de invertir el brillo de los píxeles antes de transmitir la señal. Sospecho que esto se debe a que la visión humana es más tranquila con píxeles negros dispersos al azar que con píxeles blancos similares. Después de todo, el ruido en las líneas telefónicas es un problema con el que VisiTel definitivamente tuvo que lidiar en 1988.





Investigación de señales



Es cierto que hubo una excepción al esquema de codificación de imágenes anterior que se me escapó durante varias semanas. Con este esquema de codificación invertido, los píxeles perfectamente blancos deberían representarse mediante silencio. No debería haber ninguna señal que represente tales píxeles. Pero tuve la sensación de que a los creadores de VisiTel no les gustó esta idea. En cambio, para codificar píxeles completamente blancos, la señal de la portadora se desplazó 1/4 de longitud de onda, lo que provocó que tales ondas estén fuera de fase con las normales. En este caso, la señal, como antes, podría enviarse a otro dispositivo. Al recibir dicha señal, el dispositivo receptor mantuvo la sincronización con la señal "habitual" y tomó información sobre la amplitud de la señal en el mismo lugar que de costumbre, pero ahora en estos momentos la onda pasó por 0,lo que dio a los píxeles blancos. Como ya dije, si apaga el sonido durante la transferencia de imágenes, VisiTel continúa mostrando la imagen hasta que se llena el búfer. Estos son píxeles blancos. Como resultado, resulta que el dispositivo percibe el silencio, incluso sin la presencia de una señal útil en la línea, como blanco. No sé por qué los creadores del dispositivo decidieron complicar el esquema de modulación introduciendo un modo de cambio de fase en él. En cuanto a mí, se dedicó un gran esfuerzo a esto, pero o no hay ningún beneficio de tal paso o es muy insignificante.por lo que los creadores del dispositivo decidieron complicar el esquema de modulación introduciendo un modo de cambio de fase en él. En cuanto a mí, se dedicó un gran esfuerzo a esto, pero o no hay ningún beneficio de tal paso o es muy insignificante.por lo que los creadores del dispositivo decidieron complicar el esquema de modulación introduciendo un modo de cambio de fase en él. En cuanto a mí, se dedicó mucho esfuerzo a esto, pero o no hay ningún beneficio de tal paso o es muy insignificante.



Yo, sin saber acerca de la modulación por desplazamiento de fase, inicialmente traté de encontrar el máximo de cada una de las ondas y representar el valor resultante como un píxel. Los saltos de línea se realizaron con un paso calculado por la fórmula 96*( ). Esto llevó al hecho de que en algunas líneas había un poco más o un poco menos de píxeles. Además, un enfoque tan burdo para el análisis de señales era muy sensible al ruido, ya que incluso pequeños picos en las ondas podían provocar la aparición de píxeles adicionales. Es cierto que este mecanismo de decodificación de imágenes fue muy sencillo de implementar. Implementar esta simple idea podría decodificar imágenes sin la necesidad de sincronizar el receptor y la fuente. Pero después de aplicar tal sistema de decodificación de señales, no me pasó nada decente.



Para decodificar imágenes con mayor precisión, debemos hacer lo mismo que VisiTel. Es decir, debe sincronizar con la señal en el momento del procesamiento del encabezado y luego muestrear la señal a intervalos regulares. No es sorprendente que dicho procesamiento de señales requiera una sincronización muy precisa. En mi caso, al grabar sonido con una frecuencia de 44100 Hz, hay 25.23158 muestras por onda (esto significa que la frecuencia de la onda portadora es 1747.80968929 Hz). Como resultado, cada vez que leemos información sobre un píxel, buscaremos en el búfer de audio datos sobre el siguiente píxel a una distancia de 25.23158 muestras del anterior. Dado que las posiciones de la muestra se describen mediante valores enteros, simplemente redondeamos el número correspondiente al entero más cercano y lo usamos. Lo más importante aquí es evitar que se acumulen errores de redondeo,ya que esto hará que la posición de muestreo se desfase rápidamente con respecto a la onda de sonido. Y si ocurre un desplazamiento similar durante la decodificación de imágenes, aunque sea pequeño, la imagen terminada se llenará de artefactos.





Imagen llena de artefactos.



Por suerte para mí, el número de muestras por onda es bastante estable. No cambió después de que el dispositivo se calentó, aunque me preocupaba que esto pudiera ser un problema. Esta estabilidad me permitió simplemente codificar el valor apropiado en el código de decodificación de imágenes. Idealmente, la cantidad de muestras por ola debería aprenderse del título, pero descubrí que no había suficientes muestras para lograr una precisión de 5 lugares decimales. Y el valor, codificado de forma rígida, hizo posible lograr resultados estables. Gracias a esta implementación más precisa del sistema de decodificación de señales, los saltos de línea se realizaron simplemente después de que la función que genera 1 píxel se llamara 96 ​​veces.



Hasta ahora, he trabajado con fragmentos pregrabados de audio decodificados de archivos WAV. Para trabajar de forma interactiva y decodificar imágenes que ingresan a la interfaz de audio de una computadora, el decodificador tenía que estar equipado con la capacidad de detectar el encabezado y encontrar el comienzo de los datos de la imagen. Si miras el titular, resulta que hay tres fragmentos claramente distinguibles en él.





Análisis de encabezado: portadora - silencio - portadora



Para detectar esto, implementé un detectory una máquina de estadosimples basados ​​en FFT . Primero se procesa el material fuente y luego el detector examina cada bloque de la señal de audio hasta que encuentra una señal fuerte de 1747 Hz. Luego se examinan los bloques hasta que encuentran el lugar donde la señal desaparece y luego reaparece. Esto significa encontrar el momento para iniciar la transmisión. A partir de entonces, se usa un desplazamiento estático simple para encontrar la hora de inicio de la transmisión de datos de imagen, y se aplican los mecanismos anteriores para decodificar la imagen. Una vez finalizada la decodificación, se muestra la imagen y la máquina de estado se restablece a su estado original y espera a que comience la siguiente transmisión.



Paso 3. Presentar VisiTel como una cámara web



Ahora que hemos podido decodificar la imagen recibida de VisiTel, queda por poner la última pieza de nuestro rompecabezas en su lugar. Necesitamos presentar las imágenes decodificadas en forma de fotogramas de video y transmitir el flujo de video al programa de videoconferencia. Esto es sorprendentemente fácil en Linux. La entrada de video se abstrae usando la interfaz V4L2, pero esto sucede desafortunadamente en el espacio del kernel. Para no involucrarse con las complejidades asociadas con la creación de un módulo de kernel, puede usar una solución lista para usar: v4l2loopback... Este módulo es tanto un dispositivo de entrada como un dispositivo de salida. La entrada de gráficos que se le pasa se convierte en una salida que otros programas como Zoom pueden aceptar. Incluso hay paquetes de Python que lo abstraen aún más, permitiéndote trabajar con este tipo de datos usando OpenCV y NumPy. Usé uno de estos paquetes - pyfakewebcam. Cuenta con una interfaz extremadamente simple. Para crear una cámara web virtual, simplemente haga lo siguiente:



import
      pyfakewebcam
self.camera
    =
    pyfakewebcam.FakeWebcam(self.v4l2_device, 640, 480)


Y cuando reciba un nuevo marco, debe hacer esto:



self.camera.schedule_frame(output)


Ahora, después de esta pequeña adición al decodificador, todo funcionó como debería. Zoom puede recibir imágenes de VisiTel y podemos organizar el chat de video al estilo de los años ochenta.





Video chat con el espíritu de la década de 1980



También me gustaría instalar el controlador de Linux Direct Rendering Manager, que permitirá no solo recibir imágenes de VisiTel, sino también mostrarlas en él. Pero por ahora, para reconocer este proyecto como un éxito, me basta con poder comunicarme en Zoom utilizando un dispositivo de 1988. Aquí , si está interesado, está el código del proyecto en GitHub.



¿Has intentado dar una segunda vida a algunos dispositivos del pasado lejano?










All Articles