[med-svn] [aghermann] 10/60: rk1968::emg_steady_tone

andrei zavada hmmr-guest at alioth.debian.org
Mon Nov 4 23:49:52 UTC 2013


This is an automated email from the git hooks/post-receive script.

hmmr-guest pushed a commit to branch WIP
in repository aghermann.

commit c3be63f49fe799a33e21486ff7f5d3936075ff00
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Tue Oct 8 02:22:35 2013 +0300

    rk1968::emg_steady_tone
---
 upstream/src/aghermann/rk1968/rk1968.hh |   38 +++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/upstream/src/aghermann/rk1968/rk1968.hh b/upstream/src/aghermann/rk1968/rk1968.hh
index 9de6fc8..6d9e892 100644
--- a/upstream/src/aghermann/rk1968/rk1968.hh
+++ b/upstream/src/aghermann/rk1968/rk1968.hh
@@ -12,8 +12,10 @@
 #ifndef AGH_AGHERMANN_RK1968_H_
 #define AGH_AGHERMANN_RK1968_H_
 
+#include <float.h>
 #include <string>
 #include "aghermann/expdesign/dirlevel.hh"
+#include "libsigproc/sigproc.hh"
 
 using namespace std;
 
@@ -90,6 +92,42 @@ class CScoreAssistant
 };
 
 
+
+
+template <typename T>
+pair<T, size_t>
+emg_steady_tone( const sigproc::SSignalRef<T>& V, size_t steady_secs, double max_dev_factor)
+{
+        // static const double env_scope = 1.;
+        // static const double dt = 1.;
+        // static const double range_min = 0.;
+        // static const size_t bins = 20;
+        // const double binsize =
+        // sigproc::envelope_breadth_histogram(
+        //         sigref, env_scope, dt,
+        /// take it easy
+
+        // examine 1-sec intervals until a length of, say, 10 sec is seen steady enough
+        valarray<T> bench (steady_secs);
+        size_t s = 1 * V.samplerate;
+        for ( int sec = 0; sec < V.signal.size() / V.samplerate - steady_secs - 1; ++sec ) {
+                auto range = slice (sec * s, s, 1);
+                bench[sec % steady_secs] = V.signal[range].sum() / s;
+                printf( "r[%zu] = %g\n", sec, bench[sec % steady_secs]);
+                if ( sec < steady_secs )
+                        continue;
+                T avg = bench.sum() / steady_secs;
+                for ( size_t t = 0; t < steady_secs; ++t )
+                        if ( 1 + fabs(bench[t] - avg) / avg > max_dev_factor )
+                                goto outer_continue;
+                return {avg, sec};
+        outer_continue:
+                ;
+        }
+        return {NAN, (size_t)-1};
+}
+
+
 } // namespace rk1968
 } // namespace agh
 

-- 
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/aghermann.git



More information about the debian-med-commit mailing list