ref: 7380327ba64f096391cec5b361c63bf1a76bd999
parent: 1e18df6a75fb53044f93a42404ba1e0623f77b7c
author: Paul Brossier <[email protected]>
date: Sat Mar 8 12:30:49 EST 2014
src/mathutils.h: add fvec_quadratic_peak_mag to find the magnitude of interpolated peaks
--- a/src/mathutils.c
+++ b/src/mathutils.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2003-2013 Paul Brossier <[email protected]>
+ Copyright (C) 2003-2014 Paul Brossier <[email protected]>
This file is part of aubio.
@@ -427,6 +427,17 @@
s1 = x->data[pos];
s2 = x->data[x2];
return pos + 0.5 * (s0 - s2 ) / (s0 - 2.* s1 + s2);
+}
+
+smpl_t fvec_quadratic_peak_mag (fvec_t *x, smpl_t pos) {
+ smpl_t x0, x1, x2;
+ uint_t index = (uint_t)(pos - .5) + 1;
+ if (pos >= x->length || pos < 0.) return 0.;
+ if ((smpl_t)index == pos) return x->data[index];
+ x0 = x->data[index - 1];
+ x1 = x->data[index];
+ x2 = x->data[index + 1];
+ return x1 - .25 * (x0 - x2) * (pos - index);
}
uint_t fvec_peakpick(fvec_t * onset, uint_t pos) {
--- a/src/mathutils.h
+++ b/src/mathutils.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2003-2013 Paul Brossier <[email protected]>
+ Copyright (C) 2003-2014 Paul Brossier <[email protected]>
This file is part of aubio.
@@ -233,6 +233,19 @@
*/
smpl_t fvec_quadratic_peak_pos (fvec_t * x, uint_t p);
+
+/** finds magnitude of peak by quadratic interpolation
+
+ See [Quadratic Interpolation of Spectral
+ Peaks](https://ccrma.stanford.edu/~jos/sasp/Quadratic_Peak_Interpolation.html),
+ by Julius O. Smith III
+
+ \param x vector to get the magnitude of the interpolated peak position from
+ \param p index of the peak in vector `x`
+ \return magnitude of interpolated peak
+
+*/
+smpl_t fvec_quadratic_peak_mag (fvec_t * x, smpl_t p);
/** Quadratic interpolation using Lagrange polynomial.