changeset 439:8140577bb74e

Calculate kaiser window in two halves (faster)
author Chris Cannam
date Wed, 16 Oct 2013 09:43:03 +0100
parents fd89f45b2ade
children 76d41e53fad2
files src/may/signal/window.yeti
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/may/signal/window.yeti	Tue Oct 08 15:38:11 2013 +0100
+++ b/src/may/signal/window.yeti	Wed Oct 16 09:43:03 2013 +0100
@@ -111,12 +111,16 @@
                 (ipow (x/2) (i*2)) / (f * f);
                 done [1..terms]);
     denominator = bes0 beta;
-    kw = vec.fromList
-       (map do i:
+    even = (length % 2 == 0);
+    halflen = if even then length/2 else (length+1)/2 fi;
+    half =
+        map do i:
             k = 2*i / (length-1) - 1;
             bes0 (beta * sqrt (1 - k*k)) / denominator;
-            done [0..length-1]);
-    kw);
+            done [0..halflen-1];
+    vec.fromList
+       (half ++
+            if even then reverse half else drop 1 (reverse half) fi));
 
 kaisers = [:];