def add_ase(self, signal: Signal): ''' :param signal:the edfa's input signal, if the signal is wdm, then the lambda will use center lambda, correction needed in the future :return: ''' if check_array.isscalar(signal.center_lambda_in_m): sigma = np.sqrt(self.nf_lin * PLANK * CLIGHT / signal.center_lambda_in_m * (self.gain_lin - 1) * signal.sps * signal.symbol_rate_in_hz) else: max_lam = np.max(signal.center_lambda_in_m) min_lam = np.min(signal.center_lambda_in_m) center = 2 * max_lam * min_lam / (max_lam + min_lam) sigma = np.sqrt(self.nf_lin * PLANK * CLIGHT / center * (self.gain_lin - 1) * signal.sps * signal.symbol_rate_in_hz) noise = 0.5 * sigma * ( np.random.randn(2, signal.sps * signal.data_len) + 1j * np.random.randn(2, signal.sps * signal.data_len)) signal.data_sample = signal.data_sample + noise