% Raw data results 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Default parameters
rss_labels = ['-50 dBm', '-70 dBm', '-90 dBm','-110 dBm'];
rss_labels_no_dbm = {'-50' '-70' '-90' '-110'};

%%%%%%%%%%%%%%%
%% Pings
%%%%%%%%%%%%%%%
% -50 dBm
ping_50_dch_time = 4623;
ping_50_fach_time = 7054;

ping_50_avg_1 = power_1_dch_50;
ping_50_avg_2 = power_2_dch_50;
ping_50_avg_3 = power_3_dch_50;
ping_50_avg_4 = power_4_dch_50;
ping_50_avg_5 = power_5_dch_50;

ping_50_mean = (ping_50_avg_1 + ping_50_avg_2 + ping_50_avg_3 + ping_50_avg_4 + ping_50_avg_5) / 5;

ping_50_y = [ping_50_avg_1; ping_50_avg_2; ping_50_avg_3; ping_50_avg_4; ping_50_avg_5];

%%%%%%%%%%%%%%%
% -70 dBm
ping_70_dch_time = 5024;
ping_70_fach_time = 5.997200000000000e+03;

ping_70_avg_1 = power_1_dch_70;
ping_70_avg_2 = power_2_dch_70;
ping_70_avg_3 = power_3_dch_70;
ping_70_avg_4 = power_4_dch_70;
ping_70_avg_5 = power_5_dch_70;

ping_70_y = [ping_70_avg_1; ping_70_avg_2; ping_70_avg_3; ping_70_avg_4; ping_70_avg_5];

ping_70_mean = mean(ping_70_y);
%%%%%%%%%%%%%%%
% -90 dBm
ping_90_dch_time = 4.845200000000000e+03;
ping_90_fach_time = 6.683400000000000e+03;

ping_90_avg_1 = power_1_dch_90;
ping_90_avg_2 = power_2_dch_90;
ping_90_avg_3 = power_3_dch_90;
ping_90_avg_4 = power_4_dch_90;
ping_90_avg_5 = power_5_dch_90;

ping_90_y = [ping_90_avg_1; ping_90_avg_2; ping_90_avg_3; ping_90_avg_4; ping_90_avg_5];

ping_90_mean = mean(ping_90_y);
%%%%%%%%%%%%%%%
% -110 dBm
ping_110_dch_time = 4704;
ping_110_fach_time = 5994;

ping_110_avg_1 = power_1_dch_110;
ping_110_avg_2 = power_2_dch_110;
ping_110_avg_3 = power_3_dch_110;
ping_110_avg_4 = power_4_dch_110;
ping_110_avg_5 = power_5_dch_110;

ping_110_y = [ping_110_avg_1; ping_110_avg_2; ping_110_avg_3; ping_110_avg_4; ping_110_avg_5];

ping_110_mean = mean(ping_110_y);
%%%%%%%%%%%%%%%
% Averages
avg50_ping = mean(ping_50_y);
avg70_ping = mean(ping_70_y);
avg90_ping = mean(ping_90_y);
avg110_ping = mean(ping_110_y);

%%%%%%%%%%%%%%%
% Plots for pings
figure(1);
boxplot([ping_50_y, ping_70_y, ping_90_y, ping_110_y],'notch','off','labels',{'-50','-70','-90','-110'});
xlabel('RSSI [dBm]');

%%%%%%%%%%
figure(6);
cdfplot(ping_50_y);
hold on
cdfplot(ping_110_y);

legend('-50 dBm','-110 dBm','Location','NW')
xlabel('');
ylabel('');
hold off

%%%%%%%%%%%
fig_mean = figure('Pos',[440 500 461 146]);

% Create the column and row names in cell arrays 
rnames = {'Mean [W]'};
cnames = {'-50 dBm','-70 dBm','-90 dBm', '-110 dBm'};

%
mean_data = [];
mean_data(1,1) = 1.13;% round(ping_50_mean,2);
mean_data(1,2) = 1.14;%round(ping_70_mean,2);
mean_data(1,3) = 1.16;%round(ping_90_mean,2);
mean_data(1,4) = 1.22;%round(ping_110_mean,2);

% Create the uitable
t = uitable(fig_mean,'Data',mean_data,...
            'ColumnName',cnames,... 
            'RowName',rnames);

% Set width and height
t.Position(3) = t.Extent(3);
t.Position(4) = t.Extent(4);

