Перейти к содержанию
    

Алгоритм отлова пакета в радио канале. Help pls!

Ранее не приходилось работать с радиоканалом (любитель я), а когда попробовал, обнаружил большое количество шумов, мешающих выделить данные. Отсюда и вопрос.

 

Насколько могу сейчас понять, задачи две - распознать в потоке шумов саму посылку и синхронизироваться с частотой и тактами модуляции.

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

 

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

 

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

 

Помогите разобраться, pls, как лучше подступиться к задаче. Если есть что почитать об этом - оч. хорошо, если есть примеры кода - еще лучше.

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

 

Ткните в правильном направлении, pls.

Изменено пользователем G.Simenon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на каких скоростях планируете работать, и на чем потом реализовывать? микроконтроллер или FPGA?

поскольку общие принципы похожие, но подход и методы радикально разные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на каких скоростях планируете работать,

на чем потом реализовывать? микроконтроллер или FPGA?

 

1 - 9600 - 19200, приблизительно

2 - на м/к. В настоящий момент - на АтМеге.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, что с Input Capture возни больше в части пропуска помех. Noise Canceler пропускает только помехи короче 4 системных тактов, поэтому, если на Input Capture Pin придет помеха длиннее, то, чтобы исключить ложный захват, придется складывать захваченное значение длительности с предыдущей и оставаться в том же режиме захвата (falling/rising edge)?

Кто-нибудь пробовал то и другое, может подсказать в каком направлении двигаться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...может подсказать в каком направлении двигаться?

Подаете на UART. Преамбула делается под захват UART-ом сначала битовой, а потом байтовой синхронизации, потом в протоколе захват фрейма с данными.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подаете на UART.

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

Софтово бы решить.

Изменено пользователем G.Simenon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ширина импульсов бывает некратная, да и плавает она.

Не принципиально. В реальной проводной линии проблемы принципиально такие-же. Выделение байта у сколь-нибудь приличных реализаций UART по нескольким отсчетам.

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

Повторяю: "Преамбула делается под захват UART-ом сначала битовой, а потом байтовой синхронизации". Так что все решается. Естественно, передатчик тоже UART, ну и то, что он "A" решает и проблему различия битовой частоты.

Софтово бы решить.

Софтово будете разбираться наличием битовой и байтовой синхронизации и выделением фрейма. А всем остальным железка займется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Естественно, передатчик тоже UART, ...

Увы, передатчик не UART.

 

Софтово будете разбираться наличием битовой и байтовой синхронизации и выделением фрейма. А всем остальным железка займется.
Ах, вот как, софтом определять моменты включения UARTa... звучит сложнее, чем просто софтовая реализация.

 

Спасибо за вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Увы, передатчик не UART.

А что? Тогда огласите что за кодировка идет в канале? Синхронный? Асинхронный? Как формируется фрейм, который предстоит выделять? Битстаффинг?

Ах, вот как, софтом определять моменты включения UARTa... звучит сложнее, чем просто софтовая реализация.

Причем тут какое-то неведомое "включение UART"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Один из первых проектов был похож на ваш (RXQ1-433 + AT90S2313 + IAR, любительская разработка, использовали на своём предприятии для телеметрии).

Правда нам пришлось ввести байтстаффинг для устойчивой синхронизации начала пакета и заточен на наш протокол. Т.е. пока устройство не примет весь пакет, не проверит crc, не передаёт его по rs485 (ну и так же обратно). Код, конечно, не идеальный (давно это было в 2003), но устройство рабочее и можно посмотреть как мы это реализовали тогда.

radio.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Zltigo, Вы для меня слишком "гуру" - мне без примера непонятно, какое решение Вы имеете ввиду. Увидеть бы что-то из этой серии...

 

Dm37, спасибо за пример!

Изменено пользователем G.Simenon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в своё время рассматривал в основном два метода кодирования сигнала манчестер и вроде 4b/5b, почитайте о них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... манчестер и вроде 4b/5b, почитайте о них.
Спасибо. С манчестером сталкивался, с "4b/5b" нет. Почитаю.
Изменено пользователем G.Simenon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в своё время рассматривал в основном два метода кодирования сигнала манчестер и вроде 4b/5b, почитайте о них.

Это не о том совсем, если я хоть что-то понимаю о пишет Автор.

 

Zltigo, Вы для меня слишком "гуру" - мне без примера непонятно, какое решение Вы имеете ввиду. Увидеть бы что-то из этой серии...

Я как бы пытался вопросы задать. Не получив ответа не могу понять что конкретно Вы хотите :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UART'ом не стоит путать человека, надо привязываться к виду модуляции. В случае с ЧМ нельзя подавать uart-овские сигналы напрямую на модулятор: будет плавать постоянная составляющая. Потому либо Манчестер (легко декодируется Атмегой, но раширяет полосу вдвое), либо FSK/FFSK/GMSK на этих скоростях. С программой повозиться придется, да и далеко это будет от оптимального приемника. Но выпускаются модемы для этих способов (можно поискать у CML), либо DSP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...