示例#1
0
        /// <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"
            });
        }
示例#2
0
        /// <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"
            });
        }
示例#3
0
        /// <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"
            });
        }