/// <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)); }
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); }