Чем развлечься в самоизоляции, или передаем данные с помощью звуковой карты

Привет Хабр.

После недавней публикации про передачу OFDM, стало интересно проверить, каким способом эффективнее всего передавать данные по воздуху. Мы попробуем разные виды модуляции, и посмотрим какие из них лучше подойдут для передачи данных из одного конца квартиры или офиса в другой. Для тестов будет достаточно ноутбука, смартфона и программы MultiPSK.

y7f-ttteoka8sd8976clugimirc.png

Для тех кому интересно как это работает, продолжение под катом.

Для тестов мы воспользуемся программой MultiPSK, которая удобна тем, что поддерживает огромное количество разных стандартов связи, как любительских (они доступны как на прием, так и на передачу), так и профессиональных (доступен только прием). Разумеется, чтобы не делать статью гигантской, я выберу лишь наиболее популярные виды модуляции, и мы посмотрим что из этого получится. Изначально MultiPSK предназначена для радиосвязи, для чего звуковая карта должна подключаться к приемнику или передатчику, но ничего не запрещает воспроизводить сигнал прямо из колонок. Тест будет будет довольно простым — простой текст »1234567890» кодируется разными способами, сигнал проигрывается на ПК, и записывается смартфоном в другом конце квартиры. Разумеется, повторить нижеописанные опыты может любой желающий, никакого специального оборудования для этого не требуется.

Let’s get started.

Частотная модуляция (FSK, Frequency Shift Keying)


Как нетрудно догадаться из названия, суть модуляции заключается в изменении частоты сигнала. Простейший способ, доступный в MultiPSK, это RTTY. В данном случае мы передаем данные с помощью переключения между двумя частотами с определенной скоростью. На спектре это видно весьма наглядно. Посмотрим, что происходит с сигналом при его передаче по воздуху. Сверху исходный сигнал, снизу принятый:

wezwmk0ykmn63qx99ikuh5gdg68.png

Помимо очевидного затухания, есть более неочевидное изменение амплитуды — сигнал стал «рваным», на выходе получилось что-то вроде биений. Интересно то, что проявляются они в моменты смены частоты, в моменты когда частота не меняется, изменения амплитуды минимальны. С чем это связано, сказать сложно.

Кстати о спектре, он исказился, хотя в принципе, форму сигнала угадать можно:

chlnwi9dxod5zdh3uxfbie6zey8.png

Посмотрим, сможет ли MultiPSK декодировать записанный звук. Увы, нет, на выходе лишь «мусор». Разные попытки нормализации и фильтрации к успеху также не привели:

xuc1ujloouaoe1_tkxocsn7fw4i.png

Следующий сигнал, который интересно попробовать — MFSK, частотная модуляция, в которой количество частот больше 2х. Картинка «до» и «после» передачи примерно похожа на предыдущий результат.

y95mgqusdxarodhjwx6iwr8fark.png

Мы также видим биения амплитуды, возникающие вероятно, в процессе переотражения звука. Но есть заметный плюс — при большем количестве частот, декодирование сигнала происходит гораздо увереннее. За исключением «мусора» в паузе между сигналами, сами данные принимаются без ошибок.

w8gw6xjlnux8amgjecdvvuqnppk.png

Возможно, это также связано со скоростью передачи или другим алгоритмом декодирования, но результат довольно-таки интересен.

Фазовая модуляция (PSK, Phase Shift Keying)


Следующий вид модуляции — фазовая, при которой передается синусоидальный сигнал, а информация кодируется изменением фазы.

kx-nl18gvufrtnnqgikva_uquow.png

Сигнал BPSK «до» и «после» передачи:

udhza8-ed9_1zc_1wkrrqihcwmk.png

Результат распознавания: определилось где-то 20–40% символов, из строки 1234567890, как можно видеть, можно различить 3, 4, 7 и 9.

f7rnlay8hqwg-ionpk0daxpgyly.png

Спектр не показан, т.к. для фазовой модуляции BPSK он представляет собой практически прямую линию.

Общая идея, я думаю, понятна, и более сложные виды сигналов рассматривать смысла нет — понятно что устойчивого декодирования не будет. Однако, чисто для «спортивного интереса», рассмотрим аналоговый сигнал.

SSTV (Slow Scan Television)


Этот режим по своей сути напоминает факс, и изменение частоты здесь кодирует яркость или цвет картинки во времени. Интересно посмотреть, насколько исказится изображение после передачи, и останется ли оно читабельным.

Сигнал «до» и «после»:

cnxtfkbkcfa6mbwdfsabgm2zv38.png

Картинка с котиком, и попытка её приема:

aut6u66slna9nz82qyfrjbd8iko.png

При должной фантазии, контур котика наверное можно угадать. Хотя если передавать что-нибудь попроще, типа «черного квадрата», наверное распознать изображение будет легче. Кстати, в этом один из плюсов аналоговой передачи данных перед цифровой — там где «цифра» уже перестанет работать, в аналоге, среди шумов, человеческий глаз или ухо вполне может уловить полезный сигнал.

Заключение


Как можно видеть, передача звука по воздуху (как наверное и через воду), это не так уж просто, из-за переотражений, затуханий и прочих эффектов. Несмотря на кажущуюся «несерьезность» задачи, надежно передать данные даже на 10 метров не так-то просто из-за искажений сигнала. Метод частотной модуляции MFSK оказался самым стабильным. И похоже, аналогичные опыты проводил не только я, статья о протоколе активации Яндекс-станции говорит о том, что в ней используется такой же метод передачи данных. Ну, а в целом, чем проще модуляция и меньше скорость, тем больше шансов, что данные будут приняты без ошибок.

Желающие могут дальше поэскпериментировать самостоятельно, программу MultiPSK легко найти в интернете, количество поддерживаемых ею стандартов передачи довольно велико.

Всем удачных экспериментов.

© Habrahabr.ru