mirror of
https://github.com/hb9fxq/gr-digitalhf
synced 2024-12-22 07:09:59 +00:00
working prel. version of 110C mode decoder
This commit is contained in:
parent
21f8d9e228
commit
1034b6045e
|
@ -73,7 +73,7 @@ class ScrambleData(object):
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def _advance(self):
|
def _advance(self):
|
||||||
self._state = np.concatenate(([np.sum(self._state&self._taps)&1],
|
self._state = np.concatenate(([self._state.dot(self._taps)&1],
|
||||||
self._state[0:-1]))
|
self._state[0:-1]))
|
||||||
|
|
||||||
## ---- preamble definitions ---------------------------------------------------
|
## ---- preamble definitions ---------------------------------------------------
|
||||||
|
@ -97,7 +97,8 @@ REINSERTED_PREAMBLE=common.n_psk(8, np.array(
|
||||||
0,4,0,4,0,0,4,4,0,0,0,0,0, # + D2
|
0,4,0,4,0,0,4,4,0,0,0,0,0, # + D2
|
||||||
6,
|
6,
|
||||||
4,4,4,4,4,6,0,2,4,0,4,0,4,2,0,6,4,4,4,4,4,6,0,2,4,0,4,0,4,2,0])) ## MP-
|
4,4,4,4,4,6,0,2,4,0,4,0,4,2,0,6,4,4,4,4,4,6,0,2,4,0,4,0,4,2,0])) ## MP-
|
||||||
## length 31
|
|
||||||
|
## length 31 mini-probes
|
||||||
MINI_PROBE=[common.n_psk(8, np.array([0,0,0,0,0,2,4,6,0,4,0,4,0,6,4,2,0,0,0,0,0,2,4,6,0,4,0,4,0,6,4])), ## sign = + (0)
|
MINI_PROBE=[common.n_psk(8, np.array([0,0,0,0,0,2,4,6,0,4,0,4,0,6,4,2,0,0,0,0,0,2,4,6,0,4,0,4,0,6,4])), ## sign = + (0)
|
||||||
common.n_psk(8, np.array([4,4,4,4,4,6,0,2,4,0,4,0,4,2,0,6,4,4,4,4,4,6,0,2,4,0,4,0,4,2,0]))] ## sign = - (1)
|
common.n_psk(8, np.array([4,4,4,4,4,6,0,2,4,0,4,0,4,2,0,6,4,4,4,4,4,6,0,2,4,0,4,0,4,2,0]))] ## sign = - (1)
|
||||||
|
|
||||||
|
@ -155,8 +156,8 @@ class DeIntl_DePunct(object):
|
||||||
def __init__(self, size, incr):
|
def __init__(self, size, incr):
|
||||||
self._size = size
|
self._size = size
|
||||||
self._i = 0
|
self._i = 0
|
||||||
self._array = np.zeros(size, dtype=np.float32)
|
self._array = np.zeros(size, dtype=np.float64)
|
||||||
self._idx = np.mod(incr*np.arange(size, dtype=np.uint32), size)
|
self._idx = np.mod(incr*np.arange(size, dtype=np.int32), size)
|
||||||
print('deinterleaver: ', size, incr, self._idx[0:100])
|
print('deinterleaver: ', size, incr, self._idx[0:100])
|
||||||
|
|
||||||
def fetch(self, a):
|
def fetch(self, a):
|
||||||
|
@ -173,6 +174,7 @@ class DeIntl_DePunct(object):
|
||||||
self._i += n
|
self._i += n
|
||||||
result = np.zeros(0, dtype=np.float64)
|
result = np.zeros(0, dtype=np.float64)
|
||||||
if self._i == self._size:
|
if self._i == self._size:
|
||||||
|
print('deinterleaver: ', self._idx[0:100])
|
||||||
print('==== TEST ====', self._array)
|
print('==== TEST ====', self._array)
|
||||||
#tmp = np.zeros(self._size, dtype=np.float32)
|
#tmp = np.zeros(self._size, dtype=np.float32)
|
||||||
tmp = self._array[self._idx]
|
tmp = self._array[self._idx]
|
||||||
|
@ -237,7 +239,7 @@ class PhysicalLayer(object):
|
||||||
success = self.decode_reinserted_preamble(symbols)
|
success = self.decode_reinserted_preamble(symbols)
|
||||||
else:
|
else:
|
||||||
success = self.get_data_frame_quality(symbols)
|
success = self.get_data_frame_quality(symbols)
|
||||||
return [self.make_data_frame(success),self._constellation_index,success,not got_reinserted_preamble]
|
return [self.make_data_frame(success),self._constellation_index,success,True]
|
||||||
|
|
||||||
def get_doppler(self, iq_samples):
|
def get_doppler(self, iq_samples):
|
||||||
"""quality check and doppler estimation for preamble"""
|
"""quality check and doppler estimation for preamble"""
|
||||||
|
@ -278,7 +280,7 @@ class PhysicalLayer(object):
|
||||||
return np.abs(np.mean(symbols[-32:])) > 0.5
|
return np.abs(np.mean(symbols[-32:])) > 0.5
|
||||||
|
|
||||||
def get_data_frame_quality(self, symbols):
|
def get_data_frame_quality(self, symbols):
|
||||||
print('get_data_frame_quality', symbols[-31:])
|
print('get_data_frame_quality', np.mean(symbols[-31:]))
|
||||||
return np.abs(np.mean(symbols[-31:])) > 0.5
|
return np.abs(np.mean(symbols[-31:])) > 0.5
|
||||||
|
|
||||||
def decode_reinserted_preamble(self, symbols):
|
def decode_reinserted_preamble(self, symbols):
|
||||||
|
@ -364,7 +366,7 @@ class PhysicalLayer(object):
|
||||||
if r.shape[0] == 0:
|
if r.shape[0] == 0:
|
||||||
return []
|
return []
|
||||||
self._viterbi_decoder.reset()
|
self._viterbi_decoder.reset()
|
||||||
decoded_bits = self._viterbi_decoder.udpate(r)
|
decoded_bits = np.roll(self._viterbi_decoder.udpate(r), 7)
|
||||||
print('bits=', decoded_bits[:100])
|
print('bits=', decoded_bits[:100])
|
||||||
print('quality={}% ({},{})'.format(120.0*self._viterbi_decoder.quality()/(2*len(decoded_bits)),
|
print('quality={}% ({},{})'.format(120.0*self._viterbi_decoder.quality()/(2*len(decoded_bits)),
|
||||||
self._viterbi_decoder.quality(),
|
self._viterbi_decoder.quality(),
|
||||||
|
|
Loading…
Reference in a new issue