% percentage increase
ping_70_90 = ((round(ping_90_mean,2)/round(ping_70_mean,2)) - 1 )* 100;
ping_90_110 = ((round(ping_110_mean,2)/round(ping_90_mean,2)) - 1 ) * 100 ;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Datarate
%%%%%%%%%%%%%%%
% -50 dBm
rate50_down_unlimited_power = mean(pr50(rate50_dch_start_1:rate50_dch_end_1-tail));
rate50_up_unlimited_power = mean(pr50(rate50_dch_start_2:rate50_dch_end_2-tail));
rate50_down_1mbps_power = mean(pr50(rate50_dch_start_3:rate50_dch_end_3-tail));
rate50_down_100kbps_power = mean(pr50(rate50_dch_start_4:rate50_dch_end_4-tail));

rate50_down_unlimited_power_readings = pr50(rate50_dch_start_1:rate50_dch_end_1-tail);
rate50_down_1mbps_power_readings = pr50(rate50_dch_start_3:rate50_dch_end_3-tail);
rate50_down_100kbps_power_readings = pr50(rate50_dch_start_4:rate50_dch_end_4-tail);
rate50_up_unlimited_power_readings = pr50(rate50_dch_start_2:rate50_dch_end_2-tail);
%%%%%%%%%%%%%%%
% -70 dBm
rate70_down_unlimited_power = mean(pr70(rate70_dch_start_1:rate70_dch_end_1-tail));
rate70_up_unlimited_power = mean(pr70(rate70_dch_start_2:rate70_dch_end_2-tail));
rate70_down_1mbps_power = mean(pr70(rate70_dch_start_3:rate70_dch_end_3-tail));
rate70_down_100kbps_power = mean(pr70(rate70_dch_start_4:rate70_dch_end_4-tail));

rate70_down_unlimited_power_readings = pr70(rate70_dch_start_1:rate70_dch_end_1-tail);
rate70_down_1mbps_power_readings = pr70(rate70_dch_start_3:rate70_dch_end_3-tail);
rate70_down_100kbps_power_readings = pr70(rate70_dch_start_4:rate70_dch_end_4-tail);
rate70_up_unlimited_power_readings = pr70(rate70_dch_start_2:rate70_dch_end_2-tail);
%%%%%%%%%%%%%%%
% -90 dBm
rate90_down_unlimited_power = mean(pr90(rate90_dch_start_1:rate90_dch_end_1-tail));
rate90_up_unlimited_power = mean(pr90(rate90_dch_start_2:rate90_dch_end_2-tail));
rate90_down_1mbps_power = mean(pr90(rate90_dch_start_3:rate90_dch_end_3-tail));
rate90_down_100kbps_power = mean(pr90(rate90_dch_start_4:rate90_dch_end_4-tail));

rate90_down_unlimited_power_readings = pr90(rate90_dch_start_1:rate90_dch_end_1-tail);
rate90_down_1mbps_power_readings = pr90(rate90_dch_start_3:rate90_dch_end_3-tail);
rate90_down_100kbps_power_readings = pr90(rate90_dch_start_4:rate90_dch_end_4-tail);
rate90_up_unlimited_power_readings = pr90(rate90_dch_start_2:rate90_dch_end_2-tail);
%%%%%%%%%%%%%%%
% -110 dBm
rate110_down_unlimited_power = mean(pr110(rate110_dch_start_1:rate110_dch_end_1-tail));
rate110_up_unlimited_power = mean(pr110(rate110_dch_start_2:rate110_dch_end_2-tail));
rate110_down_1mbps_power = mean(pr110(rate110_dch_start_3:rate110_dch_end_3-tail));
rate110_down_100kbps_power = mean(pr110(rate110_dch_start_4:rate110_dch_end_4-tail));

rate110_down_unlimited_power_readings = pr110(rate110_dch_start_1:rate110_dch_end_1-tail);
rate110_down_1mbps_power_readings = pr110(rate110_dch_start_3:rate110_dch_end_3-tail);
rate110_down_100kbps_power_readings = pr110(rate110_dch_start_4:rate110_dch_end_4-tail);
rate110_up_unlimited_power_readings = pr110(rate110_dch_start_2:rate110_dch_end_2-tail);

%%%%%%%%%%%%%%%
% Energy model
%%%%%%%%%%%%%%%
dch_50_base = mean_power_50_dch;
dch_70_base = mean_power_70_dch;
dch_90_base = mean_power_90_dch;
dch_110_base = mean_power_110_dch;

