コード例 #1
0
        /// <summary>
        /// Function to apply a bandpass filter on Signal object
        /// </summary>
        /// <param name="rhythmFilter">Provide filter for rhythm data</param>
        /// <param name="medianFilter">Provide filter for median data</param>
        /// <returns>a filtered copy of object</returns>
        public Signal ApplyFilter(DSP.IFilter rhythmFilter, DSP.IFilter medianFilter)
        {
            Signal sig = new Signal();

            sig.Type        = this.Type;
            sig.RhythmStart = this.RhythmStart;
            sig.RhythmEnd   = this.RhythmEnd;

            if (this.Rhythm != null)
            {
                if (rhythmFilter == null)
                {
                    return(null);
                }

                rhythmFilter.compute(this.Rhythm[0]);
                rhythmFilter.compute(this.Rhythm[0]);

                sig.Rhythm = new short[this.Rhythm.Length];
                for (int i = 0; i < sig.Rhythm.Length; i++)
                {
                    sig.Rhythm[i] = (short)Math.Round(rhythmFilter.compute(this.Rhythm[i]));
                }
            }

            if (this.Median != null)
            {
                if (medianFilter == null)
                {
                    return(null);
                }

                medianFilter.compute(this.Median[0]);
                medianFilter.compute(this.Median[0]);

                sig.Median = new short[this.Median.Length];
                for (int i = 0; i < sig.Median.Length; i++)
                {
                    sig.Median[i] = (short)Math.Round(medianFilter.compute(this.Median[i]));
                }
            }

            return(sig);
        }
コード例 #2
0
        /// <summary>
        /// Apply highpass filter to Signal object
        /// </summary>
        /// <param name="cutoff">top frequency of bandpass filter</param>
        /// <param name="numSections">nr of sections to use in filter (default: 2)</param>
        /// <param name="filters">provide filters that where used</param>
        /// <returns>a filtered copy of the signal object</returns>
        public Signals ApplyHighpassFilter(double cutoff, int numSections, ref DSP.IFilter[] filters)
        {
            Signals sigs = new Signals();

            sigs.RhythmAVM = this.RhythmAVM;
            sigs.RhythmSamplesPerSecond = this.RhythmSamplesPerSecond;

            sigs.MedianAVM              = this.MedianAVM;
            sigs.MedianLength           = this.MedianLength;
            sigs.MedianSamplesPerSecond = this.MedianSamplesPerSecond;
            sigs.MedianFiducialPoint    = this.MedianFiducialPoint;

            if (this.QRSZone != null)
            {
                sigs.QRSZone = new QRSZone[this.QRSZone.Length];

                for (int i = 0; i < sigs.QRSZone.Length; i++)
                {
                    sigs.QRSZone[i] = this.QRSZone[i].Clone();
                }
            }

            if (this._Lead != null)
            {
                sigs.NrLeads = this.NrLeads;

                if (filters == null ||
                    filters.Length != this.NrLeads)
                {
                    filters = new DSP.IFilter[this.NrLeads];
                }

                for (int i = 0; i < sigs._Lead.Length; i++)
                {
                    DSP.IFilter
                        rhythmFilter = null,
                        medianFilter = null;

                    if ((_Lead[i].Rhythm != null) &&
                        (this.RhythmSamplesPerSecond > 0))
                    {
                        if ((filters[i] == null) ||
                            !(filters[i] is DSP.HighpassFilterButterworthImplementation))
                        {
                            filters[i] = new DSP.HighpassFilterButterworthImplementation(cutoff, numSections, sigs.RhythmSamplesPerSecond);
                        }

                        rhythmFilter = filters[i];
                    }

                    if ((_Lead[i].Median != null) &&
                        (this.MedianSamplesPerSecond > 0))
                    {
                        medianFilter = new DSP.HighpassFilterButterworthImplementation(cutoff, numSections, sigs.MedianSamplesPerSecond);
                    }

                    sigs._Lead[i] = this._Lead[i].ApplyFilter(rhythmFilter, medianFilter);

                    if (sigs._Lead[i] == null)
                    {
                        return(null);
                    }
                }
            }

            return(sigs);
        }