Mitsubishi VisiTel: communication zoom des années 1980

En dehors de la fenêtre, c'est 2020. Le travail à distance est déjà tout à fait normal. Des décennies de publicité pour les principales entreprises de télécommunications ont finalement fait leur travail - appris à ma mère comment passer des appels vidéo. Certes, les événements de ces derniers mois, qui ont suscité un intérêt public inattendu pour la communication vidéo, ont conduit à une pénurie sans précédent de webcams . Mais nous ne pouvons pas permettre que cela nous empêche de mener une vie normale. Après tout, chacun de nous a besoin de beaucoup de monde à appeler. J'ai une solution pour le problème du manque de webcams. C'est Mitsubishi VisiTel!





Mitsubishi VisiTel



Lorsque cet appareil est apparu en 1988, il représentait définitivement l'avenir. Et avec son prix bas - seulement 399 $ - comment ne pas devenir immédiatement populaire? Dans le magazine Popular Mechanics, publié en février 1988, une page entière était consacrée à Mitsubishi VisiTel. L'appareil y a été décrit, mentionnant une quantité inattendue de détails techniques. Et les présentateurs de Gadget Guru sur la chaîne de télévision WSMV, immédiatement après avoir commencé à parler de VisiTel, ont posé une question extrêmement importante: "Puis-je continuer à utiliser un téléphone ordinaire pendant que ce truc est connecté à la ligne?"



Il nous a fallu 30 ans et une pandémie mondiale pour finalement accepter le fait inévitable qu'avant d'appeler des collègues, nous devons prendre une douche et nous mettre en ordre. Maintenant, quoi qu'on en dise, il n'y a pas moyen d'échapper à la visiophonie.



Je ne suis pas le premier à penser que VisiTel a quelque chose de particulièrement kitsch. Les gens bricolent cet appareil depuis longtemps . Malgré le fait qu'il ne transmet pas de signal vidéo, mais vous permet uniquement de partager des photos, c'est l'un de ces produits considérés comme des réalisations exceptionnelles en ingénierie. C'est une évolution qui était bien en avance sur son temps. Mon intérêt pour VisiTel est apparu après cela



vidéo. Son auteur a montré comment, en ralentissant ou en accélérant la capture d'une image envoyée par VisiTel, on peut déformer l'image sur l'écran. En apprenant cela, j'ai immédiatement réalisé que l'appareil utilise un schéma de modulation d'amplitude simple. Sachant cela, je suis allé sur eBay et j'y ai trouvé une copie appropriée de VisiTel. Mon objectif était de faire en sorte que cette étonnante "capsule temporelle" avec les progrès techniques de la fin des années 1980 fonctionne en conjonction avec les technologies modernes que j'ai choisies. En particulier, je souhaitais organiser la communication avec les collègues de Zoom. De plus, je souhaitais y parvenir sans avoir à modifier le matériel VisiTel. Il y a quelque chose de spécial dans cet appareil, de sorte que vous voulez le laisser dans sa forme originale.



Étape 1. Connexion





Commencez à expérimenter avec VisiTel



VisiTel est ridiculement facile à installer et à utiliser. De l'arrière de l'appareil vient un long câble avec un séparateur en forme de Y vers la fin (plus de détails ci-dessous) et une paire de connecteurs. L'un d'eux est un connecteur d'alimentation de 2,1 mm. L'appareil a besoin de 15 volts. Il est quelque peu étrange que les développeurs de l'appareil aient décidé d'écrire le numéro 15 dans une police telle que l'inscription se lit comme "IS Volts". Le deuxième connecteur est un RJ-11 ordinaire, qui utilise deux broches. Il s'agit d'une prise téléphonique standard. Si vous vous souvenez de téléphones filaires ordinaires, vous pouvez également vous rappeler que le combiné est connecté à l'appareil à l'aide du connecteur RJ-9 et que le téléphone est connecté à la ligne à l'aide du connecteur RJ-11. La signification de cela est qu'il serait possible de connecter non seulement un combiné au téléphone, mais aussi autre chose, ainsi que le fait queafin que vous puissiez remplacer le câble ou le tube en cas de problème. Certes, on ne peut pas dire que quelque chose est souvent arrivé aux câbles allant des téléphones aux combinés, car des fils spéciaux très flexibles ont été utilisés dans leur fabrication.





VisiTel





, VisiTel



