Mitsubishi VisiTel: Zoom-Kommunikation der 1980er Jahre

Vor dem Fenster steht 2020. Fernarbeit ist schon ganz normal. Jahrzehntelange Werbung für führende Telekommunikationsunternehmen hat endlich ihren Job gemacht - meiner Mutter beigebracht, wie man Videoanrufe tätigt. Die Ereignisse der letzten Monate, die ein unerwartetes öffentliches Interesse an Videokommunikation ausgelöst haben, haben zwar zu einem beispiellosen Mangel an Webcams geführt . Aber wir können nicht zulassen, dass dies uns daran hindert, ein normales Leben zu führen. Schließlich braucht jeder von uns eine Menge Leute, die er anrufen kann. Ich habe eine Lösung für das Problem der fehlenden Webcams. Dies ist Mitsubishi VisiTel!





Mitsubishi VisiTel



Als dieses Gerät 1988 auf den Markt kam , war es definitiv die Zukunft. Und mit seinem niedrigen Preis - nur 399 US-Dollar - wie konnte es nicht sofort populär werden? In derim Februar 1988 veröffentlichten Zeitschrift Popular Mechanics war Mitsubishi VisiTel eine ganze Seite gewidmet. Das Gerät wurde dort beschrieben und erwähnte unerwartet viele technische Details. Und die Moderatoren von Gadget Guru auf dem WSMV-Fernsehsender stellten unmittelbar nachdem sie über VisiTel gesprochen hatten, eine unglaublich wichtige Frage: "Kann ich weiterhin ein normales Telefon verwenden, während dieses Ding mit der Leitung verbunden ist?"



Es dauerte 30 Jahre und eine globale Pandemie, bis wir endlich die unvermeidliche Tatsache akzeptierten, dass wir, bevor wir Kollegen anrufen, duschen und uns in Ordnung bringen müssen. Was auch immer man sagen mag, es gibt kein Entkommen von der Videotelefonie.



Ich bin nicht der erste, der denkt, dass VisiTel etwas besonders Kitschiges hat. Die Leute haben lange an diesem Gerät herumgebastelt . Trotz der Tatsache, dass es kein Videosignal überträgt, sondern nur das Teilen von Fotos ermöglicht, ist es eines dieser Produkte, die als herausragende technische Errungenschaften gelten. Dies ist eine Entwicklung, die ihrer Zeit weit voraus war.



Mein Interesse an Visitel erschien nach dieserVideo. Der Autor hat gezeigt, wie Sie durch Verlangsamung oder Beschleunigung der Aufnahme eines von VisiTel gesendeten Bildes das Bild auf dem Bildschirm verzerren können. Als ich dies erfuhr, wurde mir sofort klar, dass das Gerät ein einfaches Amplitudenmodulationsschema verwendet. Da ich das wusste, ging ich zu eBay und fand dort eine passende Kopie von VisiTel. Mein Ziel war es, diese erstaunliche "Zeitkapsel" mit den technischen Fortschritten der späten 1980er Jahre in Verbindung mit den von mir gewählten modernen Technologien zum Laufen zu bringen. Insbesondere wollte ich die Kommunikation mit Kollegen bei Zoom organisieren. Außerdem wollte ich dies erreichen, ohne die VisiTel-Hardware ändern zu müssen. Dieses Gerät hat etwas Besonderes, so dass Sie es in seiner ursprünglichen Form belassen möchten.



Schritt 1. Verbindung





Experimentieren Sie mit VisiTel



VisiTel ist unglaublich einfach in Betrieb zu nehmen. Auf der Rückseite des Geräts befindet sich ein langes Kabel mit einem Y-förmigen Splitter gegen Ende (mehr dazu weiter unten) und zwei Steckern. Einer davon ist ein 2,1-mm-Stromanschluss. Das Gerät benötigt 15 Volt. Es ist etwas seltsam, dass die Entwickler des Geräts beschlossen haben, die Nummer 15 in einer solchen Schriftart zu schreiben, dass die Inschrift "IS Volts" lautet. Der zweite Anschluss ist ein normaler RJ-11, der zwei Pins verwendet. Dies ist eine Standard-Telefonbuchse. Wenn Sie sich an normale kabelgebundene Telefone erinnern, können Sie sich auch daran erinnern, dass das Mobilteil über den RJ-9-Anschluss mit dem Gerät verbunden ist und das Telefon über den RJ-11-Anschluss mit der Leitung verbunden ist. Dies bedeutet, dass nicht nur ein Mobilteil an das Telefon angeschlossen werden kann, sondern auch etwas anderes sowie die Tatsache, dassdamit Sie das Kabel oder die Röhre austauschen können, falls etwas mit ihnen passiert. Es kann zwar nicht gesagt werden, dass den Kabeln von Telefonen zu Mobilteilen häufig etwas passiert ist, da bei ihrer Herstellung spezielle, sehr flexible Drähte verwendet wurden.





