aboutsummaryrefslogtreecommitdiffstats
path: root/dpd/src/Symbol_align.py
diff options
context:
space:
mode:
Diffstat (limited to 'dpd/src/Symbol_align.py')
-rw-r--r--dpd/src/Symbol_align.py26
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