Loading bin/msp430-etv +22 −2 Original line number Diff line number Diff line Loading @@ -15,6 +15,22 @@ import time opt = dict() def running_mean(x: np.ndarray, N: int) -> np.ndarray: """ Compute `N` elements wide running average over `x`. :param x: 1-Dimensional NumPy array :param N: how many items to average. Should be even for optimal results. """ # to ensure that output.shape == input.shape, we need to insert data # at the boundaries boundary_array = np.insert(x, 0, np.full((N // 2), x[0])) boundary_array = np.append(boundary_array, np.full((N // 2 + N % 2), x[-1])) print(boundary_array) cumsum = np.cumsum(boundary_array) return (cumsum[N:] - cumsum[:-N]) / N def measure_data(filename, duration): # libmsp430.so must be available if not 'LD_LIBRARY_PATH' in os.environ: Loading Loading @@ -274,6 +290,9 @@ if __name__ == '__main__': print('Average per-peak energy (delta over baseline): {:.0f} µJ : {:.9f}'.format( delta_energy * 1e6 / len(peaks), delta_energy / len(peaks))) power_from_current = data[:, 1] * data[:, 2] * 1e-12 power_from_energy = ((data[1:, 3] - data[:-1, 3]) * 1e-9) / ((data[1:, 0] - data[:-1, 0]) * 1e-6) mean_power = running_mean(power_from_energy, 10) if 'stat' in opt: mean_voltage = np.mean(data[:, 2]) Loading @@ -286,8 +305,9 @@ if __name__ == '__main__': if 'plot' in opt: # nA * mV = pW pwrhandle, = plt.plot(data[:, 0] * 1e-6, data[:, 1] * data[:, 2] * 1e-12, 'b-', label='P=U*I', markersize=1) energyhandle, = plt.plot(data[1:, 0] * 1e-6, ((data[1:, 3] - data[:-1, 3]) * 1e-9) / ((data[1:, 0] - data[:-1, 0]) * 1e-6), 'r-', label='P=ΔE/Δt', markersize=1) pwrhandle, = plt.plot(data[:, 0] * 1e-6, power_from_current, 'b-', label='P=U*I', markersize=1) energyhandle, = plt.plot(data[1:, 0] * 1e-6, power_from_energy, 'r-', label='P=ΔE/Δt', markersize=1) energyhandle2, = plt.plot(data[1:, 0] * 1e-6, mean_power, 'y-', label='E/Δt', markersize=1) plt.legend(handles=[pwrhandle, energyhandle]) plt.xlabel('Time [s]') plt.ylabel('Power [W]') Loading Loading
bin/msp430-etv +22 −2 Original line number Diff line number Diff line Loading @@ -15,6 +15,22 @@ import time opt = dict() def running_mean(x: np.ndarray, N: int) -> np.ndarray: """ Compute `N` elements wide running average over `x`. :param x: 1-Dimensional NumPy array :param N: how many items to average. Should be even for optimal results. """ # to ensure that output.shape == input.shape, we need to insert data # at the boundaries boundary_array = np.insert(x, 0, np.full((N // 2), x[0])) boundary_array = np.append(boundary_array, np.full((N // 2 + N % 2), x[-1])) print(boundary_array) cumsum = np.cumsum(boundary_array) return (cumsum[N:] - cumsum[:-N]) / N def measure_data(filename, duration): # libmsp430.so must be available if not 'LD_LIBRARY_PATH' in os.environ: Loading Loading @@ -274,6 +290,9 @@ if __name__ == '__main__': print('Average per-peak energy (delta over baseline): {:.0f} µJ : {:.9f}'.format( delta_energy * 1e6 / len(peaks), delta_energy / len(peaks))) power_from_current = data[:, 1] * data[:, 2] * 1e-12 power_from_energy = ((data[1:, 3] - data[:-1, 3]) * 1e-9) / ((data[1:, 0] - data[:-1, 0]) * 1e-6) mean_power = running_mean(power_from_energy, 10) if 'stat' in opt: mean_voltage = np.mean(data[:, 2]) Loading @@ -286,8 +305,9 @@ if __name__ == '__main__': if 'plot' in opt: # nA * mV = pW pwrhandle, = plt.plot(data[:, 0] * 1e-6, data[:, 1] * data[:, 2] * 1e-12, 'b-', label='P=U*I', markersize=1) energyhandle, = plt.plot(data[1:, 0] * 1e-6, ((data[1:, 3] - data[:-1, 3]) * 1e-9) / ((data[1:, 0] - data[:-1, 0]) * 1e-6), 'r-', label='P=ΔE/Δt', markersize=1) pwrhandle, = plt.plot(data[:, 0] * 1e-6, power_from_current, 'b-', label='P=U*I', markersize=1) energyhandle, = plt.plot(data[1:, 0] * 1e-6, power_from_energy, 'r-', label='P=ΔE/Δt', markersize=1) energyhandle2, = plt.plot(data[1:, 0] * 1e-6, mean_power, 'y-', label='E/Δt', markersize=1) plt.legend(handles=[pwrhandle, energyhandle]) plt.xlabel('Time [s]') plt.ylabel('Power [W]') Loading