Цитата
по поводу задержек у него битовая скорость всё таки 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 раз

Как бы этот алгоритм улучшить или вообще переделать?
Можно попробовать коды Хемминга с мягким декодированием..