summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2018-02-12 15:47:11 +0100
committerDaniel Friesel <derf@finalrewind.org>2018-02-12 16:30:18 +0100
commit7c26be2cad657e9a08e229bb541a7d926079f6a9 (patch)
tree78513adb07d5d1ffa38e4370c99e83f31383bad9 /bin
parent5ddb53dbc414ebb441cc44ac00a91b9ec3d40285 (diff)
determine functions for parameter-dependent model attributes
Diffstat (limited to 'bin')
-rwxr-xr-xbin/analyze-archive.py59
-rwxr-xr-xbin/test.py34
2 files changed, 69 insertions, 24 deletions
diff --git a/bin/analyze-archive.py b/bin/analyze-archive.py
index e5f3783..81d6f54 100755
--- a/bin/analyze-archive.py
+++ b/bin/analyze-archive.py
@@ -10,31 +10,42 @@ if __name__ == '__main__':
preprocessed_data = raw_data.get_preprocessed_data()
model = EnergyModel(preprocessed_data)
- print('--- simple static model ---')
- static_model = model.get_static()
+ #print('--- simple static model ---')
+ #static_model = model.get_static()
+ #for state in model.states():
+ # print('{:10s}: {:.0f} µW ({:.2f})'.format(
+ # state,
+ # static_model(state, 'power'),
+ # model.generic_param_dependence_ratio(state, 'power')))
+ # for param in model.parameters():
+ # print('{:10s} dependence on {:15s}: {:.2f}'.format(
+ # '',
+ # param,
+ # model.param_dependence_ratio(state, 'power', param)))
+ #for trans in model.transitions():
+ # print('{:10s}: {:.0f} / {:.0f} / {:.0f} pJ ({:.2f} / {:.2f} / {:.2f})'.format(
+ # trans, static_model(trans, 'energy'),
+ # static_model(trans, 'rel_energy_prev'),
+ # static_model(trans, 'rel_energy_next'),
+ # model.generic_param_dependence_ratio(trans, 'energy'),
+ # model.generic_param_dependence_ratio(trans, 'rel_energy_prev'),
+ # model.generic_param_dependence_ratio(trans, 'rel_energy_next')))
+ # print('{:10s}: {:.0f} µs'.format(trans, static_model(trans, 'duration')))
+ #model.assess(static_model)
+
+ #print('--- LUT ---')
+ #lut_model = model.get_param_lut()
+ #model.assess(lut_model)
+
+ print('--- param model ---')
+ param_model, param_info = model.get_fitted()
for state in model.states():
- print('{:10s}: {:.0f} µW ({:.2f})'.format(
- state,
- static_model(state, 'power'),
- model.generic_param_dependence_ratio(state, 'power')))
- for param in model.parameters():
- print('{:10s} dependence on {:15s}: {:.2f}'.format(
- '',
- param,
- model.param_dependence_ratio(state, 'power', param)))
+ for attribute in ['power']:
+ if param_info(state, attribute):
+ print('{:10s}: {}'.format(state, param_info(state, attribute)['function']._model_str))
for trans in model.transitions():
- print('{:10s}: {:.0f} / {:.0f} / {:.0f} pJ ({:.2f} / {:.2f} / {:.2f})'.format(
- trans, static_model(trans, 'energy'),
- static_model(trans, 'rel_energy_prev'),
- static_model(trans, 'rel_energy_next'),
- model.generic_param_dependence_ratio(trans, 'energy'),
- model.generic_param_dependence_ratio(trans, 'rel_energy_prev'),
- model.generic_param_dependence_ratio(trans, 'rel_energy_next')))
- print('{:10s}: {:.0f} µs'.format(trans, static_model(trans, 'duration')))
- model.assess(static_model)
-
- print('--- LUT ---')
- lut_model = model.get_param_lut()
- model.assess(lut_model)
+ for attribute in ['energy', 'rel_energy_prev', 'rel_energy_next', 'duration', 'timeout']:
+ if param_info(trans, attribute):
+ print('{:10s}: {:10s}: {}'.format(trans, attribute, param_info(trans, attribute)['function']._model_str))
sys.exit(0)
diff --git a/bin/test.py b/bin/test.py
index 71c02bd..7a45ca9 100755
--- a/bin/test.py
+++ b/bin/test.py
@@ -43,6 +43,31 @@ class TestStaticModel(unittest.TestCase):
self.assertAlmostEqual(static_model('stopListening', 'duration'), 260, places=0)
self.assertAlmostEqual(static_model('write_nb', 'duration'), 510, places=0)
+ self.assertAlmostEqual(model.param_dependence_ratio('POWERDOWN', 'power', 'datarate'), 0, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('POWERDOWN', 'power', 'txbytes'), 0, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('POWERDOWN', 'power', 'txpower'), 0, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('RX', 'power', 'datarate'), 0.99, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('RX', 'power', 'txbytes'), 0, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('RX', 'power', 'txpower'), 0.01, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('STANDBY1', 'power', 'datarate'), 0.04, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('STANDBY1', 'power', 'txbytes'), 0.35, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('STANDBY1', 'power', 'txpower'), 0.32, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('TX', 'power', 'datarate'), 1, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('TX', 'power', 'txbytes'), 0.09, places=2)
+ self.assertAlmostEqual(model.param_dependence_ratio('TX', 'power', 'txpower'), 1, places=2)
+
+ param_model, param_info = model.get_fitted()
+ self.assertEqual(param_info('POWERDOWN', 'power'), None)
+ self.assertEqual(param_info('RX', 'power')['function']._model_str,
+ '0 + regression_arg(0) + regression_arg(1) * np.sqrt(parameter(datarate))')
+ self.assertEqual(param_info('STANDBY1', 'power'), None)
+ self.assertEqual(param_info('TX', 'power')['function']._model_str,
+ '0 + regression_arg(0) + regression_arg(1) * 1/(parameter(datarate)) + regression_arg(2) * parameter(txpower) + regression_arg(3) * 1/(parameter(datarate)) * parameter(txpower)')
+ self.assertEqual(param_info('epilogue', 'timeout')['function']._model_str,
+ '0 + regression_arg(0) + regression_arg(1) * 1/(parameter(datarate))')
+ self.assertEqual(param_info('stopListening', 'duration')['function']._model_str,
+ '0 + regression_arg(0) + regression_arg(1) * 1/(parameter(datarate))')
+
def test_model_singlefile_mmparam(self):
raw_data = RawData(['../data/20161221_123347_mmparam.tar'])
@@ -191,5 +216,14 @@ class TestStaticModel(unittest.TestCase):
self.assertAlmostEqual(static_model('sleep', 'energy'), 104445, places=0)
self.assertEqual(static_model('txDone', 'energy'), 0)
+ param_model, param_info = model.get_fitted()
+ self.assertEqual(param_info('IDLE', 'power'), None)
+ self.assertEqual(param_info('RX', 'power')['function']._model_str,
+ '0 + regression_arg(0) + regression_arg(1) * np.log(parameter(symbolrate) + 1)')
+ self.assertEqual(param_info('SLEEP', 'power'), None)
+ self.assertEqual(param_info('SLEEP_EWOR', 'power'), None)
+ self.assertEqual(param_info('SYNTH_ON', 'power'), None)
+ self.assertEqual(param_info('XOFF', 'power'), None)
+
if __name__ == '__main__':
unittest.main()