I’ve implemented a Manchester Decoder via an FSM using the combined
Viterbi
algorithm in gr-trellis, and its working great decoding my signal.
However,
I’ve noticed that after ~1000 times running (see code), I get an
error…
what(): fsm::fsm(const char *name): file open error
I’d expect this to happen in case of a buffer overrun or RAM limitation,
but
even if I reduce the time between packets, I get the same error.
Thanks for your help.
Manchester_FSM_test.py
#!/usr/bin/env python
from gnuradio import gr
from gnuradio import trellis
from gnuradio import eng_notation
import math
import sys
#import fsm_utils
from gnuradio.eng_option import eng_option
from optparse import OptionParser
def main():
for i in range(2005):
x=manchester([1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0])
print i
def run_test
(f,Kb,bitspersymbol,K,dimensionality,constellation,data_in):
tb = gr.top_block ()
src = gr.vector_source_s(data_in)
#src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts
#s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) #
unpack shorts to symbols compatible with the FSM input cardinality
#enc = trellis.encoder_bb(f,0) # initial state = 0
#mod = gr.chunks_to_symbols_sf(constellation,dimensionality)
va =
trellis.viterbi_combined_sb(f,K,0,-1,dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN)
Put -1 if the Initial/Final states are not set.
dst = gr.vector_sink_b();
tb.connect (src,va,dst)
tb.run()
return dst.data()
def manchester(data_in):
fname="fsm_files/manchester_encoder.fsm"
# system parameters
f=trellis.fsm(fname) # get the FSM specification from a file (will
hopefully be automated in the future…)
Kb=64
bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per
FSM
input symbol
K=Kb/bitspersymbol # packet size in trellis steps
dimensionality = 2
constellation = [0, 0,0,1,1,0,1,1]
if len(constellation)/dimensionality != f.O():
sys.stderr.write ('Incompatible FSM output cardinality and
modulation size.\n’)
#sys.exit (1)
(data)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,data_in)
run experiment with different seed to get different noise realizations
return data
if name == ‘main’:
main()
Manchester_encoder.fsm
2 2 4
0 1
0 1
1 2
1 2
Manchester Encoder
View this message in context:
http://old.nabble.com/gr-Trellis-FSM-tp33544924p33544924.html
Sent from the GnuRadio mailing list archive at Nabble.com.