diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-07-07 22:34:08 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-07-07 22:34:08 +0200 |
commit | 4dc3f5aa76463250197f0a87145d37884509e9af (patch) | |
tree | c5ed5de31c552a254d2074bca17f347b1a5dfc4c /src | |
parent | c9ef2a5b36d9082b2c2c853934a0332aef6564a6 (diff) | |
download | dabmod-4dc3f5aa76463250197f0a87145d37884509e9af.tar.gz dabmod-4dc3f5aa76463250197f0a87145d37884509e9af.tar.bz2 dabmod-4dc3f5aa76463250197f0a87145d37884509e9af.zip |
Add rudimentary sample histogram to OutputMemory
Diffstat (limited to 'src')
-rw-r--r-- | src/OutputMemory.cpp | 38 | ||||
-rw-r--r-- | src/OutputMemory.h | 26 |
2 files changed, 63 insertions, 1 deletions
diff --git a/src/OutputMemory.cpp b/src/OutputMemory.cpp index b47729c..4fb8bc1 100644 --- a/src/OutputMemory.cpp +++ b/src/OutputMemory.cpp @@ -1,6 +1,11 @@ /* Copyright (C) 2007, 2008, 2009, 2010, 2011 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) + + Copyright (C) 2014 + Matthias P. Braendli, matthias.braendli@mpb.li + + http://opendigitalradio.org */ /* This file is part of ODR-DabMod. @@ -24,6 +29,7 @@ #include <stdexcept> #include <string.h> +#include <math.h> OutputMemory::OutputMemory(Buffer* dataOut) @@ -32,11 +38,29 @@ OutputMemory::OutputMemory(Buffer* dataOut) PDEBUG("OutputMemory::OutputMemory(%p) @ %p\n", dataOut, this); setOutput(dataOut); + +#if OUTPUT_MEM_HISTOGRAM + myMax = 0.0f; + for (int i = 0; i < HIST_BINS; i++) { + myHistogram[i] = 0.0f; + } +#endif } OutputMemory::~OutputMemory() { +#if OUTPUT_MEM_HISTOGRAM + fprintf(stderr, "* OutputMemory max %f\n", myMax); + fprintf(stderr, "* HISTOGRAM\n"); + + for (int i = 0; i < HIST_BINS; i++) { + fprintf(stderr, "** %5d - %5d: %ld\n", + i * HIST_BIN_SIZE, + (i+1) * HIST_BIN_SIZE - 1, + myHistogram[i]); + } +#endif PDEBUG("OutputMemory::~OutputMemory() @ %p\n", this); } @@ -56,5 +80,19 @@ int OutputMemory::process(Buffer* dataIn, Buffer* dataOut) *myDataOut = *dataIn; +#if OUTPUT_MEM_HISTOGRAM + const float* in = (const float*)dataIn->getData(); + const size_t len = dataIn->getLength() / sizeof(float); + + for (size_t i = 0; i < len; i++) { + float absval = fabsf(in[i]); + if (myMax < absval) + myMax = absval; + + myHistogram[lrintf(absval) / HIST_BIN_SIZE]++; + } +#endif + return myDataOut->getLength(); } + diff --git a/src/OutputMemory.h b/src/OutputMemory.h index e687bb3..2dd49c5 100644 --- a/src/OutputMemory.h +++ b/src/OutputMemory.h @@ -1,6 +1,11 @@ /* Copyright (C) 2007, 2008, 2009, 2010, 2011 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) + + Copyright (C) 2014 + Matthias P. Braendli, matthias.braendli@mpb.li + + http://opendigitalradio.org */ /* This file is part of ODR-DabMod. @@ -26,6 +31,18 @@ # include "config.h" #endif +// This enables a rudimentary histogram functionality +// It gets printed when the OutputMemory gets destroyed +#define OUTPUT_MEM_HISTOGRAM 0 + +#if OUTPUT_MEM_HISTOGRAM +// The samples can go up to 100000 in value, make +// sure that HIST_BINS * HIST_BIN_SIZE is large +// enough ! +# define HIST_BINS 10 +# define HIST_BIN_SIZE 10000 +#endif + #include "ModOutput.h" @@ -42,7 +59,14 @@ public: protected: Buffer* myDataOut; -}; +#if OUTPUT_MEM_HISTOGRAM + // keep track of max value + float myMax; + + long int myHistogram[HIST_BINS]; +#endif +}; #endif // OUTPUT_MEMORY_H + |