예제 #1
0
        /// <summary>
        /// Samples the input stream and applies a high-pass filter (using MathNet.Filtering) over the sampled input stream. Removes low frequencies.
        /// </summary>
        /// <param name="input">The input source of doubles.</param>
        /// <param name="sampleRate">The desired sample rate for the filter.</param>
        /// <param name="cutoffRate">The desired cutoff for the filter.</param>
        /// <param name="impulseResponse">Specifies how the filter will respond to an impulse input (Finite or Infinite). Default is Finite.</param>
        /// <param name="sampleInterpolator">Optional sampling interpolator over the input. Default is a reproducible linear interpolation.</param>
        /// <param name="alignmentDateTime">If non-null, this parameter specifies a time to align the sampled messages with, and the sampled messages
        /// will have originating times that align with (i.e., are an integral number of intervals away from) the specified alignment time.</param>
        /// <param name="deliveryPolicy">An optional delivery policy for the input stream.</param>
        /// <returns>A high-pass filtered version of the input.</returns>
        public static IProducer <double> HighpassFilter(
            this IProducer <double> input,
            double sampleRate,
            double cutoffRate,
            ImpulseResponse impulseResponse = ImpulseResponse.Finite,
            Interpolator <double, double> sampleInterpolator = null,
            DateTime?alignmentDateTime             = null,
            DeliveryPolicy <double> deliveryPolicy = null)
        {
            var filter = OnlineFilter.CreateHighpass(impulseResponse, sampleRate, cutoffRate);

            return(MathNetFilter(input, sampleRate, sampleInterpolator ?? Reproducible.Linear(), alignmentDateTime, filter, deliveryPolicy));
        }
예제 #2
0
        public void LinearInterpolate()
        {
            var evenres = new List <(double, DateTime)>();
            var oddres  = new List <(double, DateTime)>();
            var results = new List <double>();

            using (var p = Pipeline.Create())
            {
                var source = Generators.Sequence(p, 0, i => i + 1, 10, TimeSpan.FromTicks(50));
                var even   = source.Where(i => i % 2 == 0).Select(v => (double)v).Do((m, e) => evenres.Add((m, e.OriginatingTime)));
                var odd    = source.Where(i => i % 2 == 1).Select(v => (double)v).Do((m, e) => oddres.Add((m, e.OriginatingTime)));
                even
                .Interpolate(odd, Reproducible.Linear())
                .Do(results.Add);

                p.Run();
            }

            Assert.AreEqual(results.Count, 4);
            Assert.AreEqual(results[0], 1, 0.00000001);
            Assert.AreEqual(results[1], 3, 0.00000001);
            Assert.AreEqual(results[2], 5, 0.00000001);
            Assert.AreEqual(results[3], 7, 0.00000001);
        }