summaryrefslogtreecommitdiff
path: root/gnuradio-examples/python
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-examples/python')
-rwxr-xr-xgnuradio-examples/python/channel-coding/fsm_utils.py73
1 files changed, 71 insertions, 2 deletions
diff --git a/gnuradio-examples/python/channel-coding/fsm_utils.py b/gnuradio-examples/python/channel-coding/fsm_utils.py
index 9e59b181a..ab9900152 100755
--- a/gnuradio-examples/python/channel-coding/fsm_utils.py
+++ b/gnuradio-examples/python/channel-coding/fsm_utils.py
@@ -26,6 +26,7 @@ import math
import sys
import operator
+from gnuradio import trellis
@@ -57,6 +58,59 @@ def base2dec(s,base):
return num
+######################################################################
+# Generate a new FSM representing the concatenation of two FSMs
+######################################################################
+def fsm_concatenate(f1,f2):
+ if f1.O() > f2.I():
+ print "Not compatible FSMs\n"
+ I=f1.I()
+ S=f1.S()*f2.S()
+ O=f2.O()
+ nsm=list([0]*I*S)
+ osm=list([0]*I*S)
+ for s1 in range(f1.S()):
+ for s2 in range(f2.S()):
+ for i in range(f1.I()):
+ ns1=f1.NS()[s1*f1.I()+i]
+ o1=f1.OS()[s1*f1.I()+i]
+ ns2=f2.NS()[s2*f2.I()+o1]
+ o2=f2.OS()[s2*f2.I()+o1]
+
+ s=s1*f2.S()+s2
+ ns=ns1*f2.S()+ns2
+ nsm[s*I+i]=ns
+ osm[s*I+i]=o2
+
+
+ f=trellis.fsm(I,S,O,nsm,osm)
+ return f
+
+######################################################################
+# Generate a new FSM representing n stages through the original FSM
+######################################################################
+def fsm_radix(f,n):
+ I=f.I()**n
+ S=f.S()
+ O=f.O()**n
+ nsm=list([0]*I*S)
+ osm=list([0]*I*S)
+ for s in range(f.S()):
+ for i in range(I):
+ ii=dec2base(i,f.I(),n)
+ oo=list([0]*n)
+ ns=s
+ for k in range(n):
+ oo[k]=f.OS()[ns*f.I()+ii[k]]
+ ns=f.NS()[ns*f.I()+ii[k]]
+
+ nsm[s*I+i]=ns
+ osm[s*I+i]=base2dec(oo,f.O())
+
+
+ f=trellis.fsm(I,S,O,nsm,osm)
+ return f
+
@@ -138,7 +192,22 @@ c_channel = [0.227, 0.460, 0.688, 0.460, 0.227]
if __name__ == '__main__':
- make_fsm_bin_cc_ff (1,2,[[7,5]])
+ f1=trellis.fsm('fsm_files/awgn1o2_4.fsm')
+ #f2=trellis.fsm('fsm_files/awgn2o3_4.fsm')
+ print f1.I(), f1.S(), f1.O()
+ print f1.NS()
+ print f1.OS()
+ #print f2.I(), f2.S(), f2.O()
+ #print f2.NS()
+ #print f2.OS()
+ ##f1.write_trellis_svg('f1.svg',4)
+ #f2.write_trellis_svg('f2.svg',4)
+ #f=fsm_concatenate(f1,f2)
+ f=fsm_radix(f1,2)
+
print "----------\n"
- make_fsm_bin_cc_ff (2,3,[[1,0,2],[0,1,6]])
+ print f.I(), f.S(), f.O()
+ print f.NS()
+ print f.OS()
+ #f.write_trellis_svg('f.svg',4)