/// <summary> /// Convolves the specified finite signal with an enumerable signal. /// </summary> /// <param name="s1">The finite signal.</param> /// <param name="s2">The enumerable signal.</param> /// <returns></returns> /// <exception cref="SamplerateMismatchException"></exception> public static IEnumerableSignal Convolve(this IFiniteSignal s1, IEnumerableSignal s2) { if (s1.SampleRate != s2.SampleRate) { throw new SamplerateMismatchException(); } return(new EnumerableSignal(Dsp.Convolve(s2.Signal, s1.Signal), s1.SampleRate, s1.Start + s2.Start) { DisplayName = "convolution result" }); }
/// <summary> /// Computes the cross-correlation of a finite and a enumerable signal. /// </summary> /// <param name="s1">The finite signal.</param> /// <param name="s2">The enumerable signal.</param> /// <returns></returns> /// <exception cref="SamplerateMismatchException"></exception> public static IEnumerableSignal CrossCorrelate(this IFiniteSignal s1, IEnumerableSignal s2) { if (s1.SampleRate != s2.SampleRate) { throw new SamplerateMismatchException(); } return(new EnumerableSignal(Dsp.CrossCorrelate(s2.Signal, s1.Signal), s1.SampleRate, s1.Start - s2.Start) { DisplayName = "cross correlation" }); }
/// <summary> /// Processes the specified signal with the provided filter. /// </summary> /// <param name="filter">The filter.</param> /// <param name="signal">The signal.</param> /// <returns>The filtered signal</returns> /// <exception cref="SamplerateMismatchException"></exception> public static IEnumerableSignal Process(this IFilter filter, IEnumerableSignal signal) { if (filter.Samplerate != signal.SampleRate) { throw new SamplerateMismatchException(); } if (filter.HasInfiniteImpulseResponse || !(signal is FiniteSignal)) { return(new EnumerableSignal(filter.Process(signal.Signal), filter.Samplerate, signal.Start) { DisplayName = "filter result" }); } return(new FiniteSignal(filter.Process(signal.Signal).ToReadOnlyList(), filter.Samplerate, signal.Start) { DisplayName = "filter result" }); }