#!/usr/bin/env python
import matplotlib.pyplot as plt
import argparse
import subprocess
import sys
def main():
parser = argparse.ArgumentParser(prog="polyfit", usage="%(prog)s [options] val val val [val...]")
parser.add_argument('val', nargs='*', help='3 or more values')
parser.add_argument('-r', type=int, default=10, help='trigger rate ratio (default=10)')
parser.add_argument('-o', type=int, default=2, help='order of polynomial (default=2)')
parser.add_argument('-v', action='store_true', help='be verbose')
args = parser.parse_args()
ratio = args.r
order = args.o
cmd = ["./eigen", "-o", f"{order}", "-r", f"{ratio}"] + args.val
if len(args.val) < 3:
parser.error("3 or more values required")
if args.v:
print(f"cmd: {cmd}")
xx = subprocess.run(cmd, capture_output=True)
result = xx.stdout.decode('UTF-8').strip()
res = [ float(x) for x in result.split(",") ]
if args.v:
print(f"ratio: {ratio}")
slow_times = range(0, ratio * len(args.val), ratio)
fast_times = range(0, len(res), 1)
if args.v:
print(f"slow_times: (len {len(slow_times)}): {slow_times}")
print(f"args.val: (len {len(args.val)}): {args.val}")
print(f"fast_times: (len {len(fast_times)}): {fast_times}")
print(f"res: (len {len(res)}): {res}")
intval = [int(v) for v in args.val]
plt.plot(slow_times, intval, 'ro', markersize=12.0)
plt.plot(fast_times, res, 'g^')
plt.title(f'Interpolated Encoder Values (order={order})')
plt.grid(True)
plt.show()
if __name__ == '__main__':
main() |