Pour revenir à l'arrière du VisiTel, il y a, en plus du câble, un connecteur RJ-11. Après avoir réfléchi pendant un certain temps à la raison pour laquelle il était nécessaire là-bas, je me suis rendu compte. L'appareil joue le rôle d'intermédiaire entre un poste téléphonique ordinaire et une ligne téléphonique. Cela permet à VisiTel de surveiller la ligne ou de transmettre des images lors d'appels téléphoniques réguliers. Cela conduit à un problème évident. À savoir, nous parlons du fait que puisque VisiTel utilise la ligne téléphonique simultanément avec le téléphone, l'abonné entendra les sons accompagnant la réception et l'envoi d'images. Mais les ingénieurs de Mitsubishi s'en sont occupés. Avant d'envoyer ou de recevoir une image, vous pouvez entendre un clic fort, indiquant qu'une sorte de relais éteint le téléphone pendant un certain temps. Nous allons utiliser VisiTel pour que le signal audio reçu de l'appareil ne nous intéresse pas,par conséquent, nous ne connecterons rien au connecteur RJ-11 à l'arrière de l'appareil. Cela rend le relais correspondant inutile, ce qui signifie qu'il peut être supprimé afin de se débarrasser des clics associés à l'envoi de l'image.



Comment organiser l'échange de données avec cet appareil? Par exemple, mon ordinateur n'a pas de connecteur RJ-11. Certes, ce n'est pas effrayant, car il existe des adaptateurs en vente pour connecter des combinés avec des connecteurs RJ-9 aux smartphones. L'une des options de connexion est que vous pouvez couper le connecteur RJ-11 et souder une fiche de 3,5 mm au fil, organisant la transmission audio mono. Notez qu'à l'origine, j'ai supposé que VisiTel avait un connecteur RJ-9 et non un connecteur RJ-11.



En utilisant la fiche 3,5 mm, connecter VisiTel à votre ordinateur est extrêmement simple. À savoir, vous devez vous procurer un adaptateur USB avec des sorties séparées pour connecter un microphone et un casque (pas TRSS) et connecter VisiTel à un connecteur approprié.



Ci-dessus, j'ai dit que je reviendrais sur le séparateur en forme de Y. Mon VisiTel a eu une sorte de problème avec les fils autour de ce séparateur. De plus, le fil n'était pas cassé lorsque tout refusait simplement de fonctionner et que le problème était tout à fait évident. C'était l'un de ces dysfonctionnements désagréables quand tout fonctionne le soir et le lendemain matin, ce n'est pas le cas. Ce serait bien si les créateurs de VisiTel utilisaient des fils flexibles spéciaux dans leur produit. Ce problème, apparu et disparu, m'a coûté plusieurs jours dans une recherche insensée de sa solution. J'ai cherché des problèmes de surchauffe sans grand succèspériphériques, vérifié les paramètres de la carte audio trois fois. J'ai fini par trouver le problème lorsque j'ai soulevé l'appareil pendant les tests. Après cela, j'ai trouvé des signes caractéristiques d'une connexion endommagée dans l'enregistrement. Une leçon que j'ai tirée de cette histoire concerne le travail avec du vieux matériel. Cela consiste en ce que, pendant le fonctionnement de l'appareil, vous devez le déplacer un peu et voir si tout à ce moment fonctionne de la même manière qu'avant.





Le lieu de l'endommagement du fil est marqué d'un cercle



Étape 2. Étude du mécanisme de transmission d'image



Après avoir résolu le problème des fils délicats et connecté l'appareil à l'ordinateur, il est temps de déterminer quel protocole est utilisé pour encoder les images transmises. Des vidéos et des articles sur VisiTel nous permettent de conclure que les images sont encodées en utilisant la modulation d'amplitude du signal audio. La modulation d'amplitude est un codage de données effectué en modifiant l'amplitude d'un signal porteur. La modulation d'amplitude est couramment utilisée pour coder le son transmis à l'aide d'ondes radio, mais la même approche peut être utilisée pour transmettre des images à l'aide d'ondes radio ou même d'ondes sonores. Icivous pouvez trouver une excellente description détaillée de ce processus avec des exemples de code Python, destinés à ceux qui sont habitués à apprendre de nouvelles choses par la pratique.



Sachant que les données sont encodées à l'aide du mécanisme de modulation AM du signal audio, nous pouvons faire le premier pas vers le décodage de ces données. Cette étape consiste à enregistrer un signal modulé qui transmet une image échantillon aux propriétés préalablement connues. Pour capturer le signal audio, j'ai utilisé Audacity , mon logiciel audio habituel.





