#!/usr/bin/env python3 import sys from math import * preamble = """// This file was auto-generated using gen_lut.py #include "lut.h" """ postamble = """ value_type lookup_sin(int layer, int element) { return sin_lut[layer][element]; } value_type lookup_cos(int layer, int element) { return cos_lut[layer][element]; } """ if len(sys.argv) < 2: print("Argument required: FFT_EXPONENT") exit(1) fft_exponent = int(sys.argv[1]) with open("src/lut.c", "w") as ofile: ofile.write(preamble) # generate the sin() lookup table for layer in range(0, fft_exponent): num_elements = (1 << layer) ofile.write("value_type sin_lut%i[%i] = {" % (layer, num_elements)) ofile.write("0") for element in range(1, num_elements): ofile.write(", %.10f" % sin(-pi * element / num_elements)); ofile.write("};\n\n") ofile.write("value_type *sin_lut[%i] = {sin_lut0" % fft_exponent); for i in range(1, fft_exponent): ofile.write(", sin_lut" + str(i)); ofile.write("};\n"); # generate the cos() lookup table for layer in range(0, fft_exponent): num_elements = (1 << layer) ofile.write("value_type cos_lut%i[%i] = {" % (layer, num_elements)) ofile.write("1") for element in range(1, num_elements): ofile.write(", %.10f" % cos(-pi * element / num_elements)); ofile.write("};\n\n") ofile.write("value_type *cos_lut[%i] = {cos_lut0" % fft_exponent); for i in range(1, fft_exponent): ofile.write(", cos_lut" + str(i)); ofile.write("};\n"); ofile.write(postamble)