Разработка стандарта передачи данных по радиоканалу (СС2500)

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

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение blindman » 07 окт 2008, 19:08

Не буду. Но его от этого все равно не прибавится :)

Как дойдут руки до этого, сделаю. Тогда и расскажу, чего мне надо :wink:
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение EdGull » 07 окт 2008, 19:09

Ну ты хоть алгоритм выложи , в друг у кого время раньше найдется
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение =DeaD= » 07 окт 2008, 19:38

blindman писал(а):Мне тоже много чего кажется. А чтобы знать наверняка, надо решить такую задачку: даны
  • скорость передачи по радио
  • скорость передачи по уарту
  • вероятность ошибки при передачи пакета
  • размер пакета
  • время обработки пакета (то есть время, в течение которого передача данных не производится - работа с буферами, переключение режимов итп, передача битов синхронизации и служебных данных)
Найти размер буфера уарта, при котором вероятность его переполнения будет равна нулю

Ответ на неправильно поставленную задачу тоже неправильный - буфер должен быть бесконечного размера :)

А правильно поставленная задача - матожидание времени передачи объема данных минимально + вероятность переполнения буфера не более чем скажем 0.1% при постоянной подаче информации на вход.

Ну и размер пакета я бы тоже искомым сделал.

А вообще скорость по UARTу - пусть U, скорость по радио - R, время обработки пакета W, количество полезных байт в пакете S, размер буфера B, вероятность успешной отправки отдельного байта по радио P, количество служебных байт в пакете K.

Тогда вероятность убивания пакета P0=1-P^(K+S) при передаче по радио.

Один цикл отправки\получения занимает времени T0=2*(W+(S+K)/R). За это время в буфер поступает U0=U*T0 байт.

Пусть Q(t,a,b) вероятность нахождения в состоянии "мы находимся в итерации #t, в буфере [b] байт", при этом если в буфере b=-1 байт, тогда значит потеряли 1 пакетик. Тогда инициализируем Q(0,*)=0, Q(0,0)=1.

Далее берем i, выставляем Q(i+1,*)=0 и заполняем их:
1. Q(i+1,-1)=Q(i,-1);
2. Для всех 0<=b<=B-U0 выставляем:
2.1. Q(i+1,b+U0)=P0*Q(i,b);
2.2. Q(i+1,max(0,b-S)+U0)=(1-P0)*Q(i,b);
3. Для всех B-U0<b<=B выставляем:
3.1. Q(i+1,-1)=P0*Q(i,b);
3.2. Q(i+1,max(0,b-S)+U0)=(1-P0)*Q(i,b);

В итоге получим в Q(n,-1) вероятность возникновения хотя-бы 1 переполнения буфера на n-й итерации :)

Сам охренел :)

По моему надо быть проще - надо с 4 кратным запасом сделать меньше нужной величины вероятность крушения подряд N пакетов (сколько их в буфер влезает), тогда можно наверное будет забить на точные подсчеты :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение EdGull » 07 окт 2008, 19:50

ну вы блин даёте... (с) :ROFL: :good:
сказать что я охренел это ничего не сказать.... :ROFL:

Добавлено спустя 5 минут 45 секунд:
меня немного переклинило, поэтому сразу забыл написать
=DeaD= я тебя теперь уважаю еще больше! :good:
правда куда уже еще больше? :D
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение blindman » 07 окт 2008, 20:23

Мало что понял. Но проникся чуством, что вижу что-то великое и ужасное :D

=DeaD= писал(а):Ответ на неправильно поставленную задачу тоже неправильный - буфер должен быть бесконечного размера

А если ввести условие типа "подряд не может быть более N битых пакетов" ?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение =DeaD= » 07 окт 2008, 22:19

blindman писал(а):А если ввести условие типа "подряд не может быть более N битых пакетов" ?

Тоже неправильная постановка задачи. Вероятность N подряд битых пакетов это тупо P0^N, очевидно что оно будет не равно нулю при любом N, но зато с ростом N оно будет экспоненциально убывать. Т.е. правильная задача выглядит так - при каком буфере и размере пакета вероятность с нуля при подряд бьющихся пакетах переполнения буфера будет меньше Eps (пусть Eps=1/4'000'000 - типа с 4 кратным запасом от 1/1'000'000).

Тогда вероятность побить подряд N пакетов - P0^N, а чтобы за это время переполнился буфер надо чтобы итераций N=B/U0.

Выпишем условие P0^(B/U0)<Eps => (1-P^(K+S))^(B/(U*T0))<Eps =>

(1-P^(K+S))^(B/(U*2*(W+(S+K)/R)))<Eps

Попробуем прикинуть на наших параметрах. Пусть вероятность успешно отправить 1 байт при передаче равна P=999/1000=0.999, скорость по UARTу - U=1'200байт/сек, скорость по радио - R=12'500 байт/сек, время обработки пакета W=1/1'000 сек, количество полезных байт в пакете S=32, размер буфера B=?, количество служебных байт в пакете K=8.