fach_50_base = mean_power_50_fach;
fach_70_base = mean_power_70_fach;
fach_90_base = mean_power_90_fach;
fach_110_base = mean_power_110_fach;

%%%%%%%%%%%%%%%%%%
% Plots for datarates
%%%%%%%%%%%%%%%%%%
% combined per RSS
rate50_combined_power = [rate50_up_unlimited_power;rate50_down_unlimited_power;rate50_down_1mbps_power;rate50_down_100kbps_power;mean_power_50_dch];
rate70_combined_power = [rate70_up_unlimited_power;rate70_down_unlimited_power;rate70_down_1mbps_power;rate70_down_100kbps_power;mean_power_70_dch];
rate90_combined_power = [rate90_up_unlimited_power;rate90_down_unlimited_power;rate90_down_1mbps_power;rate90_down_100kbps_power;mean_power_90_dch];
rate110_combined_power = [rate110_up_unlimited_power;rate110_down_unlimited_power;rate110_down_1mbps_power;rate110_down_100kbps_power;mean_power_110_dch];

combined_power_rss = [rate50_combined_power, rate70_combined_power, rate90_combined_power, rate110_combined_power];
combined_power_names = [-50 ,-70 ,-90,-110;-50 ,-70 ,-90,-110;-50 ,-70 ,-90,-110;-50 ,-70 ,-90,-110;-50 ,-70 ,-90,-110];
combined_power_rss_mean = [mean(rate50_combined_power), mean(rate70_combined_power), mean(rate90_combined_power), mean(rate110_combined_power)];
combined_names = [-50,-70,-90,-110];

figure(13);
boxplot(combined_power_rss,'notch','off','labels',{'-50','-70','-90','-110'});
xlabel('RSSI [dBm]');
ylabel('Power [W]');

figure(89);
%plot(combined_power_names,combined_power_rss);
%xlabel('RSSI [dBm]');
%ylabel('Power [W]');

hold on;
poly_p = polyfit(combined_power_names,combined_power_rss,3);
poly_pp = polyval(poly_p, combined_names);
plot(poly_pp)

legend('3rd degree','Location','NorthWest');

hold off;

%%%%%%%%%%%%%%%%%%
% with unlimited
rate50_down_power = [rate50_down_unlimited_power,rate50_down_1mbps_power,rate50_down_100kbps_power];
rate70_down_power = [rate70_down_unlimited_power,rate70_down_1mbps_power,rate70_down_100kbps_power];
rate90_down_power = [rate90_down_unlimited_power,rate90_down_1mbps_power,rate90_down_100kbps_power];
rate110_down_power = [rate110_down_unlimited_power,rate110_down_1mbps_power,rate110_down_100kbps_power];

to_mbps = 8*10^-6;
rate50_down_speeds = [rate50_down_unlimited*to_mbps,rate50_down_1Mbps*to_mbps,rate50_down_100kbps*to_mbps];
rate70_down_speeds = [rate70_down_unlimited*to_mbps,rate70_down_1Mbps*to_mbps,rate70_down_100kbps*to_mbps];
rate90_down_speeds = [rate90_down_unlimited*to_mbps,rate90_down_1Mbps*to_mbps,rate90_down_100kbps*to_mbps];
rate110_down_speeds = [rate110_down_unlimited*to_mbps,rate110_down_1Mbps*to_mbps,rate110_down_100kbps*to_mbps];

figure(19);
plot(rate110_down_speeds,rate110_down_power,'bs--');
hold on;

plot(rate90_down_speeds,rate90_down_power,'r*--');
plot(rate70_down_speeds,rate70_down_power,'ko--');
plot(rate50_down_speeds,rate50_down_power,'mx--');

%rate110_down_unlimited_power_readings 
%rate110_down_1mbps_power_readings
%rate110_down_100kbps_power_readings
errorbar(rate110_down_speeds(1),mean(rate110_down_unlimited_power_readings),std(rate110_down_unlimited_power_readings),'bs');
errorbar(rate110_down_speeds(2),mean(rate110_down_1mbps_power_readings),std(rate110_down_1mbps_power_readings),'bs');
errorbar(rate110_down_speeds(3),mean(rate110_down_100kbps_power_readings),std(rate110_down_100kbps_power_readings),'bs');

