def run(): usr_config = get_usr_config() np.random.seed(usr_config.seed) # prepare input signal input_signal_generator = signal_generator.InputSignalGenerator(usr_config.signal, usr_config.noise) input_signal, labels = input_signal_generator.get() # transform to frequency domain input_signal_freq_sq_mag, input_fft = freq_transform.transform_all( input_signal, usr_config.freq_transform_method, usr_config.signal) freq_detector = detector.HarmonicEstimator(usr_config.detection, input_signal_generator) roc, scores = freq_detector.get_roc(input_signal_freq_sq_mag, labels) # save result result = DetectionResult( roc, usr_config, input_signal_freq_sq_mag, input_signal_generator.input_snr, freq_detector, scores ) result.save(usr_config.result_dir)
def run(usr_config): np.random.seed(usr_config.seed) # prepare input signal input_signal_generator = signal_generator.InputSignalGenerator( usr_config.signal, usr_config.noise) input_signal, labels = input_signal_generator.get() # transform to frequency domain input_signal_freq_sq_mag, input_fft = freq_transform.transform_all( input_signal, usr_config.freq_transform_method, usr_config.signal) input_signal_freq_sq_mag_half = input_signal_freq_sq_mag[:, 0:int( usr_config.signal.block_size / 2) + 1] freq_detector = detector.HarmonicEstimator(usr_config.detection, input_signal_generator) roc, scores = freq_detector.get_roc(input_signal_freq_sq_mag_half, labels) # save result result = DetectionResult(roc=roc, usr_configs=usr_config, scores=scores) result.save(usr_config.result_dir)
def sim_fx_dp_noise_model(noise_level, model_coeff_generator, Bx=B, Bw=B, Ba=B): configurations = config.parse_config('../yaml/example.yaml') noise_level_db = noise_level noise_level_linear = utils.db_to_linear(noise_level_db) configurations.signal.num_pos_decision = 1000 configurations.noise.init_args.top = noise_level_linear configurations.noise.init_args.steady_state = noise_level_linear generator = signal_generator.InputSignalGenerator(configurations.signal, configurations.noise) signal_with_noise, _ = generator.get() configurations.noise.init_args.top = 0 configurations.noise.init_args.steady_state = 0 generator = signal_generator.InputSignalGenerator(configurations.signal, configurations.noise) signal_without_noise, _ = generator.get() noise_sample = signal_with_noise - signal_without_noise Nd = configurations.signal.num_pos_decision N = configurations.signal.block_size signal_with_noise = signal_with_noise[0:Nd, :, :] signal_without_noise = signal_without_noise[0:Nd, :, :] noise_sample = noise_sample[0:Nd, :, :] coeff_jdht = np.zeros((Nd, N, N)) for i in range(Nd): coeff_jdht[i, :, :] = model_coeff_generator(N) / N var_jdht_coeff = np.var(coeff_jdht) signal_power = np.var(signal_without_noise) w_max = np.abs(coeff_jdht).max() qcoeff_jdht = utils.unisign_quant(coeff_jdht, Bw, w_max) deltaw = utils.get_delta(Bw, w_max) sigal_max = np.abs(signal_with_noise).max() qsignal_with_noise = utils.unisign_quant(signal_with_noise, Bx, sigal_max) deltax = utils.get_delta(Bx, sigal_max) result_noise = np.zeros(signal_without_noise.shape) result_signal_without_noise = np.zeros(signal_without_noise.shape) result_signal_with_noise = np.zeros(signal_without_noise.shape) qresult_signal_without_noise = np.zeros(signal_without_noise.shape) qresult_signal_with_noise = np.zeros(signal_without_noise.shape) start = datetime.now() for i in range(Nd): result_signal_without_noise[i, :, :] = signal_without_noise[ i, :, :].dot(coeff_jdht[i, :, :].T) result_noise[i, :, :] = noise_sample[i, :, :].dot( coeff_jdht[i, :, :].T) result_signal_with_noise[i, :, :] = signal_with_noise[i, :, :].dot( coeff_jdht[i, :, :].T) qresult_signal_with_noise[i, :, :] = qsignal_with_noise[i, :, :].dot( qcoeff_jdht[i, :, :].T) result_max = result_signal_with_noise.max() deltay = utils.get_delta(Ba, result_max) qresult_signal_with_noise = utils.unisign_quant(qresult_signal_with_noise, Ba, result_max) end = datetime.now() total_dp_noise = qresult_signal_with_noise - result_signal_without_noise var_total_dp_noise = total_dp_noise.var() A = deltay**2 / 12 B = N * var_jdht_coeff * noise_level_linear C = N / 12 * var_jdht_coeff * deltax**2 D = N / 12 * signal_without_noise.var() * deltaw**2 E = N / 12 * noise_level_linear * deltaw**2 predicted_total_var = A + B + C + D + E predicted_signal_power = N * signal_power * var_jdht_coeff sim_signal_power = result_signal_without_noise.var() predicted_snr = predicted_signal_power / (A + B + C + D + E) sim_snr = sim_signal_power / var_total_dp_noise print('total time (s):', utils.format_float((end - start).total_seconds()), 'Bx:', Bx, 'Bw:', Bw, 'Ba:', Ba, noise_level, 'dB:', 10 * np.log10(predicted_total_var / var_total_dp_noise), 10 * np.log10(predicted_signal_power / sim_signal_power), 10 * np.log10(predicted_snr / sim_snr))
Ba = 8 noise_level = nl noise_level_db = noise_level noise_level_linear = utils.db_to_linear(noise_level_db) f = 437.5 configurations = config.parse_config('./yaml/example.yaml') configurations.signal.num_pos_decision = 5000 configurations.signal.amps = [1] configurations.signal.freqs = [f] configurations.signal.phase = [0] configurations.noise.init_args.top = noise_level_linear configurations.noise.init_args.steady_state = noise_level_linear generator = signal_generator.InputSignalGenerator( configurations.signal, configurations.noise) signal_with_noise, _ = generator.get() configurations.noise.init_args.top = 0 configurations.noise.init_args.steady_state = 0 generator = signal_generator.InputSignalGenerator( configurations.signal, configurations.noise) signal_without_noise, _ = generator.get() noise_sample = signal_with_noise - signal_without_noise Nd = configurations.signal.num_pos_decision N = configurations.signal.block_size fs = configurations.signal.fs bin_idx = get_bin_idx(f, fs, N) signal_with_noise = signal_with_noise[0:Nd, :, :]