From 0c2e564c15c583a5274271a0bbacb237b180d500 Mon Sep 17 00:00:00 2001 From: Jamie Bullock Date: Thu, 27 Dec 2007 20:37:15 +0000 Subject: Added l-norm/spectral flux --- src/delta.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) (limited to 'src/delta.c') diff --git a/src/delta.c b/src/delta.c index 6ca3794..79250e2 100644 --- a/src/delta.c +++ b/src/delta.c @@ -20,12 +20,49 @@ /* xtract_delta.c: defines functions that extract a feature as a single value from more than one input vector */ +#include + #include "xtract/libxtract.h" int xtract_flux(const float *data, const int N, const void *argv , float *result){ + return xtract_lnorm(data, N, argv, result); - return XTRACT_FEATURE_NOT_IMPLEMENTED; +} + +int xtract_lnorm(const float *data, const int N, const void *argv , float *result){ + + int feature, + n, + type; + + float order, + temp = 0.f; + + order = *(float *)argv; + type = (int)*(float *)argv+1; + + order = order > 0 ? order : 1.f; + + switch(type){ + + case XTRACT_POSITIVE_SLOPE: + for(n = 0; n < N; n++){ + temp = powf(data[n], order); + if(data[n] > 0) + *result += temp; + } + break; + default: + for(n = 0; n < N; n++) + *result += powf(data[n], order); + break; + + } + + *result = powf(*result, 1.f / order); + + return XTRACT_SUCCESS; } @@ -41,9 +78,21 @@ int xtract_decay_time(const float *data, const int N, const void *argv, float *r } -int xtract_delta_feature(const float *data, const int N, const void *argv, float *result){ +int xtract_difference_vector(const float *data, const int N, const void *argv, float *result){ - return XTRACT_FEATURE_NOT_IMPLEMENTED; + float *frame1, + *frame2; -} + int n; + n = N >> 1; + + frame1 = data; + frame2 = data + n; + + while(n--) + result[n] = frame1[n] - frame2[n]; + + return XTRACT_SUCCESS; + +} -- cgit v1.2.3