コード例 #1
0
 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)
コード例 #2
0
 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
コード例 #3
0
 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]))
コード例 #4
0
 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)
コード例 #5
0
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)
コード例 #6
0
    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())