20 lines
801 B
Python
Executable File
20 lines
801 B
Python
Executable File
#!/usr/bin/env python3
|
|
# Generator for sin/cos fixed point LUT tables.
|
|
import math
|
|
|
|
def generate_pi():
|
|
print(f"#define COM_FIXED_PI (com_fixed_t){int(math.pi * (1 << 16))}\n")
|
|
print(f"#define COM_FIXED_PI2 (com_fixed_t){int(math.pi*2 * (1 << 16))}\n")
|
|
print(f"#define COM_FIXED_PIHALF (com_fixed_t){int(math.pi/2 * (1 << 16))}\n")
|
|
|
|
# Idea is to generate only one quadrant, as the values repeat later with different sign and order.
|
|
def generate_sin_table(n_entries=128):
|
|
r = []
|
|
for n in range(n_entries):
|
|
r += [math.sin(math.pi*n/(n_entries*2))]
|
|
# r[n_entries-1]=1 # Make it converge to unit precisely
|
|
print(f"static const uint16_t com_fixed_sin_lut[{n_entries}] =", "{", ",\n".join((str(int(a * (1 << 16))) for a in r)), "};\n")
|
|
|
|
generate_pi()
|
|
generate_sin_table()
|