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