⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sync_fa.m

📁 一个UWB仿真程序包
💻 M
字号:
%%% parameters %%%
function [out] = sync_fa(LOG, in)

%events
SYNC_OK = 1;
SFD_OK = 3;
SFD_LATE = 7;
SFD_EARLY = 8;
SYNC_START = 0;
CHEST_DONE = 2;
%%% parse the log file %%%

fid = fopen(LOG);
log = true;
timing = false;
events = [];
pkts = [];
while 1
    tline = fgetl(fid);
    if ~ischar(tline),   break,   end
    if(log) %we are in the log part
        if(isempty(strmatch('Packet',tline)))
            %find semicolon
            k = strfind(tline, ':');
            %register event
            events = [events; str2num(tline(1:k-1)) str2num(tline(k+1:k+2))];
        else
            log = false;
            timing = true;
        end
    elseif(timing) %we are in the timing part
        if(isempty(strmatch('Parameters',tline)))
            %find semicolon
            k = strfind(tline, ':');
            %register pkt
            pkts = [pkts; str2num(tline(1:k-1)) str2num(tline(k+1:end))];
        else
            timing = false;
        end
    else %we are in the Parameter part
        if(~isempty(strmatch('sync_len',tline)))
            %find semicolon
            k = strfind(tline, ':');
            sync_len = str2num(tline(k+1:end));
        elseif(~isempty(strmatch('sfd_len',tline)))
            %find semicolon
            k = strfind(tline, ':');
            sfd_len = str2num(tline(k+1:end));
        elseif(~isempty(strmatch('packet_len',tline)))
            %find semicolon
            k = strfind(tline, ':');
            packet_len = str2num(tline(k+1:end));
        end
    end
end
fclose(fid);

%%% do the processing %%%
pre_len = sync_len + sfd_len;
total_len = pre_len + packet_len;


%get pkts of UOI
%only take those after the simulation start event
sim_start = events(1,1)
pkts_after_sim_start_idx = find(pkts(:,1)>=sim_start);

uoi_pkts_idx = find(pkts(pkts_after_sim_start_idx,2)==1);
uoi_pkts_start = pkts(uoi_pkts_idx,1);
uoi_pkts_sfd_start = uoi_pkts_start + sync_len;
uoi_pkts_data_start = uoi_pkts_start + pre_len;

%get pkts of IFs
if_pkts_idx = find(pkts(:,2)~=1);
if_pkts_start = pkts(if_pkts_idx,1);


%get all sync ok events
times_sync_ok = events(events(:,2)==SYNC_OK,1);

temp = [];
for i=1:length(times_sync_ok)
   %check the difference to a good sync event
   current = times_sync_ok(i);
   
   %find the corresponding pkt start
   pkt_starts_before = pkts(pkts(:,1)<current,:);
   closest_start = pkt_starts_before(end,1);
   closest_user = pkt_starts_before(end,2);
%    [diff2closest, closest_idx] = min(abs(pkts(:,1)-current));
%    closest_start = pkts(closest_idx,1);
%    closest_user = pkts(closest_idx,2)
   
   diff = current - closest_start;
   slot_len = sync_len / 64 / 31;
   %get the difference to the closest code start
   slot_nr = mod(round(diff/slot_len),31);

   %check whether there is an sfd event after sync ok
   stop = current + pre_len;

   sfd_event = 0;
   
   for j = [SFD_OK SFD_EARLY SFD_LATE]
      times_sfd_event = events(events(:,2)==j,1);
      times_sfd_event(times_sfd_event<current)=0;
      times_sfd_event(times_sfd_event>stop)=0;
      if(sum(times_sfd_event))
        sfd_event = j;
        break;
      end
   end
   
   
   temp = [temp; closest_user, slot_nr, sfd_event];
  
    
   
end

out = [in; temp];

percentage = 0;

return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -