Dmitrii Eliuseev Decodes a Sony PCT-15 Video Phone Signal in Python — From a YouTube Review

Python proves perfect for attacking the height of 1980s communications technology: a Sony video phone.

IoT developer Dmitrii Eliuseev has written up his project to decode the signals from a 1988 Sony PCT-15 video phone — using the audio signal from a YouTube video as his source.

"Once I saw a YouTube review of Sony PCT-15," Eliuseev explains. "This device, made in Japan, was connecting to an ordinary telephone line and allowed not only to talk with another person but also to send and receive images during the call. At that time the high-speed communication was available only for institutions, the military and government, so the telephone line was the only possible way to be connected to the world."

Eliuseev's analysis of the PCT-15 video phone's used audio captured in a video review of the device. (📹: Techmoan)

"The video review was published on Techmoan's YouTube channel, which is specialized in retro devices. But the remarkable [thing] for me was the fact that the data transmission was audible in the video. I just saved the signal in WAV and decided to analyze it using Python."

Eliuseev's analysis began with a simple piece of Python designed to display the audio as a waveform. A series of spikes are visible, which on a spectrogram show as data being transmitted in 1-3kHz of bandwidth — "optimal," Eliuseev adds, "for the analog phone line."

Having guessed that each spike represents one image row and that, given the age of the device, the data is likely in analogu format, Eliuseev compared the signal to that used for analog TV transmission: Amplitude modulation. Applying a Hilbert transform, Eliuseev obtained the signal envelope then ascertained that the signal was brightness encoded — though the resulting image was garbage due to a lack of synchronization.

"It is unclear to me how the lines synchronization works in the real device," Eliuseev admits, "[but] I can guess that the PCT-15 is using the data header to start the image reception. I don’t know the header format, so I simply adjusted the frame_width parameter manually in the source code. And finally, we can get the image."

The full write-up, with Python code, is available on Eliuseev's Medium post.

Gareth Halfacree
Freelance journalist, technical author, hacker, tinkerer, erstwhile sysadmin. For hire: freelance@halfacree.co.uk.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles