Гражданская радиосвязь в России (CB, LPD, PMR) Вход     Регистрация

18+ Данный раздел сайта запрещён для просмотра детьми!  

Данный раздел запрещён для просмотра детьми

Материалы данного раздела могут содержать информацию, запрещенную для детей, согласно нормам установленным Федеральным законом "О защите детей от информации, причиняющей вред их здоровью и развитию".
Гражданская радиосвязь / Всё на форуме / Программирование: С, Arduino и другое - обсуждение, вопросы и ответы
Разработка алгоритма передачи данных через радиоканал под микроконтроллеры (ATmega8 в качестве базы для опытов)
250 из Новосибирск - Новосибирская обл
250 из Новосибирск - Новосибирская обл
  Собственно ранее я немного увлекался измышлением алгоритмов передачи данных через радиоканал, сейчас решил слепить удобоваримый алгоритм позволяющий пусть не быстро но весьма достоверно передавать данные.

Задачи которые должен решать алгоритм:

1) Не быть пакетным (не требовать у приёмника наличия передатчика для подтверждения данных).

2) Укладываться излучаемым сигналом в речевой спектр (300Гц - 3000Гц).

3) Быть способным принять данные независимо от того в какой модуляции работал передатчик, то есть способность принимать данные если передатчик работает в амплитудной модуляции а приёмник в SSB или ЧМ.

4) Иметь способность восстанавливать часть потерянных из за помех данных.

5) Иметь скорость передачи как можно более быструю но не в ущерб надёжности передачи.

---
В первом сообщении пока оставлю только задачу, решения буду излагать ниже, ответами.
Может ещё кто подключиться к вопросам-ответам, обсудим.
 
Записано: 3668 дн 0 час 4 мин 7 сек назад (06.11.2014, 16:23:06)

4 из Новосибирск - Новосибирская обл
4 из Новосибирск - Новосибирская обл
  Условие 3 уж слишком жестокое...
Хотя, манипуляция тоном (несколькими тонами для скорости), имхо пролезет куда угодно.
 
Записано: 3667 дн 23 час 46 мин 49 сек назад (06.11.2014, 16:40:24)

250 из Новосибирск - Новосибирская обл
250 из Новосибирск - Новосибирская обл
  Как я вижу - самая "засада" начинается при учёте пункта 3, то есть селектировать нужно не некую частоту, одной из которых передаётся скажем 0 а другой 1, а селектировать надо изменения сигнала в принципе.
Первое что приходит на ум:

* за 1 принять наличие тона, а за 0 отсутствие, то есть передатчик передаёт не 2 частоты а одну и частоту и её отсутствие. Причём частоту можно условиться ожидать в некоторых довольно широких пределах, скажем от 500 герц до 2000 герц.
(По сути - обычная морзянка).

* сделать алгоритм адаптивным, то есть если принята некая стабильная частота F некой длительности более T, то ожидаем в след за ней некую другую частоту, скажем F*1.5 длительностью не менее T если всё так, то считаем эти частоты частотой 1 и 0.
Минус очевиден - если в пределах посылки частота "плывёт" например по причине приёма АМ сигнала на приёмник SSB (DSB (пристейший приёмник прямого преобразования)) с плохой стабильностью гетеродина, то часть данных можно потерять просто потому что частота "спывёт".

* учитывать изменения амплитуды на входе алгоритма.
Например за лог 1 принять уровень амплитуды N а за лог 0 M, естественно сделать "автоматическую регулировку усиления", то есть динамически отслеживать верхний уровень и нижний уровень, всё что выше 0.5 уровня более или менее или укладывающееся в длительность T считать 1 а что ниже 0.

Естественно что все эти методы сильно снижают скорость передачи, но тут важно определить не только задачи но и цели (накой вообще алгоритм живым людям), как я их вижу:

A) Передача телеметрии (например, с некого зонда, атмосферного или водного или ...)
B) Передача команд исполнительному устройству (например, выключателю света).

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

По этому, думаю, если передача данных будет происходить со скоростью 50-200 бод, этого будет в общем то достаточно.
 
Записано: 3667 дн 23 час 38 мин 32 сек назад (06.11.2014, 16:48:41)

106 из Новосибирск - Новосибирская обл
106 из Новосибирск - Новосибирская обл
  Условие 1 годится только для небольших объемов информации.
