From a1642bf6ec7c69d5a875a9bd12a52615f4a8e1da Mon Sep 17 00:00:00 2001 From: HappyZ Date: Sun, 4 Feb 2018 18:36:19 -0600 Subject: [PATCH] matlab backup --- calibration_plot.m | 60 +++++++++++++++++++++++++++++++++++++++++-- calibration_walking.m | 51 ++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 calibration_walking.m diff --git a/calibration_plot.m b/calibration_plot.m index f48ef94..207a0fd 100644 --- a/calibration_plot.m +++ b/calibration_plot.m @@ -1,4 +1,4 @@ -clear all; +% clear all; %close all; folder = 'calibration_data/new_indoor/'; files = dir(folder); files = files(3:end); % remove . and .. @@ -21,6 +21,8 @@ files = files(orderI); median_result = zeros(1, length(files)); mean_result = zeros(1, length(files)); +median_rssi = zeros(1, length(files)); +median_diststd = zeros(1, length(files)); all_data = []; figure(1); clf; hold on; % figure(2); clf; hold on; @@ -56,6 +58,8 @@ for i = 1:length(files) mean_result(i) = mean(rawDist); median_result(i) = median(rawDist); + median_diststd(i) = median(sqrt(rawDistVar)); + median_rssi(i) = median(rssi); fprintf('distance: %d:\n', targets(i)); fprintf('* mean: %.2f (uncalibrated)\n', mean_result(i)); @@ -71,7 +75,11 @@ for i = 1:length(files) all_data = [... all_data,... - [rawDist; targets(i) * ones(1, size(rawDist, 2))]... + [rawDist;... + targets(i) * ones(1, size(rawDist, 2));... + sqrt(rawDistVar);... + rssi + ]... ]; end @@ -113,6 +121,17 @@ mstd_linear = sqrt(... sum((data_linear - all_data(2, :)).^2) / size(all_data, 2)); scatter(all_data(1, :), data_linear, 'c.'); + +diffs = data_linear - all_data(2, :); diffs_std = []; +figure(4); clf; hold on; +cdfplot(diffs) +% for i = 1:size(targets, 2) +% diffs_std(i) = std(diffs(all_data(2, :) == targets(i))); +% % pause; +% end +% scatter(median_rssi, diffs_std) + +figure(3); % parabolic fit param_parabolic = polyfit(all_data(1, :), all_data(2, :), 2); data_parabolic = ... @@ -123,9 +142,46 @@ mstd_parabolic = sqrt(... sum((data_parabolic - all_data(2, :)).^2) / size(all_data, 2)); scatter(all_data(1, :), data_parabolic, 'g.'); +xlabel('Raw Distance'); +ylabel('Target Distance'); legend('all data', 'median val', 'linear fit', 'parabolic fit', 'location', 'best') fprintf('Std Err:\n'); fprintf(' linear mode: %.6f\n', mstd_linear); fprintf(' parabolic mode: %.6f\n', mstd_parabolic); + + + +% +% diffs = []; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517706485.txt')]; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517706584.txt')]; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517706685.txt')]; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517706784.txt')]; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517706881.txt')]; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517706976.txt')]; +% diffs = [diffs, calibration_walking('calibration_data/walking_outdoor/result_walking_3800_to_100cm_1517707172.txt')]; +% pd = fitdist(diffs(~isnan(diffs))', 'Normal'); +% prob_fit = cdf(pd, diffs(~isnan(diffs))'); +% figure(10); clf; hold on; +% scatter(diffs(~isnan(diffs))', prob_fit); +% cdfplot(diffs); xlim([-200, 200]) +% xlabel('Distance Err (cm)') +% title('Distribution of Distance Err When Walking') +% legend('fitted \mu=53.5043, \sigma=72.1852', 'actual dist error', 'location', 'best') + +% +diffs = []; +diffs = [diffs, calibration_walking('calibration_data/walking_indoor/result_walking_3600_to_100cm_1517693155.txt')]; +diffs = [diffs, calibration_walking('calibration_data/walking_indoor/result_walking_3600_to_100cm_1517693287.txt')]; +diffs = [diffs, calibration_walking('calibration_data/walking_indoor/result_walking_3600_to_100cm_1517693408.txt')]; +diffs = [diffs, calibration_walking('calibration_data/walking_indoor/result_walking_3600_to_100cm_1517693534.txt')]; +pd = fitdist(diffs(~isnan(diffs))', 'Normal'); +prob_fit = cdf(pd, diffs(~isnan(diffs))'); +figure(11); clf; hold on; +scatter(diffs(~isnan(diffs))', prob_fit); +cdfplot(diffs); xlim([-200, 200]) +xlabel('Distance Err (cm)') +title('Distribution of Distance Err When Walking') +legend('fitted \mu=28.8055, \sigma=50.1228', 'actual dist error', 'location', 'best') \ No newline at end of file diff --git a/calibration_walking.m b/calibration_walking.m new file mode 100644 index 0000000..ca430f7 --- /dev/null +++ b/calibration_walking.m @@ -0,0 +1,51 @@ +function diffs = calibration_walking(filename) + startI = 3600; + endI = 100; + if contains(filename, '_r_') + startI = 100; + endI = 3600; + end +% param_linear = [0.8927,553.3157]; % outdoor + param_linear = [0.9376, 558.0551]; % indoor + data = readtable(filename, 'ReadVariableNames', 0); + data = data(2:end, :); + caliDist = str2double(table2array(data(:, 2)))'; + rawRTT = str2double(table2array(data(:, 3)))'; + rawRTTVar = str2double(table2array(data(:, 4)))'; + rawDist = str2double(table2array(data(:, 5)))'; + rawDistVar = str2double(table2array(data(:, 6)))'; + rssi = str2double(table2array(data(:, 7)))'; + time = str2double(table2array(data(:, 8)))'; + + rawDist = movmean(rawDist, 10, 'omitnan'); + rssi = movmean(rssi, 10, 'omitnan'); +% for i = size(caliDist, 2) - 3: -4: 1 +% rawDist(i) = nanmean(rawDist(i: i + 3)); +% rawDist(i + 1: i + 3) = []; +% rssi(i) = nanmean(rssi(i: i + 3)); +% rssi(i + 1: i + 3) = []; +% time(i + 1: i + 3) = []; +% end + + dist = rawDist * param_linear(1) + param_linear(2); + targets = (time - time(1)) * (endI - startI) / (time(end) - time(1)) + startI; + diffs = (targets - dist); + fprintf("** mean diff: %.4f cm\n", nanmean(diffs)); + fprintf("** median diff: %.4f cm\n", nanmedian(diffs)); + + figure(1); clf; + scatter3(time, dist, rssi); hold on; scatter(time, dist, '.') + plot([time(1), time(end)], [startI, endI]); view([0, 90]); + if contains(filename, '_r_') + title('back') + else + title('front') + end + + figure(2); hold on; + pd = fitdist(diffs(~isnan(diffs))', 'Normal') + prob_fit = cdf(pd, diffs(~isnan(diffs))'); + scatter(diffs(~isnan(diffs))', prob_fit); + cdfplot(diffs); +% histogram(diffs, 'BinWidth', 1, 'Normalization', 'pdf'); +end \ No newline at end of file