importTrace('Energy_Data/ping50.lvm') power=data; pings50=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_50 = 0; power_pch_50 = 0; power_fach_50 = 0; transmission_time = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping1 = pings50(1800:14000); % Due to hysteries in the power data manual setting of intervals is needed dch_1_start = find(ping1(900:1200) > dchthresh,1) + 900; dch_1_end = find(ping1(5600:5800) < dchthresh,1) + 5600; 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_50 = power_fach_50 + sum(ping1(dch_1_end:fach_to_pch_1_start)); power_dch_50 = power_dch_50 + sum(ping1(dch_1_start:dch_1_end)); power_pch_50 = power_pch_50 + sum(ping1(1:pch_to_dch_1_end)); avg_power_50_ping_1 = sum(ping1(dch_1_end:fach_to_pch_1_start)) + sum(ping1(dch_1_start:dch_1_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping2 = pings50(34200:46500); % Due to hysteries in the power data manual setting of intervals is needed dch_2_start = find(ping2(1200:1500) > dchthresh,1) + 1200; dch_2_end = find(ping2(5840:6000) < dchthresh,1) + 5840; 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_50 = power_fach_50 + sum(ping2(dch_2_end:fach_to_pch_2_start)); power_dch_50 = power_dch_50 + sum(ping2(dch_2_start:dch_2_end)); power_pch_50 = power_pch_50 + sum(ping2(1:pch_to_dch_2_end)); avg_power_50_ping_2 = sum(ping2(dch_2_end:fach_to_pch_2_start)) + sum(ping2(dch_2_start:dch_2_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping3 = pings50(66800:82000); % Due to hysteries in the power data manual setting of intervals is needed dch_3_start = find(ping3(1200:1600) > dchthresh,1) + 1200; dch_3_end = find(ping3(5860:6000) < dchthresh,1) + 5860; 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_50 = power_fach_50 + sum(ping3(dch_3_end:fach_to_pch_3_start)); power_dch_50 = power_dch_50 + sum(ping3(dch_3_start:dch_3_end)); power_pch_50 = power_pch_50 + sum(ping3(1:pch_to_dch_3_end)); avg_power_50_ping_3 = sum(ping3(dch_3_end:fach_to_pch_3_start)) + sum(ping3(dch_3_start:dch_3_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping4 = pings50(97000:113400); % Due to hysteries in the power data manual setting of intervals is needed dch_4_start = find(ping4(2800:2900) > dchthresh,1) + 2800; dch_4_end = find(ping4(7454:7600) < dchthresh,1) + 7454; 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_50 = power_fach_50 + sum(ping4(dch_4_end:fach_to_pch_4_start)); power_dch_50 = power_dch_50 + sum(ping4(dch_4_start:dch_4_end)); power_pch_50 = power_pch_50 + sum(ping4(1:pch_to_dch_4_end)); avg_power_50_ping_4 = sum(ping4(dch_4_end:fach_to_pch_4_start)) + sum(ping4(dch_4_start:dch_4_end)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ping5 = pings50(163000:176000); % Due to hysteries in the power data manual setting of intervals is needed dch_5_start = find(ping5(1600:1800) > dchthresh,1) + 1600; dch_5_end = find(ping5(6355:6500) < dchthresh,1) + 6355; 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_50 = power_fach_50 + sum(ping5(dch_5_end:fach_to_pch_5_start)); power_dch_50 = power_dch_50 + sum(ping5(dch_5_start:dch_5_end)); power_pch_50 = power_pch_50 + sum(ping5(1:pch_to_dch_5_end)); avg_power_50_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_50 = mean(ping1(dch_1_end:fach_to_pch_1_start)); power_2_fach_50 = mean(ping2(dch_2_end:fach_to_pch_2_start)); power_3_fach_50 = mean(ping3(dch_3_end:fach_to_pch_3_start)); power_4_fach_50 = mean(ping4(dch_4_end:fach_to_pch_4_start)); power_5_fach_50 = mean(ping5(dch_5_end:fach_to_pch_5_start)); mean_power_50_fach = (power_1_fach_50 + power_2_fach_50 + power_3_fach_50 + power_4_fach_50 + power_5_fach_50 ) / 5; power_1_dch_50 = mean(ping1(dch_1_start:dch_1_end)); power_2_dch_50 = mean(ping2(dch_2_start:dch_2_end)); power_3_dch_50 = mean(ping3(dch_3_start:dch_3_end)); power_4_dch_50 = mean(ping4(dch_4_start:dch_4_end)); power_5_dch_50 = mean(ping5(dch_5_start:dch_5_end)); power_dch_all_50 = [... 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_50_dch = (power_1_dch_50 + power_2_dch_50 + power_3_dch_50 + power_4_dch_50 + power_5_dch_50 ) / 5; power_1_total = power_1_dch_50 + power_1_fach_50; power_2_total = power_2_dch_50 + power_2_fach_50; power_3_total = power_3_dch_50 + power_3_fach_50; power_4_total = power_4_dch_50 + power_4_fach_50; power_5_total = power_5_dch_50 + power_5_fach_50; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calculate and plot the average graph avg_dch_time_50 = time_dch/number_of_samples; avg_fach_time_50 = time_fach/number_of_samples; avg_dch_power_50 = mean(power_dch_50/number_of_samples)*(avg_dch_time_50*0.001); avg_fach_power_50 = mean(power_fach_50/number_of_samples)*(avg_fach_time_50*0.001); avg_total_power_50 = avg_dch_power_50 + avg_fach_power_50; avg_transmission_time_50 = transmission_time/number_of_samples; avg_names={'Total','DCH','FACH'}; y = [avg_total_power_50,avg_dch_power_50,avg_fach_power_50]; h = bar(y); set(gca,'xticklabel',avg_names); title('Average Power Consumption of 5 pings in -50 dBm'); grid on