errorbar(rate90_down_speeds(1),mean(rate90_down_unlimited_power_readings),std(rate90_down_unlimited_power_readings),'r*');
errorbar(rate90_down_speeds(2),mean(rate90_down_1mbps_power_readings),std(rate90_down_1mbps_power_readings),'r*');
errorbar(rate90_down_speeds(3),mean(rate90_down_100kbps_power_readings),std(rate90_down_100kbps_power_readings),'r*');

errorbar(rate70_down_speeds(1),mean(rate70_down_unlimited_power_readings),std(rate70_down_unlimited_power_readings),'ko');
errorbar(rate70_down_speeds(2),mean(rate70_down_1mbps_power_readings),std(rate70_down_1mbps_power_readings),'ko');
errorbar(rate70_down_speeds(3),mean(rate70_down_100kbps_power_readings),std(rate70_down_100kbps_power_readings),'ko');

errorbar(rate50_down_speeds(1),mean(rate50_down_unlimited_power_readings),std(rate50_down_unlimited_power_readings),'mx');
errorbar(rate50_down_speeds(2),mean(rate50_down_1mbps_power_readings),std(rate50_down_1mbps_power_readings),'mx');
errorbar(rate50_down_speeds(3),mean(rate50_down_100kbps_power_readings),std(rate50_down_100kbps_power_readings),'mx');


hold off;
legend('-110 dBm', '-90 dBm', '-70 dBm','-50 dBm');
xlabel('Data rate [Mbps]');
ylabel('Power [W]');

%%%%%%%%%%%%
% std for power and data rate
std_power_rate= [...
    std(rate50_down_power) ...
    std(rate70_down_power) ...
    std(rate90_down_power) ...
    std(rate110_down_power)];
    
std_rate_speed = [...
    std(rate50_down_speeds)...
    std(rate70_down_speeds)...
    std(rate90_down_speeds)...
    std(rate110_down_speeds)];


mean_rate_speed = [...
    mean(rate50_down_speeds)...
    mean(rate70_down_speeds)...
    mean(rate90_down_speeds)...
    mean(rate110_down_speeds)];


power_rate =  [...
    rate50_down_power ...
    rate70_down_power ...
    rate90_down_power ...
    rate110_down_power];


mean_power_rate =  [...
    mean(rate50_down_power) ...
    mean(rate70_down_power) ...
    mean(rate90_down_power) ...
    mean(rate110_down_power)];

rate_speed = [...
    rate50_down_speeds...
    rate70_down_speeds...
    rate90_down_speeds...
    rate110_down_speeds];


figure(20);

%errorbarxy(rate_speed,power_rate,std_rate_speed,std_power_rate);

plot(...
    std(rate110_down_speeds),std(rate110_down_power),'s--',...
    std(rate90_down_speeds),std(rate90_down_power),'*--',...
    std(rate70_down_speeds),std(rate70_down_power),'o--',...
    std(rate50_down_speeds),std(rate50_down_power),'x--');

legend('-110 dBm', '-90 dBm', '-70 dBm','-50 dBm','location','North');
xlabel('Data rate [Mbps]');
ylabel('Power [W]');


%%%%%%%%%%%%%%%%%%
% without unlimited
rate50_down_power = [rate50_down_1mbps_power,rate50_down_100kbps_power];
rate70_down_power = [rate70_down_1mbps_power,rate70_down_100kbps_power];
rate90_down_power = [rate90_down_1mbps_power,rate90_down_100kbps_power];
rate110_down_power = [rate110_down_1mbps_power,rate110_down_100kbps_power];

minimum_diff_100kbps = rate110_down_100kbps_power - rate90_down_100kbps_power;
minimum_diff_1Mbps = rate110_down_1mbps_power - rate90_down_1mbps_power;

rate50_down_speeds = [rate50_down_1Mbps,rate50_down_100kbps];
rate70_down_speeds = [rate70_down_1Mbps,rate70_down_100kbps];
rate90_down_speeds = [rate90_down_1Mbps,rate90_down_100kbps];
rate110_down_speeds = [rate110_down_1Mbps,rate110_down_100kbps];

figure(38);
plot(rate110_down_speeds,rate110_down_power,rate90_down_speeds,rate90_down_power,rate70_down_speeds,rate70_down_power,rate50_down_speeds,rate50_down_power);
legend('-110 dBm', '-90 dBm', '-70 dBm','-50 dBm');
xlabel('Data rate [Bps]');
ylabel('Power [W]');

