Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. sensor_value = 256
  2. actuator_value = translate(sensor_value, 1, 512, 5, 10)
  3.  
  4. def translate(value, leftMin, leftMax, rightMin, rightMax):
  5. # Figure out how 'wide' each range is
  6. leftSpan = leftMax - leftMin
  7. rightSpan = rightMax - rightMin
  8.  
  9. # Convert the left range into a 0-1 range (float)
  10. valueScaled = float(value - leftMin) / float(leftSpan)
  11.  
  12. # Convert the 0-1 range into a value in the right range.
  13. return rightMin + (valueScaled * rightSpan)
  14.  
  15. >>> from scipy.interpolate import interp1d
  16. >>> m = interp1d([1,512],[5,10])
  17. >>> m(256)
  18. array(7.4951076320939336)
  19.  
  20. >>> float(m(256))
  21. 7.4951076320939336
  22.  
  23. >>> m([100,200,300])
  24. array([ 5.96868885, 6.94716243, 7.92563601])
  25.  
  26. >>> m = interp1d([1,128,256,512],[1,10,90,100])
  27. >>> float(m(400))
  28. 95.625
  29.  
  30. >>> from numpy import interp
  31. >>> interp(256,[1,512],[5,10])
  32. 7.4951076320939336
  33.  
  34. def make_interpolater(left_min, left_max, right_min, right_max):
  35. # Figure out how 'wide' each range is
  36. leftSpan = left_max - left_min
  37. rightSpan = right_max - right_min
  38.  
  39. # Compute the scale factor between left and right values
  40. scaleFactor = float(rightSpan) / float(leftSpan)
  41.  
  42. # create interpolation function using pre-calculated scaleFactor
  43. def interp_fn(value):
  44. return right_min + (value-left_min)*scaleFactor
  45.  
  46. return interp_fn
  47.  
  48. # create function for doing interpolation of the desired
  49. # ranges
  50. scaler = make_interpolater(1, 512, 5, 10)
  51.  
  52. # receive list of raw values from sensor, assign to data_list
  53.  
  54. # now convert to scaled values using map
  55. scaled_data = map(scaler, data_list)
  56.  
  57. # or a list comprehension, if you prefer
  58. scaled_data = [scaler(x) for x in data_list]
  59.  
  60. def translate(sensor_val, in_from, in_to, out_from, out_to):
  61. out_range = out_to - out_from
  62. in_range = in_to - in_from
  63. in_val = sensor_val - in_from
  64. val=(float(in_val)/in_range)*out_range
  65. out_val = out_from+val
  66. return out_val
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement