[med-svn] [aghermann] 11/60: compute EMG steady tone, tone distribution

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 8132f7c08dfec36934d14c1997c0fa4cf63b69af
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Tue Oct 8 02:25:53 2013 +0300

    compute EMG steady tone, tone distribution
---
 upstream/src/aghermann/ui/sf/channel.cc |   27 +++++++++++++++++++++++++--
 upstream/src/aghermann/ui/sf/channel.hh |   13 +++++++++++--
 2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/upstream/src/aghermann/ui/sf/channel.cc b/upstream/src/aghermann/ui/sf/channel.cc
index 70b1007..a4fd284 100644
--- a/upstream/src/aghermann/ui/sf/channel.cc
+++ b/upstream/src/aghermann/ui/sf/channel.cc
@@ -13,10 +13,13 @@
 #include <type_traits>
 
 #include "common/lang.hh"
+#include "common/alg.hh"
 #include "common/config-validate.hh"
 #include "libsigproc/exstrom.hh"
 #include "libmetrics/bands.hh"
+#include "aghermann/globals.hh"
 #include "aghermann/patterns/patterns.hh"
+#include "aghermann/rk1968/rk1968.hh"
 #include "aghermann/ui/globals.hh"
 #include "aghermann/ui/mw/mw.hh"
 
@@ -141,9 +144,29 @@ SChannel (agh::CRecording& r,
                 // don't: interchannel_gap is rubbish yet
                 psd.focused_band = metrics::TBand::delta;
 
-        } else if ( schannel().type() == sigfile::SChannel::TType::emg )
+        } else if ( schannel().type() == sigfile::SChannel::TType::emg ) {
                 get_raw_profile();
 
+                hist_range_min = 0.;
+                hist_binsize = raw_profile.max() / hist_bins;
+                histogram.resize( hist_bins);
+                for ( size_t i = 0; i < raw_profile.size(); ++i )
+                        ++histogram[ agh::alg::value_within(
+                                        (size_t)roundf((raw_profile[i] - hist_range_min) / hist_binsize),
+                                        0lu, hist_bins-1) ];
+
+                static const size_t steady_secs = 10;
+                static const double max_dev_factor = 1.1;
+                size_t steady_tone_at;
+                tie (steady_tone, steady_tone_at) =
+                        agh::rk1968::emg_steady_tone(
+                                sigproc::SSignalRef<TFloat> {raw_profile, 1. / raw_profile_dt},
+                                steady_secs,
+                                max_dev_factor);
+
+                APPLOG_INFO ( "%s amplitude max %g count %zu, binsize %g; steady tone %g at %g sec", name(), raw_profile.max(), histogram.max(), hist_binsize, steady_tone, steady_tone_at * raw_profile_dt);
+        }
+
       // let it be so to avoid libconfig::readFile throwing exceptions
         psd.display_scale = mc.display_scale = swu.display_scale =
                 DBL_MIN;
@@ -287,7 +310,7 @@ get_raw_profile()
 {
         raw_profile = sigproc::raw_signal_profile<TFloat>(
                 {signal_filtered, samplerate()},
-                1., 3.);
+                1., raw_profile_dt);
 }
 
 
diff --git a/upstream/src/aghermann/ui/sf/channel.hh b/upstream/src/aghermann/ui/sf/channel.hh
index 761cb64..1b6c3e1 100644
--- a/upstream/src/aghermann/ui/sf/channel.hh
+++ b/upstream/src/aghermann/ui/sf/channel.hh
@@ -171,10 +171,19 @@ struct SScoringFacility::SChannel {
         void get_spectrum(); // at current page
         void get_spectrum( size_t p);
 
-      // raw profile
+      // raw profile, histogram, steady tone for EMG
+        static constexpr double raw_profile_dt = 1.;
         valarray<TFloat>
                 raw_profile;
-        void get_raw_profile();
+        void
+        get_raw_profile();
+
+        TFloat  steady_tone;
+        valarray<size_t>
+                histogram;
+        static const size_t hist_bins = 20;
+        double  hist_range_min,
+                hist_binsize;
 
       // region
         void mark_region_as_artifact( bool do_mark);

-- 
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