1subroutine jt9fano(i1SoftSymbols,limit,nlim,msg) 2 3! Decoder for JT9 4! Input: i1SoftSymbols(207) - Single-bit soft symbols 5! Output: msg - decoded message (blank if erasure) 6 7 use packjt 8 character*22 msg 9 integer*4 i4DecodedBytes(9) 10 integer*4 i4Decoded6BitWords(12) 11 integer*1 i1DecodedBytes(13) !72 bits and zero tail as 8-bit bytes 12 integer*1 i1SoftSymbols(207) 13 integer*1 i1DecodedBits(72) 14 15 real*4 xx0(0:262) 16 17 logical first 18 integer*4 mettab(-128:127,0:1) 19 data first/.true./ 20 data xx0/ & !Metric table 21 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & 22 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & 23 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & 24 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & 25 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & 26 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & 27 0.988, 1.000, 0.991, 0.993, 1.000, 0.995, 1.000, 0.991, & 28 1.000, 0.991, 0.992, 0.991, 0.990, 0.990, 0.992, 0.996, & 29 0.990, 0.994, 0.993, 0.991, 0.992, 0.989, 0.991, 0.987, & 30 0.985, 0.989, 0.984, 0.983, 0.979, 0.977, 0.971, 0.975, & 31 0.974, 0.970, 0.970, 0.970, 0.967, 0.962, 0.960, 0.957, & 32 0.956, 0.953, 0.942, 0.946, 0.937, 0.933, 0.929, 0.920, & 33 0.917, 0.911, 0.903, 0.895, 0.884, 0.877, 0.869, 0.858, & 34 0.846, 0.834, 0.821, 0.806, 0.790, 0.775, 0.755, 0.737, & 35 0.713, 0.691, 0.667, 0.640, 0.612, 0.581, 0.548, 0.510, & 36 0.472, 0.425, 0.378, 0.328, 0.274, 0.212, 0.146, 0.075, & 37 0.000,-0.079,-0.163,-0.249,-0.338,-0.425,-0.514,-0.606, & 38 -0.706,-0.796,-0.895,-0.987,-1.084,-1.181,-1.280,-1.376, & 39 -1.473,-1.587,-1.678,-1.790,-1.882,-1.992,-2.096,-2.201, & 40 -2.301,-2.411,-2.531,-2.608,-2.690,-2.829,-2.939,-3.058, & 41 -3.164,-3.212,-3.377,-3.463,-3.550,-3.768,-3.677,-3.975, & 42 -4.062,-4.098,-4.186,-4.261,-4.472,-4.621,-4.623,-4.608, & 43 -4.822,-4.870,-4.652,-4.954,-5.108,-5.377,-5.544,-5.995, & 44 -5.632,-5.826,-6.304,-6.002,-6.559,-6.369,-6.658,-7.016, & 45 -6.184,-7.332,-6.534,-6.152,-6.113,-6.288,-6.426,-6.313, & 46 -9.966,-6.371,-9.966,-7.055,-9.966,-6.629,-6.313,-9.966, & 47 -5.858,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966, & 48 -9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966, & 49 -9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966, & 50 -9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966, & 51 -9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966, & 52 -9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966, & 53 1.43370769e-019,2.64031087e-006,6.25548654e+028, & 54 2.44565251e+020,4.74227538e+030,10497312.,7.74079654e-039/ 55 save 56 57 if(first) then 58! Get the metric table 59 bias=0.5 60 scale=50 61 ndelta=nint(3.4*scale) 62 ib=160 !Break point 63 slope=2 !Slope beyond break 64 do i=0,255 65 mettab(i-128,0)=nint(scale*(xx0(i)-bias)) 66 if(i.gt.ib) mettab(i-128,0)=mettab(ib-128,0) - slope*(i-ib) 67 if(i.ge.1) mettab(128-i,1)=mettab(i-128,0) 68 enddo 69 mettab(-128,1)=mettab(-127,1) 70 first=.false. 71 endif 72 73 msg=' ' 74 nbits=72 75 call fano232(i1SoftSymbols,nbits+31,mettab,ndelta,limit,i1DecodedBytes, & 76 ncycles,metric,ierr) 77 78 nlim=ncycles/(nbits+31) 79 if(ncycles.lt.((nbits+31)*limit)) then 80 nbytes=(nbits+7)/8 81 do i=1,nbytes 82 n=i1DecodedBytes(i) 83 i4DecodedBytes(i)=iand(n,255) 84 enddo 85 call unpackbits(i4DecodedBytes,nbytes,8,i1DecodedBits) 86 call packbits(i1DecodedBits,12,6,i4Decoded6BitWords) 87 call unpackmsg(i4Decoded6BitWords,msg) !Unpack decoded msg 88 if(index(msg,'000AAA ').gt.0) msg=' ' 89 endif 90 91 return 92end subroutine jt9fano 93