txt 파일의 형식
1. WiFi
...
2. Position
1380216400/v_x:40.1235,v_y:-344.318/1380216401/v_x:40.0526,v_y:-344.321/1380216401/v_x:40.115,v_y:-
344.333/1380216402/v_x:40.0562,v_y:-344.335/1380216403/v_x:40.0855,v_y:-344.316/1380216403/v_x:40.1355,v_y:-
344.332/1380216404/v_x:40.1301,v_y:-344.33/1380216404/v_x:40.1073,v_y:-344.32/1380216405/v_x:40.1013,v_y:-
344.355/1380216406/v_x:40.0744,v_y:-344.316/1380216406/v_x:40.0611,v_y:-344.316/1380216407/v_x:40.0394,v_y:-
344.295/1380216407/v_x:40.0926,v_y:-344.315/1380216408/v_x:40.1102,v_y:-344.32/1380216409/v_x:40.0619,v_y:-
344.294/1380216410/v_x:40.0569,v_y:-344.316/1380216411/v_x:40.1055,v_y:-344.316/1380216411/v_x:40.0955,v_y:-
344.315/1380216412/v_x:40.0247,v_y:-344.296/1380216412/v_x:40.0849,v_y:-344.316/1380216413/v_x:40.0853,v_y:-
344.337/1380216413/v_x:40.0865,v_y:-344.326/1380216414/v_x:39.582,v_y:-344.727/1380216415/v_x:37.1072,v_y:-
343.882/1380216415/v_x:38.8408,v_y:-344.549/1380216416/v_x:39.4904,v_y:-345.078/
처리하는 코드
clc;
clear all;
close all;
%% NAO의 위치를 읽어온다.
naoPos_fid = fopen('nao_log.txt', 'r');
nao_data = fgets(naoPos_fid);
% 저장할 위치
naoPosStruct.time = cell(1E4, 1);
naoPosStruct.x = cell(1E4, 1);
naoPosStruct.y = cell(1E4, 1);
naoPosStruct.nr_data = 0;
% '/'로 시간 / x,y 로 분리한다.
naoPos_unit = strsplit(nao_data, '/');
nr_naoPos = length(naoPos_unit);
for i = 1:nr_naoPos-1
curr_naoPos_unit = naoPos_unit{i};
if rem(i, 2) == 1
% i가 홀수의 경우: 시간
time = str2double(curr_naoPos_unit);
else
% i가 짝수의 경우: 위치
% ','로 분리해서 x와 y를 분리한다.
xy_data = strsplit(curr_naoPos_unit, ',');
x_data = xy_data{1};
y_data = xy_data{2};
curr_x = str2double({x_data(5:end)});
curr_y = str2double({y_data(5:end)});
% fprintf('time: %d x: %f y: %f \n' ...
% , time, curr_x, curr_y );
naoPosStruct.nr_data = naoPosStruct.nr_data + 1;
naoPosStruct.time{naoPosStruct.nr_data} = time;
naoPosStruct.x{naoPosStruct.nr_data} = curr_x;
naoPosStruct.y{naoPosStruct.nr_data} = curr_y;
end
end
%% WIFI data를 불러와서 시간, bssid, level로 분리시킨다.
wifi_fid = fopen('WifiLog.txt' , 'r');
wifi_data = fgets(wifi_fid);
% 저장할 위치
wifiStruct.time = cell(1E4, 1);
wifiStruct.bssid = cell(1E4, 1);
wifiStruct.level = cell(1E4, 1);
wifiStruct.nr_data = 0;
% '#' 으로 각 시간별로 분리한다.
wifi_time_unit = strsplit(wifi_data, '#');
nr_raw = length(wifi_time_unit);
for i = 2:nr_raw
fprintf('[%d/%d] \n', i, nr_raw);
% 각 시간에 대해서
curr_wifi_time_unit = wifi_time_unit{i};
% '/'으로 각 bssid로 분리한다.
wifi_bssid_unit = strsplit(curr_wifi_time_unit, '/');
nr_wifi_bssid = length(wifi_bssid_unit);
curr_time = wifi_bssid_unit{1};
for j = 2:nr_wifi_bssid-1
% 현 시간의 각 bssid에 대해서
curr_wifi_slash = wifi_bssid_unit{j};
% ': '로 분리해서 bssid와 level을 분리한다.
bssid_token = strsplit(curr_wifi_slash, ': ');
temp = strsplit(bssid_token{2}, ',');
curr_wifi_bssid_name = temp{1};
curr_wifi_bssid_level = bssid_token{3};
% 현재 시간, bssid name, bssid level
time = str2double(curr_time)/1000;
bssid_name = curr_wifi_bssid_name;
level = str2double(curr_wifi_bssid_level);
% fprintf('time: %d, bssid: %s level: %d \n' ...
% , time, bssid_name, level);
% 저장한다.
wifiStruct.nr_data = wifiStruct.nr_data + 1;
wifiStruct.time{wifiStruct.nr_data} = time;
wifiStruct.bssid{wifiStruct.nr_data} = bssid_name;
wifiStruct.level{wifiStruct.nr_data} = level;
end
end
%% WIFI의 bssid를 처리한다. (bssid를 unique한 수를 할당한다.)
wifiStruct.bssid_idx = cell(wifiStruct.nr_data, 1);
bssid_list.bssid_name = cell(100, 1); % 실제 bssid 의 이름
bssid_list.bssid_idx = 1:100; % 실제 bssid 의 index
bssid_list.nr_bssid = 0; % 저장된 bssid의 수
for i = 1:wifiStruct.nr_data
fprintf('[%d/%d] \n', i, wifiStruct.nr_data);
curr_time = wifiStruct.time{i};
curr_bssid_name = wifiStruct.bssid{i};
curr_bssid_level = wifiStruct.level{i};
% 현재 bssid가 저장된 거에 있는지 확인한다.
isNew = true;
for j = 1:bssid_list.nr_bssid
saved_bssid_name = bssid_list.bssid_name{j};
if isequal(curr_bssid_name, saved_bssid_name)
% 저장된 것이 있으면,
isNew = false;
% 해당 idx로 설정한다.
wifiStruct.bssid_idx{i} = j;
break;
end
end
% 저장된 것에 없으면 해당 bssid를 list에 추가한다.
if isNew
bssid_list.nr_bssid = bssid_list.nr_bssid + 1;
bssid_list.bssid_name{bssid_list.nr_bssid} = curr_bssid_name;
wifiStruct.bssid_idx{i} = bssid_list.nr_bssid;
end
end
%% bssid idx를 확인한다.
for i = 1:bssid_list.nr_bssid
name = bssid_list.bssid_name{i};
idx = bssid_list.bssid_idx(i);
fprintf('bssid name: %s => idx: %d \n' ...
, name, idx);
end
%% wifi 데이터가 어떻게 처리되었는지 확인한다.
for i = 1:wifiStruct.nr_data
wifi_idx = wifiStruct.bssid_idx{i};
fprintf('%d => %d \n' ...
, i, wifi_idx);
end
%% mat으로 저장한다.
naoPosStruct % <= 시간과 위치 정보가 들어있다.
wifiStruct % <= 시간과 wifi 정보가 들어있다.
bssid_list % <= wifi bssid가 idx와 연결되는 매핑이 들어있다.
save('wifi_nao_data.mat' ...
, 'naoPosStruct', 'wifiStruct', 'bssid_list');
%%
'Enginius > Matlab' 카테고리의 다른 글
Reduce the Gap between SUBPLOT (subaxes) (3) | 2013.10.18 |
---|---|
Get width and height automatically for SUBPLOT (get_wh4subplot) (0) | 2013.09.29 |
Use Thread in Matlab by mex-compile C code (0) | 2013.09.29 |
Control Pioneer 3dx with MATLAB (0) | 2013.08.21 |
Automatic Color Distribution for Multiple Plot + Use Tex Equation in Plot (0) | 2013.08.09 |