view yetilab/feature/features.yeti @ 219:ff97765b1d1b matrix_opaque_immutable

More block -> vector
author Chris Cannam
date Sat, 11 May 2013 12:07:21 +0100
parents a7f4eb1cdd72
children 77c6a81c577f
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.list frame1) (vec.list 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,
}