def test_input_not_changed(self): """ Test if function does not modify its input data array""" for X in self.Xs: for width in self.widths: Xcopy = X.copy() generate_random_missing_phases(Xcopy, missing_ratio=0.5, width=width) npt.assert_array_equal(Xcopy, X)
def get_problem_data(self, ratio, width): stft, istft = self.get_stft_operators() X_ref = stft(self.x_ref) B, M = generate_random_missing_phases(X_ref, missing_ratio=ratio, width=width) return B, M, stft, istft
def test_values(self): """ Check changed and unchanged values in data array """ for X in self.Xs: for ratio in np.arange(0, 1, 0.1): for width in self.widths: B, M = generate_random_missing_phases(X, missing_ratio=ratio, width=width) npt.assert_array_almost_equal(B[M], X[M]) npt.assert_array_almost_equal(B[~M], np.abs(X[~M]))
def test_ratio(self): """ Check number of values in mask """ for X in self.Xs: for ratio in np.arange(0, 1, 0.1): for width in self.widths: B, M = generate_random_missing_phases(X, missing_ratio=ratio, width=width) self.assertAlmostEqual(np.count_nonzero(~M), ratio * X.size, delta=1)
name = 'pcwd_final' missing_ratio = 0.2 width = 5 exp = create_exp(name) exp = PhasecutExperiment.load_exp(name) x = generate_chirp_dirac_noise(**exp.sig_params) plt.figure() plt.plot(x) plt.savefig('signal.pdf', bbox_inches='tight') plt.show() stft, istft = exp.get_stft_operators() X_ref = stft(x) B, M = generate_random_missing_phases(X_ref, missing_ratio=missing_ratio, width=width) # Generate problem plt.figure() plotdgt(coef=B, a=exp.stft_params['hop'], colorbar=False) plt.savefig('spectro.pdf', bbox_inches='tight') plt.show() stft_params = exp.stft_params stft_params['hop'] = 1 stft_params['nb_bins'] = exp.sig_params['sig_len'] print(stft_params) stft, _, _ = get_stft_operators(sig_len=exp.sig_params['sig_len'], **stft_params) X = stft(x)
def run_task(self, task_id): i_solver, i_ratio = self.get_task(task_id) solver = self.solvers[i_solver] ratio = self.missing_ratios[i_ratio] start_time = datetime.datetime.now() print('Task', task_id) print('Start at', start_time) print('{:%}% missing phases'.format(ratio)) print('Solver: {}'.format(solver)) # Generate problem stft, istft = self.get_stft_operators() X_ref = stft(self.x_ref) B, M = generate_random_missing_phases(X_ref, missing_ratio=ratio) if solver == 'RPI': # Solve problem t0 = time.process_time() x_est = random_phase_inpainting(M=M, B=B, istft=istft) runtime = time.process_time() - t0 track_iter = None track_error = None elif solver == 'GLI': # Build tracker tracker = GLTracker(x_ref=self.x_ref, istft=istft) # Solve problem t0 = time.process_time() x_est = griffin_lim_inpainting(M=M, B=B, stft=stft, istft=istft, n_iter=self.gli_params['n_iter'], verbose_it=100, tracker=tracker) runtime = time.process_time() - t0 track_iter = tracker.iter track_error = tracker.error elif solver == 'PCI': # Build tracker tracker = PhasecutTracker(x_ref=self.x_ref, B=B, istft=istft) # Solve problem t0 = time.process_time() x_est = phasecut_inpainting(M=M, B=B, stft=stft, istft=istft, n_iter=self.phasecut_params['n_iter'], nu=self.phasecut_params['nu'], verbose_it=100, tracker=tracker) runtime = time.process_time() - t0 track_iter = tracker.iter track_error = tracker.error else: raise ValueError('Unknown solver: {}'.format(solver)) # Save results np.savez(self.get_task_filename(task_id=task_id), x_est=x_est, ratio=ratio, solver=solver, runtime=runtime, track_iter=track_iter, track_error=track_error) print('End at', datetime.datetime.now())