summaryrefslogtreecommitdiff
path: root/tran/sine.alg
diff options
context:
space:
mode:
authorSteve M. Robbins <smr@debian.org>2011-10-22 04:54:51 +0200
committerSteve M. Robbins <smr@debian.org>2011-10-22 04:54:51 +0200
commitdd657ad3f1428b026486db3ec36691df17ddf515 (patch)
tree6ffb465595479fb5a76c1a6ea3ec992abaa8c1c1 /tran/sine.alg
Import nyquist_3.05.orig.tar.gz
[dgit import orig nyquist_3.05.orig.tar.gz]
Diffstat (limited to 'tran/sine.alg')
-rw-r--r--tran/sine.alg31
1 files changed, 31 insertions, 0 deletions
diff --git a/tran/sine.alg b/tran/sine.alg
new file mode 100644
index 0000000..e00afde
--- /dev/null
+++ b/tran/sine.alg
@@ -0,0 +1,31 @@
+(SINE-ALG
+(NAME "sine")
+(ARGUMENTS ("time_type" "t0") ("double" "hz") ("rate_type" "sr") ("time_type" "d"))
+(STATE ("long" "phase" "0")
+ ("long" "ph_incr" "round(((hz * SINE_TABLE_LEN) * (1 << SINE_TABLE_SHIFT) / sr))"))
+(TERMINATE (AFTER "d"))
+(INNER-LOOP "output = sine_table[phase >> SINE_TABLE_SHIFT];
+ phase += ph_incr;
+ phase &= SINE_TABLE_MASK;")
+(MAINTAIN ("phase"
+ "susp->phase = (susp->phase + susp->ph_incr * togo) & SINE_TABLE_MASK"))
+(CONSTANT "ph_incr")
+(SAMPLE-RATE "sr")
+(SUPPORT-HEADER "#define SINE_TABLE_LEN 2048
+#define SINE_TABLE_MASK 0x7FFFFFFF
+#define SINE_TABLE_SHIFT 20
+void sine_init();
+extern sample_type sine_table[];
+")
+(SUPPORT-FUNCTIONS "
+sample_type sine_table[SINE_TABLE_LEN + 1];
+
+void sine_init()
+{
+ int i;
+ for (i = 0; i <= SINE_TABLE_LEN; i++)
+ sine_table[i] = (sample_type) (sin((PI * 2 * i) / SINE_TABLE_LEN));
+}
+")
+)
+