Représentation graphique du signal audio Ce qui



précède montre comment, dans un effort pour mieux comprendre comment les données sont encodées, j'ai envoyé une image très simple, spécialement préparée à partir de VisiTel. Cette image, montrée ci-dessous, était une paire de cartes, en noir et blanc, que je tenais devant la caméra de l'appareil. Le signal correspondant est marqué dans le programme commeblackWhiteV.





Image utilisée dans l'expérience



Regardons de plus près le signal audio reçu.





Regarder de plus près le signal audio



Vous pouvez écouter ce signal ici .



Comme vous pouvez le voir, au début de chaque bloc, il y a un en-tête ou une séquence indiquant l'initialisation (de 17,55 à 17,80 dans cet exemple). Cela permet au dispositif récepteur de savoir qu'un autre dispositif est sur le point de transmettre une image et de déterminer l'amplitude maximale du signal. Cet indicateur est ensuite utilisé comme facteur de mise à l'échelle lors du décodage de l'image. En conséquence, les imperfections de la ligne téléphonique n'entraîneront pas de perte de contraste ou de luminosité de l'image. Le signal transmis sur certaines lignes peut être bruyant ou affaibli. Notez que le signal jusqu'à 17,55 est juste du bruit, pas important pour le protocole de données utilisé par VisiTel.



Pour m'assurer que la séquence d'en-tête que j'ai trouvée indiquait bien à VisiTel qu'un autre appareil était sur le point de lui envoyer une image, j'ai laissé l'appareil écouter juste ce petit morceau de l'enregistrement et j'ai été récompensé par un clic de relais. Il était évident que cette séquence enclenche certains mécanismes. Mais après avoir envoyé l'appareil à seulement 30 millisecondes de l'en-tête, j'ai réalisé que l'appareil détecte que l'image après l'en-tête n'est pas transmise. Le relais s'éteint quelques millisecondes après la fin de la transmission d'en-tête. Si vous lisez le titre et les premières millisecondes du son qui le suivent, VisiTel commence à afficher l'image à l'écran. Si vous désactivez le son pendant que l'appareil affiche une image à l'écran, le travail se poursuit,VisiTel continue de recevoir des données jusqu'à ce que la mémoire tampon utilisée pour stocker l'image soit pleine. Cela prouve une fois de plus qu'après que VisiTel a commencé à traiter les données graphiques, l'appareil ne s'appuie pas sur un oscillateur externe pour savoir exactement où les données dont il a besoin sont encodées dans le signal. Il a son propre générateur d'horloge, qui lui indique exactement ce dont il a besoin.où est exactement ce dont il a besoin.où est exactement ce dont il a besoin.



Étant donné que la partie en-tête du signal est uniquement responsable de l'établissement de la connexion, et étant donné qu'elle ne dépend pas de l'image transmise, je n'avais aucune envie de me plonger dans l'étude de ses caractéristiques. Pour nous, pour atteindre nos objectifs, il suffit de savoir que l'en-tête est responsable de l'établissement d'une connexion, et il suffit également d'avoir une idée approximative de son apparence.



Et maintenant, il est temps de passer à la chose la plus difficile - savoir comment exactement les informations graphiques sont encodées, comment les pixels «sonnent». Tout d'abord, j'avais besoin de comprendre comment les données de pixels sont représentées dans un signal audio. Ma première hypothèse était que chaque onde complète représente un pixel. J'ai testé cette idée en comptant le nombre d'ondes entre les répétitions du motif de test. Ce que j'ai obtenu était conforme aux spécifications VisiTel de l'ancienne annonce. À savoir, il fait 96x96 pixels, avec plusieurs lignes en sortie avant le début de l'image elle-même.



Tout cela signifie que l'appareil analyse l'amplitude de chaque onde et écrit les données sous la forme d'un pixel tampon, qui représente une image numérique dans VisiTel. Nous savons grâce aux supports marketing VisiTel que chaque pixel de l'image qu'il affiche a 16 nuances de gris. Mais moi, analysant les pixels du signal "analogique", je n'ai pas ressenti le besoin d'appliquer l'effet de les postériser lors du décodage ou de l'encodage.