VisiTel





, VisiTel



Auf der Rückseite des VisiTel befindet sich neben dem Kabel ein RJ-11-Anschluss. Nachdem ich einige Zeit darüber nachgedacht hatte, warum er dort gebraucht wurde, dämmerte es mir. Das Gerät fungiert als Vermittler zwischen einem normalen Telefon und einer Telefonleitung. Auf diese Weise kann VisiTel die Leitung überwachen oder Bilder während normaler Telefonanrufe übertragen. Dies führt zu einem offensichtlichen Problem. Wir sprechen nämlich von der Tatsache, dass der Teilnehmer die Geräusche beim Empfang und Senden von Bildern hört, da VisiTel die Telefonleitung gleichzeitig mit dem Telefon verwendet. Aber die Mitsubishi-Ingenieure haben sich darum gekümmert. Bevor Sie ein Bild senden oder empfangen, hören Sie ein lautes Klicken, das darauf hinweist, dass eine Art Relais das Telefon für eine Weile ausschaltet. Wir werden VisiTel verwenden, damit das vom Gerät empfangene Audiosignal für uns nicht interessant ist.Daher werden wir nichts an den RJ-11-Anschluss auf der Rückseite des Geräts anschließen. Dies macht das entsprechende Relais unnötig, was bedeutet, dass es entfernt werden kann, um die mit dem Senden des Bildes verbundenen Klicks zu beseitigen.



Wie organisiere ich den Datenaustausch mit diesem Gerät? Zum Beispiel hat mein Computer keinen RJ-11-Anschluss. Dies ist zwar nicht beängstigend, da Adapter zum Anschließen von Mobilteilen mit RJ-9-Anschlüssen an Smartphones angeboten werden. Eine der Verbindungsoptionen besteht darin, dass Sie den RJ-11-Stecker abschneiden und einen 3,5-mm-Stecker an das Kabel anlöten können, um die Mono-Audioübertragung zu organisieren. Beachten Sie, dass ich ursprünglich davon ausgegangen bin, dass VisiTel einen RJ-9-Anschluss und keinen RJ-11-Anschluss hat.



Mit dem 3,5-mm-Stecker können Sie VisiTel ganz einfach an Ihren Computer anschließen. Sie benötigen nämlich einen USB-Adapter mit separaten Ausgängen zum Anschließen eines Mikrofons und eines Kopfhörers (nicht TRSS) und verbinden VisiTel mit einem geeigneten Anschluss.



Oben habe ich gesagt, dass ich zum Y-förmigen Splitter zurückkehren werde. Mein VisiTel hatte ein Problem mit den Drähten um diesen Splitter. Darüber hinaus wurde der Draht nicht gebrochen, wenn sich alles einfach weigerte zu arbeiten und wenn das Problem völlig offensichtlich ist. Es war eine dieser unangenehmen Fehlfunktionen, wenn abends alles funktioniert und am nächsten Morgen nicht. Es wäre schön, wenn die Entwickler von VisiTel spezielle flexible Drähte in ihrem Produkt verwenden würden. Dieses Problem, das auftauchte und verschwand, kostete mich viele Tage bei der sinnlosen Suche nach seiner Lösung. Ich suchte ohne großen Erfolg nach ÜberhitzungsproblemenGeräte, überprüfte die Audiokarteneinstellungen dreimal. Ich fand das Problem, als ich das Gerät während des Tests anhob. Danach fand ich in der Aufnahme charakteristische Anzeichen einer unterbrochenen Verbindung. Ich habe aus dieser Geschichte eine Lektion über die Arbeit mit alter Hardware gelernt. Es besteht in der Tatsache, dass Sie das Gerät während des Betriebs ein wenig bewegen müssen, um zu sehen, ob zu diesem Zeitpunkt alles wie zuvor funktioniert.





