view yetilab/feature/features.yeti @ 218:a7f4eb1cdd72 matrix_opaque_immutable

More block -> vector
author Chris Cannam
date Sat, 11 May 2013 12:04:05 +0100
parents 26111c11d8e4
children ff97765b1d1b
line wrap: on
line source

module yetilab.feature.features;

vec = load yetilab.block.vector;
cplx = load yetilab.block.complex;
fr = load yetilab.stream.framer;

magdiff frame1 frame2 =
    sum (map2 do a b: abs(a - b) done (vec.data frame1) (block.data frame2));

emptyFrameFor frames =
    vec.zeros
        if empty? frames then 0
        else vec.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);

specdiff frames = 
    features magdiff (map cplx.magnitudes frames);

specdiffOfFile parameters filename =
    specdiff (fr.frequencyDomainFramesOfFile parameters filename);

{
    specdiff,
    specdiffOfFile,
}