Пролог
В сообществе уже был текст про то как звуком передавать данные. Однако там была FSK.
Можно вообще взять микросхему DTMF декодера MT8870 и принимать по 4 бита за раз полностью аппаратно.
В этом же тексте я попробовал исследовать возможность передачи бинарных данных звуком через BPSK модуляцию (она же ФМн-2, она же QAM-2). Почему именно BPSK? Дело в том что эта модуляция очень распространена и обладает хорошим шумоподавлением. Потом BPSK модуляция прямо сейчас буквально пронизывает наши тела, каждый день, так как BPSK сигнал - это физический интерфейс, который испускают GPS спутники. Также BPSK якобы используется в WiFi и Sigfox. Плюс BPSK поддерживают некоторые ASIC трансиверы, например MAX2900, MAX2769. В общем, есть причины, чтобы понять как это работает.
BPSK модуляция это способ передавать бинарные данные на высоких частотах. Пришла эта тема из радиоэлектроники. Радо возможно передавать только на высоких частотах. В радио чем выше частота несущей, тем меньше нужна антенна. Однако ничто не запрещает использовать BPSK модуляцию и в волнах другой природы. Например в звуке, оптике или вовсе в коаксиальном кабеле. Со стороны ЦОС и SDR обработки, что радио, что звук, что интенсивность света, что напряжение - всё не имеет никакого значения. В RAM памяти есть массив знаковых семплов и надо его обработать.
Зато записывать и воспроизводить звук намного дешевле, проще и удобнее, чем радиоволны. Вы где-нибудь видели диктофоны для радиоволн? А звуковые диктофоны присутствуют в любом мобильном телефоне + проигрыватель аудио файлов. В том числе и самых простых - *.wav файлов.
Постановка задачи
Декодировать BPSK из записи звука на диктофоне.
Теория
Все эти модуляции (ASK, OOK, BPSK, FSK, 256-QAM, CSS, GFSK, MSK) можно отнести к интерфейсам физического уровня модели OSI-7, так как модуляции поясняют как именно передаются биты в физической среде. BPSK тоже можно рассматривать как интерфейс физического уровня.
Какие есть параметры у BPSK сигнала?
№ |
Параметр |
Единица измерения |
1 |
несущая частота |
Hz |
2 |
амплитуда несущей |
PCM |
3 |
длительность одного чипа |
секунды (микросекунды) |
4* |
Частота дискретизации |
Hz |
5 |
порядок бит при упаковке байта внутри BPSK сигнала |
младшим битом вперёд / старшим битом вперед |
6* |
Разрядность одного семпла |
bit |
Вот так выглядит BPSK сигнал в частотной области. Br - это битовая скорость.
При понижении Br битовой скорости BPSK вырождается в синус. Поэтому при уменьшении битовой скорости ширина сигнала сужается. При повышении битовой скорости BPSK спектр расширяется.
chip (чип) - это минимальный фрагмент BPSK сигнала, где фаза несущей частоты не меняется. Фактический в BPSK чип это один бит данных.
Что надо из софта?
№ |
Название программы |
Назначение |
1 |
Audacity |
Редактор звуковых файлов |
2 |
Voice Recorder (Android) |
Диктофон для смартфонов, способный записывать в *.wav файлы. |
3 |
VLC media player |
Проигрыватель аудио файлов на PC |
4 |
GCC Toolchain |
Компилятор, компоновщик, для сборки консольной утилиты, которая декодирует BPSK данные из *.wav файла. |
Реализация
Модуляция BPSK (Encode)
Прежде всего я синтезировал *.wav файл который содержит бинарные данные 0x55aa которые закодированы BPSK модуляцией. Почему именно wav? Да потому что это самый простой формат аудиофайлов. Это просто массив int(ов) упакованный в бинарный файл с прикрепленной спереди преамбулой (заголовком). Заголовок содержит все необходимые метаданные про этот звуковой трек: частота дискретизации, размер семпла, количество каналов.
Вот он перед вами. Как можно заметить это самая настоящая BPSK модуляция.
На слух звучит такой сигнал как работающий насос для колодца.
Я закинул *.wav файл через мессенджер себе на смартфон и стал воспроизводить *.wav обыкновенным музыкальным проигрывателем из-под Android смартфона.
Демодуляция BPSK сигнала (Decode)
В технических системах принять, что бы то ни было всегда много сложнее, чем что-то отправить. Кинуть мяч проще, чем его поймать. UART приёмник намного сложнее UART передатчика. Так и тут в модуляциях приёмники намного сложнее передатчиков. Тем не менее надо декодировать принятый BPSK сигнал.
Прежде чем кидаться декодировать BPSK семплы надо подсказать декодеру на какой несущей частоте мы будем искать сигнал и какая битовая скорость в данном потоке. В случае с SDR также указать частоту дискретизации ADC.
Каков план?
Классической электрической цепью для демодуляции BPSK сигнал является Costas Loop. Вот он перед вами.
Costas Loop - это система автоматического регулирования (привет ТАУ). Её задача управлять фазой гетеродина, чтобы она непрерывно соответствовала фазе входного сигнала. Особенность гетеродина Costas Loop в том, что тут можно регулировать фазу несущей частоты. У фазы тут главная роль.
Достоинство Costas Loop в том, что он саморегулируемый. Передатчик можно даже двигать, а схема Costas Loop сама подстроится под новую фазу приходящего сигнала. Каждый новый семпл подстраивает фазу гетеродина. Теоретически Costas Loop можно собрать даже из аналоговых компонентов.
Тем не менее, эта цепь с непривычки может показаться сложной. Далее небольшой комментарий по схеме.
Фаза 1: Перемножение
На первой стадии поступающий BPSK сигнал на несущей 1kHz разделяется на две копии и каждая перемножается на косинус и на синус версию сигнала с гетеродина. Частота гетеродина тоже 1kHz как и частота несущей. Это работа квадратурного смесителя.
Фаза 2 Удаление высокочастотной составляющей
Как известно из школьной тригонометрии перемножение синуса на косинус дает высокочастотное слагаемое. Его надо отбросить. У меня в SDR реализации это производится цифровым FIR фильтром 200го порядка. В качестве частоты среза я выбрал удвоенную битовую скорость BPSK. В данном случае это 200 Hz
Фаза 3: Выделать фазовую ошибку (фазовый дискриминатор).
Измерить фазу ошибки между входным сигналом и гетеродином можно аж тремя способами.
a) Измерение фазы арксинусом
Благодаря тому, что мы смешиваем сразу с двумя версиями гетеродина, мы получаем фазовую ошибку сигнала по отношению к гетеродину. Ошибка получается численно. Понятно, что надо сконфигурировать этой фазовой ошибкой сигнал самого гетеродина. При этом можно заметить, что в Costas Loop(е) чистые данные снимаются с real плеча I. А это значит, что там внутри синус всегда должен обращаться в единицу. Синус обращается в 1 только при 90 градусах (при pi/2). Поэтому после обработки каждого семпла надо в фазу гетеродина присвоить новую фазу: фаза ошибки + pi/2. При этом фаза ошибки считается аналитический формулой с арксинусом.
Однако минус этого способа в том, что входной сигнал должен быть нормализованным. То есть его амплитуда всегда была 1. Однако на практике такого никогда не бывает. Из микрофона сигналы приходят с шумами. Поэтому такой способ я не буду использовать.
b) Измерение фазы арктангенсом
Ошибку можно измерять функцией atan2(). Причем ошибку по фазе надо интегрировать перед тем как присвоить гетеродину. Так интерактивно и получится горизонтальное сигнальное созвездие. Такой регулятор будет прижимать вектор (I,Q) в ближайшую сторону чтобы получить горизонтальное созвездие.
b) Измерение фазы углом между векторами
Ошибку по фазе можно определить при помощи линейной алгебры. По сути надо найти угол между вектором, который лежит на оси x (1, 0, 0 ) и вектором, который образуется на выходе квадратурного смесителя (I, Q , 0).
Из-за шума ошибка по фазе может изменяться с очень высокой частотой. Даже если источник изначально статический. Поэтому ошибку фазы следует пропустить через ещё один фильтр нижних частот (FIR или IIR). Также надо управлять фазой гетеродина через PID регулятор. Пропорциональный коэффициент обычно получается на 2 порядка меньше 1. Интегральный коэффициент можно сделать около единицы.
Фаза 4: Компаратор
После фильтра на проводе I данные всё еще аналоговые. Наша же цель снять бинарные данные. Для этого надо пропустить сигнал с провода I_Filt через компаратор. А лучше даже для подстраховки пропустить через триггер Шмитта. Это будет ещё один своеобразный фильтр.
Фаза 5: Выделить биты данных
Однако выход компаратора это всего лишь четкая картинка. Для софта верхнего надо выделить именно биты с данными. Сейчас ситуация такова, что на один бит приходится 441 семплов ADC сигнала.
Поэтому надо выполнить так называемую децимацию (Downsampling). Из N семплов оставить один. Такая задача идеально решается конечным автоматом. Вот граф конечного автомата прореживания.
Как только счетчик принятых единиц (или нулей) досчитает до определенного количества семплов samples_per_bit, конечный автомат прореживания выдаст сигнал, что распознан бит (1 или 0).
Фаза 6: Выделение байтов
На выходе демодулятора BPSK мы получаем только поток битов, которые изначально были наложены на несущую частоту.
Каким образом можно снять сами данные и сформировать из них байты? Поиск начала байта - это уже задача какого-то протокола канального уровня. Как вариант можно вводить что-то похожее на преамбулу начала пакета и парсить её из бинарного потока. Но это уже не касается BPSK.
Отладка
Любая разработка начинается только тогда, когда появляются средства отладки. Отлаживать BPSK декодер (как и любую другую модуляцию) принято при помощи графиков сигнальных созвездий. В идеале диаграмма BPSK должна быть в виде двух кластеров (скоплений) на оси X [она же ось I, она же действительная часть, она же выход cos()*signal()] равноудалённых от начала координат.
Вот пример одного реального сигнального созвездия. Как по мне это весьма причудливо выглядит.
Отладка на рафинированном файле
Прежде чем кидаться декодировать аудио файл с диктофона надо сперва подать на BPSK декодер просто чистый рафинированный массив семплов BPSK сигнала без какого бы то ни было шума. Надо убедиться, что мой SDR алгоритм написанный на чистом Си вообще работает в этих тепличных условиях.
При разных настройках порядка FIR фильтра сигнальное созвездие может принимать причудливые формы.
Даже если нормализовать входной сигнал пропустив через функцию sign, то всё равно выделяются биты с данными
Это сигнальное созвездие без нормализации входного сигнала при выделении фазы при помощи функции atan().
Пропустив отфильтрованный I сигнал через компаратор 0/1, я получил вот такой сигнал. Он в точности соответствует тому самому бинарному сообщению 0x815F, которым был промодулирован исходном BPSK сигнал.
Это значит, что сама по себе реализация Costas Loop работает. Вот отчет, что мой модульный тест на BPSK encode decode успешно проходит.
Такие получились осциллограммы основных переменных цепи, I, Q, фаза гетеродина и сами данные.
Проверка на реальной записи с диктофона
Я программно сгенерировал *.wav файл, который непрерывно и циклически передаёт только одно слово 0x55AF на несущей звуковой частоте 1kHz. Вот так выглядит BPSK сигнал на диктофонной записи. На глаз даже и на скажешь, что это фазовая модуляция.
Затем я воспроизвел этот *.wav файл на одном мобильном телефоне и записал диктофоном на другой телефон. Затем, записанный *.wav я подал, как аргумент своей консольной утилите bpsk_demodulator.exe и она сумела выделить биты данных! Вот такое получилось сигнальное созвездие.
Пятно в центре - это пауза между сигналами. А это декодированный звук. Как можно заметить, битовая скорость была поставлена 16 бит/с.
Можно заметить, что данные 0x55AF извлекаются. Хотя изначально система управления даже захватила инвертированные биты. Как с этим бороться пока не ясно. Видимо это задача протокола канального уровня. Однако в общем, можно сказать, что всё получилось. Байты передаются и принимаются через звук!
Дальнейшее развитие
--Можно повышать битовую скорость и попытаться понять предел пропускной способности. Пока мой рекорд 50 bit/s на расстоянии 1 метр.
На битовой скорости 50 bit/s сигнальное созвездие вырождается в какое-то газовое облако.
--Было бы здорово сделать FPGA или даже ASIC, который в реальном времени сможет декодировать акустический BPSK и выдавать в SPI сырые данные m(t), которые он снял из BPSK сигнала. Проблема в том что каждый семпл надо успеть рассчитать за 1/44100Hz = 22.676 us. Самое ёмкое в вычислениях это два FIR фильтра нижних частот порядка 100...200.
--Можно вообще в одном *.wav файле записать несколько каналов BPSK на разных несущих частотах.
--Можно даже попробовать запустить этот алгоритм на микроконтроллере. Однако тут придется решить вопрос как сделать цифровой фильтр низких частот высокого порядка способный работать в реальном времени.
--Всё это позволит встраивать функцию акустических трансиверов в мобильные телефоны передавать файлы, текст, настройку часов, контакты прямо по звуку. Можно было бы и вовсе обновлять прошивку звуком. В диктофонах без USB передавать файлы на PC модулированным звуком. Как по мне это было бы здорово.
--Ещё можно сделать гидроакустический трансивер для передачи бинарных данных под водой.
--Можно к диктофонным записям подмешивать едва слышные цифровые данные, а затем при помощи софта на PC извлекать из звука метаданные: идентифицировать оборудование, геолокацию или time stamp(ы).
--Это можно преподавать в институтах ЦОС и радиотехнику на примере обработки звука. Разбор модуляций из сырого сигнала. Как по мне это веселее, чем бездумно запускать примеры из MATLAB или ещё хуже в LabView. Те SDR алгоритмы, которые Вы напишете на Си можно будет встроить куда угодно: в микроконтроллерные прошивки, в ядро OS, в user spaсe на PC.
Итоги
Удалось научиться декодировать BPSK из wav файла. Как видите тема достаточно объёмная. Тут и ТАУ, цифровые фильтры, ПИД регуляторы, конечные автоматы, преобразование Фурье, тригонометрия, комплексные числа, радиотехника, триггер Шмитта, программирование на Cи и Python, метрология. Далее помехоустойчивое кодирование, протоколы и прочее и прочее.
Понимание процесса демодуляции BPSK модуляции например открывает дорогу для декодирования навигационных данных внутри GPS сигнала.
Теперь и вы умеете работать с BPSK и можете учить других.
Ссылки
Словарь
Акроним |
Расшифровка |
PSK |
phase-shift keying |
OSI-7 |
Open Systems Interconnection |
GPS |
Global Positioning System |
SDR |
Software Defined Radio |
BPSK |
Binary Phase Shift Keying |
Вопросы:
--Как в декодированном BPSK потоке семплов найти начало бита, если уже долгое время передаются только нули (или только единицы)?
--Как бороться с тем, что в BPSK модуляции данные можно интерпретировать и принять как инвертированные биты? Как выявить последовательность инвертированных бит?
--Как в потоковом режиме нормализовать (привести к единичной амплитуде) синус разной переменной амплитуды без искажения частоты и желательно фазы?
Комментарии (37)
onegray
07.10.2024 15:48+2Спасибо, интересный эксперимент!
Про отличия BPSK я бы сказал иначе - она лучше по "качеству", но сложнее в декодировании.
inkelyad
07.10.2024 15:48+1Зато записывать и воспроизводить звук намного дешевле, проще и удобнее, чем радиоволны.
...
Декодировать BPSK из записи звука на диктофоне.
...
Затем я воспроизвел этот *.wav файл на одном мобильном телефоне и записал диктофоном на другой телефон.
Я совершенно профан в низком уровне (когда частоты, фазы и связанная математика начинают фигурировать - мне описания цифровых режимов от любительского радио хватает, чтобы погрустнеть) - но мне казалось, что именно с Phase Shift в звуке - некоторые проблемы. Микрофоны несколько плохо к такому издевательству относятся. Я неправ?
И смена фазы разве не создает существенные помехи на частоте кратной битовой скорости? Для слышимого аудио (300Гц-20000кГц) это уже существенно - всю начальную часть спектра можно забить и сделать непригодной для использования в протоколе?
Uint32
07.10.2024 15:48+2Интересная работа. Правда на мой взгляд не плохо было бы дополнить кодом для наглядности.
Интересно посмотреть на спектр управляющего сигнала LO на реальной передаче.
Были ли попытки поднять частоту несущей, например до fs/4?
Вместо FIR применить IIR
NutsUnderline
07.10.2024 15:48+3Разжевано все очень неплохо, но некоторые моменты напрягают.
что касается практических применений то в первую очередь вспоминаются программы для компов 80х-90х записанные на кассетные магнитофоны. Там, правда, модуляция и обработка попроще была. Ну и в общем то модемы для аналоговых линий. Те кто наслушался этих звуков может ностальгически и оценят передачу данных динамиком и микрофоном, но песни эти не слишком музыкальны. (Гораздо) более выскокочастотные сигналы и органы чувств не раздражают и работают быстрее.
Но вообще первое что мне это напомнило - эксперименты по преодолению airgap для передачи данных вирусами с особозакрытых систем. там и pcspeaker предлагают использовать, и управлять шумом вентиляторов, и даже писком дросселей...
strvv
07.10.2024 15:48+1Почему и есть куча ограничений на защищаемые помещения и технику. Не говоря даже о выделенных. Там вообще мрак.
Moog_Prodigy
07.10.2024 15:48+2--Было бы здорово сделать FPGA или даже ASIC, который в реальном времени сможет декодировать акустический BPSK и выдавать в SPI сырые данные m(t), которые он снял из BPSK сигнала. Проблема в том что каждый семпл надо успеть рассчитать за 1/44100Hz = 22.676 us. Самое ёмкое в вычислениях это два FIR фильтра нижних частот порядка 100...200.
И вот тут плата от ASIC Antminer, про которую недавно была статья, впишется идеально по характеристикам! Мощная SoC, FPGA, куча интерфейсов.
MShekunov
07.10.2024 15:48+1К вопросам нужно добавить эффект Допплера.
И вообще, ЛЧМ надёжнее, наверное, будет.
Altair55
07.10.2024 15:48+1Как в декодированном BPSK потоке семплов найти начало бита, если уже долгое время передаются только нули (или только единицы)?
Вставкой битов. Гуглить битстаффинг
--Как бороться с тем, что в BPSK модуляции данные можно интерпретировать и принять как инвертированные биты? Как выявить последовательность инвертированных бит?
Использовать относительно фазовую манипуляцию
--Как в потоковом режиме нормализовать (привести к единичной амплитуде) синус разной переменной амплитуды без искажения частоты и желательно фазы?
Домножить каждый сэмпл на коэффициент.
А вообще, конечно, автору надо читать Прокиса и Скляра. Подход к вопросу очень наивный. Хотя успехи впечатляют. Автор, ты молодец, ежели сам такое наизобретал - голова хорошо работает.
aabzel Автор
07.10.2024 15:48Домножить каждый сэмпл на коэффициент.
Вот только откуда узнать какой именно коэффициент будет?
Чтобы это понять надо весь период сначала принять, найти максимум и вычистить какой получится коэффициент для этого конкретного периода.
И так свой коэффициент на каждый период. Даже на шум.Altair55
07.10.2024 15:48+1Да не надо арксинус использовать. Почитайте про реализации радиолюбительского PSK-31, там достаточно подробно расписаны все этапы. И книжка Окунева про фазоманипулировпнные сигналы тоже очень хороша. Наиболее внятный результат даёт детектор максимального правдоподобия - у Окунева хорошо описано. Про синхронизации у Nezami нормально расписано.
aabzel Автор
07.10.2024 15:48надо читать Прокиса и Скляра.
Вот эти?
--> Джон Прокис. Цифровая связь (2000) (1151856)--> Бернард Скляр: Цифровая связь. Теоретические основы и практическое применение
https://www.labirint.ru/books/520987/Altair55
07.10.2024 15:48+1Да.
И вот эту ещё
https://f.eruditor.link/file/457548/
Nezami
RF Architectures and Digital Signal Processing Aspects of Digital Wireless Transceivers
Ю.Б. Окунев, Цифровая передача фазомодулированными сигналами, М, Радио и Связь, 1991
des00
07.10.2024 15:48Упорство конечно похвально. Но зачем заниматься разработкой модема в слепую? Учебник по связи незами, там, в нескольких главах описано как правильно делать когерентый демодулятор: согласовнная фильтрация, восстановление несущей, символьной частоты, синхронизация потоков данных и т.д. И вот как раз базовые модели модемов в симулинке, от модемных гуру, доступные в сети в этом очень хорошо помогают)
aabzel Автор
07.10.2024 15:48Учебник по связи незами
Вы ничего не путаете? Автор c фамилией Незами ?
des00
07.10.2024 15:48Не путаю, на этой книге выросло не одно поколение модемщиков. Легко гуглится по ключевым словам Nezami Rf Architectures и бла бла бла.
des00
07.10.2024 15:48Не путаю. На этой книге выросло не одно поколение модемщиков. Гуглить по ключевым словам Nezami Rf Architectures
iliasam
"Как в декодированном BPSK потоке семплов найти начало бита, если уже долгое время передаются только нули (или только единицы)?"
Никак. Нет смены значения битов -> нет смены фазы -> нечего искать.
"-Как бороться с тем, что в BPSK модуляции данные можно интерпретировать и принять как инвертированные биты?"
Вы сами ответили на этот вопрос в тексте: "Видимо это задача протокола канального уровня."
Используются уникальная комбинация битов/проверка CRC/особые виды кодирования: https://wirelesspi.com/resolving-phase-ambiguity-through-unique-word-and-differential-encoding-and-decoding/
https://en.wikipedia.org/wiki/Differential_coding
onegray
Так же как и как и в радио - добавить преамбулу и синхрослово.
rukhi7
вообще вроде как BPSK не используется без OFDM. преамбула и синхрослово определяются на уровне OFDM.
iliasam
В GPS BPSK точно используется без OFDM.
rukhi7
да я как то не так выразился, с GPS действительно, не приходилось разбираться. Тогда и мне интересно как синхронизацию делают, когда нет OFDM. Но в GPS очень маленький трафик, там можно просто перерывами синхранизацию обеспечить на сколько я понимаю.
aabzel Автор
Каждый спутник GPS передает 50 бит в секунду. А если считать C/A код разделения каналов, то получается 1023541 бит/s =1.023 Mbit/s. 1 chip = 977ns! И надо минимум 4 канала. Получается надо принять 4.092 Mbit/s.
Это больше чем надо для передачи видео.
Там только из аналоговой части по ADC данные выгребаются на частоте 16....38 MHz.
Так что GPS - это очень большой трафик.
rukhi7
а я не помню что такое "C/A код разделения каналов".
Что-то как то уж очень много получается, может это все таки OFDM? там как раз все под такое "много" заточено?
Передатчик то один сигнал передает, или на каждый чип свой передатчик?
aabzel Автор
60 секунд сырых сигналов GPS - это гигабайтный файл
iliasam
В GPS используется кодовое разделение данных, все спутники предают сигнал на одной частоте.
Про то, как устроена передача данных в GPS, я писал здесь: https://habr.com/ru/articles/765402/
Навигационные данные идут с низкой скоростью - 50bit/s, дальномерный код - 1.023 Mbit/s. Но дальномерный код просто повторяется, и, упрощенно говоря, является синхроимпульсами сложной формы.
rukhi7
я не понимаю как это все спутники предают сигнал на одной частоте, как их приемник разбирает, да еще после какого-то XOR-а. Я просмотрел вашу статью бегло, ответа тоже не нашел, но мне не особо и нужно сейчас, просто интересно было бы. В любом случае спасибо за разъяснения, если что буду знать с чего начать разбираться.
aabzel Автор
В GNSS навигации происходит кодовое разделение канала CDMA.
https://habr.com/ru/articles/765402/#comment_26593591
В Youtube есть ролик: "как по одному проводу разговаривают одновременно миллионы"
На самом деле технологию CDMA мы используем чаще чем кажется, причем на самом бытовом уровне.
Вот оставил кто-то машину в неположенном месте у ТРЦ с номерами a120еу 177 и
администратор торгового центра говорит в мегафон
Тут вместо букв используют имена, которые начинаются на эти буквы (код). Поэтому так чётче слышно на фоне всеобщего шума.
rukhi7
общие принципы я знаю, мне хотелось бы понять как это считается в реальной цифровой системе на практике с точки зрения математики-реальных вычислений. Я знаю даже что там ортогональные сигналы используются, я даже понимаю (примерно помню:) что это такое :).
aabzel Автор
Вот у @iliasam есть культовый текст про реализацию навигационного приёмника: SDR приемник GPS на микроконтроллере https://habr.com/ru/articles/789382/
Там вообще однобитная арифметика задействована, чтобы снизить объём вычислений.
rukhi7
тут вот возможно хороший пример чтобы одну закономерность, которую я наблюдаю снова и снова.
Вот там приведена и упоминается схема, вот так :
Мне кажется для понимания принципа кодирования-декодирования важно привести теорию которая выводит эту схему (эту формулу, последовательность операций), но этой теории там нет. Эта теория настолько очевидна что автор не дал ее описания, или она очень сложна и требует другой статьи поэтому она опущена?
Закономерность в том что как обычно ключевой момент для понимания достаточно сложной темы оказывается пропущен, мне интересно почему всегда так получается!
aabzel Автор
Мне сложно придумать раздел математики, который бы не использовался в теории GNSS навигации
iliasam
Я специально не приводил формулы в статье.
"Любая формула, включенная в книгу, уменьшает число ее покупателей вдвое".
В статье дана ссылка на книгу, в которой есть нужные формулы: https://www.ocf.berkeley.edu/~marsy/resources/gnss/A Software-Defined GPS and Galileo Receiver.pdf
И да, теории там много.
aabzel Автор
Тогда надо больше картинок.
rukhi7
похоже на то что мне нужно, почитаю на досуге, спасибо.
strvv
Я думаю, что как в большинстве протоколов, нечувствительных к 0 и 1 - бит-стаффингом, т.е. если N бит передается неизменными - вставляется противоположный, раздвигая поток.
Если здесь поискать статьи про USB, есть кодирование с J,K и другими состояниями.