Fait intéressant, la luminosité des pixels est inversée avant la modulation. En conséquence, les plus grosses ondes correspondent aux pixels les plus sombres. De plus, l'image est réfléchie de gauche à droite, c'est-à-dire qu'une image miroir est formée. Je voudrais savoir ce que les lecteurs de ce matériel pensent de la raison de l'inversion de la luminosité des pixels avant de transmettre le signal. Je soupçonne que c'est parce que la vision humaine est plus à l'aise avec des pixels noirs dispersés au hasard que des pixels également blancs. Après tout, le bruit sur les lignes téléphoniques est un problème auquel VisiTel a dû faire face en 1988.





Enquête de signal



Certes, il y avait une exception au schéma d'encodage d'image ci-dessus qui m'a échappé pendant plusieurs semaines. Lors de l'utilisation de ce schéma de codage inversé, les pixels parfaitement blancs doivent être représentés par du silence. Il ne devrait y avoir aucun signal représentant de tels pixels. Mais j'ai eu le sentiment que les créateurs de VisiTel n'aimaient pas cette idée. Au lieu de cela, pour coder des pixels entièrement blancs, le signal de la porteuse a été décalé de 1/4 de longueur d'onde, ce qui a entraîné de telles ondes déphasées par rapport aux normales. Dans ce cas, le signal pourrait être envoyé à un autre appareil, comme auparavant. Le dispositif de réception, recevant un tel signal, a gardé la synchronisation avec le signal "normal" et a pris des informations sur l'amplitude du signal au même endroit que d'habitude, mais maintenant à ces moments l'onde est passée par 0,ce qui a donné des pixels blancs. Comme je l'ai déjà dit, si vous désactivez le son pendant le transfert de l'image, VisiTel continue d'afficher l'image jusqu'à ce que la mémoire tampon soit pleine. Ce sont des pixels blancs. En conséquence, il s'avère que le silence, même sans la présence d'un signal utile dans la ligne, est perçu par l'appareil comme blanc. Je ne sais pas pourquoi les créateurs de l'appareil ont décidé de compliquer le schéma de modulation en y introduisant un tel mode de déphasage. Quant à moi, beaucoup d'efforts ont été consacrés à ce sujet, mais soit il n'y a aucun avantage à une telle mesure, soit c'est très insignifiant.pour lequel les créateurs du dispositif ont décidé de compliquer le schéma de modulation en y introduisant un tel mode de déphasage. Quant à moi, beaucoup d'efforts ont été consacrés à ce sujet, mais soit il n'y a aucun avantage à une telle mesure, soit c'est très insignifiant.pour lequel les créateurs du dispositif ont décidé de compliquer le schéma de modulation en y introduisant un tel mode de déphasage. Quant à moi, beaucoup d'efforts ont été consacrés à ce sujet, mais soit il n'y a aucun avantage à une telle mesure, soit c'est très insignifiant.



Je ne connaissais pas la modulation de déphasage, j'ai d'abord essayé de trouver le maximum de chacune des ondes et de représenter la valeur résultante sous forme de pixel. Les sauts de ligne ont été effectués avec une étape calculée par la formule 96*( ). Cela a conduit au fait que dans certaines lignes, il y avait un peu plus ou un peu moins de pixels. De plus, une telle approche brute de l'analyse du signal était très sensible au bruit, car même de petits pics dans les ondes pouvaient entraîner l'apparition de pixels supplémentaires. Certes, un tel mécanisme de décodage d'image était très simple à mettre en œuvre. La mise en œuvre de cette idée simple pourrait décoder des images sans avoir besoin de synchroniser le récepteur et la source. Mais après avoir appliqué un tel système de décodage de signal, rien de décent ne m'est arrivé.



Afin de décoder les images plus précisément, nous devons faire la même chose que VisiTel. À savoir, vous devez vous synchroniser avec le signal au moment du traitement de l'en-tête, puis échantillonner le signal à intervalles réguliers. Sans surprise, un tel traitement de signal nécessite une synchronisation très précise. Dans mon cas, lors de l'enregistrement d'un son avec une fréquence de 44100 Hz, il y a 25,23158 échantillons par onde (cela signifie que la fréquence de l'onde porteuse est de 1747.80968929 Hz). En conséquence, chaque fois que nous lisons des informations sur un pixel, nous rechercherons dans la mémoire tampon audio des données sur le pixel suivant à une distance de 25,23158 échantillons du précédent. Puisque les positions des échantillons sont décrites par des valeurs entières, nous arrondissons simplement le nombre correspondant à l'entier le plus proche et l'utilisons. Le plus important ici est d'éviter que les erreurs d'arrondi ne s'accumulent,car cela entraînera un déphasage rapide de la position d'échantillonnage par rapport à l'onde sonore. Et si un déplacement similaire se produit pendant le décodage de l'image, même s'il est petit, l'image finie sera remplie d'artefacts.





