-
Notifications
You must be signed in to change notification settings - Fork 1
/
sinegen.py
54 lines (36 loc) · 1001 Bytes
/
sinegen.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#! /usr/bin/env
import math
p_bin = lambda x: int(pow(2, x))
tablebits = 10
tableres = 8
tablesize = p_bin(tablebits)
h = open("sinetable.h", "w")
c = open("sinetable.c", "w")
h.write("""
#ifndef __sinetable_h_
#define __sinetable_h_
#include <avr/pgmspace.h>
#include <stdint.h>
#define SINETABLE_SIZE %d
#define SINETABLE_BITS %d
#define SINETABLE_RES %d
#define SINETABLE_MASK %d
extern const PROGMEM uint%d_t sinetable[%d];
#endif // __sinetable_h_
""" % (tablesize, tablebits, tableres, tablesize-1, tableres, tablesize))
h.close()
c.write("""
#include "sinetable.h"
const PROGMEM uint%d_t sinetable[%d] = {
""" % (tableres, tablesize))
maxval = p_bin(tableres) - 1
meanval = int((maxval + 1) / 2)
for i in xrange(tablesize):
r = 2 * math.pi * float(i/float(tablesize))
v = math.sin(r) * (meanval - 1) + meanval;
if i < (tablesize - 1):
c.write("%d,\n" % int(v))
else:
c.write("%d\n" % int(v))
c.write("}; // %d\n\n" % tablesize)
c.close()