示例#1
0
        public PpgPulseDetector(double SamplingRate, int BitsPerSample)
        {
            m_SamplingRate = SamplingRate;

            m_Denoiser   = new PpgDenoiser(SamplingRate);
            m_Normalizer = new PpgDispersionNormalizer(SamplingRate, BitsPerSample);

            // создаем сборщик статистики
            // нас интересуют статистические параметры сигнала
            // за последние 2.2 секунды, предшествующие пику
            m_SignalStatCollector = new SeriesStatisticsCollector((int)(SamplingRate * this.m_MinStatCollectionPeriod));

            m_History      = new int[(int)(m_MinStatCollectionPeriod * SamplingRate + 1)];
            m_HistoryEmpty = true;
        }
示例#2
0
        public PpgPulseDetectorByDerivative(double SamplingRate, int BitsPerSample, bool bEnableDebugMonitor)
        {
            DenyLoggerByName(typeof(PpgPulseDetectorByDerivative).ToString());

            m_SamplingRate = SamplingRate;

            DetectorParameters par = DetectorParametersManager.GetParameters(SamplingRate);

            log.Debug($"Detector parameters used for sampling rate = {SamplingRate} Hz are: {par} ");

            BY    = par.BY;
            BMY   = par.BMY;
            BYd   = par.BYD;
            BMYd  = par.BMYD;
            BMYd2 = 10;

            KD1 = BY * BMY * 64;
            KD2 = BYd * BMYd * 64;

            m_Normalizer = new PpgDispersionNormalizer(SamplingRate, BitsPerSample);

            //m_Normalizer.Debug_MonitorEnabled(true);
#if ENABLE_DEBUG_MONITOR
            this.Debug_MonitorEnabled(bEnableDebugMonitor);
#else
            // do not enable, if not enabled in this module
#endif
            // monitor always off
            //this.Debug_MonitorEnabled(false);

            // создаем сборщик статистики по сигналу
            // нас интересуют статистические параметры сигнала
            // за последние m_MinStatCollectionPeriod предшествующих фронту секунд,
            // а также история сигнала за последние 2.2 секунды
            m_Signal_Statistics = new SeriesStatisticsCollector((int)(SamplingRate * this.m_MinStatCollectionPeriod));

            // создаем сборщик статистики по производной сигнала
            // нас интересуют статистические параметры производной сигнала
            // за последние 2.2 секунды, предшествующие фронту,
            m_DY_Statistics = new SeriesStatisticsCollector((int)(SamplingRate * this.m_MinStatCollectionPeriod));

            // История стабилизированного сигнала
            this.m_Y = new RingBuffer <int>(this.BY);

            // История сумм стабилизированного сигнала
            // (фактически, сглаживание перед дифференцированием)
            this.m_History_SumY = new RingBuffer <long>(this.BMY);

            // история стабилизированного сглаженного сигнала
            // для оценки длительности и высоты последнего фронта
            this.m_SumY_front_history = new SeriesStatisticsCollector((int)(SamplingRate * 1.0));

            // История производной стабилизированного сигнала
            this.m_DY = new RingBuffer <int>(this.BYd);

            // История сумм производной стабилизированного сигнала
            // (фактически, сглаживание перед вторым дифференцированием)
            this.m_History_SumDY = new RingBuffer <long>(this.BMYd);

            // История второй производно стабилизированного сигнала
            this.m_History_D2Y = new RingBuffer <int>(this.BMYd2);
        }