Der Ort der Drahtbeschädigung ist mit einem Kreis markiert



Schritt 2. Untersuchung des Bildübertragungsmechanismus



Nachdem wir das Problem mit den kniffligen Kabeln gelöst und das Gerät an den Computer angeschlossen haben, ist es Zeit herauszufinden, welches Protokoll zum Codieren der übertragenen Bilder verwendet wird. Videos und Artikel über VisiTel lassen den Schluss zu, dass Bilder mithilfe der Amplitudenmodulation des Audiosignals codiert werden. Die Amplitudenmodulation ist eine Datencodierung, die durch Ändern der Amplitude eines Trägersignals durchgeführt wird. Die Amplitudenmodulation wird üblicherweise verwendet, um mit Funkwellen übertragenen Schall zu codieren, aber der gleiche Ansatz kann verwendet werden, um Bilder mit Funkwellen oder sogar Schallwellen zu übertragen. HierSie finden eine ausgezeichnete detaillierte Beschreibung dieses Prozesses mit Beispielen für Python-Code, die für diejenigen gedacht sind, die es gewohnt sind, durch Übung neue Dinge zu lernen.



Da wir wissen, dass die Daten unter Verwendung des AM-Modulationsmechanismus des Audiosignals codiert werden, können wir den ersten Schritt zur Decodierung dieser Daten unternehmen. Dieser Schritt besteht darin, ein moduliertes Signal aufzuzeichnen, das ein Beispielbild mit zuvor bekannten Eigenschaften überträgt. Um das Audiosignal aufzunehmen, habe ich Audacity verwendet , meine übliche Audiosoftware .





Grafische Darstellung des Audiosignals Das



Obige zeigt, wie ich, um besser zu verstehen, wie die Daten codiert werden, ein sehr einfaches, speziell vorbereitetes Bild von VisiTel gesendet habe. Dieses Bild, das unten gezeigt wird, war ein Paar Karten, schwarz und weiß, die ich vor die Kamera des Geräts hielt. Das entsprechende Signal ist im Programm als markiertblackWhiteV.





Im Experiment verwendetes Bild



Schauen wir uns das empfangene Audiosignal genauer an.





Das Audiosignal genauer betrachten



Sie können dieses Signal hier anhören.



Wie Sie sehen können, befindet sich am Anfang jedes Blocks ein Header oder eine Sequenz, die die Initialisierung anzeigt (in diesem Beispiel von 17,55 bis 17,80). Dadurch kann das empfangende Gerät erkennen, dass ein anderes Gerät ein Bild senden wird, und die maximale Signalamplitude bestimmen. Dieser Indikator wird dann als Skalierungsfaktor beim Decodieren des Bildes verwendet. Infolgedessen führen Telefonleitungsfehler nicht zu einem Bildverlust an Kontrast oder Helligkeit. Das auf einigen Leitungen übertragene Signal kann verrauscht oder gedämpft sein. Beachten Sie, dass das Signal bis 17.55 nur Rauschen ist, was für das von VisiTel verwendete Datenprotokoll nicht wichtig ist.



Um sicherzustellen, dass die gefundene Header-Sequenz VisiTel tatsächlich anzeigt, dass das andere Gerät ihm ein Bild senden möchte, ließ ich das Gerät nur diesen kleinen Teil der Aufzeichnung anhören und wurde mit einem Relais-Klick belohnt. Es war offensichtlich, dass diese Sequenz einige Mechanismen in Gang setzt. Nachdem ich das Gerät nur 30 Millisekunden des Headers gesendet hatte, stellte ich fest, dass das Gerät erkennt, dass das Bild nach dem Header nicht übertragen wurde. Das Relais schaltet sich einige Millisekunden nach dem Ende der Header-Übertragung aus. Wenn Sie den Titel und die ersten Millisekunden des darauf folgenden Tons abspielen, zeigt VisiTel das Bild auf dem Bildschirm an. Wenn Sie den Ton ausschalten, während das Gerät ein Bild auf dem Bildschirm anzeigt, wird die Arbeit fortgesetzt.VisiTel empfängt weiterhin einige Daten, bis der zum Speichern des Bildes verwendete Puffer voll ist. Dies zeigt einmal mehr, dass das Gerät nach dem Beginn der Verarbeitung von Grafikdaten durch VisiTel nicht auf einen externen Oszillator angewiesen ist, um genau herauszufinden, wo die benötigten Daten im Signal codiert sind. Er hat einen eigenen Uhrengenerator, der ihm genau sagt, wo er was braucht.wo genau ist was er braucht.wo genau ist was er braucht.



