importTrace('Energy_Data/ping90.lvm') power=data; pings90=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_90 = 0; power_pch_90 = 0; power_fach_90 = 0; transmission_time = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 1 pings90(5000:17500 ping1 = pings90(5000:17500); % Due to hysteries in the power data manual setting of intervals is needed dch_1_start = find(ping1(1200:1700) > dchthresh,1) + 1200; dch_1_end = find(ping1(5900:6000) < dchthresh,1) + 5900; 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_90 = power_fach_90 + sum(ping1(dch_1_end:fach_to_pch_1_start)); power_dch_90 = power_dch_90 + sum(ping1(dch_1_start:dch_1_end)); power_pch_90 = power_pch_90 + sum(ping1(1:pch_to_dch_1_end)); avg_power_90_ping_1 = sum(ping1(dch_1_end:fach_to_pch_1_start)) + sum(ping1(dch_1_start:dch_1_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 2 pings90(37500:51000) ping2 = pings90(37500:51000); % Due to hysteries in the power data manual setting of intervals is needed dch_2_start = find(ping2(1500:1900) > dchthresh,1) + 1500; dch_2_end = find(ping2(6100:6250) < dchthresh,1) + 6100; 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_90 = power_fach_90 + sum(ping2(dch_2_end:fach_to_pch_2_start)); power_dch_90 = power_dch_90 + sum(ping2(dch_2_start:dch_2_end)); power_pch_90 = power_pch_90 + sum(ping2(1:pch_to_dch_2_end)); avg_power_90_ping_2 = sum(ping2(dch_2_end:fach_to_pch_2_start)) + sum(ping2(dch_2_start:dch_2_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 3 pings90(70400:83000) ping3 = pings90(70400:83000); % 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(6160:6200) < dchthresh,1) + 6160; 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_90 = power_fach_90 + sum(ping3(dch_3_end:fach_to_pch_3_start)); power_dch_90 = power_dch_90 + sum(ping3(dch_3_start:dch_3_end)); power_pch_90 = power_pch_90 + sum(ping3(1:pch_to_dch_3_end)); avg_power_90_ping_3 = sum(ping3(dch_3_end:fach_to_pch_3_start)) + sum(ping3(dch_3_start:dch_3_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 4 pings90(103000:118000) ping4 = pings90(103000:118000); % Due to hysteries in the power data manual setting of intervals is needed dch_4_start = find(ping4(1500:1700) > dchthresh,1) + 1500; dch_4_end = find(ping4(6000:6200) < dchthresh,1) + 6000; 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_90 = power_fach_90 + sum(ping4(dch_4_end:fach_to_pch_4_start)); power_dch_90 = power_dch_90 + sum(ping4(dch_4_start:dch_4_end)); power_pch_90 = power_pch_90 + sum(ping4(1:pch_to_dch_4_end)); avg_power_90_ping_4 = sum(ping4(dch_4_end:fach_to_pch_4_start)) + sum(ping4(dch_4_start:dch_4_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ping 5 pings90(133700:148500) ping5 = pings90(133700:148500); % Due to hysteries in the power data manual setting of intervals is needed dch_5_start = find(ping5(2960:3100) > dchthresh,1) + 2960; dch_5_end = find(ping5(8500:8700) < dchthresh,1) + 8500; 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_90 = power_fach_90 + sum(ping5(dch_5_end:fach_to_pch_5_start)); power_dch_90 = power_dch_90 + sum(ping5(dch_5_start:dch_5_end)); power_pch_90 = power_pch_90 + sum(ping5(1:pch_to_dch_5_end)); avg_power_90_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_90 = mean(ping1(dch_1_end:fach_to_pch_1_start)); power_2_fach_90 = mean(ping2(dch_2_end:fach_to_pch_2_start)); power_3_fach_90 = mean(ping3(dch_3_end:fach_to_pch_3_start)); power_4_fach_90 = mean(ping4(dch_4_end:fach_to_pch_4_start)); power_5_fach_90 = mean(ping5(dch_5_end:fach_to_pch_5_start)); power_dch_all_90 = [... 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_90_fach = (power_1_fach_90 + power_2_fach_90 + power_3_fach_90 + power_4_fach_90 + power_5_fach_90 ) / 5; power_1_dch_90 = mean(ping1(dch_1_start:dch_1_end)); power_2_dch_90 = mean(ping2(dch_2_start:dch_2_end)); power_3_dch_90 = mean(ping3(dch_3_start:dch_3_end)); power_4_dch_90 = mean(ping4(dch_4_start:dch_4_end)); power_5_dch_90 = mean(ping5(dch_5_start:dch_5_end)); mean_power_90_dch = (power_1_dch_90 + power_2_dch_90 + power_3_dch_90 + power_4_dch_90 + power_5_dch_90 ) / 5; power_1_total = power_1_dch_90 + power_1_fach_90; power_2_total = power_2_dch_90 + power_2_fach_90; power_3_total = power_3_dch_90 + power_3_fach_90; power_4_total = power_4_dch_90 + power_4_fach_90; power_5_total = power_5_dch_90 + power_5_fach_90; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calculate and plot the average graph avg_dch_time_90 = time_dch/number_of_samples; avg_fach_time_90 = time_fach/number_of_samples; avg_dch_power_90 = mean(power_dch_90/number_of_samples)*(avg_dch_time_90*0.001); avg_fach_power_90 = mean(power_fach_90/number_of_samples)*(avg_fach_time_90*0.001); avg_total_power_90 = avg_dch_power_90 + avg_fach_power_90; avg_transmission_time_90 = transmission_time/number_of_samples; avg_names={'Total','DCH','FACH'}; bar([avg_total_power_90,avg_dch_power_90,avg_fach_power_90]); set(gca,'xticklabel',avg_names); title('Average Power Consumption of 5 pings in -90 dBm'); grid on