aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-07-23 17:08:56 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-07-23 17:08:56 +0200
commitb9b461796a81f651310c2c0c73028ec08f66d3aa (patch)
tree92563b903cc09037b5bb5032750f743acb5d3dc5
parentc340361c04ab0365284404dc16eaada65d482ea3 (diff)
downloadodr-dab-cir-b9b461796a81f651310c2c0c73028ec08f66d3aa.tar.gz
odr-dab-cir-b9b461796a81f651310c2c0c73028ec08f66d3aa.tar.bz2
odr-dab-cir-b9b461796a81f651310c2c0c73028ec08f66d3aa.zip
Cumulate measurements over all TF in file
-rwxr-xr-xcorrelate_with_ref.py78
1 files changed, 44 insertions, 34 deletions
diff --git a/correlate_with_ref.py b/correlate_with_ref.py
index de68c9d..193fa8c 100755
--- a/correlate_with_ref.py
+++ b/correlate_with_ref.py
@@ -40,58 +40,68 @@ T_TF = 196608
print("Reading phase reference")
phase_ref = np.fromfile("phasereference.2048000.fc64.iq", np.complex64)
-# As we do not want to correlate of the whole recording that might be
-# containing several transmission frames, we first look for the null symbol in the
-# first 96ms
+def calc_cir(channel, start_ix):
+ """Calculate correlation with phase reference"""
-print("Searching for NULL symbol")
+ channel_out
-# Calculate power on blocks of length 2656 over the first 96ms. To gain speed,
-# we move the blocks by 10 samples.
-channel_out_power = np.array([np.abs(channel_out[t:t+T_NULL]).sum() for t in range(0, T_TF-T_NULL, 10)])
+ # As we do not want to correlate of the whole recording that might be
+ # containing several transmission frames, we first look for the null symbol in the
+ # first 96ms
+ print("Searching for NULL symbol")
-# Look where the power is smallest, this gives the index where the NULL starts.
-# Because if the subsampling, we need to multiply the index.
+ # Calculate power on blocks of length 2656 over the first 96ms. To gain speed,
+ # we move the blocks by N samples.
+ N = 20
+ channel_out_power = np.array([np.abs(channel[start_ix+t:start_ix+t+T_NULL]).sum() for t in range(0, T_TF-T_NULL, N)])
-t_null = 10 * channel_out_power.argmin()
+ # Look where the power is smallest, this gives the index where the NULL starts.
+ # Because if the subsampling, we need to multiply the index.
+ t_null = N * channel_out_power.argmin()
-print(" NULL symbol starts at ix={}".format(t_null))
+ print(" NULL symbol starts at ix={}".format(t_null))
-# The synchronisation channel occupies 5208 T and contains NULL symbol and
-# phase reference symbol. The phase reference symbol is 5208 - 2656 = 2552 T
-# long.
+ # The synchronisation channel occupies 5208 T and contains NULL symbol and
+ # phase reference symbol. The phase reference symbol is 5208 - 2656 = 2552 T
+ # long.
+ if len(phase_ref) != 2552:
+ print("Warning: phase ref len is {} != 2552".format(len(phase_ref)))
-if len(phase_ref) != 2552:
- print("Warning: phase ref len is {} != 2552".format(len(phase_ref)))
+ # We want to correlate our known phase reference symbol against the received
+ # signal, and give us some more margin about the exact position of the NULL
+ # symbol.
+ print("Correlating")
-# We want to correlate our known phase reference symbol against the received
-# signal, and give us some more margin about the exact position of the NULL
-# symbol.
-print("Correlating")
+ # We start a bit earlier than the end of the null symbol
+ corr_start_ix = t_null + T_NULL - 50
-# We start a bit earlier than the end of the null symbol
-corr_start_ix = t_null + T_NULL - 50
+ # In TM1, the longest spacing between carrier components one can allow is
+ # around 504 T (246us, or74km at speed of light). This gives us a limit
+ # on the number of correlations it makes sense to do.
+ max_component_delay = 500 # T
-# In TM1, the longest spacing between carrier components one can allow is
-# around 504 T (246us, or74km at speed of light). This gives us a limit
-# on the number of correlations it makes sense to do.
+ cir = np.array([np.abs(np.corrcoef(channel[start_ix + corr_start_ix + i:start_ix + corr_start_ix + phase_ref.size + i], phase_ref)[0,1]) for i in range(max_component_delay)])
+ return cir
-max_component_delay = 1000 # T
+num_correlations = int(len(channel_out) / T_TF)
+print("Doing {} correlations".format(num_correlations))
-cir = np.array([np.abs(np.corrcoef(channel_out[corr_start_ix + i:corr_start_ix + phase_ref.size + i], phase_ref)[0,1]) for i in range(max_component_delay)])
+cirs = np.array([
+ calc_cir(channel_out, i * T_TF)
+ for i in range(num_correlations) ])
-print("Done")
+print("Plotting")
-fig = pp.figure()
-ax = fig.add_subplot(111)
-hi = ax.plot(channel_out_power)
+pp.subplot(211)
+pp.plot(cirs.sum(axis=0))
+pp.subplot(212)
+pp.imshow(cirs)
-fig = pp.figure()
-ax = fig.add_subplot(111)
-hi = ax.plot(cir)
+print("Done")
pp.show()
+