# HG changeset patch # User Chris Cannam # Date 1490280633 0 # Node ID 939cf0e86268c9d7a2e13188eaeb361a299b0d31 # Parent 487321083d5123fb657efb57182d77dd3c1ea3e0 Filter nans, improve tests diff -r 487321083d51 -r 939cf0e86268 Cepstrum.h --- a/Cepstrum.h Wed Feb 03 13:17:32 2016 +0000 +++ b/Cepstrum.h Thu Mar 23 14:50:33 2017 +0000 @@ -22,8 +22,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef _CEPSTRUM_H_ -#define _CEPSTRUM_H_ +#ifndef CEPSTRUM_H +#define CEPSTRUM_H #include "vamp-sdk/FFT.h" #include @@ -70,7 +70,9 @@ for (int i = 0; i < hs; ++i) { - double power = in[i*2] * in[i*2] + in[i*2+1] * in[i*2+1]; + double re = in[i*2]; + double im = in[i*2+1]; + double power = re * re + im * im; double mag = sqrt(power); magmean += mag; diff -r 487321083d51 -r 939cf0e86268 Makefile.linux64 --- a/Makefile.linux64 Wed Feb 03 13:17:32 2016 +0000 +++ b/Makefile.linux64 Thu Mar 23 14:50:33 2017 +0000 @@ -1,5 +1,5 @@ -CFLAGS := -Wall -g -fPIC +CFLAGS := -Wall -O2 -fPIC CXXFLAGS := $(CFLAGS) PLUGIN_LDFLAGS := -shared -Wl,-Bstatic -lvamp-sdk -Wl,-Bdynamic -Wl,-Bsymbolic -Wl,-z,defs -Wl,--version-script=vamp-plugin.map diff -r 487321083d51 -r 939cf0e86268 MeanFilter.h --- a/MeanFilter.h Wed Feb 03 13:17:32 2016 +0000 +++ b/MeanFilter.h Thu Mar 23 14:50:33 2017 +0000 @@ -22,8 +22,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef _MEAN_FILTER_H_ -#define _MEAN_FILTER_H_ +#ifndef MEAN_FILTER_H +#define MEAN_FILTER_H class MeanFilter { @@ -59,11 +59,18 @@ for (int j = -half; j <= half; ++j) { int ix = i + j + offset; if (ix >= 0 && ix < m) { - v += in[ix]; - ++n; + double value = in[ix]; + if (value == value) { // i.e. not NaN + v += value; + } + ++n; } } - out[i] = v / n; + if (n > 0) { + out[i] = v / n; + } else { + out[i] = 0.0; + } } } diff -r 487321083d51 -r 939cf0e86268 test/TestCepstrum.cpp --- a/test/TestCepstrum.cpp Wed Feb 03 13:17:32 2016 +0000 +++ b/test/TestCepstrum.cpp Thu Mar 23 14:50:33 2017 +0000 @@ -53,6 +53,12 @@ BOOST_CHECK_SMALL(out[1] - out[7], 1e-14); BOOST_CHECK_SMALL(out[2] - out[6], 1e-14); BOOST_CHECK_SMALL(out[3] - out[5], 1e-14); + double mmcheck = 0; + for (int i = 0; i < 5; ++i) { + mmcheck += sqrt(in[i*2] * in[i*2] + in[i*2+1] * in[i*2+1]); + } + mmcheck /= 5; + BOOST_CHECK_EQUAL(mm, mmcheck); } BOOST_AUTO_TEST_CASE(oneHarmonic)