Image pleine d'artefacts



Heureusement pour moi, le nombre d'échantillons par vague est assez stable. Cela n'a pas changé après le préchauffage de l'appareil, même si je craignais que cela puisse être un problème. Cette stabilité m'a permis de simplement coder en dur la valeur appropriée dans le code de décodage d'image. Idéalement, le nombre d'échantillons par vague devrait être appris à partir du titre, mais j'ai trouvé qu'il n'y avait pas assez d'échantillons pour atteindre une précision de 5 décimales. Et la valeur, codée en dur, a permis d'obtenir des résultats stables. Grâce à cette implémentation plus précise du système de décodage du signal, les sauts de ligne ont simplement été effectués après que la fonction qui génère 1 pixel a été appelée 96 fois.



Jusqu'à présent, j'ai travaillé avec des extraits audio préenregistrés décodés à partir de fichiers WAV. Afin de travailler de manière interactive et de décoder les images entrant dans l'interface audio d'un ordinateur, le décodeur devait être équipé de la capacité de détecter l'en-tête et de trouver le début des données d'image. Si vous regardez le titre, il s'avère qu'il contient trois fragments clairement distinguables.





Analyse d'en-tête: Carrier - Silence - Carrier



Afin de détecter cela, j'ai implémenté un détecteuret une machine d'étatbasés sur FFT . Le matériau source est traité en premier, puis le détecteur examine chaque bloc du signal audio jusqu'à ce qu'il trouve un signal puissant de 1747 Hz. Les blocs sont ensuite examinés jusqu'à ce qu'ils trouvent l'endroit où le signal disparaît puis réapparaît. Cela signifie trouver le moment de commencer la transmission. Ensuite, un simple décalage statique est utilisé pour trouver l'heure de début de la transmission de données d'image, et les mécanismes ci-dessus sont utilisés pour décoder l'image. Une fois le décodage terminé, l'image est affichée et la machine d'état est réinitialisée à son état d'origine et attend le début de la transmission suivante.



Étape 3. Présentation de VisiTel sous forme de webcam



Maintenant que nous avons pu décoder l'image reçue de VisiTel, il reste à mettre la dernière pièce de notre puzzle en place. Nous devons présenter les images décodées sous forme d'images vidéo et transmettre le flux vidéo au programme de visioconférence. C'est étonnamment facile sous Linux. L'entrée vidéo est abstraite avec l'interface V4L2, mais cela se produit malheureusement dans l'espace du noyau. Afin de ne pas vous impliquer dans les complexités de la création d'un module de noyau, vous pouvez utiliser une solution toute faite - v4l2loopback... Ce module est à la fois un périphérique d'entrée et un périphérique de sortie. L'entrée graphique qui lui est transmise devient une sortie que d'autres programmes comme Zoom peuvent accepter. Il existe même des packages Python qui résument encore davantage cela, vous permettant de travailler avec ce type de données en utilisant OpenCV et NumPy. J'ai utilisé l'un de ces packages - pyfakewebcam. Il dispose d'une interface extrêmement simple. Pour créer une webcam virtuelle, procédez comme suit:



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


Et lorsque vous recevez un nouveau cadre, vous devez le faire:



self.camera.schedule_frame(output)


Maintenant, après ce petit ajout au décodeur, tout a fonctionné comme il se doit. Zoom peut recevoir des images de VisiTel et nous pouvons organiser un chat vidéo dans le style des années 1980.





Chat vidéo dans l'esprit des années 1980



Je voudrais également installer le pilote Linux Direct Rendering Manager, qui permettra non seulement de recevoir des images de VisiTel, mais aussi de les afficher dessus. Mais pour l'instant, pour reconnaître ce projet comme une réussite, il me suffit de pouvoir communiquer en Zoom à l'aide d'un appareil de 1988. Voici , si vous êtes intéressé, le code du projet sur GitHub.



Avez-vous essayé de donner une seconde vie à certains appareils d'un passé lointain?










All Articles