#!/bin/python import numpy as np import math length = 512 def file_header(f): print >>f, "/**" print >>f, " * Autogenerated sine tables. See tools/ax25_lookup/ax25_lookup.py" print >>f, " */" print >>f, "" def print_sintable(f, deviation_f, defonly): f_resolution = 7.805347443 deviation = (deviation_f/f_resolution) # Generate our sin table quadrant_range = np.arange(0, np.pi/2, (np.pi/2)/length) sintable = np.multiply(np.sin(quadrant_range), deviation) # stringify strings = [ "{0:0.0f}".format(x) for x in sintable ] maxlen = max([ len(s) for s in strings ]) # stringify in equal parts strings = [ "{0:>{width}.0f}".format(x, width=maxlen) for x in sintable ] string = ", ".join(strings) # lines line_len = int(math.floor(78 / (maxlen+2))*(maxlen+2)) lines = [string[x:x+line_len].rstrip() for x in range(0, len(string), line_len)] string = "\n ".join(lines) print >>f, "/**" print >>f, " * 1st quadrant sin lookup table for {0:0.1f}kHz deviation".format(deviation_f/1000.0) print >>f, " *" print >>f, " * Length: {0}".format(length) print >>f, " * Frequency Resolution: {0:0.3f} Hz".format(f_resolution) print >>f, " */" if defonly: print >>f, "uint16_t sintable_{0}_{1}hz[{0}];".format(length, deviation_f) else: print >>f, "uint16_t sintable_{0}_{1}hz[] = {{".format(length, deviation_f) print >>f, " "+string print >>f, "};" print >>f, "" source = open('src/ax25_sintable.c','w') header = open('inc/ax25_sintable.h','w') file_header(source) file_header(header) print >>source, "#include \"samd20.h\"" print >>source, "" print_sintable(source, 1500, False) print_sintable(source, 2500, False) print >>header, "#ifndef AX25_SINTABLE_H" print >>header, "#define AX25_SINTABLE_H" print >>header, "" print >>header, "" print >>header, "#include \"samd20.h\"" print >>header, "" print >>header, "#define AX25_SINTABLE_ORDER {0:d}".format(int(math.log(length, 2))) print >>header, "#define AX25_SINTABLE_LENGTH {0:d}".format(length) print >>header, "" print >>header, "" print_sintable(header, 1500, True) print_sintable(header, 2500, True) print >>header, "#endif /* AX25_SINTABLE_H */"