diff options
Diffstat (limited to 'dpd/src/Symbol_align.py')
-rw-r--r-- | dpd/src/Symbol_align.py | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/dpd/src/Symbol_align.py b/dpd/src/Symbol_align.py index 6c814a8..2f871bc 100644 --- a/dpd/src/Symbol_align.py +++ b/dpd/src/Symbol_align.py @@ -26,11 +26,12 @@ class Symbol_align: Find the phase offset to the start of the DAB symbols in an unaligned dab signal. """ - def __init__(self, sample_rate): + def __init__(self, sample_rate, plot=False): self.c = src.const.const(sample_rate) + self.plot = plot pass - def _calc_offset_to_first_symbol_without_prefix(self, tx, debug=False): + def _calc_offset_to_first_symbol_without_prefix(self, tx): tx_orig = tx[0:-self.c.T_U] tx_cut_prefix = tx[self.c.T_U:] @@ -48,7 +49,10 @@ class Symbol_align: offset = peaks[np.argmin([tx_product_avg[peak] for peak in peaks])] - if debug: + if logging.getLogger().getEffectiveLevel() == logging.DEBUG and self.plot: + dt = datetime.datetime.now().isoformat() + fig_path = logging_path + "/" + dt + "_Symbol_align.svg" + fig = plt.figure(figsize=(9, 9)) ax = fig.add_subplot(4, 1, 1) @@ -99,7 +103,10 @@ class Symbol_align: ax.set_xlabel("Sample") ax.set_ylabel("Conj. Product") ax.set_title("Difference with shifted self") + fig.tight_layout() + fig.savefig(fig_path) + plt.close(fig) # "offset" measures where the shifted signal matches the # original signal. Therefore we have to subtract the size @@ -112,7 +119,7 @@ class Symbol_align: x = x[inlier_idxs] return x - def _calc_delta_angle(self, fft, debug=False): + def _calc_delta_angle(self, fft): # Introduce invariance against carrier angles = np.angle(fft) % (np.pi / 2.) @@ -125,12 +132,7 @@ class Symbol_align: deltas_angle = self._remove_outliers(deltas_angle) delta_angle = np.mean(deltas_angle) - delta_angle_std = np.std(deltas_angle) - if debug: - plt.subplot(211) - plt.plot(angles, 'p') - plt.subplot(212) - plt.plot(deltas_angle, 'p') + return delta_angle def _delta_angle_to_samples(self, angle): @@ -142,7 +144,7 @@ class Symbol_align: fft = np.fft.fftshift(np.fft.fft(sig)) fft_crop = np.delete(fft[self.c.FFT_start:self.c.FFT_end], self.c.FFT_delete) - delta_angle = self._calc_delta_angle(fft_crop, debug=debug) + delta_angle = self._calc_delta_angle(fft_crop) delta_sample = self._delta_angle_to_samples(delta_angle) delta_sample_int = np.round(delta_sample).astype(int) error = np.abs(delta_sample_int - delta_sample) @@ -153,7 +155,7 @@ class Symbol_align: def calc_offset(self, tx): off_sym = self._calc_offset_to_first_symbol_without_prefix( - tx, debug=False) + tx) off_sam = self._calc_sample_offset( tx[off_sym:off_sym + self.c.T_U]) off = (off_sym + off_sam) % self.c.T_S |