importTrace('Energy_Data/ping70.lvm') power=data; pings70=moving(power,10); % Extract the different states from pings % Default parameters number_of_samples = 5; dchthresh = 1; fachthresh = 0.3; tail = 4100; % Assumed 4100 ms tail power_dch_70 = 0; power_pch_70 = 0; power_fach_70 = 0; transmission_time = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping1 = pings70(1800:14000); % Due to hysteries in the power data manual setting of intervals is needed dch_1_start = find(ping1(1000:1500) > dchthresh,1) + 1000; dch_1_end = find(ping1(5755:5900) < dchthresh,1) + 5755; dch_1_time = dch_1_end - dch_1_start; transmission_time = transmission_time + dch_1_time - tail; fach_to_pch_1_start = find(ping1(dch_1_start+dch_1_end:end,1) < fachthresh,1) + dch_1_start + dch_1_end; pch_to_dch_1_start = 0; pch_to_dch_1_end = dch_1_start; fach_1_time = fach_to_pch_1_start - dch_1_end; % Calculate average power consumption in every state (total power / time in state) time_dch = dch_1_time; time_fach = fach_1_time; power_fach_70 = power_fach_70 + sum(ping1(dch_1_end:fach_to_pch_1_start)); power_dch_70 = power_dch_70 + sum(ping1(dch_1_start:dch_1_end)); power_pch_70 = power_pch_70 + sum(ping1(1:pch_to_dch_1_end)); avg_power_70_ping_1 = sum(ping1(dch_1_end:fach_to_pch_1_start)) + sum(ping1(dch_1_start:dch_1_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping2 = pings70(34500:48200); % Due to hysteries in the power data manual setting of intervals is needed dch_2_start = find(ping2(1300:1500) > dchthresh,1) + 1300; dch_2_end = find(ping2(7493:7600) < dchthresh,1) + 7493; dch_2_time = dch_2_end - dch_2_start; transmission_time = transmission_time + dch_2_time - tail; fach_to_pch_2_start = find(ping2(dch_2_start+dch_2_end:end,1) < fachthresh,1) + dch_2_start + dch_2_end; pch_to_dch_2_start = 0; pch_to_dch_2_end = dch_2_start; fach_2_time = fach_to_pch_2_start - dch_2_end; % Calculate average power consumption in every state (total power / time in state) time_dch = time_dch + dch_2_time; time_fach = time_fach + fach_2_time; power_fach_70 = power_fach_70 + sum(ping2(dch_2_end:fach_to_pch_2_start)); power_dch_70 = power_dch_70 + sum(ping2(dch_2_start:dch_2_end)); power_pch_70 = power_pch_70 + sum(ping2(1:pch_to_dch_2_end)); avg_power_70_ping_2 = sum(ping2(dch_2_end:fach_to_pch_2_start)) + sum(ping2(dch_2_start:dch_2_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping3 = pings70(67200:79700); % Due to hysteries in the power data manual setting of intervals is needed dch_3_start = find(ping3(1400:1500) > dchthresh,1) + 1400; dch_3_end = find(ping3(6040:6100) < dchthresh,1) + 6040; dch_3_time = dch_3_end - dch_3_start; transmission_time = transmission_time + dch_3_time - tail; fach_to_pch_3_start = find(ping3(dch_3_start+dch_3_end:end,1) < fachthresh,1) + dch_3_start + dch_3_end; pch_to_dch_3_start = 0; pch_to_dch_3_end = dch_3_start; fach_3_time = fach_to_pch_3_start - dch_3_end; % Calculate average power consumption in every state (total power / time in state) time_dch = time_dch + dch_3_time; time_fach = time_fach + fach_3_time; power_fach_70 = power_fach_70 + sum(ping3(dch_3_end:fach_to_pch_3_start)); power_dch_70 = power_dch_70 + sum(ping3(dch_3_start:dch_3_end)); power_pch_70 = power_pch_70 + sum(ping3(1:pch_to_dch_3_end)); avg_power_70_ping_3 = sum(ping3(dch_3_end:fach_to_pch_3_start)) + sum(ping3(dch_3_start:dch_3_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping4 = pings70(147700:161000); % Due to hysteries in the power data manual setting of intervals is needed dch_4_start = find(ping4(1500:1600) > dchthresh,1) + 1500; dch_4_end = find(ping4(6600:6800) < dchthresh,1) + 6600; dch_4_time = dch_4_end - dch_4_start; transmission_time = transmission_time + dch_4_time - tail; fach_to_pch_4_start = find(ping4(dch_4_start+dch_4_end:end,1) < fachthresh,1) + dch_4_start + dch_4_end; pch_to_dch_4_start = 0; pch_to_dch_4_end = dch_4_start; fach_4_time = fach_to_pch_4_start - dch_4_end; % Calculate average power consumption in every state (total power / time in state) time_dch = time_dch + dch_4_time; time_fach = time_fach + fach_4_time; power_fach_70 = power_fach_70 + sum(ping4(dch_4_end:fach_to_pch_4_start)); power_dch_70 = power_dch_70 + sum(ping4(dch_4_start:dch_4_end)); power_pch_70 = power_pch_70 + sum(ping4(1:pch_to_dch_4_end)); avg_power_70_ping_4 = sum(ping4(dch_4_end:fach_to_pch_4_start)) + sum(ping4(dch_4_start:dch_4_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping5 = pings70(213000:225400); % Due to hysteries in the power data manual setting of intervals is needed dch_5_start = find(ping5(1400:1600) > dchthresh,1) + 1400; dch_5_end = find(ping5(6000:6100) < dchthresh,1) + 6000; dch_5_time = dch_5_end - dch_5_start; transmission_time = transmission_time + dch_5_time - tail; fach_to_pch_5_start = find(ping5(dch_5_start+dch_5_end:end,1) < fachthresh,1) + dch_5_start + dch_5_end; pch_to_dch_5_start = 0; pch_to_dch_5_end = dch_5_start; fach_5_time = fach_to_pch_5_start - dch_5_end; % Calculate average power consumption in every state (total power / time in state) time_dch = time_dch + dch_5_time; time_fach = time_fach + fach_5_time; power_fach_70 = power_fach_70 + sum(ping5(dch_5_end:fach_to_pch_5_start)); power_dch_70 = power_dch_70 + sum(ping5(dch_5_start:dch_5_end)); power_pch_70 = power_pch_70 + sum(ping5(1:pch_to_dch_5_end)); avg_power_70_ping_5 = sum(ping5(dch_5_end:fach_to_pch_5_start)) + sum(ping5(dch_5_start:dch_5_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% total_1_time = dch_1_time + fach_1_time; total_2_time = dch_2_time + fach_2_time; total_3_time = dch_3_time + fach_3_time; total_4_time = dch_4_time + fach_4_time; total_5_time = dch_5_time + fach_5_time; power_1_fach_70 = mean(ping1(dch_1_end:fach_to_pch_1_start)); power_2_fach_70 = mean(ping2(dch_2_end:fach_to_pch_2_start)); power_3_fach_70 = mean(ping3(dch_3_end:fach_to_pch_3_start)); power_4_fach_70 = mean(ping4(dch_4_end:fach_to_pch_4_start)); power_5_fach_70 = mean(ping5(dch_5_end:fach_to_pch_5_start)); mean_power_70_fach = (power_1_fach_70 + power_2_fach_70 + power_3_fach_70 + power_4_fach_70 + power_5_fach_70 ) / 5; power_1_dch_70 = mean(ping1(dch_1_start:dch_1_end)); power_2_dch_70 = mean(ping2(dch_2_start:dch_2_end)); power_3_dch_70 = mean(ping3(dch_3_start:dch_3_end)); power_4_dch_70 = mean(ping4(dch_4_start:dch_4_end)); power_5_dch_70 = mean(ping5(dch_5_start:dch_5_end)); power_dch_all_70 = [... ping1(dch_1_start:dch_1_end); ... ping2(dch_2_start:dch_2_end);... ping3(dch_3_start:dch_3_end);... ping4(dch_4_start:dch_4_end);... ping5(dch_5_start:dch_5_end)]; mean_power_70_dch = (power_1_dch_70 + power_2_dch_70 + power_3_dch_70 + power_4_dch_70 + power_5_dch_70 ) / 5; power_1_total = power_1_dch_70 + power_1_fach_70; power_2_total = power_2_dch_70 + power_2_fach_70; power_3_total = power_3_dch_70 + power_3_fach_70; power_4_total = power_4_dch_70 + power_4_fach_70; power_5_total = power_5_dch_70 + power_5_fach_70; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calculate and plot the average graph avg_dch_time_70 = time_dch/number_of_samples; avg_fach_time_70 = time_fach/number_of_samples; avg_dch_power_70 = mean(power_dch_70/number_of_samples)*(avg_dch_time_70*0.001); avg_fach_power_70 = mean(power_fach_70/number_of_samples)*(avg_fach_time_70*0.001); avg_total_power_70 = avg_dch_power_70 + avg_fach_power_70; avg_transmission_time_70 = transmission_time/number_of_samples; avg_names={'Total','DCH','FACH'}; bar([avg_total_power_70,avg_dch_power_70,avg_fach_power_70]); set(gca,'xticklabel',avg_names); title('Average Power Consumption of 5 pings in -70 dBm'); grid on