import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
src = gr.lfsr_32k_source_s()
fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s();
- fg.connect (src,src_head,s2fsmi,enc,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics)
- fg.connect (metrics,va,fsmi2s,dst)
+ tb.connect (src,src_head,s2fsmi,enc,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics)
+ tb.connect (metrics,va,fsmi2s,dst)
- fg.run()
+ tb.run()
# A bit of cheating: run the program once and print the
# final encoder state.
10 import fsm_utils
11
12 def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- 13 fg = gr.flow_graph ()
+ 13 tb = gr.top_block ()
14
15 # TX
16 src = gr.lfsr_32k_source_s()
29 fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
30 dst = gr.check_lfsr_32k_s();
31
- 32 fg.connect (src,src_head,s2fsmi,enc,mod)
- 33 fg.connect (mod,(add,0))
- 34 fg.connect (noise,(add,1))
- 35 fg.connect (add,metrics)
- 36 fg.connect (metrics,va,fsmi2s,dst)
+ 32 tb.connect (src,src_head,s2fsmi,enc,mod)
+ 33 tb.connect (mod,(add,0))
+ 34 tb.connect (noise,(add,1))
+ 35 tb.connect (add,metrics)
+ 36 tb.connect (metrics,va,fsmi2s,dst)
37
- 38 fg.run()
+ 38 tb.run()
39
40 # A bit of cheating: run the program once and print the
41 # final encoder state.
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
L = len(channel)
# TX
va = trellis.viterbi_combined_s(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_s instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application...
dst = gr.vector_sink_s()
- fg.connect (src,mod)
- fg.connect (mod,isi,(add,0))
- fg.connect (noise,(add,1))
- #fg.connect (add,metrics)
- #fg.connect (metrics,va,dst)
- fg.connect (add,skip,va,dst)
+ tb.connect (src,mod)
+ tb.connect (mod,isi,(add,0))
+ tb.connect (noise,(add,1))
+ #tb.connect (add,metrics)
+ #tb.connect (metrics,va,dst)
+ tb.connect (add,skip,va,dst)
- fg.run()
+ tb.run()
data = dst.data()
ntotal = len(data) - L
10 import fsm_utils
11
12 def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed):
- 13 fg = gr.flow_graph ()
+ 13 tb = gr.top_block ()
14 L = len(channel)
15
16 # TX
37 va = trellis.viterbi_combined_s(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_s instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application...
38 dst = gr.vector_sink_s()
39
- 40 fg.connect (src,mod)
- 41 fg.connect (mod,isi,(add,0))
- 42 fg.connect (noise,(add,1))
- 43 #fg.connect (add,metrics)
- 44 #fg.connect (metrics,va,dst)
- 45 fg.connect (add,skip,va,dst)
+ 40 tb.connect (src,mod)
+ 41 tb.connect (mod,isi,(add,0))
+ 42 tb.connect (noise,(add,1))
+ 43 #tb.connect (add,metrics)
+ 44 #tb.connect (metrics,va,dst)
+ 45 tb.connect (add,skip,va,dst)
46
- 47 fg.run()
+ 47 tb.run()
48
49 data = dst.data()
50 ntotal = len(data) - L
import fsm_utils
def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s()
- fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics_in)
- fg.connect (metrics_in,va_in,deinter,metrics_out,va_out,fsmi2s,dst)
+ tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics_in)
+ tb.connect (metrics_in,va_in,deinter,metrics_out,va_out,fsmi2s,dst)
- fg.run()
+ tb.run()
ntotal = dst.ntotal ()
nright = dst.nright ()
def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s()
- fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics_in)
- fg.connect (gnd,(siso_in,0))
- fg.connect (metrics_in,(siso_in,1))
- fg.connect (siso_in,deinter,va_out,fsmi2s,dst)
-
- fg.run()
+ tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics_in)
+ tb.connect (gnd,(siso_in,0))
+ tb.connect (metrics_in,(siso_in,1))
+ tb.connect (siso_in,deinter,va_out,fsmi2s,dst)
+
+ tb.run()
ntotal = dst.ntotal ()
nright = dst.nright ()
-def make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type):
+def make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type):
metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi
scale = gr.multiply_const_ff(1.0/N0)
gnd = gr.vector_source_f([0],True);
siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed
# connect first stage
- fg.connect (gnd,inter[0])
- fg.connect (metrics_in,scale)
- fg.connect (scale,(siso_in[0],1))
+ tb.connect (gnd,inter[0])
+ tb.connect (metrics_in,scale)
+ tb.connect (scale,(siso_in[0],1))
# connect the rest
for it in range(IT):
if it < IT-1:
- fg.connect (metrics_in,(siso_in[it+1],1))
- fg.connect (siso_in[it],deinter[it],(siso_out[it],1))
- fg.connect (gnd,(siso_out[it],0))
- fg.connect (siso_out[it],inter[it+1])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (metrics_in,(siso_in[it+1],1))
+ tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
+ tb.connect (gnd,(siso_out[it],0))
+ tb.connect (siso_out[it],inter[it+1])
+ tb.connect (inter[it],(siso_in[it],0))
else:
- fg.connect (siso_in[it],deinter[it],siso_out[it])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (siso_in[it],deinter[it],siso_out[it])
+ tb.connect (inter[it],(siso_in[it],0))
return (metrics_in,siso_out[IT-1])
def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
# RX
- (head,tail) = make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
- #(head,tail) = make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT)
+ (head,tail) = make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
+ #(head,tail) = make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT)
fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s()
- fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,head)
- fg.connect (tail,fsmi2s,dst)
+ tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,head)
+ tb.connect (tail,fsmi2s,dst)
- fg.run()
+ tb.run()
#print enc_out.ST(), enc_in.ST()
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
dst = gr.check_lfsr_32k_s()
- fg.connect (src,src_head,s2fsmi,enc,mod)
- #fg.connect (src,b2s,s2fsmi,enc,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics)
- fg.connect (metrics,va,fsmi2s,dst)
- #fg.connect (metrics,va,fsmi2s,s2b,dst)
+ tb.connect (src,src_head,s2fsmi,enc,mod)
+ #tb.connect (src,b2s,s2fsmi,enc,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics)
+ tb.connect (metrics,va,fsmi2s,dst)
+ #tb.connect (metrics,va,fsmi2s,s2b,dst)
- fg.run()
+ tb.run()
# A bit of cheating: run the program once and print the
# final encoder state..
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
packet = [0]*Kb
#dst = gr.check_lfsr_32k_s();
- #fg.connect (src,src_head,s2fsmi,enc,mod)
- fg.connect (src,b2s,s2fsmi,enc,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics)
- #fg.connect (metrics,va,fsmi2s,dst)
- fg.connect (metrics,va,fsmi2s,s2b,dst)
+ #tb.connect (src,src_head,s2fsmi,enc,mod)
+ tb.connect (src,b2s,s2fsmi,enc,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics)
+ #tb.connect (metrics,va,fsmi2s,dst)
+ tb.connect (metrics,va,fsmi2s,s2b,dst)
- fg.run()
+ tb.run()
# A bit of cheating: run the program once and print the
# final encoder state..
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
dst = gr.check_lfsr_32k_s()
- fg.connect (src,src_head,s2fsmi,enc,mod)
- #fg.connect (src,b2s,s2fsmi,enc,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics)
- fg.connect (metrics,va,fsmi2s,dst)
- #fg.connect (metrics,va,fsmi2s,s2b,dst)
+ tb.connect (src,src_head,s2fsmi,enc,mod)
+ #tb.connect (src,b2s,s2fsmi,enc,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics)
+ tb.connect (metrics,va,fsmi2s,dst)
+ #tb.connect (metrics,va,fsmi2s,s2b,dst)
- fg.run()
+ tb.run()
# A bit of cheating: run the program once and print the
# final encoder state..
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
src = gr.lfsr_32k_source_s()
dst = gr.check_lfsr_32k_s();
- fg.connect (src,src_head,s2fsmi,enc,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,va,fsmi2s,dst)
+ tb.connect (src,src_head,s2fsmi,enc,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,va,fsmi2s,dst)
- fg.run()
+ tb.run()
# A bit of cheating: run the program once and print the
# final encoder state..
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed,P):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
src = gr.lfsr_32k_source_s()
fsmi2s=gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s()
- fg.connect (src,src_head,s2fsmi,s2p)
+ tb.connect (src,src_head,s2fsmi,s2p)
for i in range(P):
- fg.connect ((s2p,i),(enc,i),(mod,i))
- fg.connect ((mod,i),(add[i],0))
- fg.connect (noise[i],(add[i],1))
- fg.connect (add[i],(metrics,i))
- fg.connect ((metrics,i),(va,i),(p2s,i))
- fg.connect (p2s,fsmi2s,dst)
+ tb.connect ((s2p,i),(enc,i),(mod,i))
+ tb.connect ((mod,i),(add[i],0))
+ tb.connect (noise[i],(add[i],1))
+ tb.connect (add[i],(metrics,i))
+ tb.connect ((metrics,i),(va,i),(p2s,i))
+ tb.connect (p2s,fsmi2s,dst)
- fg.run()
+ tb.run()
# A bit of cheating: run the program once and print the
# final encoder state.
import fsm_utils
-def make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
+def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO
scale = gr.multiply_const_ff(1.0/N0)
gnd = gr.vector_source_f([0],True);
siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed
# connect first stage
- fg.connect (gnd,inter[0])
- fg.connect (metrics_in,scale)
- fg.connect (scale,(siso_in[0],1))
+ tb.connect (gnd,inter[0])
+ tb.connect (metrics_in,scale)
+ tb.connect (scale,(siso_in[0],1))
# connect the rest
for it in range(IT):
if it < IT-1:
- fg.connect (metrics_in,(siso_in[it+1],1))
- fg.connect (siso_in[it],deinter[it],(siso_out[it],1))
- fg.connect (gnd,(siso_out[it],0))
- fg.connect (siso_out[it],inter[it+1])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (metrics_in,(siso_in[it+1],1))
+ tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
+ tb.connect (gnd,(siso_out[it],0))
+ tb.connect (siso_out[it],inter[it+1])
+ tb.connect (inter[it],(siso_in[it],0))
else:
- fg.connect (siso_in[it],deinter[it],siso_out[it])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (siso_in[it],deinter[it],siso_out[it])
+ tb.connect (inter[it],(siso_in[it],0))
return (metrics_in,siso_out[IT-1])
def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,Es,N0,IT,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
src = gr.lfsr_32k_source_s()
noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
# RX
- (head,tail) = make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
+ (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s();
- fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,head)
- fg.connect (tail,fsmi2s,dst)
+ tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,head)
+ tb.connect (tail,fsmi2s,dst)
- fg.run()
+ tb.run()
ntotal = dst.ntotal ()
nright = dst.nright ()
import random
import fsm_utils
-def make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
+def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO
scale = gr.multiply_const_ff(1.0/N0)
gnd = gr.vector_source_f([0],True);
siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed
# connect first stage
- fg.connect (gnd,inter[0])
- fg.connect (metrics_in,scale)
- fg.connect (scale,(siso_in[0],1))
+ tb.connect (gnd,inter[0])
+ tb.connect (metrics_in,scale)
+ tb.connect (scale,(siso_in[0],1))
# connect the rest
for it in range(IT):
if it < IT-1:
- fg.connect (scale,(siso_in[it+1],1))
- fg.connect (siso_in[it],deinter[it],(siso_out[it],1))
- fg.connect (gnd,(siso_out[it],0))
- fg.connect (siso_out[it],inter[it+1])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (scale,(siso_in[it+1],1))
+ tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
+ tb.connect (gnd,(siso_out[it],0))
+ tb.connect (siso_out[it],inter[it+1])
+ tb.connect (inter[it],(siso_in[it],0))
else:
- fg.connect (siso_in[it],deinter[it],siso_out[it])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (siso_in[it],deinter[it],siso_out[it])
+ tb.connect (inter[it],(siso_in[it],0))
return (metrics_in,siso_out[IT-1])
def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
L = len(channel)
# TX
noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
# RX
- (head,tail) = make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
+ (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
dst = gr.vector_sink_s();
- fg.connect (src,enc_out,inter,mod)
- fg.connect (mod,isi,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,head)
- fg.connect (tail,dst)
+ tb.connect (src,enc_out,inter,mod)
+ tb.connect (mod,isi,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,head)
+ tb.connect (tail,dst)
- fg.run()
+ tb.run()
data = dst.data()
ntotal = len(data)
import random
import fsm_utils
-def make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
+def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
scale = gr.multiply_const_ff(math.sqrt(1.0/N0))
gnd = gr.vector_source_f([0],True);
siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed
# connect first stage
- fg.connect (gnd,inter[0])
- fg.connect (scale,(siso_in[0],1))
+ tb.connect (gnd,inter[0])
+ tb.connect (scale,(siso_in[0],1))
# connect the rest
for it in range(IT):
if it < IT-1:
- fg.connect (scale,(siso_in[it+1],1))
- fg.connect (siso_in[it],deinter[it],(siso_out[it],1))
- fg.connect (gnd,(siso_out[it],0))
- fg.connect (siso_out[it],inter[it+1])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (scale,(siso_in[it+1],1))
+ tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
+ tb.connect (gnd,(siso_out[it],0))
+ tb.connect (siso_out[it],inter[it+1])
+ tb.connect (inter[it],(siso_in[it],0))
else:
- fg.connect (siso_in[it],deinter[it],siso_out[it])
- fg.connect (inter[it],(siso_in[it],0))
+ tb.connect (siso_in[it],deinter[it],siso_out[it])
+ tb.connect (inter[it],(siso_in[it],0))
return (scale,siso_out[IT-1])
def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
L = len(channel)
# TX
noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
# RX
- (head,tail) = make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
+ (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
dst = gr.vector_sink_s();
- fg.connect (src,enc_out,inter,mod)
- fg.connect (mod,isi,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,head)
- fg.connect (tail,dst)
+ tb.connect (src,enc_out,inter,mod)
+ tb.connect (mod,isi,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,head)
+ tb.connect (tail,dst)
- fg.run()
+ tb.run()
data = dst.data()
ntotal = len(data)
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# TX
src = gr.lfsr_32k_source_s()
fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts
dst = gr.check_lfsr_32k_s();
- fg.connect (src,src_head,s2fsmi,enc,mod)
- fg.connect (mod,(add,0))
- fg.connect (noise,(add,1))
- fg.connect (add,metrics)
- fg.connect (metrics,va,fsmi2s,dst)
+ tb.connect (src,src_head,s2fsmi,enc,mod)
+ tb.connect (mod,(add,0))
+ tb.connect (noise,(add,1))
+ tb.connect (add,metrics)
+ tb.connect (metrics,va,fsmi2s,dst)
- fg.run()
+ tb.run()
ntotal = dst.ntotal ()
nright = dst.nright ()
import fsm_utils
def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed):
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
L = len(channel)
# TX
va = trellis.viterbi_combined_fs(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_fs instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application...
dst = gr.vector_sink_s()
- fg.connect (src,mod)
- fg.connect (mod,isi,(add,0))
- fg.connect (noise,(add,1))
- #fg.connect (add,metrics)
- #fg.connect (metrics,va,dst)
- fg.connect (add,skip,va,dst)
+ tb.connect (src,mod)
+ tb.connect (mod,isi,(add,0))
+ tb.connect (noise,(add,1))
+ #tb.connect (add,metrics)
+ #tb.connect (metrics,va,dst)
+ tb.connect (add,skip,va,dst)
- fg.run()
+ tb.run()
data = dst.data()
ntotal = len(data) - L
class qa_trellis (gr_unittest.TestCase):
def setUp (self):
- self.fg = gr.flow_graph ()
+ self.tb = gr.top_block ()
def tearDown (self):
- self.fg = None
+ self.tb = None
def test_001_fsm (self):
I = 2