/// <summary>
        /// Method superimposes two signals.
        /// If sizes are different then the smaller signal is broadcasted
        /// to fit the size of the larger signal.
        /// </summary>
        /// <param name="signal1"></param>
        /// <param name="signal2"></param>
        /// <returns></returns>
        public static DiscreteSignal Superimpose(this DiscreteSignal signal1, DiscreteSignal signal2)
        {
            Guard.AgainstInequality(signal1.SamplingRate, signal2.SamplingRate,
                                    "Sampling rate of signal1", "sampling rate of signal2");

            DiscreteSignal superimposed;

            if (signal1.Length >= signal2.Length)
            {
                superimposed = signal1.Copy();

                for (var i = 0; i < signal2.Length; i++)
                {
                    superimposed[i] += signal2.Samples[i];
                }
            }
            else
            {
                superimposed = signal2.Copy();

                for (var i = 0; i < signal1.Length; i++)
                {
                    superimposed[i] += signal1.Samples[i];
                }
            }

            return(superimposed);
        }
Beispiel #2
0
        /// <summary>
        /// Method superimposes two signals.
        /// If sizes are different then the smaller signal is broadcasted
        /// to fit the size of the larger signal.
        /// </summary>
        /// <param name="signal1"></param>
        /// <param name="signal2"></param>
        /// <returns></returns>
        public static DiscreteSignal Superimpose(this DiscreteSignal signal1, DiscreteSignal signal2)
        {
            if (signal1.SamplingRate != signal2.SamplingRate)
            {
                throw new ArgumentException("Sampling rates must be the same!");
            }

            DiscreteSignal superimposed;

            if (signal1.Length > signal2.Length)
            {
                superimposed = signal1.Copy();

                for (var i = 0; i < signal2.Length; i++)
                {
                    superimposed[i] += signal2.Samples[i];
                }
            }
            else
            {
                superimposed = signal2.Copy();

                for (var i = 0; i < signal1.Length; i++)
                {
                    superimposed[i] += signal1.Samples[i];
                }
            }

            return(superimposed);
        }
        /// <summary>
        /// Method subtracts one signal from another.
        /// If sizes are different then the smaller signal is broadcasted
        /// to fit the size of the larger signal.
        /// </summary>
        /// <param name="signal1"></param>
        /// <param name="signal2"></param>
        /// <returns></returns>
        public static DiscreteSignal Subtract(this DiscreteSignal signal1, DiscreteSignal signal2)
        {
            Guard.AgainstInequality(signal1.SamplingRate, signal2.SamplingRate,
                                    "Sampling rate of signal1", "sampling rate of signal2");

            DiscreteSignal subtracted;

            if (signal1.Length >= signal2.Length)
            {
                subtracted = signal1.Copy();

                for (var i = 0; i < signal2.Length; i++)
                {
                    subtracted[i] -= signal2.Samples[i];
                }
            }
            else
            {
                subtracted = new DiscreteSignal(signal2.SamplingRate, signal2.Length);

                for (var i = 0; i < signal1.Length; i++)
                {
                    subtracted[i] = signal1.Samples[i] - signal2.Samples[i];
                }
                for (var i = signal1.Length; i < signal2.Length; i++)
                {
                    subtracted[i] = -signal2.Samples[i];
                }
            }

            return(subtracted);
        }
        /// <summary>
        /// Method subtracts one signal from another.
        /// If sizes are different then the smaller signal is broadcasted
        /// to fit the size of the larger signal.
        /// </summary>
        /// <param name="signal1"></param>
        /// <param name="signal2"></param>
        /// <returns></returns>
        public static DiscreteSignal Subtract(this DiscreteSignal signal1, DiscreteSignal signal2)
        {
            if (signal1.SamplingRate != signal2.SamplingRate)
            {
                throw new ArgumentException("Sampling rates must be the same!");
            }

            DiscreteSignal subtracted;

            if (signal1.Length >= signal2.Length)
            {
                subtracted = signal1.Copy();

                for (var i = 0; i < signal2.Length; i++)
                {
                    subtracted[i] -= signal2.Samples[i];
                }
            }
            else
            {
                subtracted = new DiscreteSignal(signal2.SamplingRate, signal2.Length);

                for (var i = 0; i < signal1.Length; i++)
                {
                    subtracted[i] = signal1.Samples[i] - signal2.Samples[i];
                }
                for (var i = signal1.Length; i < signal2.Length; i++)
                {
                    subtracted[i] = -signal2.Samples[i];
                }
            }

            return(subtracted);
        }