From 4dc3f5aa76463250197f0a87145d37884509e9af Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Mon, 7 Jul 2014 22:34:08 +0200 Subject: Add rudimentary sample histogram to OutputMemory --- src/OutputMemory.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/OutputMemory.h | 26 +++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) 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 #include +#include 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 + -- cgit v1.2.3