|
Передача сигнала с минимальной задержкой, wireless |
|
|
|
Jan 21 2014, 14:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Собственно есть задача передать сигнал на расстояние 1-2км с задержкой <100мкс с минимально возможными искажениями. Сигнал преставляет собой 2-разрядный аналоговый сигнал, те значение(напряжения, например) в определенный момент времени может быть 0 или 1(на пример вольт). Макс. частота изменения этих значений 8кгц, те минимальная длительность 0 или 1 может быть 125мкс. Точности выдержки времени в 20мкс достаточно, по этому этот сигнал я сэмплирую с частотой Fs пока 10Х, те 80кгц. можно и больше. И по сути получаю биты, которые нужно вовремя передать. По скольку макс задержка может быть 100мкс, то длина блока может быть всего 8бит, те 1 байт. Если взять Fs по-больше, можно сделать блок длинее, но макс. полоса, которую могу занять - где-то 1мгц (не меньше). Мало того, еще надо успеть засинхронизироватся за ре самы <100мкс, в идеале ~60. 1. Какую при этом модуляцию выбрать? Склоняюсь к DPSK или DQPSK. Что лучше - длинее блок и больше помех или короче блок и меньше помех? 2. Какой код использовать? Порсто Баркер(DSSS) и потом коррелятор или что-то другой. Применения RS/Convolution кодов не вижу смысла на таких коротких блоках.. Или мож просто взять усилок на 10вт и ну его? шутка  ) да, мощность лучше не более 1вт. диапазон думаю 900мгц, там электроника проще, чем на 2.4ггц.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 15)
|
Jan 21 2014, 16:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата если 0 и 1 возьмите FSK и гоните 2 частоты, приемник будет примитивный. У меня сейчас стоит CC2500,только не в пакетном режиме, а в RAW, и собственно этот 0/1 и передается(подается прямо ему на вход. ногу) без всякого кодирования. Усилитель к нему 1вт. Радиус действия - ну метров 200  Из за помех, отражений. Особого значения FSK/ASK нету. Но на ASK как-то вроде даже стабильнее работает и задержка меньше. Да и еще у него задержка такая, что еле влажу. До того был CC1101, у него задержка еще больше и уже сигнал не успевает доходить. Вобщем использование готовых модулей не вариант, они заточены на пакетную передачу данных, всякие там CRC итд. Аналоговые модули конечно имеют меньшую задержку, но толку от них всеравно мало(пробовал LINKS RXM-900-ххх). Мне же это не подходит. Мне нужно по наличию входного сигнала(я не знаю когда он прийдет и таже ничего о нем не знаю, кроме максимальной частоты и собственно лог. уровня), вернее когда на вход поступи лог.1 за <100мкс успеть включить передатчик(раскочегарить усилитель), послать синхропосылку, собственно само лог1(в закодированном виде), приемник должен засинхронизироватся и на выходе выдать нужный лог. уровень(такой, как поступил на передатчик  И дальше, если на входе передатчика лог0 длительностью больше некоторого t, вырубится и перейти опять в ждущий режим. Цитата 0 и 1 это одноразрядный сигнал. Интервал открытый или закрытый? Ну да  Интервал неизвестный, но известный его минимум и известная максимальная погрешность(те можно меандр раздвигать/сдвигать туда-сюда на некий %) Цитата при 1мбит/с 100мкс это десяток байт, короткий пакет с одним-двумя байтами нагрузки влезет. Влезет. Только какую лучше взять кодировку этого байта нагрузки, и вообще всего пакета, абы максимально точно передать по сути засэмплированный аналоговый(но однобитный) сигнал? Можно ведь взять модуляцию DQPSK(с ней проще, чем с QPSK) и получить скорость 2мбит/с и больше избыточности, а можно DBPSK и 1мбит/с но меньше избыточной информации. Можно и FSK, но скорость(теоретический максимум) тогда будет 500кбит/с, что не совсем хорошо.
|
|
|
|
|
Jan 21 2014, 16:18
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(brag @ Jan 21 2014, 11:03)  Мне же это не подходит. Мне нужно по наличию входного сигнала(я не знаю когда он прийдет и таже ничего о нем не знаю, кроме максимальной частоты и собственно лог. уровня), вернее когда на вход поступи лог.1 за <100мкс успеть включить передатчик(раскочегарить усилитель), послать синхропосылку, собственно само лог1(в закодированном виде), приемник должен засинхронизироватся и на выходе выдать нужный лог. уровень(такой, как поступил на передатчик  И дальше, если на входе передатчика лог0 длительностью больше некоторого t, вырубится и перейти опять в ждущий режим. я же вам сказал. красота простых решений : все время свистите двумя частотами f0 - лог0, f1 - лог0. будет вам самая ляпота. а так вы хотите делать пакетный модем работающий в импульсном режиме, со всеми тараканами обработки сигнала (синхронизация, кодирование, эквалайзирование и т.д.). Тогда может быть вам и 30дбм ами не потребуется свистеть, а можно будет обойтись где нить 10-15дбм. Интервал в смысле радиоинтервал, закрытый, открытый, полузакрытый? ну либо возьмите 2 ортогональных последовательности и свистите ими постоянно. размажьте сигнал по широкой полосе никто и не увидит что вы работаете. правда на накопление базы потребуется время.
--------------------
|
|
|
|
|
Jan 21 2014, 16:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата как это он аналоговый, если он однобитный? нет ессно. просто так назвал абы понетней было  Цитата так и передавать, сэмплить на х8 / х16 и эти 8/16 бит как один/два байта и передавать. другого варианта и нету по моему. только еще ж надо будет помехи отфильтровать как-то.. Цитата из спячки разогнаться за 100мкс пожалуй не получится. нордик из неглубокой спячки только за 130мкс просыпается, ну да. все они такие. техас по-быстрее, но эте все не то. тут без самопального модуля не обойтись Цитата я же вам сказал. красота простых решений : все время свистите двумя частотами f0 - лог0, f1 - лог0. будет вам самая ляпота. Все время свистеть не могу. Мне еще и принимать обратно ответ нужно, по такому же принципу  можно и фул-дуплекс, 2 антенны, но свистеть постоянно всеравно не могу. Цитата а так вы хотите делать пакетный модем работающий в импульсном режиме, со всеми тараканами обработки сигнала (синхронизация, кодирование, эквалайзирование и т.д.). да. по моему для данной задачи другого варианта нету. Цитата а можно будет обойтись где нить 10-15дбм. Это большой плюс. Тк питание батарейное. 30дбм - это абсолютный максимум. Цитата Интервал в смысле радиоинтервал, закрытый, открытый, полузакрытый? На счет радио не знаю, клиенту вроде всеравно. Вот так должно быть. Сколько времени нужно ждать start-а - никто не знает, хоть целый день. а хоть секунду-2. Колбаса тоже неизвестная, нарисовал от балды и длина ее неизвестная(ну максимум есть, меньше 1/5 сек). Ее по сути надо засэмплировать с 8-16х, закодировать, раскодировать за <100мкс.
|
|
|
|
|
Jan 21 2014, 16:35
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(brag @ Jan 21 2014, 10:24)  Все время свистеть не могу. Мне еще и принимать обратно ответ нужно, по такому же принципу  можно и фул-дуплекс, 2 антенны, но свистеть постоянно всеравно не могу. частотное разнесение и диплексеры не вчера придумали Цитата Это большой плюс. Тк питание батарейное. 30дбм - это абсолютный максимум. Потери в свободном пространстве на 2 километра и частоте 1ГГц будут FSL = 92.44 + 20*log(1) + 20*log(2) = 98.45дБ. сделайте узкополосный приемник с чутьем -100, пара антенн с 10кой и можете работать с 0дБм, еще и запас будет. Цитата На счет радио не знаю, клиенту вроде всеравно. если прямая видимость будет всегда, то может быть. Цитата да. по моему для данной задачи другого варианта нету. вываливайте полное ТЗ, а то начали с одного, закончили другим.
--------------------
|
|
|
|
|
Jan 21 2014, 17:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата сделайте узкополосный приемник с чутьем -100, пара антенн с 10кой и можете работать с 0дБм, еще и запас будет. Где гарантия, что в эту узкую полосу не попадет помеха? по моему на оборот расширение спектра тут к месту... ТЗ. Ну вот та моя картинка и есть типа ТЗ  ) Что еще дополнить даже не знаю. По железу ограничений особо нету, кроме тех, что были озвучены ранее. Нужно конечно по проще, но надо вписатся в <1вт. За готовые модули я конечно 2мя руками, но нету таких.. Обе стороны должны уметь как передавать так и принимать. Можно и дуплекс(2 антенны или сплиттер), если по другому никак. Но по моему этого не нужно, одновременно в 2 стороны сигнал не идет. Интервал между переключением перием/передача где-то 15мс, что не сравнимо с <100мкс, за которых нужно успеть раскочегарить усилитель, синхронизироватся, да еще и передать полезную информацию, да еще и без помех(вернее их нужно как-то отсеять). Обе стороны должны постоянно слушать эфир и собственно лог. вход.
|
|
|
|
|
Jan 21 2014, 17:19
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(brag @ Jan 21 2014, 23:24)  ну да. все они такие. техас по-быстрее, но эте все не то. тут без самопального модуля не обойтись а принципиально трансиверу именно засыпать? питание сильно батарейное и 10мА постоянного потребления не годятся? без спячки тот же nrf24 за 10мкс вроде может начать передавать по команде. Цитата(brag @ Jan 21 2014, 23:24)  Все время свистеть не могу. Мне еще и принимать обратно ответ нужно, по такому же принципу  можно и фул-дуплекс, 2 антенны, но свистеть постоянно всеравно не могу. всё время не надо, передавайте не уровни, а фронты судя по картинке они чаще чем раз в 125мкс не меняются, ну или можно попробовать успеть переключиться на приём и принять ответ за те же 100мкс (50мкс передача 50 приём на 2мбит может и успеет) udp: а нет, вру, не успеет, переключение rxtx тоже 130мкс.
|
|
|
|
|
Jan 21 2014, 17:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата а принципиально трансиверу именно засыпать? питание сильно батарейное и 10мА постоянного потребления не годятся? без спячки тот же nrf24 за 10мкс вроде может начать передавать по команде. Годится конечно. Но за какое время сигнал дойдет до выхода приемной стороны? Если там приемник на FFT основан, то можно вообще забыть. Я много разных модулей перепробовал. Обычно передатчик у них передает довольно быстро, а вот приемник довольно долго думает, преже чем выдаст сигнал. Цитата всё время не надо, передавайте не уровни, а фронты судя по картинке они чаще чем раз в 125мкс не меняются, ну или можно попробовать успеть переключиться на приём и принять ответ за те же 100мкс (50мкс передача 50 приём на 2мбит может и успеет) Даже за 125мкс никакой модуль в пакетном режиме не успеет, по крайней мере я таких не нашел. У меня пахает только СС2500 и то только в RAW режиме, те тупо подаем лог уровень на дополнительную ногу(не по SPI). Но помех там огого и задержка на пределе, нацепить какой-нибудь алгоритм уже не успею. Уточнил по времени переключения прием/передача - минимальное 2мс. Если не успеваем, то нужно дуплекс и одновременно с передачей слушать эфир. Но это пока не принципиально. Главное - быстро начать передавать, внезапно  ну и поймать ессно тоже быстро. вообще чем быстрее, тем лучше. 100мкс это абсолютный максимум.
|
|
|
|
|
Jan 21 2014, 19:59
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(brag @ Jan 22 2014, 00:29)  Годится конечно. Но за какое время сигнал дойдет до выхода приемной стороны? Если там приемник на FFT основан, то можно вообще забыть. Я много разных модулей перепробовал. Обычно передатчик у них передает довольно быстро, а вот приемник довольно долго думает, преже чем выдаст сигнал. больше чем время одного бита ему не над чем там думать, никакой новой информации о ранее принятом бите он уже не получит, так что приёмник сообщает сразу. точно цифры не вспомню, nrf24l01 два трансивера ставил так чтобы они друг другу по очереди пакеты слали без задержек туда-сюда, никаких заметных задержек не припомню. Цитата(brag @ Jan 22 2014, 00:29)  Даже за 125мкс никакой модуль в пакетном режиме не успеет, по крайней мере я таких не нашел. Уточнил по времени переключения прием/передача - минимальное 2мс. Если не успеваем, то нужно дуплекс и одновременно с передачей слушать эфир. Но это пока не принципиально. Главное - быстро начать передавать, внезапно  ну и поймать ессно тоже быстро. вообще чем быстрее, тем лучше. 100мкс это абсолютный максимум. nrf24l01 в одну сторону должен справиться. а вот переключение приём/передача у него 140мкс, так что если надо в обе стороны придётся ставить по два с каждой стороны на разных частотных каналах. но на 2.4ГГц на 2км нужна прямая видимость и хорошие антенны при 100мВт были еще на 433 трансиверы, dp1203 вроде, их прямо за модулятор дергать можно было.
|
|
|
|
|
Jan 21 2014, 21:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата больше чем время одного бита ему не над чем там думать, никакой новой информации о ранее принятом бите он уже не получит, так что приёмник сообщает сразу. точно цифры не вспомню, nrf24l01 два трансивера ставил так чтобы они друг другу по очереди пакеты слали без задержек туда-сюда, никаких заметных задержек не припомню. Подключали по каналу дата-логгера на вход передатчика и выход приемника? Какая была задержка? Если приемник аналоговый, то задержек ессно не будет, но даже и они дают задержку порядка 40-60мкс, пруф ниже. Если цифровой, то задержки могут быть чудовищьные, если на пример обработка сигнала идет в частотном домене, само только FFT чего стоит. + буфферизация разная итп. Или может быть тупо linear-phase фильтр какой-нибудь работает(или хуже zero-phase), а они тоже могут давать задержку даже если реализованы тупо сверткой, сама природа их такова... Цитата nrf24l01 в одну сторону должен справиться. как-то не охота покупать очередной труп и тратить на него время, я же с десяток разных перепробовал. Кое-как работали только аналоговые, но там фильтры обычно стоят на 4.8-10кбит/с - толку от них тоже 0. 2.4 я и не потяну, слишком уж плата сложная получается. Вот 800-900мгц уже можно и "на коленке", с готовых микросхем ессно, рассыпухи минимум. Усилок готовый тоже. Вот. Хоть снято и звуковой картой, но все отличnо видно. Между каналами карты задержки нету ни на сэмпл, проверено.  Это аналоговый модуль rxm900-hp3. У CC1101 вообще задержка 34 сэмпла(177мкс). Сигнал взят по средине, не с начала(чтоб не думали, что приемник долго стартует). Те тут чисто задержка в основном приемника (у передатчика она гораздо меньше).
|
|
|
|
|
Jan 22 2014, 00:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата по поводу задержек у него битовая скорость всё таки 2МГц с соответствующей полосой. соответственно и задержки по сравнению с модулями на 433 с полосой в десяток кГц будут гораздо меньше. Почему? Это где-то в документе прописано? Или извесны внутренние алгоритмы трансивера? Битовая скорость и задержка - вещи ортогональные. Даже наоборот, чем выше скорость, тем выше задержка, ибо приемник сложнее, буфферы длиннее, алгоритмы тяжелее итд. Цитата захватывал время прихода таймером и сразу же отправлял его обратно, ну как бы этого не достаточно, чтобы оценить задержку. Тут нужно либо 2 модуля на 1 таймер(контроллер) либо послать пакт, дождатся ответа и заглянуть в таймер - получим общую задержку туда/обратно. Вот пока нарисовалась такая схемка. И моделька в матлабе. CODE clear;
load('x0.mat');
% resample x8x11 (relative to 8khz) Fs=8e3*8; yr=resample(p3,Fs,48e3); f1=yr>0.5; x0(f1)=1; x0(~f1)=-1; clear yr;
% spread every sample by Barker code 11. % Fc will be 8*8*11=704khz. len=400;%size(x0,2); barkercode=[+1 +1 +1 -1 -1 -1 +1 -1 -1 +1 -1]; %barkercode=[1 1 1 0 1 1 0 1 0 0 0]*2-1; lb=size(barkercode,2); Fc=Fs*lb; y1=zeros(1,len*lb); st=0; timeout=0; for i=1:len; switch st case 0 % wait for 'one' if(x0(i)>0) st=1; timeout=0; end case 1 y1((i-1)*11+1:i*11)=x0(i)*barkercode; % encode if(x0(i)<0) % check timeout if(timeout<60)timeout=timeout+1; else st=0; end else timeout=0; end end y0((i-1)*11+1:i*11)=x0(i); % just for debug end len=size(y1,2);
% add white noise y1=awgn(y1,4);
% add multipath b=[1,0,0.1,0,0.5,0,0.2]; y1=filter(b,1,y1);
% decode barker, simple cross-correlator y2=zeros(1,len); y3=zeros(1,len); y00=0; thr=7; % detector threshold for i=lb:len; % cross-correlation y2(i)=sum(y1(i-lb+1:i).*barkercode); % detector if(y2(i)>thr)y00=1; elseif(y2(i)<-thr)y00=-1; end y3(i)=y00; end
% downsample /11 y3d=resample(y3,1,lb); len=size(y3d,2);
% low-pass b=ones(3,1)/3; y2d=filter(b,1,y3d); % decision y3d=y2d; f1=y3d>0.05;y3d(f1)=1; f1=y3d<-0.05;y3d(f1)=-1;
% median filter %y2d=zeros(1,len); medsz=5; %median filter medblk=zeros(medsz,1); for i=1:len medblk(1)=y3d(i); medblk=circshift(medblk,1); m=sort(medblk); y3d(i)=m((medsz+1)/2); end
len=size(y3d,2); x=[1:len]; plot(x,x0(1:len),x,y2d,x,y3d);
Пока без модуляции. Просто добавил в сигнал шума (SNR=4db) и подобие multipath interference. Результат неплохой, ошибок вроде нету, только джиттер(допустимо). Задержка получилась 75мкс. Вот такая картинка получается на выходе коррелятора и пикового детектора(по сути компаратор с памятью). А вот то же, только после добавления шума и отражений  Короткие ошибки, которые видно на выходе с детектора спокойно корректируются медианным фильтром. И того избыточность получилась аж в 88 раз  Как бы этот алгоритм улучшить или вообще переделать? Можно попробовать коды Хемминга с мягким декодированием..
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|