(1-0.999^(8+32))^(B/(1200*2*(0.001+(32+8)/12500)))<Eps

(1-0.999^40)^(B/(1'200*0.0084))<1/4'000'000

Добавлено спустя 5 минут 53 секунды:
(1-0.96077)^(B/10,08)<1/4'000'000

0.03923^(B/10,08)<1/4'000'000
B/10,08 = log от 1/4'000'000 по основанию 0.03923

B/10,08 не менее 4 значит, а значит B можно принять равным 41 байту.

Вот что-то типа такого...

Добавлено спустя 45 минут 22 секунды:
Кстати, еще есть общее ограничение - средняя скорость передачи по радиоканалу (при полной загрузке данными) будет S/T0, а средняя скорость обмена по уарту тогда не должна быть больше чем, скажем 0.9 от этой скорости.

Допустим для наших цифр, указанных выше средняя скорость передачи по радиоканалу будет 32/0.0084=3809 байт/сек.

А значит скорость обмена по уарту лучше выставлять в что-то порядка 2400 байт/сек.

Кстати на этой скорости очевидно буфер надо будет уже не 41, а 82 байта.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение blindman » 08 окт 2008, 03:07

Вот сделал табличку для расчетов. Получилось не 41 а 48.

Вопрос на засыпку :wink: : учитывает ли расчет следующие факты:
  1. передача по радио - полудуплекс, то есть фактически скорость обмена в 2 раза ниже
  2. при порче пакета, он должен быть передан заново, при этом
    1. данные с уарта продолжают поступать
    2. вероятность успешной передачи повторного пакета != 1, что может привести к необходимости передавать его еще (и еще, и еще) со всеми вытекающими
Вложения
radiouart.xls
(108.5 КиБ) Скачиваний: 363
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение =DeaD= » 08 окт 2008, 07:30

1. Да, учитывает - циферкой 2 вот тут - T0=2*(W+(S+K)/R);
2. Не совсем, но это с легкостью перекрывается 4-кратным запасом (т.е. наше 1/4'000'000 без учета этого факта точно соответствует 1/1'000'000 с учетом этого факта);

2*. Скажем так - у меня не учитывается, что после 1 успешной передачи буфер обмена может быть уже не пустой и следующими двумя неудачными посылками его может переполнить. При близком соотношении реальных скоростей передачи по радио и скорости поступления данных по УАРТу это станет критическим и мой метод перестанет работать.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение blindman » 08 окт 2008, 08:06

То есть четверка там означает что если пакет не прошел, то его можно повторить еще 3 раза?

Добавлено спустя 30 минут 16 секунд:
А правда, что наиболее надежной является передача пакетов в 1 байт ? :shock:
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение =DeaD= » 08 окт 2008, 09:02

Наиболее надежной - да, наиболее эффективной - нет :)

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

Добавлено спустя 1 минуту 42 секунды:
blindman писал(а):То есть четверка там означает что если пакет не прошел, то его можно повторить еще 3 раза?

Совсем нет, иначе наша скорость по уарту должна была бы быть сильно маленькая, если такой запас делать.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение frig » 08 окт 2008, 10:05

для обеспечения надежной доставки надо не увеличивать буфер на радио, а иметь возможность остановить передачу при его заполнении. скользящее окно в tcp все помнят? тот же самый принцип.
буфер на uart тоже может быть небольшим, если уметь останавливать передачу. или, например, передавать пакетами-коммандами, дожидаясь передачи предыдущей. по сигналу.

я б с вами тут подискутировал было бы время :cry:
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение blindman » 08 окт 2008, 10:17

Чего тут дискутировать-то. Речь идет не о тупом увеличении буфера, а об оптимальном соотношении размера буфера и длины пакета. Задача стоит сделать "чистый" уарт, без всяких протоколов, с максимальной надежностью и по возможности при этом максимально использовать пропускную способность радиоканала. А сверху можно прикручивать какие угодно протоколы, хоть простейший XON/XOFF, хоть что-то навороченное.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение frig » 08 окт 2008, 10:21

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


радио непредсказуемо. на столе пакетики пойдут хорошо, а в реале окажется что половина дропается. что делать? править размер буфера? или если чсило ошибок временно возросло - считать что канал не работает вовсе?

максимальная надежность совсем без протоколов не выйдет.

а ты говоришь чего дискутировать :D
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение blindman » 08 окт 2008, 10:25

Я ж говорю - приделай свой протокол сверху. Какой хочешь. А параметры обмена и буфера изначально рассчитывай на 50% потерь :)
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка стандарта передачи данных по радиоканалу (СС2500)

Сообщение =DeaD= » 08 окт 2008, 12:40

2blindman: А какая реально вероятность порчи пакета в 40 байт на скорости 100кбит? И какое реально время обработки пакета?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Коммуникации

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8