|
Алгоритм отлова пакета в радио канале. Help pls! |
|
|
|
Dec 12 2016, 16:48
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Ранее не приходилось работать с радиоканалом (любитель я), а когда попробовал, обнаружил большое количество шумов, мешающих выделить данные. Отсюда и вопрос. Насколько могу сейчас понять, задачи две - распознать в потоке шумов саму посылку и синхронизироваться с частотой и тактами модуляции. Видимо, преамбула предназначена для распознавания посылки и определения частоты модуляции, а последующий синхроимпульс - для определения "точки отсчета" последующих бит данных (тактов). Гугление выдает не рассказы об алгоритмах, а то, что использует эти алгоритмы, как законченные модули. После чтения всего, что выдал гугль, сложилось лишь самое общее представление о том, как такие алгоритмы строятся. Но его маловато для написания своего алгоритма. Насколько понимаю сейчас, все методы делятся на две группы. В одной из них, уровень сигнала сравнивается (по интервалам таймера) с предполагаемым в N-раз чаще (2, реже - 3), чем он должен меняться. Если смена уровня сигнала происходит раньше или позже, чем должно быть, считается, что на входе не посылка, а шум. Во второй группе алгоритмов используется не прерывание по таймеру, а Input Capture, то есть, замеряется реальная длительность импульса, которая сверяется с ожидаемой. Если она отличается слишком сильно, импульс считается шумом. Помогите разобраться, pls, как лучше подступиться к задаче. Если есть что почитать об этом - оч. хорошо, если есть примеры кода - еще лучше. На данном этапе я даже не могу оценить, какой из двух методов какие преимущества/недостатки имеет. Например, как методы первой группы позволяют учитывать разницу между скоростью тактирования передатчика и приемника? В общем, темный лес пока.  Ткните в правильном направлении, pls.
Сообщение отредактировал G.Simenon - Dec 12 2016, 16:51
|
|
|
|
|
Dec 12 2016, 17:02
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Цитата(krux @ Dec 12 2016, 17:53)  на каких скоростях планируете работать, на чем потом реализовывать? микроконтроллер или FPGA? 1 - 9600 - 19200, приблизительно 2 - на м/к. В настоящий момент - на АтМеге.
|
|
|
|
|
Dec 15 2016, 14:39
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Похоже, что с Input Capture возни больше в части пропуска помех. Noise Canceler пропускает только помехи короче 4 системных тактов, поэтому, если на Input Capture Pin придет помеха длиннее, то, чтобы исключить ложный захват, придется складывать захваченное значение длительности с предыдущей и оставаться в том же режиме захвата (falling/rising edge)? Кто-нибудь пробовал то и другое, может подсказать в каком направлении двигаться?
|
|
|
|
|
Dec 15 2016, 17:52
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Цитата(zltigo @ Dec 15 2016, 17:08)  Подаете на UART. Ширина импульсов бывает некратная, да и плавает она. Плюс ограничения UART на формат фрейма, ему стартбит нужен низкий, в сигнале же следующий бит, после уже принятых UARTом, может оказаться высоким. Софтово бы решить.
Сообщение отредактировал G.Simenon - Dec 15 2016, 17:54
|
|
|
|
|
Dec 15 2016, 18:05
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(G.Simenon @ Dec 15 2016, 19:52)  Ширина импульсов бывает некратная, да и плавает она. Не принципиально. В реальной проводной линии проблемы принципиально такие-же. Выделение байта у сколь-нибудь приличных реализаций UART по нескольким отсчетам. Цитата Плюс ограничения UART на формат фрейма, ему стартбит нужен низкий, в сигнале же следующий бит, после уже принятых UARTом, может оказаться высоким. Повторяю: "Преамбула делается под захват UART-ом сначала битовой, а потом байтовой синхронизации". Так что все решается. Естественно, передатчик тоже UART, ну и то, что он "A" решает и проблему различия битовой частоты. Цитата Софтово бы решить. Софтово будете разбираться наличием битовой и байтовой синхронизации и выделением фрейма. А всем остальным железка займется.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 15 2016, 18:16
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Цитата(zltigo @ Dec 15 2016, 18:05)  Естественно, передатчик тоже UART, ... Увы, передатчик не UART. Цитата(zltigo @ Dec 15 2016, 18:05)  Софтово будете разбираться наличием битовой и байтовой синхронизации и выделением фрейма. А всем остальным железка займется. Ах, вот как, софтом определять моменты включения UARTa... звучит сложнее, чем просто софтовая реализация. Спасибо за вариант.
|
|
|
|
|
Dec 15 2016, 18:24
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(G.Simenon @ Dec 15 2016, 20:16)  Увы, передатчик не UART. А что? Тогда огласите что за кодировка идет в канале? Синхронный? Асинхронный? Как формируется фрейм, который предстоит выделять? Битстаффинг? Цитата Ах, вот как, софтом определять моменты включения UARTa... звучит сложнее, чем просто софтовая реализация. Причем тут какое-то неведомое "включение UART"?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 15 2016, 18:27
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 14-08-16
Пользователь №: 92 949

|
Один из первых проектов был похож на ваш (RXQ1-433 + AT90S2313 + IAR, любительская разработка, использовали на своём предприятии для телеметрии). Правда нам пришлось ввести байтстаффинг для устойчивой синхронизации начала пакета и заточен на наш протокол. Т.е. пока устройство не примет весь пакет, не проверит crc, не передаёт его по rs485 (ну и так же обратно). Код, конечно, не идеальный (давно это было в 2003), но устройство рабочее и можно посмотреть как мы это реализовали тогда.
Прикрепленные файлы
radio.7z ( 41.03 килобайт )
Кол-во скачиваний: 11
|
|
|
|
|
Dec 15 2016, 18:34
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Zltigo, Вы для меня слишком "гуру" - мне без примера непонятно, какое решение Вы имеете ввиду. Увидеть бы что-то из этой серии...
Dm37, спасибо за пример!
Сообщение отредактировал G.Simenon - Dec 15 2016, 18:36
|
|
|
|
|
Dec 15 2016, 18:41
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 14-08-16
Пользователь №: 92 949

|
в своё время рассматривал в основном два метода кодирования сигнала манчестер и вроде 4b/5b, почитайте о них.
|
|
|
|
|
Dec 15 2016, 18:55
|
Группа: Участник
Сообщений: 9
Регистрация: 12-12-16
Пользователь №: 94 601

|
Цитата(dm37 @ Dec 15 2016, 18:41)  ... манчестер и вроде 4b/5b, почитайте о них. Спасибо. С манчестером сталкивался, с "4b/5b" нет. Почитаю.
Сообщение отредактировал G.Simenon - Dec 15 2016, 18:56
|
|
|
|
|
Dec 15 2016, 23:53
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(dm37 @ Dec 15 2016, 20:41)  в своё время рассматривал в основном два метода кодирования сигнала манчестер и вроде 4b/5b, почитайте о них. Это не о том совсем, если я хоть что-то понимаю о пишет Автор. Цитата(G.Simenon @ Dec 15 2016, 20:34)  Zltigo, Вы для меня слишком "гуру" - мне без примера непонятно, какое решение Вы имеете ввиду. Увидеть бы что-то из этой серии... Я как бы пытался вопросы задать. Не получив ответа не могу понять что конкретно Вы хотите
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|