Типа как было в пейджераж POCSAG.

3 - непонятно зачем ? Классическая FM достаточно терпима к нестабильности частоты.
Алгоритм обработки сигнала будет уж сильно сложным (привет SDR).

Кодирование видимо по Риду-Соломону.з
В POCSAG простой FEC и контроль четности.

В общем, модернизируй POCSAG. )
 
Записано: 3667 дн 20 час 46 мин 29 сек назад (06.11.2014, 19:40:44)

4 из Новосибирск - Новосибирская обл
4 из Новосибирск - Новосибирская обл
  Коды Рида Соломона? Тупой ардуинщик умывает руки
 
Записано: 3667 дн 19 час 50 мин 59 сек назад (06.11.2014, 20:36:14)

250 из Новосибирск - Новосибирская обл
250 из Новосибирск - Новосибирская обл
  Вообще то правильно делать как-то так: при передаче сначала прокатывать Ридом-Саломоном, потом Хеммнгом тогда в приёмнике сначала раскручиваем Хеммнг, потом уже патчим совсем битое по Риду-Саломону.
Это то понятно, просто и не вызывает затруднений.

А вот модулятор-демодулятор затруднения вызывают.
Особенно демодулятор.

Поясню простым и понятным языком к чему я буду стремиться:
вот положим ты 106 слушаешь на КВ станцию передающую морзянкой, передатчик станции говённый, тон не чистый а плывёт, то ти-ти-ти, то ту-ту-ту, то пи-пи-пи и постоянно так тон плавает хаотично aaaaaииииуууууееееууууииии, в парралель идёт мощная китайская вещалка где на фоне музыки женщина поёт-убивается: ааааааааняяяяуууу хэй нааааняяяу та иииианннянь ...
Но!
Ты принимаешь морзянку несмотря на то, что тон голоса женщины при словах "иииианнняу" и
"ааааааааняяяяуууу" по сути есть тон передатчика передающего сообщение.
На спектрограмме тон передатчика просто будет маскирован голосом женщины, а там кроме женщины ещё и бубенцы бряк-бряк-бряк и в какой то момент литавры бжжжжж, то есть даже если отслеживать по резким изменениям спектра хрена с 2 найти там морзянку, а ухом ты её находишь, слышишь, понимаешь "о чём речь".

Конечно, проще всего сказать: "хм, ну то же ухо и мозг, а то какой-то микроконтроллер!"
Но это не мой метод :)

В общем, как делать, понятно - для начала нужно ожидать изменение в сигнале там, где его нужно ожидать.
Если было некое изменение сигнала, то следующее надо искать через T времени, а в промежутке T анализировать сигнал на предмет "не наших", "не правильных" изменений, что бы потом их благополучно игнорировать (вычитать).

---

Для чего поставлено условие 3?
- В реальном эфире нет гарантии, что на полезный сигнал не наложится сигнал мешающий, который превратит чистый полезный сигнал в "жу-жу-жу", однако внутри которого всё ещё будет полезная информация.
- DSB приёмники гораздо проще чем ЧМ (приёмник прямого преобразования очень прост), а модулятор АМ тоже прост, впрочем и ЧМ прост.

Я думаю лучше измыслить универсальное решение задачи 1 раз в коде чем 100 раз в железе, отсюда и условие 3.
 
Записано: 3667 дн 17 час 33 мин 37 сек назад (06.11.2014, 22:53:36)

106 из Новосибирск - Новосибирская обл
106 из Новосибирск - Новосибирская обл
  Время, это хорошо.
Только, по чему ты его будешь синхронизировать,
между приемником и передатчиком, GPS ?

Алгоритмы распознавания сигнала сейчас достаточно мощные,
на примере гуглов, всяких.
Все сложно, но возможно.
 
Записано: 3667 дн 11 час 5 мин 44 сек назад (07.11.2014, 05:21:29)



 
Ник:

Пароль к нику:

Число изображённое крупным шрифтом:


Написать комментарий:
[B] [I] [S] [WWW] [YouTube]

Бросить друзьям ссылку на тему:
Если это интересная тема, дайте людям на неё ссылку:
http://27kb.ru/zou.php?f=901&message=19237


О сайте
Правила сайта
  Обратная связь Рекламодателям
  Сотрудничество   Яндекс.Метрика