/// <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">Object signal</param> /// <param name="signal2">Argument signal</param> /// <returns></returns> public static ComplexDiscreteSignal Superimpose(this ComplexDiscreteSignal signal1, ComplexDiscreteSignal signal2) { if (signal1.SamplingRate != signal2.SamplingRate) { throw new ArgumentException("Sampling rates must be the same!"); } ComplexDiscreteSignal superimposed; if (signal1.Length > signal2.Length) { superimposed = signal1.Copy(); for (var i = 0; i < signal2.Length; i++) { superimposed.Real[i] += signal2.Real[i]; superimposed.Imag[i] += signal2.Imag[i]; } } else { superimposed = signal2.Copy(); for (var i = 0; i < signal1.Length; i++) { superimposed.Real[i] += signal1.Real[i]; superimposed.Imag[i] += signal1.Imag[i]; } } return(superimposed); }
/// <summary> /// Superimposes signals <paramref name="signal1"/> and <paramref name="signal2"/>. /// If sizes are different then the smaller signal is broadcast to fit the size of the larger signal. /// </summary> /// <param name="signal1">First signal</param> /// <param name="signal2">Second signal</param> public static ComplexDiscreteSignal Superimpose(this ComplexDiscreteSignal signal1, ComplexDiscreteSignal signal2) { Guard.AgainstInequality(signal1.SamplingRate, signal2.SamplingRate, "Sampling rate of signal1", "sampling rate of signal2"); ComplexDiscreteSignal superimposed; if (signal1.Length > signal2.Length) { superimposed = signal1.Copy(); for (var i = 0; i < signal2.Length; i++) { superimposed.Real[i] += signal2.Real[i]; superimposed.Imag[i] += signal2.Imag[i]; } } else { superimposed = signal2.Copy(); for (var i = 0; i < signal1.Length; i++) { superimposed.Real[i] += signal1.Real[i]; superimposed.Imag[i] += signal1.Imag[i]; } } return(superimposed); }