%%%%%%%%%%%%%%%%%%
%upload unlimited
rate_up_power = [rate50_up_unlimited_power,rate70_up_unlimited_power,rate90_up_unlimited_power,rate110_up_unlimited_power];
rate_up_speed = [rate50_up_unlimited,rate70_up_unlimited,rate90_up_unlimited,rate110_up_unlimited];

minimum_diff_up_unlimited = rate110_up_unlimited_power - rate90_up_unlimited_power;

rate_up_x_func = -50:-20:-110;

figure(4);
ax_rate_bar_up = subplot(1,1,1);
bar(ax_rate_bar_up,rate_up_power);
set(gca,'xticklabel',rss_labels_no_dbm) 

xlabel('RSS [dBm]');
ylabel('Power [W]');

%ax_rate_bar_up = subplot(1,2,2);
%bar(ax_rate_bar_up,rate_up_speed);
%set(gca,'xticklabel',rss_labels_no_dbm) 

%xlabel('RSS [dBm]');
%ylabel('Data rate [Bps]');

%%%%%%%%%%%%%%%%%%
% Download unlimited
rate_down_power = [rate50_down_unlimited_power,rate70_down_unlimited_power,rate90_down_unlimited_power,rate110_down_unlimited_power];
rate_down_speed = [rate50_down_unlimited,rate70_down_unlimited,rate90_down_unlimited,rate110_down_unlimited];

minimum_diff_down_unlimited = rate110_down_unlimited_power - rate90_down_unlimited_power;

increase_rate_90_110 = (((round(rate110_down_unlimited_power,2)/round(rate90_down_unlimited_power,2)))-1) * 100;

diff_down_up_unlimited = (((round(rate110_up_unlimited_power,2)/round(rate110_down_unlimited_power,2)))-1) * 100;

rate_down_x_func = -50:-20:-110;

figure(5);
ax_rate_bar = subplot(1,1,1);
bar(ax_rate_bar,rate_down_power);
set(gca,'xticklabel',rss_labels_no_dbm) 

xlabel('RSS [dBm]');
ylabel('Power [W]');

%%%%%%%%%%%%%%%%%%%%
% Both unlimted and std

rate_unlimited =[...
    rate_down_power(1) rate_up_power(1); ...
    rate_down_power(2) rate_up_power(2) ; ...
    rate_down_power(3) rate_up_power(3) ; ...
    rate_down_power(4) rate_up_power(4) ;];

rate_std_un = [...
    std(rate_down_power(1), rate_up_power(1)) ...
    std(rate_down_power(2), rate_up_power(2)) ...
    std(rate_down_power(3), rate_up_power(3)) ...
    std(rate_down_power(4), rate_up_power(4))];

figure(77);
ax_unlimited_bar = subplot(1,1,1);
bar(ax_unlimited_bar,rate_unlimited);
set(gca,'xticklabel',rss_labels_no_dbm) 
hold on;

errorbar(0.85,mean(rate50_down_unlimited_power_readings), std(rate50_down_unlimited_power_readings));
errorbar(1.15,mean(rate50_up_unlimited_power_readings), std(rate50_up_unlimited_power_readings));

errorbar(1.85,mean(rate70_down_unlimited_power_readings), std(rate70_down_unlimited_power_readings));
errorbar(2.15,mean(rate70_up_unlimited_power_readings), std(rate70_up_unlimited_power_readings));

errorbar(2.85,mean(rate90_down_unlimited_power_readings), std(rate90_down_unlimited_power_readings));
errorbar(3.15,mean(rate90_up_unlimited_power_readings), std(rate90_up_unlimited_power_readings));

errorbar(3.85,mean(rate110_down_unlimited_power_readings), std(rate110_down_unlimited_power_readings));
errorbar(4.15,mean(rate110_up_unlimited_power_readings), std(rate110_up_unlimited_power_readings));

hold off;

xlabel('RSS [dBm]');
ylabel('Average Power [W]');
legend('Download', 'Upload',  'Location', 'Northwest');

figure(78);
ax_unlimited_bar2 = subplot(1,1,1);
bar(ax_unlimited_bar2,rate_std_un);
set(gca,'xticklabel',rss_labels_no_dbm) 

xlabel('RSS [dBm]');
ylabel('STD');