From 0e30a1258ec8b620c238ac6a959d82b43d9fd2ee Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sat, 17 Nov 2018 12:18:11 +0100 Subject: [PATCH] [filterbank] add norm and power parameters --- src/spectral/filterbank.c | 36 ++++++++++++++++++++++++++++++++++++ src/spectral/filterbank.h | 8 ++++++++ 2 files changed, 44 insertions(+) diff --git a/src/spectral/filterbank.c b/src/spectral/filterbank.c index 0323700c..5497a4fd 100644 --- a/src/spectral/filterbank.c +++ b/src/spectral/filterbank.c @@ -23,6 +23,7 @@ #include "fvec.h" #include "fmat.h" #include "cvec.h" +#include "vecutils.h" #include "spectral/filterbank.h" #include "mathutils.h" @@ -32,6 +33,8 @@ struct _aubio_filterbank_t uint_t win_s; uint_t n_filters; fmat_t *filters; + smpl_t norm; + smpl_t power; }; aubio_filterbank_t * @@ -45,6 +48,10 @@ new_aubio_filterbank (uint_t n_filters, uint_t win_s) /* allocate filter tables, a matrix of length win_s and of height n_filters */ fb->filters = new_fmat (n_filters, win_s / 2 + 1); + fb->norm = 1; + + fb->power = 1; + return fb; } @@ -67,6 +74,8 @@ aubio_filterbank_do (aubio_filterbank_t * f, const cvec_t * in, fvec_t * out) tmp.length = in->length; tmp.data = in->norm; + if (f->power != 1.) fvec_pow(&tmp, f->power); + fmat_vecmul(f->filters, &tmp, out); return; @@ -84,3 +93,30 @@ aubio_filterbank_set_coeffs (aubio_filterbank_t * f, const fmat_t * filter_coeff fmat_copy(filter_coeffs, f->filters); return 0; } + +uint_t +aubio_filterbank_set_norm (aubio_filterbank_t *f, smpl_t norm) +{ + if (norm != 0 && norm != 1) return AUBIO_FAIL; + f->norm = norm; + return AUBIO_OK; +} + +smpl_t +aubio_filterbank_get_norm (aubio_filterbank_t *f) +{ + return f->norm; +} + +uint_t +aubio_filterbank_set_power (aubio_filterbank_t *f, smpl_t power) +{ + f->power = power; + return AUBIO_OK; +} + +smpl_t +aubio_filterbank_get_power (aubio_filterbank_t *f) +{ + return f->norm; +} diff --git a/src/spectral/filterbank.h b/src/spectral/filterbank.h index 769b5e7a..714ea9d2 100644 --- a/src/spectral/filterbank.h +++ b/src/spectral/filterbank.h @@ -83,6 +83,14 @@ fmat_t *aubio_filterbank_get_coeffs (const aubio_filterbank_t * f); */ uint_t aubio_filterbank_set_coeffs (aubio_filterbank_t * f, const fmat_t * filters); +uint_t aubio_filterbank_set_norm (aubio_filterbank_t *f, smpl_t norm); + +smpl_t aubio_filterbank_get_norm (aubio_filterbank_t *f); + +uint_t aubio_filterbank_set_power (aubio_filterbank_t *f, smpl_t power); + +smpl_t aubio_filterbank_get_power (aubio_filterbank_t *f); + #ifdef __cplusplus } #endif -- 2.11.0