Mitsubishi VisiTel
Ketika perangkat ini muncul pada tahun 1988, itu pasti mewakili masa depan. Dan dengan harganya yang murah - hanya $ 399 - bagaimana mungkin ia tidak langsung menjadi populer? Dalam majalah Popular Mechanics, yang diterbitkan pada Februari 1988, satu halaman penuh dikhususkan untuk Mitsubishi VisiTel. Perangkat itu dideskripsikan di sana, menyebutkan volume detail teknis yang tak terduga. Dan presenter Gadget Guru di saluran TV WSMV, segera setelah mereka mulai membicarakan VisiTel, mengajukan pertanyaan yang sangat penting: "Dapatkah saya terus menggunakan telepon biasa saat benda ini terhubung ke saluran?"
Butuh waktu 30 tahun dan pandemi global bagi kami untuk akhirnya menerima fakta yang tak terhindarkan bahwa sebelum menelepon rekan kerja, kami perlu mandi dan mengatur diri sendiri. Sekarang, apa pun yang dikatakan orang, tidak ada jalan keluar dari video telephony.
Saya bukan orang pertama yang berpikir ada sesuatu yang sangat aneh tentang VisiTel. Orang - orang telah lama mengutak - atik perangkat ini. Terlepas dari kenyataan bahwa itu tidak mengirimkan sinyal video, tetapi hanya memungkinkan Anda untuk berbagi foto, ini adalah salah satu produk yang dianggap sebagai pencapaian luar biasa dalam bidang teknik. Ini adalah perkembangan yang jauh di depan pada masanya.
Ketertarikan saya pada VisiTel muncul setelah inivideo. Penulisnya menunjukkan bagaimana, dengan memperlambat atau mempercepat pengambilan gambar yang dikirim oleh VisiTel, Anda dapat membuat gambar di layar terdistorsi. Setelah mempelajari ini, saya segera menyadari bahwa perangkat tersebut menggunakan skema modulasi amplitudo sederhana. Mengetahui hal ini, saya pergi ke eBay dan menemukan salinan VisiTel yang sesuai di sana. Tujuan saya adalah membuat "kapsul waktu" yang luar biasa ini dengan kemajuan teknis akhir 1980-an bekerja dalam hubungannya dengan teknologi modern yang telah saya pilih. Secara khusus, saya ingin mengatur komunikasi dengan rekan kerja di Zoom. Selain itu, saya ingin mencapai ini tanpa harus memodifikasi perangkat keras VisiTel. Ada yang istimewa pada perangkat ini, sehingga Anda ingin membiarkannya dalam bentuk aslinya.
Langkah 1. Koneksi
Mulailah bereksperimen dengan VisiTel
VisiTel sangat mudah disiapkan dan dijalankan. Dari bagian belakang perangkat terdapat kabel panjang dengan splitter berbentuk Y di ujungnya (lebih lanjut tentang ini di bawah) dan sepasang konektor. Salah satunya adalah konektor daya 2,1 mm. Perangkat membutuhkan 15 volt. Agak aneh bahwa para pengembang perangkat memutuskan untuk menulis angka 15 dalam font sedemikian rupa sehingga tulisan itu berbunyi "IS Volts". Konektor kedua adalah RJ-11 biasa, yang menggunakan dua pin. Ini adalah soket telepon standar. Jika Anda mengingat telepon kabel biasa, maka Anda juga dapat mengingat bahwa handset terhubung ke perangkat menggunakan konektor RJ-9, dan telepon terhubung ke saluran menggunakan konektor RJ-11. Artinya adalah mungkin untuk menghubungkan tidak hanya handset ke telepon, tetapi juga sesuatu yang lain, serta fakta bahwasehingga Anda dapat mengganti kabel atau tabung jika terjadi sesuatu pada mereka. Benar, seseorang tidak dapat mengatakan bahwa sesuatu yang sering terjadi pada kabel yang berpindah dari telepon ke handset, karena kabel khusus yang sangat fleksibel digunakan dalam pembuatannya.
VisiTel
, VisiTel
Kembali ke bagian belakang VisiTel, selain kabel, terdapat konektor RJ-11. Setelah saya berpikir beberapa lama tentang mengapa dia dibutuhkan di sana, saya sadar. Perangkat bertindak sebagai perantara antara pesawat telepon biasa dan saluran telepon. Ini memungkinkan VisiTel memantau saluran atau mengirimkan gambar selama panggilan telepon biasa. Ini mengarah pada masalah yang jelas. Yakni, kita berbicara tentang fakta bahwa karena VisiTel menggunakan saluran telepon secara bersamaan dengan telepon, pelanggan akan mendengar suara yang menyertai penerimaan dan pengiriman gambar. Tapi insinyur Mitsubishi mengurusnya. Sebelum mengirim atau menerima gambar, Anda dapat mendengar bunyi klik yang keras, yang menunjukkan bahwa semacam relai mematikan telepon untuk sementara waktu. Kami akan menggunakan VisiTel sehingga sinyal audio yang diterima dari perangkat tidak menarik bagi kami,oleh karena itu kami tidak akan menyambungkan apapun ke konektor RJ-11 di bagian belakang perangkat. Hal ini membuat relai terkait tidak diperlukan, yang berarti relai tersebut dapat dihapus untuk menghilangkan klik yang terkait dengan pengiriman gambar.
Bagaimana cara mengatur pertukaran data dengan perangkat ini? Misalnya, komputer saya tidak memiliki konektor RJ-11. Benar, ini tidak menakutkan, karena ada adaptor yang dijual untuk menghubungkan handset dengan konektor RJ-9 ke smartphone. Salah satu opsi koneksi adalah Anda dapat memotong konektor RJ-11 dan menyolder steker 3,5 mm ke kabel, mengatur transmisi audio mono. Perhatikan bahwa saya awalnya berasumsi VisiTel memiliki konektor RJ-9 dan bukan konektor RJ-11.
Menggunakan steker 3,5 mm, menghubungkan VisiTel ke komputer Anda sangat mudah. Yaitu, Anda perlu mendapatkan adaptor USB dengan output terpisah untuk menghubungkan mikrofon dan headphone (bukan TRSS) dan menghubungkan VisiTel ke konektor yang sesuai.
Di atas, saya mengatakan bahwa saya akan kembali ke pembagi berbentuk Y. VisiTel saya mengalami masalah dengan kabel di sekitar splitter ini. Selain itu, kabelnya tidak putus ketika semuanya menolak untuk bekerja, dan ketika masalahnya sudah jelas. Itu adalah salah satu malfungsi yang tidak menyenangkan di mana semuanya bekerja di malam hari dan tidak lagi keesokan harinya. Alangkah baiknya jika pembuat VisiTel menggunakan kabel fleksibel khusus dalam produk mereka. Masalah ini, yang muncul dan menghilang, menghabiskan waktu berhari-hari dalam pencarian solusi yang tidak masuk akal. Saya mencari masalah overheating tanpa banyak hasilperangkat, memeriksa pengaturan kartu audio tiga kali. Saya akhirnya menemukan masalah ketika saya mengangkat perangkat selama pengujian. Setelah itu, saya menemukan tanda-tanda karakteristik koneksi terputus dalam rekaman. Satu pelajaran yang saya pelajari dari cerita ini adalah tentang bekerja dengan perangkat keras lama. Terdiri dari fakta bahwa, selama pengoperasian perangkat, Anda perlu memindahkannya sedikit dan melihat apakah semuanya saat ini berfungsi sama seperti sebelumnya.
Tempat kerusakan kawat ditandai dengan lingkaran
Langkah 2. Investigasi mekanisme transmisi gambar
Setelah kami menyelesaikan masalah dengan kabel yang rumit dan menghubungkan perangkat ke komputer, saatnya untuk mencari tahu protokol mana yang digunakan untuk menyandikan gambar yang dikirimkan. Video dan artikel tentang VisiTel memungkinkan kami menyimpulkan bahwa gambar dikodekan menggunakan modulasi amplitudo dari sinyal audio. Modulasi amplitudo adalah pengkodean data yang dilakukan dengan mengubah amplitudo sinyal pembawa. Modulasi amplitudo biasanya digunakan untuk menyandikan suara yang ditransmisikan menggunakan gelombang radio, tetapi pendekatan yang sama dapat digunakan untuk mengirimkan gambar menggunakan gelombang radio atau bahkan gelombang suara. SiniAnda dapat menemukan penjelasan rinci yang sangat baik tentang proses ini dengan contoh kode Python, ditujukan bagi mereka yang terbiasa mempelajari hal-hal baru melalui latihan.
Mengetahui bahwa data dikodekan menggunakan mekanisme modulasi AM dari sinyal audio, kita dapat mengambil langkah pertama untuk mendekode data ini. Langkah ini terdiri dari merekam sinyal termodulasi yang mengirimkan gambar sampel dengan properti yang diketahui sebelumnya. Untuk menangkap sinyal audio, saya menggunakan Audacity , software audio biasa saya.
Representasi grafis dari sinyal audio Di
atas menunjukkan bagaimana saya, dalam upaya untuk lebih memahami bagaimana data dikodekan, mengirimkan gambar yang sangat sederhana dan disiapkan secara khusus dari VisiTel. Gambar ini, yang ditunjukkan di bawah, adalah sepasang kartu, hitam dan putih, yang saya pegang di depan kamera perangkat. Sinyal yang sesuai dengannya ditandai dalam program sebagai
blackWhiteV
.
Gambar yang digunakan dalam percobaan
Mari kita lihat lebih dekat sinyal audio yang diterima.
Melihat lebih dekat sinyal audio
Anda dapat mendengarkan sinyal ini di sini .
Seperti yang Anda lihat, di awal setiap blok terdapat header, atau urutan, yang menunjukkan inisialisasi (dari 17.55 hingga 17.80 dalam contoh ini). Ini memungkinkan perangkat penerima mengetahui bahwa perangkat lain akan mengirimkan gambar dan untuk menentukan amplitudo sinyal maksimum. Indikator ini kemudian digunakan sebagai faktor penskalaan saat mendekode gambar. Akibatnya, ketidaksempurnaan saluran telepon tidak akan mengakibatkan hilangnya kontras atau kecerahan gambar. Sinyal yang dipancarkan pada beberapa jalur mungkin berisik atau dilemahkan. Perhatikan bahwa sinyal hingga 17,55 hanyalah gangguan, tidak penting untuk protokol data yang digunakan oleh VisiTel.
Untuk memastikan bahwa urutan tajuk yang saya temukan memang menunjukkan kepada VisiTel bahwa perangkat lain akan mengiriminya gambar, saya membiarkan perangkat hanya mendengarkan bagian kecil dari rekaman ini dan diberi penghargaan dengan klik relai. Jelas bahwa urutan ini menggerakkan beberapa mekanisme. Tetapi setelah mengirim perangkat hanya 30 milidetik dari header, saya menyadari bahwa perangkat mendeteksi bahwa gambar setelah header tidak dikirim. Relai mati beberapa milidetik setelah akhir transmisi header. Jika Anda memutar judul dan beberapa milidetik pertama suara setelahnya, maka VisiTel mulai menampilkan gambar di layar. Jika Anda mematikan suara saat perangkat menampilkan gambar di layar, maka pekerjaan berlanjut,VisiTel terus menerima beberapa data hingga buffer yang digunakan untuk menyimpan gambar penuh. Ini sekali lagi membuktikan bahwa setelah VisiTel mulai memproses data grafik, perangkat tidak bergantung pada osilator eksternal untuk mengetahui dengan tepat di mana data yang diperlukan dikodekan dalam sinyal. Dia memiliki generator jam sendiri yang memberi tahu dia di mana tepatnya yang dia butuhkan.di mana tepatnya apa yang dia butuhkan.di mana tepatnya apa yang dia butuhkan.
Karena bagian header dari sinyal hanya bertanggung jawab untuk membangun koneksi, dan mengingat bahwa itu tidak bergantung pada gambar yang ditransmisikan, saya tidak berkeinginan untuk mempelajari fitur-fiturnya. Untuk mencapai tujuan kita, cukup bagi kita untuk mengetahui bahwa tajuk bertanggung jawab untuk membangun koneksi, dan juga cukup untuk memiliki gambaran kasar tentang tampilannya.
Dan sekarang saatnya beralih ke bagian yang paling sulit - untuk mengetahui dengan tepat bagaimana informasi grafik dikodekan, bagaimana piksel-piksel "berbunyi". Pertama, saya perlu memahami bagaimana data piksel direpresentasikan dalam sinyal audio. Tebakan pertama saya adalah bahwa setiap gelombang penuh mewakili satu piksel. Saya menguji ide ini dengan menghitung jumlah gelombang di antara pengulangan pola pengujian. Apa yang saya dapatkan sesuai dengan spesifikasi VisiTel dari iklan lama. Yaitu, 96x96 piksel, dengan beberapa garis menjadi keluaran sebelum gambar itu dimulai.
Semua ini berarti bahwa perangkat menganalisis amplitudo setiap gelombang dan menulis data dalam bentuk piksel penyangga, yang mewakili gambar digital di VisiTel. Kami mengetahui dari materi pemasaran VisiTel bahwa setiap piksel pada gambar yang ditampilkan memiliki 16 warna abu-abu. Tapi saya, menganalisis piksel dari sinyal "analog", tidak merasa perlu untuk menerapkan efek posterizing mereka saat decoding atau encoding.
Menariknya, kecerahan piksel dibalik sebelum modulasi. Hasilnya, gelombang terbesar berhubungan dengan piksel paling gelap. Selain itu, bayangan dipantulkan dari kiri ke kanan, yaitu bayangan cermin terbentuk. Saya ingin mengetahui pendapat pembaca materi ini tentang alasan pembalik kecerahan piksel sebelum mentransmisikan sinyal. Saya menduga hal ini karena penglihatan manusia lebih nyaman dengan piksel hitam yang tersebar secara acak daripada piksel putih yang sama. Bagaimanapun, kebisingan di saluran telepon adalah masalah yang pasti harus dihadapi VisiTel pada tahun 1988.
Investigasi sinyal
Benar, ada satu pengecualian untuk skema pengkodean gambar di atas yang tidak saya ketahui selama beberapa minggu. Dengan skema pengkodean terbalik ini, piksel putih sempurna harus diwakili oleh keheningan. Seharusnya tidak ada sinyal yang mewakili piksel tersebut. Tapi saya merasa pembuat VisiTel tidak menyukai ide ini. Sebagai gantinya, untuk menyandikan semua piksel putih, sinyal pembawa digeser oleh 1/4 panjang gelombang, menghasilkan gelombang seperti itu keluar dari fase dengan yang normal. Dalam hal ini, sinyal, seperti sebelumnya, dapat dikirim ke perangkat lain. Menerima sinyal seperti itu, perangkat penerima terus melakukan sinkronisasi dengan sinyal "biasa" dan mengambil informasi tentang amplitudo sinyal di tempat yang sama seperti biasanya, tetapi sekarang pada saat-saat ini gelombang melewati 0,yang memberi piksel putih. Seperti yang sudah saya katakan, jika Anda mematikan suara selama transfer gambar, maka VisiTel terus menampilkan gambar hingga buffernya penuh. Ini adalah piksel putih. Hasilnya, ternyata keheningan, bahkan tanpa kehadiran sinyal yang berguna di saluran, dianggap putih oleh perangkat. Saya tidak tahu mengapa pembuat perangkat memutuskan untuk memperumit skema modulasi dengan memperkenalkan mode pergeseran fasa ke dalamnya. Bagi saya, banyak upaya telah dihabiskan untuk ini, tetapi tidak ada manfaat dari langkah seperti itu, atau sangat tidak signifikan.di mana pembuat perangkat memutuskan untuk memperumit skema modulasi dengan memperkenalkan mode pergeseran fasa ke dalamnya. Bagi saya, banyak upaya telah dihabiskan untuk ini, tetapi tidak ada manfaat dari langkah seperti itu, atau sangat tidak signifikan.di mana pembuat perangkat memutuskan untuk memperumit skema modulasi dengan memperkenalkan mode pergeseran fasa ke dalamnya. Bagi saya, banyak upaya telah dihabiskan untuk ini, tetapi tidak ada manfaat dari langkah seperti itu, atau sangat tidak signifikan.
Saya, tidak mengetahui tentang modulasi pergeseran fasa, awalnya mencoba mencari nilai maksimum dari masing-masing gelombang dan mewakili nilai yang dihasilkan sebagai piksel. Jeda baris dilakukan dengan langkah yang dihitung dengan rumus
96*( )
. Ini mengarah pada fakta bahwa di beberapa baris ada sedikit lebih banyak atau sedikit lebih sedikit piksel. Selain itu, pendekatan kasar terhadap analisis sinyal sangat sensitif terhadap noise, karena puncak gelombang yang kecil pun dapat menyebabkan munculnya piksel tambahan. Benar, mekanisme decoding gambar seperti itu sangat sederhana untuk diterapkan. Menerapkan ide sederhana ini dapat memecahkan kode gambar tanpa perlu menyinkronkan penerima dan sumber. Tetapi setelah menerapkan sistem decoding sinyal seperti itu, tidak ada yang terjadi pada saya.
Untuk memecahkan kode gambar dengan lebih akurat, kita perlu melakukan hal yang sama seperti yang dilakukan VisiTel. Yaitu, Anda perlu melakukan sinkronisasi dengan sinyal pada saat pemrosesan header, dan kemudian mengambil sampel sinyal secara berkala. Tidaklah mengherankan jika pemrosesan sinyal seperti itu membutuhkan waktu yang sangat tepat. Dalam kasus saya, saat merekam suara dengan frekuensi 44100 Hz, terdapat 25,23158 sampel per gelombang (ini berarti frekuensi gelombang pembawa adalah 1747,80968929 Hz). Akibatnya, setiap kali kita membaca informasi tentang piksel, kita akan mencari di buffer audio untuk data pada piksel berikutnya pada jarak 25,23158 sampel dari yang sebelumnya. Karena posisi sampel dijelaskan oleh nilai bilangan bulat, kami cukup membulatkan angka yang sesuai ke bilangan bulat terdekat dan menggunakannya. Hal terpenting di sini adalah untuk mencegah kesalahan pembulatan terakumulasi,karena ini akan menyebabkan posisi pengambilan sampel dengan cepat keluar dari fase sehubungan dengan gelombang suara. Dan jika perpindahan serupa terjadi selama decoding gambar, meskipun kecil, gambar yang sudah jadi akan diisi dengan artefak.
Gambar penuh dengan artefak
Untungnya bagi saya, jumlah sampel per gelombang cukup stabil. Itu tidak berubah setelah perangkat dihangatkan, meskipun saya khawatir ini bisa menjadi masalah. Stabilitas ini memungkinkan saya untuk membuat kode keras nilai yang sesuai dalam kode decoding gambar. Idealnya, jumlah sampel per gelombang harus dipelajari dari judulnya, tetapi saya menemukan bahwa sampel tidak cukup untuk mencapai akurasi 5 tempat desimal. Dan nilainya, dengan kode keras, memungkinkan untuk mencapai hasil yang stabil. Berkat implementasi yang lebih akurat dari sistem decoding sinyal ini, jeda baris hanya dilakukan setelah fungsi yang menghasilkan 1 piksel dipanggil 96 kali.
Sejauh ini saya telah bekerja dengan cuplikan audio yang direkam sebelumnya yang diterjemahkan dari file WAV. Untuk bekerja secara interaktif dan memecahkan kode gambar yang memasuki antarmuka audio komputer, decoder harus dilengkapi dengan kemampuan untuk mendeteksi header dan menemukan awal data gambar. Jika melihat headline-nya, ternyata ada tiga fragmen yang bisa dibedakan dengan jelas di dalamnya.
Analisis Header: Carrier - Silence - Carrier
Untuk mendeteksi ini, saya menerapkan detektordan mesin statusberbasis FFT sederhana. Bahan sumber diproses terlebih dahulu, kemudian detektor memeriksa setiap blok sinyal audio hingga menemukan sinyal 1747 Hz yang kuat. Blok tersebut kemudian diperiksa hingga menemukan tempat di mana sinyal menghilang dan kemudian muncul kembali. Ini berarti menemukan momen untuk memulai transmisi. Setelah itu, offset statis sederhana digunakan untuk mencari waktu mulai transmisi data gambar, dan mekanisme di atas diterapkan untuk memecahkan kode gambar. Setelah decoding selesai, gambar ditampilkan dan mesin status disetel ulang ke keadaan semula dan menunggu transmisi berikutnya dimulai.
Langkah 3. Mempresentasikan VisiTel sebagai webcam
Sekarang setelah kami dapat memecahkan kode gambar yang diterima dari VisiTel, potongan terakhir teka-teki kami tetap di tempatnya. Kita perlu menyajikan gambar yang diterjemahkan dalam bentuk bingkai video dan mengirimkan aliran video ke program konferensi video. Ini sangat mudah di Linux. Input video diabstraksi menggunakan antarmuka V4L2, tetapi sayangnya hal ini terjadi di ruang kernel. Agar tidak terlibat dalam kerumitan pembuatan modul kernel, Anda dapat menggunakan solusi siap pakai - v4l2loopback... Modul ini merupakan perangkat masukan dan perangkat keluaran. Input grafis yang diteruskan menjadi output yang dapat diterima oleh program lain seperti Zoom. Bahkan ada paket Python yang mengabstraksi semuanya lebih jauh, memungkinkan Anda untuk bekerja dengan jenis data ini menggunakan OpenCV dan NumPy. Saya menggunakan salah satu paket ini -
pyfakewebcam
. Ini fitur antarmuka yang sangat sederhana. Untuk membuat webcam virtual, cukup lakukan hal berikut:
import
pyfakewebcam
self.camera
=
pyfakewebcam.FakeWebcam(self.v4l2_device, 640, 480)
Dan saat Anda menerima bingkai baru, Anda perlu melakukan ini:
self.camera.schedule_frame(output)
Sekarang, setelah penambahan decoder kecil ini, semuanya bekerja sebagaimana mestinya. Zoom dapat menerima gambar dari VisiTel, dan kami dapat mengatur obrolan video dengan gaya 1980-an.
Obrolan video dengan semangat tahun 1980-an
Saya juga ingin menginstal driver Direct Rendering Manager Linux, yang memungkinkan tidak hanya menerima gambar dari VisiTel, tetapi juga menampilkannya. Tetapi untuk saat ini, untuk mengenali proyek ini sebagai keberhasilan, cukup bagi saya bahwa saya dapat berkomunikasi dalam Zoom menggunakan perangkat dari tahun 1988. Di sini , jika Anda tertarik, adalah kode proyek di GitHub.
Sudahkah Anda mencoba memberikan kehidupan kedua ke beberapa perangkat dari masa lalu?