Da der Header-Teil des Signals nur für den Verbindungsaufbau verantwortlich ist und nicht vom übertragenen Bild abhängt, hatte ich keine Lust, mich mit der Untersuchung seiner Merkmale zu befassen. Um unsere Ziele zu erreichen, reicht es aus, zu wissen, dass der Header für den Aufbau einer Verbindung verantwortlich ist, und es reicht aus, eine ungefähre Vorstellung davon zu haben, wie er aussieht.



Und jetzt ist es an der Zeit, sich dem Schwierigsten zuzuwenden - herauszufinden, wie genau die Grafikinformationen codiert sind und wie die Pixel "klingen". Zuerst musste ich verstehen, wie die Pixeldaten im Audiosignal dargestellt werden. Meine erste Vermutung war, dass jede volle Welle ein Pixel darstellt. Ich habe diese Idee getestet, indem ich die Anzahl der Wellen zwischen den Wiederholungen des Testmusters gezählt habe. Was ich bekam, entsprach den VisiTel-Spezifikationen der alten Anzeige. Es sind nämlich 96 x 96 Pixel, wobei mehrere Zeilen vor dem Start des Bildes selbst ausgegeben werden.



All dies bedeutet, dass das Gerät die Amplitude jeder Welle analysiert und die Daten in Form eines Pufferpixels schreibt, das in VisiTel ein digitales Bild darstellt. Aus den Marketingmaterialien von VisiTel wissen wir, dass jedes Pixel im angezeigten Bild 16 Graustufen aufweist. Bei der Analyse von Pixeln aus dem "analogen" Signal hatte ich jedoch nicht das Bedürfnis, den Effekt der Posterisierung beim Decodieren oder Codieren anzuwenden.



Interessanterweise wird die Helligkeit der Pixel vor der Modulation invertiert. Infolgedessen entsprechen die größten Wellen den dunkelsten Pixeln. Zusätzlich wird das Bild von links nach rechts reflektiert, dh es wird ein Spiegelbild erzeugt. Ich würde gerne wissen, was die Leser dieses Materials über den Grund für die Invertierung der Helligkeit von Pixeln denken, bevor sie das Signal übertragen. Ich vermute, dass dies daran liegt, dass das menschliche Sehen mit zufällig gestreuten schwarzen Pixeln angenehmer ist als mit gleich weißen. Lärm auf Telefonleitungen ist schließlich ein Problem, mit dem VisiTel 1988 definitiv zu kämpfen hatte.





Signaluntersuchung



