69 lines
1.5 KiB
Python
69 lines
1.5 KiB
Python
|
#!/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("lut.c", "w") as ofile:
|
||
|
ofile.write(preamble)
|
||
|
|
||
|
# generate the sin() lookup table
|
||
|
for layer in range(1, fft_exponent+1):
|
||
|
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_lut1" % fft_exponent);
|
||
|
|
||
|
for i in range(2, fft_exponent+1):
|
||
|
ofile.write(", sin_lut" + str(i));
|
||
|
ofile.write("};\n");
|
||
|
|
||
|
# generate the cos() lookup table
|
||
|
for layer in range(1, fft_exponent+1):
|
||
|
num_elements = (1 << layer)
|
||
|
ofile.write("value_type cos_lut%i[%i] = {" % (layer, num_elements))
|
||
|
|
||
|
ofile.write("0")
|
||
|
|
||
|
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_lut1" % fft_exponent);
|
||
|
|
||
|
for i in range(2, fft_exponent+1):
|
||
|
ofile.write(", cos_lut" + str(i));
|
||
|
ofile.write("};\n");
|
||
|
|
||
|
ofile.write(postamble)
|