changeset 143:476a03ca013b

Start on feature extractors
author Chris Cannam
date Sat, 27 Apr 2013 12:51:12 +0100
parents 9ade635dbad6
children 4065178f776b
files yetilab/feature/features.yeti
diffstat 1 files changed, 35 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/yetilab/feature/features.yeti	Sat Apr 27 12:51:12 2013 +0100
@@ -0,0 +1,35 @@
+
+module yetilab.feature.features;
+
+cplx = load yetilab.block.complex;
+fr = load yetilab.stream.framer;
+
+specdiff frame1 frame2 = 
+    sum (map2 do a b: abs(cplx.magnitude b - cplx.magnitude a) done
+         frame1 frame2);
+
+emptyFrameFor frames =
+    if empty? frames then array [] else cplx.zeros (length (head frames)) fi;
+
+features featureFunc frames =
+   (featuresOf prev frames =
+        case frames of
+        frame::rest: featureFunc prev frame :. \(featuresOf frame rest);
+         _: [];
+        esac;
+    featuresOf (emptyFrameFor frames) frames);
+
+featuresOfFile featureFunc file =
+    case fr.frequencyDomainFramesOfFile { framesize = 1024, hop = 512 } file of
+    Frames ff:
+        Features (features featureFunc ff);
+    Error e:
+        Error e;
+    esac;
+
+{
+    specdiff,
+    features,
+    featuresOfFile
+}
+