zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
cordic.py
Go to the documentation of this file.
1 # compute arctangent table for CORDIC computations in fttrigon.c
2 import sys, math
3 
4 #units = 64*65536.0 # don't change !!
5 units = 256
6 scale = units/math.pi
7 shrink = 1.0
8 comma = ""
9 
10 def calc_val( x ):
11  global units, shrink
12  angle = math.atan(x)
13  shrink = shrink * math.cos(angle)
14  return angle/math.pi * units
15 
16 def print_val( n, x ):
17  global comma
18 
19  lo = int(x)
20  hi = lo + 1
21  alo = math.atan(lo)
22  ahi = math.atan(hi)
23  ax = math.atan(2.0**n)
24 
25  errlo = abs( alo - ax )
26  errhi = abs( ahi - ax )
27 
28  if ( errlo < errhi ):
29  hi = lo
30 
31  sys.stdout.write( comma + repr( int(hi) ) )
32  comma = ", "
33 
34 
35 print ""
36 print "table of arctan( 1/2^n ) for PI = " + repr(units/65536.0) + " units"
37 
38 # compute range of "i"
39 r = [-1]
40 r = r + range(32)
41 
42 for n in r:
43 
44  if n >= 0:
45  x = 1.0/(2.0**n) # tangent value
46  else:
47  x = 2.0**(-n)
48 
49  angle = math.atan(x) # arctangent
50  angle2 = angle*scale # arctangent in FT_Angle units
51 
52  # determine which integer value for angle gives the best tangent
53  lo = int(angle2)
54  hi = lo + 1
55  tlo = math.tan(lo/scale)
56  thi = math.tan(hi/scale)
57 
58  errlo = abs( tlo - x )
59  errhi = abs( thi - x )
60 
61  angle2 = hi
62  if errlo < errhi:
63  angle2 = lo
64 
65  if angle2 <= 0:
66  break
67 
68  sys.stdout.write( comma + repr( int(angle2) ) )
69  comma = ", "
70 
71  shrink = shrink * math.cos( angle2/scale)
72 
73 
74 print
75 print "shrink factor = " + repr( shrink )
76 print "shrink factor 2 = " + repr( shrink * (2.0**32) )
77 print "expansion factor = " + repr(1/shrink)
78 print ""
79 
def calc_val
Definition: cordic.py:10
int
Definition: SDL_systhread.c:37
def print_val
Definition: cordic.py:16