importTrace('Energy_Data/ping110-2better.lvm') power=data; pings110=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_110 = 0; power_pch_110 = 0; power_fach_110 = 0; transmission_time = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 1 pings110(1800:13800) ping1 = pings110(1800:13800); % Due to hysteries in the power data manual setting of intervals is needed dch_1_start = find(ping1(990:1500) > dchthresh,1) + 990; dch_1_end = find(ping1(5500:5700) < dchthresh,1) + 5500; 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_110 = power_fach_110 + sum(ping1(dch_1_end:fach_to_pch_1_start)); power_dch_110 = power_dch_110 + sum(ping1(dch_1_start:dch_1_end)); power_pch_110 = power_pch_110 + sum(ping1(1:pch_to_dch_1_end)); avg_power_110_ping_1 = sum(ping1(dch_1_end:fach_to_pch_1_start)) + sum(ping1(dch_1_start:dch_1_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 2 pings110(32000:45800) ping2 = pings110(32000:45800); % Due to hysteries in the power data manual setting of intervals is needed dch_2_start = find(ping2(2560:3000) > dchthresh,1) + 2560; dch_2_end = find(ping2(7200:7300) < dchthresh,1) + 7200; 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_110 = power_fach_110 + sum(ping2(dch_2_end:fach_to_pch_2_start)); power_dch_110 = power_dch_110 + sum(ping2(dch_2_start:dch_2_end)); power_pch_110 = power_pch_110 + sum(ping2(1:pch_to_dch_2_end)); avg_power_110_ping_2 = sum(ping2(dch_2_end:fach_to_pch_2_start)) + sum(ping2(dch_2_start:dch_2_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 3 pings110(97700:110300) ping3 = pings110(97700:110300); % Due to hysteries in the power data manual setting of intervals is needed dch_3_start = find(ping3(1100:1800) > dchthresh,1) + 1100; dch_3_end = find(ping3(5900:6000) < dchthresh,1) + 5900; 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_110 = power_fach_110 + sum(ping3(dch_3_end:fach_to_pch_3_start)); power_dch_110 = power_dch_110 + sum(ping3(dch_3_start:dch_3_end)); power_pch_110 = power_pch_110 + sum(ping3(1:pch_to_dch_3_end)); avg_power_110_ping_3 = sum(ping3(dch_3_end:fach_to_pch_3_start)) + sum(ping3(dch_3_start:dch_3_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 4 pings110(130300:142600) ping4 = pings110(130300:142600); % Due to hysteries in the power data manual setting of intervals is needed dch_4_start = find(ping4(1300:1800) > dchthresh,1) + 1300; dch_4_end = find(ping4(5950:6100) < dchthresh,1) + 5950; 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_110 = power_fach_110 + sum(ping4(dch_4_end:fach_to_pch_4_start)); power_dch_110 = power_dch_110 + sum(ping4(dch_4_start:dch_4_end)); power_pch_110 = power_pch_110 + sum(ping4(1:pch_to_dch_4_end)); avg_power_110_ping_4 = sum(ping4(dch_4_end:fach_to_pch_4_start)) + sum(ping4(dch_4_start:dch_4_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 5 pings110(163000:175600) ping5 = pings110(163000:175600); % Due to hysteries in the power data manual setting of intervals is needed dch_5_start = find(ping5(1200:1700) > dchthresh,1) + 1200; dch_5_end = find(ping5(5950:6000) < dchthresh,1) + 5950; dch_5_time = dch_5_end - dch_5_start; transmission_time = transmission_time + dch_5_time - tail; fach_to_pch_5_start = find(ping5(10000:12500) < fachthresh,1) + 10000; 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_110 = power_fach_110 + sum(ping5(dch_5_end:fach_to_pch_5_start)); power_dch_110 = power_dch_110 + sum(ping5(dch_5_start:dch_5_end)); power_pch_110 = power_pch_110 + sum(ping5(1:pch_to_dch_5_end)); avg_power_110_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_110 = mean(ping1(dch_1_end:fach_to_pch_1_start)); power_2_fach_110 = mean(ping2(dch_2_end:fach_to_pch_2_start)); power_3_fach_110 = mean(ping3(dch_3_end:fach_to_pch_3_start)); power_4_fach_110 = mean(ping4(dch_4_end:fach_to_pch_4_start)); power_5_fach_110 = mean(ping5(dch_5_end:fach_to_pch_5_start)); mean_power_110_fach = (power_1_fach_110 + power_2_fach_110 + power_3_fach_110 + power_4_fach_110 + power_5_fach_110 ) / 5; power_1_dch_110 = mean(ping1(dch_1_start:dch_1_end)); power_2_dch_110 = mean(ping2(dch_2_start:dch_2_end)); power_3_dch_110 = mean(ping3(dch_3_start:dch_3_end)); power_4_dch_110 = mean(ping4(dch_4_start:dch_4_end)); power_5_dch_110 = mean(ping5(dch_5_start:dch_5_end)); power_dch_all_110 = [... 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_110_dch = (power_1_dch_110 + power_2_dch_110 + power_3_dch_110 + power_4_dch_110 + power_5_dch_110 ) / 5; power_1_total = power_1_dch_110 + power_1_fach_110; power_2_total = power_2_dch_110 + power_2_fach_110; power_3_total = power_3_dch_110 + power_3_fach_110; power_4_total = power_4_dch_110 + power_4_fach_110; power_5_total = power_5_dch_110 + power_5_fach_110; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calculate and plot the average graph avg_dch_time_110 = time_dch/number_of_samples; avg_fach_time_110 = time_fach/number_of_samples; avg_dch_power = mean(power_dch_110)*(avg_dch_time_110*0.001); avg_fach_power = mean(power_fach_110)*(avg_fach_time_110*0.001); avg_total_power = avg_dch_power + avg_fach_power; avg_transmission_time = transmission_time/number_of_samples; avg_names={'Total','DCH','FACH'}; bar([avg_total_power,avg_dch_power,avg_fach_power]); set(gca,'xticklabel',avg_names); title('Average Power Consumption of 5 pings in -110 dBm'); grid on