Es stimmt, es gab eine Ausnahme von dem obigen Bildcodierungsschema, die mir mehrere Wochen lang entgangen ist. Bei Verwendung dieses invertierten Codierungsschemas sollten perfekt weiße Pixel durch Stille dargestellt werden. Es sollte kein Signal geben, das solche Pixel darstellt. Aber ich hatte das Gefühl, dass die Macher von VisiTel diese Idee nicht mochten. Um rein weiße Pixel zu codieren, wurde das Trägersignal stattdessen um 1/4 Wellenlänge verschoben, was dazu führte, dass solche Wellen gegenüber den normalen Wellen phasenverschoben waren. In diesem Fall könnte das Signal wie zuvor an ein anderes Gerät gesendet werden. Das Empfangsgerät, das ein solches Signal empfing, hielt die Synchronisation mit dem "normalen" Signal aufrecht und nahm an der gleichen Stelle wie gewöhnlich Informationen über die Signalamplitude auf, aber jetzt ging die Welle in diesen Momenten durch 0,das gab die Pixel weiß. Wie ich bereits sagte, wenn Sie den Ton während der Übertragung des Bildes ausschalten, zeigt VisiTel das Bild weiterhin an, bis der Puffer voll ist. Dies sind weiße Pixel. Infolgedessen stellt sich heraus, dass die Stille auch ohne das Vorhandensein eines nützlichen Signals in der Leitung vom Gerät als weiß wahrgenommen wird. Ich weiß nicht, warum die Entwickler des Geräts beschlossen haben, das Modulationsschema durch die Einführung eines solchen Phasenverschiebungsmodus zu komplizieren. Ich habe viel Mühe darauf verwendet, aber es gibt entweder keinen Nutzen aus einem solchen Schritt oder er ist sehr unbedeutend.für die die Hersteller des Geräts beschlossen, das Modulationsschema durch Einführung eines solchen Phasenverschiebungsmodus zu komplizieren. Ich habe viel Mühe darauf verwendet, aber es gibt entweder keinen Nutzen aus einem solchen Schritt oder er ist sehr unbedeutend.für die die Hersteller des Geräts beschlossen, das Modulationsschema durch Einführung eines solchen Phasenverschiebungsmodus zu komplizieren. Ich habe viel Mühe darauf verwendet, aber es gibt entweder keinen Nutzen aus einem solchen Schritt oder er ist sehr unbedeutend.



Da ich nichts über Phasenverschiebungsmodulation wusste, versuchte ich zunächst, das Maximum jeder der Wellen zu finden und den resultierenden Wert in Form eines Pixels darzustellen. Zeilenumbrüche wurden mit einem nach der Formel berechneten Schritt durchgeführt 96*( ). Dies führte dazu, dass in einigen Zeilen entweder etwas mehr oder etwas weniger Pixel vorhanden waren. Darüber hinaus war ein derart grober Ansatz zur Signalanalyse sehr empfindlich gegenüber Rauschen, da bereits kleine Spitzen in den Wellen zum Auftreten zusätzlicher Pixel führen könnten. Ein solcher Bilddecodierungsmechanismus war zwar sehr einfach zu implementieren. Durch die Implementierung dieser einfachen Idee könnten Bilder dekodiert werden, ohne dass Empfänger und Quelle synchronisiert werden müssen. Aber nachdem ich ein solches Signaldecodierungssystem angewendet hatte, passierte mir nichts Anständiges.



Um Bilder genauer zu dekodieren, müssen wir dasselbe tun wie VisiTel. Sie müssen nämlich zum Zeitpunkt der Header-Verarbeitung mit dem Signal synchronisieren und dann das Signal in regelmäßigen Abständen abtasten. Es überrascht nicht, dass eine solche Signalverarbeitung ein sehr genaues Timing erfordert. In meinem Fall gibt es bei der Aufnahme von Ton mit einer Frequenz von 44100 Hz 25.23158 Abtastwerte pro Welle (dies bedeutet, dass die Frequenz der Trägerwelle 1747,80968929 Hz beträgt). Infolgedessen suchen wir jedes Mal, wenn wir Informationen über ein Pixel lesen, im Audiopuffer nach Daten auf dem nächsten Pixel in einem Abstand von 25.23158 Abtastwerten vom vorherigen Pixel. Da Stichprobenpositionen durch ganzzahlige Werte beschrieben werden, runden wir die entsprechende Zahl einfach auf die nächste ganze Zahl und verwenden sie. Das Wichtigste dabei ist, zu verhindern, dass sich Rundungsfehler ansammeln.Dies führt dazu, dass sich die Abtastposition relativ zur Schallwelle schnell phasenverschoben bewegt. Und wenn während der Bilddecodierung eine ähnliche Verschiebung auftritt, wenn auch eine kleine, wird das fertige Bild mit Artefakten gefüllt.





Bild voller Artefakte



Zum Glück ist die Anzahl der Samples pro Welle ziemlich stabil. Es hat sich nach dem Aufwärmen des Geräts nicht geändert, obwohl ich befürchtet hatte, dass dies ein Problem sein könnte. Diese Stabilität ermöglichte es mir, den entsprechenden Wert im Bilddecodierungscode einfach fest zu codieren. Idealerweise sollte die Anzahl der Abtastwerte pro Welle aus dem Titel gelernt werden, aber ich stellte fest, dass nicht genügend Abtastwerte vorhanden waren, um eine Genauigkeit von 5 Dezimalstellen zu erreichen. Und der fest codierte Wert ermöglichte stabile Ergebnisse. Dank dieser genaueren Implementierung des Signaldecodierungssystems wurden Zeilenumbrüche einfach ausgeführt, nachdem die Funktion, die 1 Pixel erzeugt, 96 Mal aufgerufen wurde.



