[Перевод] Декодирование сигнала с видеофона 1988 года выпуска
В наши дни можно легко связаться по видеосвязи практически с любой точкой мира. Но потребовалось много времени, чтобы технология достигла такого уровня. Я покажу, какие решения использовали инженеры в 1988 году, чтобы вы могли не только говорить, но и видеть своего друга или партнера во время разговора.
Однажды я увидел на YouTube обзор Sony PCT-15 — это устройство, сделанное в Японии, подключалось к обычной телефонной линии и позволяло не только разговаривать с собеседником, но также отправлять и получать изображения во время разговора. В то время высокоскоростная связь была доступна только для учреждений, военных и правительства, поэтому телефонная линия была единственным возможным способом связи с миром:
Источник Popular Photography 1988Как это работает? Давайте разберемся.
Декодирование
Видеообзор был опубликован на YouTube-канале Techmoan, который специализируется на ретро-устройствах. Но примечательным для меня был тот факт, что передача данных была слышна на видео. Я просто сохранил сигнал в WAV и решил проанализировать его с помощью Python.
Давайте сначала проверим форму сигнала:
import scipy.io.wavfile as wav
import scipy.signal as signal
import matplotlib.pyplot as plt
import numpy as np
fs, data = wav.read('videophone.wav')
plt.rcParams["figure.figsize"] = (20,6)
time = np.linspace(0, len(data) / fs, num=len(data))
plt.plot(time, data)
plt.xlabel("Time, sec")
plt.ylabel("Amplitude")
plt.title("Signal")
plt.show()
Сигнал в начале, вероятно, используется в качестве триггера для начала приема. На волновой форме мы также можем видеть серию «пиков»:
Проверим сигнал в частотной области:
plt.specgram(data, NFFT=1024, Fs=fs)
plt.title("Spectrum")
plt.xlabel("Time, sec")
plt.ylabel("Frequency")
plt.show()
Примечательно, что все данные передаются в полосе частот 1–3 КГц, которая была оптимальной для аналоговой телефонной линии:
Теперь вернемся к осциллограмме сигнала. Я могу предположить, что каждый «пик» представляет одну строку изображения, а данные передаются в аналоговой форме:
Это был стандартный подход для аналогового телевидения в 80-х годах. Давайте увеличим один «пик». Очевидно, что это амплитудная модуляция. Я предполагаю, что она кодирует яркость, и это легко проверить. Сначала применим к данным преобразование Гильберта:
def hilbert(data):
analytical_signal = signal.hilbert(data)
amplitude_envelope = np.abs(analytical_signal)
return amplitude_envelope
data_am = hilbert(data)
plt.plot(time, data_am)
После преобразования мы получаем огибающую сигнала (желтая линия):
Как я уже писал, сигнал, вероятно, кодируется яркостью — из спецификации устройства мы знаем, что Sony PCT-15 имеет монохромный экран, и одного канала яркости должно быть достаточно. Легко поместить одномерные данные на двухмерное изображение и посмотреть результат.
frame_width = 1211
w, h = frame_width, data_am.shape[0]//frame_width
image = Image.new('RGB', (w, h))
px, py = 0, 0
for p in range(data_am.shape[0] - 1):
lum = int(data_am[p]//128)
if lum < 0: lum = 0
if lum > 255: lum = 255
image.putpixel((px, py), (lum, lum, lum))
px += 1
if px >= w:
px = 0
py += 1
if py >= h:
break
image = image.resize((w//2, 4*h))
plt.imshow(image)
plt.show()
После выполнения кода мы можем увидеть закономерность:
Мне неясно, как работает синхронизация строк в реальном устройстве, я могу предположить, что PCT-15 использует заголовок данных для начала приема изображения. Формат заголовка мне неизвестен, поэтому я просто подправил параметр frame_width вручную в исходном коде.
И наконец, мы можем получить изображение:
Цифры 0…250 на изображении являются «виртуальными», они зависят только от частоты дискретизации записанного аудиофайла. Как мы знаем из спецификации, реальное разрешение изображения составляет всего 96×100, но устройство также может передавать изображения в режиме «высокого разрешения» 160×100. Я просил Techmoan в комментариях к видео поделиться образцом WAV «высокого разрешения», но владелец канала с количеством зрителей >1М не считает нужным отвечать на вопросы подписчиков, поэтому это единственный образец, который у меня есть. В любом случае, этого достаточно, чтобы оценить качество изображения.
Заключение
Было интересно проанализировать данные и посмотреть, что было «передовой» технологией в конце 80-х годов. Тогда не было ни Skype, ни WhatsApp, а скорость модемной линии составляла около 2400–14400 бит (не мегабит:) в секунду, что было явно недостаточно для «нормального» видеозвонка. А таких устройств, как «веб-камеры», вообще не было, их просто еще не изобрели. Поэтому инженеры Sony решили использовать для передачи и приема изображения аналоговую телевизионную передачу с низкой скоростью. Как мы видим, время передачи составляет около 6–10 секунд на изображение, что, очевидно, достаточно только для неподвижных изображений, но это было лучше, чем ничего — особенно для людей, живущих в разных странах или городах, это могло быть единственным способом видеть друг друга в «почти» реальном времени.
Я не знаю, были ли продажи Sony PCT-15 успешными в 80-х годах. Первая веб-камера была представлена позже, в 1994 году, так что вполне возможно, существовал маркетинговый спрос со стороны людей, которые хотели видеть друг друга в то время, когда цифровые и веб-камеры еще не были доступны. С другой стороны, черно-белое изображение с разрешением 160×100, которое передается примерно за 10 с, звучит не очень здорово даже для 80-х годов. В любом случае, совершая видеозвонок со смартфона на отдыхе, приятно вспомнить, как зарождалась эта технология, и проникнуться уважением к инженерам и ученым, которые сделали ее простой и возможной.
Как мы видим из статьи, для декодирования «передовой» технологии конца 80-х годов, использовался современный язык программирования Python. В OTUS вы можете изучить не только Python, но и другие популярные языки программирования, а также пройти курсы по инфраструктуре, тестированию, базам данных, управлению, информационной безопасности и еще ряду направлений. Прямо сейчас на нашем сайте действуют летние скидки, поэтому приглашаем вас ознакомиться с предложением по ссылке ниже.
https://otus.pw/3tkp/ПОСМОТРЕТЬ СПЕЦИАЛЬНОЕ ПРЕДЛОЖЕНИЕ