Guest User

Untitled

a guest
May 22nd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. import sys
  2. import time
  3. import numpy
  4. from matplotlib import pyplot
  5. try:
  6. from PyQt5 import QtCore, QtWidgets
  7. print 'using PyQt5'
  8. except:
  9. from PyQt4 import QtCore, QtGui
  10. print 'using PyQt4'
  11.  
  12.  
  13. class StampTimer(QtCore.QTimer):
  14. signal_quit = QtCore.pyqtSignal()
  15.  
  16. def __init__(self, number_of_samples, precise=False, *args, **kwargs):
  17. super(StampTimer, self).__init__(*args, **kwargs)
  18. if precise:
  19. try:
  20. self.setTimerType(QtCore.Qt.PreciseTimer)
  21. print 'using precise timer (PyQt5)'
  22. except:
  23. print 'precise timer not available (PyQt4)'
  24. self.number_of_samples = number_of_samples
  25. self.stamps_ms = []
  26. self.timeout.connect(self.stamp)
  27.  
  28. def start(self):
  29. self.stamps_ms = []
  30. super(StampTimer, self).start()
  31.  
  32. def stamp(self):
  33. # Save a timestamp (use clock() instead of time())
  34. self.stamps_ms.append(1e3 * time.clock())
  35. # Quit when we reach the specified number of samples
  36. if len(self.stamps_ms) == self.number_of_samples:
  37. self.stop()
  38. self.signal_quit.emit()
  39.  
  40.  
  41. try:
  42. app = QtWidgets.QApplication(sys.argv)
  43. except:
  44. app = QtGui.QApplication(sys.argv)
  45.  
  46. # Parameters
  47. number_of_intervals = 100
  48. intervals_requested_ms = range(1, 10)
  49. intervals_requested_ms.extend(range(10, 60, 2))
  50. intervals_requested_ms.extend(range(60, 200, 10))
  51. intervals_requested_ms.append(1000)
  52.  
  53. # Variables
  54. intervals_measured_ms = numpy.zeros(
  55. (number_of_intervals, len(intervals_requested_ms)), float)
  56.  
  57. # Run
  58. timer = StampTimer(number_of_samples=number_of_intervals+1, precise=False)
  59. timer.signal_quit.connect(app.quit)
  60. for index, interval_requested_ms in enumerate(intervals_requested_ms):
  61. timer.setInterval(interval_requested_ms)
  62. timer.start()
  63. app.exec_()
  64. intervals_measured_ms[:, index] = numpy.diff(timer.stamps_ms)
  65. median_ms = numpy.median(intervals_measured_ms[:, index])
  66. max_ms = numpy.max(intervals_measured_ms[:, index])
  67. min_ms = numpy.min(intervals_measured_ms[:, index])
  68. print 'requested: {} ms, '
  69. 'measured: median(min/max) {:.1f} ({:.2f}/{:.2f}) ms'.format(
  70. interval_requested_ms, median_ms, min_ms, max_ms)
  71. pyplot.plot(interval_requested_ms, median_ms, 'ok')
  72. pyplot.plot([interval_requested_ms]*2, [min_ms, max_ms], '-k')
  73.  
  74. # Plot result
  75. pyplot.plot([0, 1000], [0, 1000], 'k--')
  76. pyplot.xscale('log', nonposx='clip')
  77. pyplot.yscale('log', nonposy='clip')
  78. pyplot.xlabel('interval requested [ms]')
  79. pyplot.ylabel(
  80. 'interval measured [ms] (median, n={})'.format(number_of_intervals))
  81. pyplot.show()
Add Comment
Please, Sign In to add comment