Bisher habe ich mit aufgezeichneten Audioausschnitten gearbeitet, die aus WAV-Dateien dekodiert wurden. Um interaktiv zu arbeiten und Bilder zu decodieren, die in das Audio-Interface des Computers gelangen, musste der Decoder mit der Fähigkeit ausgestattet sein, den Header zu erkennen und den Anfang der Bilddaten zu finden. Wenn Sie sich die Überschrift ansehen, stellt sich heraus, dass drei klar unterscheidbare Fragmente darin sind.





Header-Analyse: Carrier - Silence - Carrier



Um dies zu erkennen, habe ich einen einfachen FFT- basierten Detektorund eine Zustandsmaschineimplementiert. Das Originalmaterial wird zuerst verarbeitet, und dann untersucht der Detektor jeden Block des Audiosignals, bis er ein starkes 1747-Hz-Signal findet. Die Blöcke werden dann untersucht, bis sie die Stelle finden, an der das Signal verschwindet, und dann wieder erscheinen. Dies bedeutet, den Moment zu finden, um die Übertragung zu starten. Danach wird ein einfacher statischer Versatz verwendet, um die Startzeit der Bilddatenübertragung zu ermitteln, und die obigen Mechanismen werden verwendet, um das Bild zu decodieren. Nach Abschluss der Decodierung wird das Bild angezeigt und die Zustandsmaschine wird auf ihren ursprünglichen Zustand zurückgesetzt und wartet auf den Beginn der nächsten Übertragung.



Schritt 3. VisiTel als Webcam präsentieren



Nachdem wir das von VisiTel empfangene Bild dekodieren konnten, bleibt das letzte Puzzleteil noch in Position. Wir müssen die decodierten Bilder in Form von Videobildern präsentieren und den Videostream an das Videokonferenzprogramm übertragen. Dies ist unter Linux überraschend einfach. Der Videoeingang wird über die V4L2-Schnittstelle abstrahiert, dies geschieht jedoch leider im Kernelraum. Um sich nicht auf die Komplexität beim Erstellen eines Kernelmoduls einzulassen , können Sie eine vorgefertigte Lösung verwenden - v4l2loopback... Dieses Modul ist sowohl ein Eingabegerät als auch ein Ausgabegerät. Die Grafikeingabe, die an sie übergeben wird, wird zu einer Ausgabe, die andere Programme wie Zoom akzeptieren können. Es gibt sogar Python-Pakete, die alles noch weiter abstrahieren, sodass Sie mit OpenCV und NumPy mit solchen Daten arbeiten können. Ich habe eines dieser Pakete verwendet - pyfakewebcam. Es verfügt über eine extrem einfache Oberfläche. Gehen Sie wie folgt vor, um eine virtuelle Webcam zu erstellen:



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


Und wenn Sie einen neuen Rahmen erhalten, müssen Sie Folgendes tun:



self.camera.schedule_frame(output)


Jetzt, nach dieser kleinen Erweiterung des Decoders, funktionierte alles so, wie es sollte. Zoom kann Bilder von VisiTel empfangen und wir können einen Video-Chat im Stil der 1980er Jahre arrangieren.





Video-Chat im Geiste der 1980er Jahre



Ich möchte auch den Linux-Treiber Direct Rendering Manager installieren, mit dem Bilder von VisiTel nicht nur empfangen, sondern auch darauf angezeigt werden können. Um dieses Projekt als Erfolg zu erkennen, reicht es mir jedoch vorerst, dass ich mit einem Gerät aus dem Jahr 1988 in Zoom kommunizieren kann. Hier , wenn Sie daran interessiert sind,ist das Projekt Code auf GitHub.



Haben Sie versucht, einigen Geräten aus der fernen Vergangenheit ein zweites Leben zu geben?










All Articles