mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-27 14:48:46 -05:00
Corrected known flaws in audio waveform generated by JTMS3.
Working on JTMS3 decoder. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/jtms3@2503 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
cb0093239d
commit
1aa080460e
@ -17,7 +17,7 @@ CFLAGS = -I. -fbounds-check
|
||||
%.o: %.F90
|
||||
${FC} ${FFLAGS} -c $<
|
||||
|
||||
all: libm65.a ms3.exe
|
||||
all: libm65.a ms3.exe JTMScode.exe
|
||||
|
||||
OBJS1 = trimlist.o display.o getdphi.o pctile.o ccf65.o \
|
||||
decode1a.o sort.o filbig.o fil6521.o afc65b.o \
|
||||
@ -33,18 +33,17 @@ OBJS1 = trimlist.o display.o getdphi.o pctile.o ccf65.o \
|
||||
gen65.o chkmsg.o ptt.o astrosub.o astro0.o recvpkt.o symspec.o \
|
||||
iqcal.o iqfix.o timf2.o s3avg.o genjtms3.o \
|
||||
entail.o encode232.o scr258.o analytic.o db.o
|
||||
|
||||
libm65.a: $(OBJS1)
|
||||
ar cr libm65.a $(OBJS1)
|
||||
ranlib libm65.a
|
||||
|
||||
OBJS3 = ms3.o
|
||||
OBJS3 = ms3.o specjtms.o
|
||||
ms3.exe: $(OBJS3) libm65.a
|
||||
$(FC) -o ms3.exe $(OBJS3) libm65.a ../libfftw3f_win.a \
|
||||
$(FC) -o ms3.exe $(OBJS3) libm65.a ../libfftw3f_win.a
|
||||
|
||||
OBJS2 = JT65code.o
|
||||
JT65code.exe: $(OBJS2) libm65.a
|
||||
$(FC) -o JT65code.exe $(OBJS2) libm65.a
|
||||
OBJS2 = JTMScode.o genjtms3a.o fano232.o
|
||||
JTMScode.exe: $(OBJS2) libm65.a
|
||||
$(FC) -o JTMScode.exe $(OBJS2) libm65.a ../libfftw3f_win.a
|
||||
|
||||
INCPATH = -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/QtCore' \
|
||||
-I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include' \
|
||||
|
@ -1,25 +0,0 @@
|
||||
subroutine analytic(d,npts,nfft,s,c)
|
||||
|
||||
! Convert real data to analytic signal
|
||||
|
||||
parameter (NMAX=512*1024)
|
||||
real d(npts)
|
||||
real s(NMAX)
|
||||
complex c(NMAX)
|
||||
|
||||
nh=nfft/2
|
||||
fac=2.0/nfft
|
||||
c(1:npts)=fac*d(1:npts)
|
||||
c(npts+1:nfft)=0.
|
||||
call four2a(c,nfft,1,-1,1) !Forward c2c FFT
|
||||
|
||||
do i=1,nh
|
||||
s(i)=real(c(i))**2 + aimag(c(i))**2
|
||||
enddo
|
||||
|
||||
c(1)=0.5*c(1)
|
||||
c(nh+2:nfft)=0.
|
||||
call four2a(c,nfft,1,1,1) !Inverse c2c FFT
|
||||
|
||||
return
|
||||
end subroutine analytic
|
256
libm65/bpskmetrics.dat
Normal file
256
libm65/bpskmetrics.dat
Normal file
@ -0,0 +1,256 @@
|
||||
-12.8 1.000 -9.966 1.000000 0.000000
|
||||
-12.7 1.000 -9.966 1.000000 0.000000
|
||||
-12.6 1.000 -9.966 1.000000 0.000000
|
||||
-12.5 1.000 -9.966 1.000000 0.000000
|
||||
-12.4 1.000 -9.966 1.000000 0.000000
|
||||
-12.3 1.000 -9.966 1.000000 0.000000
|
||||
-12.2 1.000 -9.966 1.000000 0.000000
|
||||
-12.1 1.000 -9.966 1.000000 0.000000
|
||||
-12.0 1.000 -9.966 1.000000 0.000000
|
||||
-11.9 1.000 -9.966 1.000000 0.000000
|
||||
-11.8 1.000 -9.966 1.000000 0.000000
|
||||
-11.7 1.000 -9.966 1.000000 0.000000
|
||||
-11.6 1.000 -9.966 1.000000 0.000000
|
||||
-11.5 1.000 -9.966 1.000000 0.000000
|
||||
-11.4 1.000 -9.966 1.000000 0.000000
|
||||
-11.3 1.000 -9.966 1.000000 0.000000
|
||||
-11.2 1.000 -9.966 1.000000 0.000000
|
||||
-11.1 1.000 -9.966 1.000000 0.000000
|
||||
-11.0 1.000 -9.966 1.000000 0.000000
|
||||
-10.9 1.000 -9.966 1.000000 0.000000
|
||||
-10.8 1.000 -9.966 1.000000 0.000000
|
||||
-10.7 1.000 -9.966 1.000000 0.000000
|
||||
-10.6 1.000 -9.966 1.000000 0.000000
|
||||
-10.5 1.000 -9.966 1.000000 0.000000
|
||||
-10.4 1.000 -9.966 1.000000 0.000000
|
||||
-10.3 1.000 -9.966 1.000000 0.000000
|
||||
-10.2 1.000 -9.966 1.000000 0.000000
|
||||
-10.1 1.000 -9.966 1.000000 0.000000
|
||||
-10.0 1.000 -9.966 1.000000 0.000000
|
||||
-9.9 1.000 -9.966 1.000000 0.000000
|
||||
-9.8 1.000 -9.966 1.000000 0.000000
|
||||
-9.7 1.000 -9.966 1.000000 0.000000
|
||||
-9.6 1.000 -9.966 1.000000 0.000000
|
||||
-9.5 1.000 -9.966 1.000000 0.000000
|
||||
-9.4 1.000 -9.966 1.000000 0.000000
|
||||
-9.3 1.000 -9.966 1.000000 0.000000
|
||||
-9.2 1.000 -9.966 1.000000 0.000000
|
||||
-9.1 1.000 -9.966 1.000000 0.000000
|
||||
-9.0 1.000 -9.966 1.000000 0.000000
|
||||
-8.9 1.000 -9.966 1.000000 0.000000
|
||||
-8.8 1.000 -9.966 1.000000 0.000000
|
||||
-8.7 1.000 -9.966 1.000000 0.000000
|
||||
-8.6 1.000 -9.966 1.000000 0.000000
|
||||
-8.5 1.000 -9.966 1.000000 0.000000
|
||||
-8.4 1.000 -9.966 1.000000 0.000000
|
||||
-8.3 1.000 -9.966 1.000000 0.000000
|
||||
-8.2 1.000 -9.966 1.000000 0.000000
|
||||
-8.1 1.000 -9.966 1.000000 0.000000
|
||||
-8.0 1.000 -9.966 1.000000 0.000000
|
||||
-7.9 1.000 -9.966 1.000000 0.000000
|
||||
-7.8 1.000 -9.966 1.000000 0.000000
|
||||
-7.7 1.000 -9.966 1.000000 0.000000
|
||||
-7.6 1.000 -9.966 1.000000 0.000000
|
||||
-7.5 1.000 -9.966 1.000000 0.000000
|
||||
-7.4 1.000 -9.966 1.000000 0.000000
|
||||
-7.3 1.000 -9.966 1.000000 0.000000
|
||||
-7.2 1.000 -9.966 1.000000 0.000000
|
||||
-7.1 1.000 -9.966 1.000000 0.000000
|
||||
-7.0 1.000 -9.966 1.000000 0.000000
|
||||
-6.9 1.000 -9.966 1.000000 0.000000
|
||||
-6.8 1.000 -9.966 1.000000 0.000000
|
||||
-6.7 1.000 -9.966 1.000000 0.000000
|
||||
-6.6 1.000 -9.966 1.000000 0.000000
|
||||
-6.5 1.000 -9.966 1.000000 0.000000
|
||||
-6.4 1.000 -9.966 1.000000 0.000000
|
||||
-6.3 1.000 -9.966 1.000000 0.000000
|
||||
-6.2 1.000 -9.966 1.000000 0.000000
|
||||
-6.1 1.000 -9.966 1.000000 0.000000
|
||||
-6.0 1.000 -9.966 1.000000 0.000000
|
||||
-5.9 1.000 -9.966 1.000000 0.000000
|
||||
-5.8 1.000 -9.966 1.000000 0.000000
|
||||
-5.7 1.000 -9.966 1.000000 0.000000
|
||||
-5.6 1.000 -9.966 1.000000 0.000000
|
||||
-5.5 1.000 -9.966 1.000000 0.000000
|
||||
-5.4 1.000 -9.966 1.000000 0.000000
|
||||
-5.3 1.000 -9.966 1.000000 0.000000
|
||||
-5.2 1.000 -9.966 1.000000 0.000000
|
||||
-5.1 1.000 -9.966 1.000000 0.000000
|
||||
-5.0 1.000 -9.966 1.000000 0.000000
|
||||
-4.9 1.000 -9.966 1.000000 0.000000
|
||||
-4.8 1.000 -9.966 1.000000 0.000000
|
||||
-4.7 1.000 -9.966 1.000000 0.000000
|
||||
-4.6 1.000 -9.966 1.000000 0.000000
|
||||
-4.5 1.000 -9.966 1.000000 0.000000
|
||||
-4.4 1.000 -9.966 1.000000 0.000000
|
||||
-4.3 1.000 -9.966 1.000000 0.000000
|
||||
-4.2 1.000 -9.966 1.000000 0.000000
|
||||
-4.1 1.000 -9.966 1.000000 0.000000
|
||||
-4.0 1.000 -9.966 1.000000 0.000000
|
||||
-3.9 1.000 -9.966 1.000000 0.000000
|
||||
-3.8 1.000 -9.966 1.000000 0.000000
|
||||
-3.7 1.000 -9.966 1.000000 0.000000
|
||||
-3.6 1.000 -9.966 1.000000 0.000000
|
||||
-3.5 1.000 -9.966 1.000000 0.000000
|
||||
-3.4 1.000 -9.966 1.000000 0.000000
|
||||
-3.3 1.000 -9.966 1.000000 0.000000
|
||||
-3.2 1.000 -9.966 1.000000 0.000000
|
||||
-3.1 1.000 -9.966 1.000000 0.000000
|
||||
-3.0 1.000 -9.966 1.000000 0.000000
|
||||
-2.9 1.000 -9.966 1.000000 0.000000
|
||||
-2.8 1.000 -9.966 0.999955 0.000045
|
||||
-2.7 1.000 -9.966 0.999968 0.000032
|
||||
-2.6 1.000 -9.966 0.999909 0.000091
|
||||
-2.5 1.000 -9.966 0.999983 0.000017
|
||||
-2.4 1.000 -9.966 0.999937 0.000063
|
||||
-2.3 1.000 -9.966 0.999914 0.000086
|
||||
-2.2 1.000 -9.966 0.999813 0.000187
|
||||
-2.1 1.000 -9.966 0.999775 0.000225
|
||||
-2.0 1.000 -9.966 0.999671 0.000329
|
||||
-1.9 0.999 -9.966 0.999531 0.000469
|
||||
-1.8 0.999 -9.308 0.999211 0.000789
|
||||
-1.7 0.998 -8.893 0.998948 0.001052
|
||||
-1.6 0.998 -8.191 0.998290 0.001710
|
||||
-1.5 0.996 -7.655 0.997519 0.002481
|
||||
-1.4 0.994 -7.037 0.996192 0.003808
|
||||
-1.3 0.992 -6.513 0.994525 0.005475
|
||||
-1.2 0.988 -5.931 0.991804 0.008196
|
||||
-1.1 0.982 -5.359 0.987816 0.012184
|
||||
-1.0 0.974 -4.789 0.981916 0.018084
|
||||
-0.9 0.961 -4.217 0.973110 0.026890
|
||||
-0.8 0.942 -3.672 0.960785 0.039215
|
||||
-0.7 0.915 -3.123 0.942613 0.057387
|
||||
-0.6 0.874 -2.582 0.916477 0.083523
|
||||
-0.5 0.816 -2.062 0.880296 0.119704
|
||||
-0.4 0.734 -1.573 0.831905 0.168095
|
||||
-0.3 0.619 -1.109 0.768168 0.231832
|
||||
-0.2 0.465 -0.690 0.690103 0.309897
|
||||
-0.1 0.260 -0.317 0.598759 0.401241
|
||||
0.0 0.000 0.000 0.500000 0.500000
|
||||
0.1 -0.317 0.260 0.401241 0.598759
|
||||
0.2 -0.690 0.465 0.309897 0.690103
|
||||
0.3 -1.109 0.619 0.231832 0.768168
|
||||
0.4 -1.573 0.734 0.168095 0.831905
|
||||
0.5 -2.062 0.816 0.119704 0.880296
|
||||
0.6 -2.582 0.874 0.083523 0.916477
|
||||
0.7 -3.123 0.915 0.057387 0.942613
|
||||
0.8 -3.672 0.942 0.039215 0.960785
|
||||
0.9 -4.217 0.961 0.026890 0.973110
|
||||
1.0 -4.789 0.974 0.018084 0.981916
|
||||
1.1 -5.359 0.982 0.012184 0.987816
|
||||
1.2 -5.931 0.988 0.008196 0.991804
|
||||
1.3 -6.513 0.992 0.005475 0.994525
|
||||
1.4 -7.037 0.994 0.003808 0.996192
|
||||
1.5 -7.655 0.996 0.002481 0.997519
|
||||
1.6 -8.191 0.998 0.001710 0.998290
|
||||
1.7 -8.893 0.998 0.001052 0.998948
|
||||
1.8 -9.308 0.999 0.000789 0.999211
|
||||
1.9 -9.966 0.999 0.000469 0.999531
|
||||
2.0 -9.966 1.000 0.000329 0.999671
|
||||
2.1 -9.966 1.000 0.000225 0.999775
|
||||
2.2 -9.966 1.000 0.000187 0.999813
|
||||
2.3 -9.966 1.000 0.000086 0.999914
|
||||
2.4 -9.966 1.000 0.000063 0.999937
|
||||
2.5 -9.966 1.000 0.000017 0.999983
|
||||
2.6 -9.966 1.000 0.000091 0.999909
|
||||
2.7 -9.966 1.000 0.000032 0.999968
|
||||
2.8 -9.966 1.000 0.000045 0.999955
|
||||
2.9 -9.966 1.000 0.000000 1.000000
|
||||
3.0 -9.966 1.000 0.000000 1.000000
|
||||
3.1 -9.966 1.000 0.000000 1.000000
|
||||
3.2 -9.966 1.000 0.000000 1.000000
|
||||
3.3 -9.966 1.000 0.000000 1.000000
|
||||
3.4 -9.966 1.000 0.000000 1.000000
|
||||
3.5 -9.966 1.000 0.000000 1.000000
|
||||
3.6 -9.966 1.000 0.000000 1.000000
|
||||
3.7 -9.966 1.000 0.000000 1.000000
|
||||
3.8 -9.966 1.000 0.000000 1.000000
|
||||
3.9 -9.966 1.000 0.000000 1.000000
|
||||
4.0 -9.966 1.000 0.000000 1.000000
|
||||
4.1 -9.966 1.000 0.000000 1.000000
|
||||
4.2 -9.966 1.000 0.000000 1.000000
|
||||
4.3 -9.966 1.000 0.000000 1.000000
|
||||
4.4 -9.966 1.000 0.000000 1.000000
|
||||
4.5 -9.966 1.000 0.000000 1.000000
|
||||
4.6 -9.966 1.000 0.000000 1.000000
|
||||
4.7 -9.966 1.000 0.000000 1.000000
|
||||
4.8 -9.966 1.000 0.000000 1.000000
|
||||
4.9 -9.966 1.000 0.000000 1.000000
|
||||
5.0 -9.966 1.000 0.000000 1.000000
|
||||
5.1 -9.966 1.000 0.000000 1.000000
|
||||
5.2 -9.966 1.000 0.000000 1.000000
|
||||
5.3 -9.966 1.000 0.000000 1.000000
|
||||
5.4 -9.966 1.000 0.000000 1.000000
|
||||
5.5 -9.966 1.000 0.000000 1.000000
|
||||
5.6 -9.966 1.000 0.000000 1.000000
|
||||
5.7 -9.966 1.000 0.000000 1.000000
|
||||
5.8 -9.966 1.000 0.000000 1.000000
|
||||
5.9 -9.966 1.000 0.000000 1.000000
|
||||
6.0 -9.966 1.000 0.000000 1.000000
|
||||
6.1 -9.966 1.000 0.000000 1.000000
|
||||
6.2 -9.966 1.000 0.000000 1.000000
|
||||
6.3 -9.966 1.000 0.000000 1.000000
|
||||
6.4 -9.966 1.000 0.000000 1.000000
|
||||
6.5 -9.966 1.000 0.000000 1.000000
|
||||
6.6 -9.966 1.000 0.000000 1.000000
|
||||
6.7 -9.966 1.000 0.000000 1.000000
|
||||
6.8 -9.966 1.000 0.000000 1.000000
|
||||
6.9 -9.966 1.000 0.000000 1.000000
|
||||
7.0 -9.966 1.000 0.000000 1.000000
|
||||
7.1 -9.966 1.000 0.000000 1.000000
|
||||
7.2 -9.966 1.000 0.000000 1.000000
|
||||
7.3 -9.966 1.000 0.000000 1.000000
|
||||
7.4 -9.966 1.000 0.000000 1.000000
|
||||
7.5 -9.966 1.000 0.000000 1.000000
|
||||
7.6 -9.966 1.000 0.000000 1.000000
|
||||
7.7 -9.966 1.000 0.000000 1.000000
|
||||
7.8 -9.966 1.000 0.000000 1.000000
|
||||
7.9 -9.966 1.000 0.000000 1.000000
|
||||
8.0 -9.966 1.000 0.000000 1.000000
|
||||
8.1 -9.966 1.000 0.000000 1.000000
|
||||
8.2 -9.966 1.000 0.000000 1.000000
|
||||
8.3 -9.966 1.000 0.000000 1.000000
|
||||
8.4 -9.966 1.000 0.000000 1.000000
|
||||
8.5 -9.966 1.000 0.000000 1.000000
|
||||
8.6 -9.966 1.000 0.000000 1.000000
|
||||
8.7 -9.966 1.000 0.000000 1.000000
|
||||
8.8 -9.966 1.000 0.000000 1.000000
|
||||
8.9 -9.966 1.000 0.000000 1.000000
|
||||
9.0 -9.966 1.000 0.000000 1.000000
|
||||
9.1 -9.966 1.000 0.000000 1.000000
|
||||
9.2 -9.966 1.000 0.000000 1.000000
|
||||
9.3 -9.966 1.000 0.000000 1.000000
|
||||
9.4 -9.966 1.000 0.000000 1.000000
|
||||
9.5 -9.966 1.000 0.000000 1.000000
|
||||
9.6 -9.966 1.000 0.000000 1.000000
|
||||
9.7 -9.966 1.000 0.000000 1.000000
|
||||
9.8 -9.966 1.000 0.000000 1.000000
|
||||
9.9 -9.966 1.000 0.000000 1.000000
|
||||
10.0 -9.966 1.000 0.000000 1.000000
|
||||
10.1 -9.966 1.000 0.000000 1.000000
|
||||
10.2 -9.966 1.000 0.000000 1.000000
|
||||
10.3 -9.966 1.000 0.000000 1.000000
|
||||
10.4 -9.966 1.000 0.000000 1.000000
|
||||
10.5 -9.966 1.000 0.000000 1.000000
|
||||
10.6 -9.966 1.000 0.000000 1.000000
|
||||
10.7 -9.966 1.000 0.000000 1.000000
|
||||
10.8 -9.966 1.000 0.000000 1.000000
|
||||
10.9 -9.966 1.000 0.000000 1.000000
|
||||
11.0 -9.966 1.000 0.000000 1.000000
|
||||
11.1 -9.966 1.000 0.000000 1.000000
|
||||
11.2 -9.966 1.000 0.000000 1.000000
|
||||
11.3 -9.966 1.000 0.000000 1.000000
|
||||
11.4 -9.966 1.000 0.000000 1.000000
|
||||
11.5 -9.966 1.000 0.000000 1.000000
|
||||
11.6 -9.966 1.000 0.000000 1.000000
|
||||
11.7 -9.966 1.000 0.000000 1.000000
|
||||
11.8 -9.966 1.000 0.000000 1.000000
|
||||
11.9 -9.966 1.000 0.000000 1.000000
|
||||
12.0 -9.966 1.000 0.000000 1.000000
|
||||
12.1 -9.966 1.000 0.000000 1.000000
|
||||
12.2 -9.966 1.000 0.000000 1.000000
|
||||
12.3 -9.966 1.000 0.000000 1.000000
|
||||
12.4 -9.966 1.000 0.000000 1.000000
|
||||
12.5 -9.966 1.000 0.000000 1.000000
|
||||
12.6 -9.966 1.000 0.000000 1.000000
|
||||
12.7 -9.966 1.000 0.000000 1.000000
|
@ -1,5 +0,0 @@
|
||||
real function db(x)
|
||||
db=-99.0
|
||||
if(x.gt.1.259e-10) db=10.0*log10(x)
|
||||
return
|
||||
end function db
|
164
libm65/fano232.f90
Normal file
164
libm65/fano232.f90
Normal file
@ -0,0 +1,164 @@
|
||||
subroutine fano232(symbol,nbits,mettab,ndelta,maxcycles,dat, &
|
||||
ncycles,metric,ierr,maxmetric,maxnp)
|
||||
|
||||
! Sequential decoder for K=32, r=1/2 convolutional code using
|
||||
! the Fano algorithm. Translated from C routine for same purpose
|
||||
! written by Phil Karn, KA9Q.
|
||||
|
||||
parameter (MAXBITS=103)
|
||||
parameter (MAXDAT=(MAXBITS+7)/8)
|
||||
integer*1 symbol(0:2*MAXBITS-1)
|
||||
integer*1 dat(MAXDAT) !Decoded user data, 8 bits per byte
|
||||
integer mettab(0:255,0:1) !Metric table
|
||||
|
||||
! These were the "node" structure in Karn's C code:
|
||||
integer nstate(0:MAXBITS-1) !Encoder state of next node
|
||||
integer gamma(0:MAXBITS-1) !Cumulative metric to this node
|
||||
integer metrics(0:3,0:MAXBITS-1) !Metrics indexed by all possible Tx syms
|
||||
integer tm(0:1,0:MAXBITS-1) !Sorted metrics for current hypotheses
|
||||
integer ii(0:MAXBITS-1) !Current branch being tested
|
||||
|
||||
logical noback
|
||||
include 'conv232.f90'
|
||||
|
||||
maxmetric=-9999999
|
||||
maxnp=-9999999
|
||||
ntail=nbits-31
|
||||
|
||||
! Compute all possible branch metrics for each symbol pair.
|
||||
! This is the only place we actually look at the raw input symbols
|
||||
i4a=0
|
||||
i4b=0
|
||||
do np=0,nbits-1
|
||||
j=2*np
|
||||
i4a=symbol(j)
|
||||
i4b=symbol(j+1)
|
||||
if (i4a.lt.0) i4a=i4a+256
|
||||
if (i4b.lt.0) i4b=i4b+256
|
||||
metrics(0,np) = mettab(i4a,0) + mettab(i4b,0)
|
||||
metrics(1,np) = mettab(i4a,0) + mettab(i4b,1)
|
||||
metrics(2,np) = mettab(i4a,1) + mettab(i4b,0)
|
||||
metrics(3,np) = mettab(i4a,1) + mettab(i4b,1)
|
||||
enddo
|
||||
|
||||
np=0
|
||||
nstate(np)=0
|
||||
|
||||
! Compute and sort branch metrics from the root node
|
||||
n=iand(nstate(np),npoly1)
|
||||
n=ieor(n,ishft(n,-16))
|
||||
lsym=partab(iand(ieor(n,ishft(n,-8)),255))
|
||||
n=iand(nstate(np),npoly2)
|
||||
n=ieor(n,ishft(n,-16))
|
||||
lsym=lsym+lsym+partab(iand(ieor(n,ishft(n,-8)),255))
|
||||
m0=metrics(lsym,np)
|
||||
m1=metrics(ieor(3,lsym),np)
|
||||
if(m0.gt.m1) then
|
||||
tm(0,np)=m0 !0-branch has better metric
|
||||
tm(1,np)=m1
|
||||
else
|
||||
tm(0,np)=m1 !1-branch is better
|
||||
tm(1,np)=m0
|
||||
nstate(np)=nstate(np) + 1 !Set low bit
|
||||
endif
|
||||
|
||||
! Start with best branch
|
||||
ii(np)=0
|
||||
gamma(np)=0
|
||||
nt=0
|
||||
|
||||
! Start the Fano decoder
|
||||
do i=1,nbits*maxcycles
|
||||
! Look forward
|
||||
ngamma=gamma(np) + tm(ii(np),np)
|
||||
if(ngamma.ge.nt) then
|
||||
|
||||
! Node is acceptable. If first time visiting this node, tighten threshold:
|
||||
if(gamma(np).lt.(nt+ndelta)) nt=nt + ndelta * ((ngamma-nt)/ndelta)
|
||||
|
||||
! Move forward
|
||||
gamma(np+1)=ngamma
|
||||
nstate(np+1)=ishft(nstate(np),1)
|
||||
np=np+1
|
||||
! if(ngamma.gt.maxmetric) then
|
||||
if(np.gt.maxnp) then
|
||||
maxmetric=ngamma
|
||||
maxnp=np
|
||||
endif
|
||||
if(np.eq.nbits-1) go to 100 !We're done!
|
||||
|
||||
n=iand(nstate(np),npoly1)
|
||||
n=ieor(n,ishft(n,-16))
|
||||
lsym=partab(iand(ieor(n,ishft(n,-8)),255))
|
||||
n=iand(nstate(np),npoly2)
|
||||
n=ieor(n,ishft(n,-16))
|
||||
lsym=lsym+lsym+partab(iand(ieor(n,ishft(n,-8)),255))
|
||||
|
||||
if(np.ge.ntail) then
|
||||
tm(0,np)=metrics(lsym,np) !We're in the tail, all zeros
|
||||
else
|
||||
m0=metrics(lsym,np)
|
||||
m1=metrics(ieor(3,lsym),np)
|
||||
if(m0.gt.m1) then
|
||||
tm(0,np)=m0 !0-branch has better metric
|
||||
tm(1,np)=m1
|
||||
else
|
||||
tm(0,np)=m1 !1-branch is better
|
||||
tm(1,np)=m0
|
||||
nstate(np)=nstate(np) + 1 !Set low bit
|
||||
endif
|
||||
endif
|
||||
|
||||
ii(np)=0 !Start with best branch
|
||||
go to 99
|
||||
endif
|
||||
|
||||
! Threshold violated, can't go forward
|
||||
10 noback=.false.
|
||||
if(np.eq.0) noback=.true.
|
||||
if(np.gt.0) then
|
||||
if(gamma(np-1).lt.nt) noback=.true.
|
||||
endif
|
||||
|
||||
if(noback) then
|
||||
! Can't back up, either. Relax threshold and look forward again
|
||||
! to a better branch.
|
||||
nt=nt-ndelta
|
||||
if(ii(np).ne.0) then
|
||||
ii(np)=0
|
||||
nstate(np)=ieor(nstate(np),1)
|
||||
endif
|
||||
go to 99
|
||||
endif
|
||||
|
||||
! Back up
|
||||
np=np-1
|
||||
if(np.lt.ntail .and. ii(np).ne.1) then
|
||||
! Search the next best branch
|
||||
ii(np)=ii(np)+1
|
||||
nstate(np)=ieor(nstate(np),1)
|
||||
go to 99
|
||||
endif
|
||||
go to 10
|
||||
99 continue
|
||||
enddo
|
||||
i=nbits*maxcycles
|
||||
|
||||
100 metric=gamma(np) !Final path metric
|
||||
|
||||
! Copy decoded data to user's buffer
|
||||
nbytes=(nbits+7)/8
|
||||
np=7
|
||||
do j=1,nbytes-1
|
||||
i4a=nstate(np)
|
||||
dat(j)=i4a
|
||||
np=np+8
|
||||
enddo
|
||||
dat(nbytes)=0
|
||||
|
||||
ncycles=i+1
|
||||
ierr=0
|
||||
if(i.ge.maxcycles*nbits) ierr=-1
|
||||
|
||||
return
|
||||
end subroutine fano232
|
@ -11,10 +11,15 @@ subroutine genjtms3(msg,msgsent,iwave,nwave)
|
||||
real*4 s(6192)
|
||||
real*4 carrier(6192)
|
||||
logical first
|
||||
integer*1 isync(43)
|
||||
integer indx0(9) !Indices of duplicated symbols
|
||||
data indx0 /16,38,60,82,104,126,148,170,192/
|
||||
data first/.true./
|
||||
data isync/0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,0,0, &
|
||||
0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0,1,0, &
|
||||
1,1,0/ !Hadamard-43 sync code
|
||||
save
|
||||
|
||||
sinc(x)=sin(pi*x)/(pi*x)
|
||||
|
||||
if(first) then
|
||||
@ -28,7 +33,6 @@ subroutine genjtms3(msg,msgsent,iwave,nwave)
|
||||
if(k.gt.3096) k=k-6192
|
||||
x=x+dx
|
||||
p(k)=sinc(x) * (sinc(x/2.0))**2
|
||||
! p(k)=sinc(x) * exp(-(x/2.0)**2)
|
||||
if(k.ne.3096) p(-k)=p(k)
|
||||
enddo
|
||||
p(0)=1.0
|
||||
@ -75,8 +79,14 @@ subroutine genjtms3(msg,msgsent,iwave,nwave)
|
||||
iwave(i)=n
|
||||
enddo
|
||||
|
||||
! print*,'nmax:',nmax
|
||||
nwave=6192
|
||||
nblk=30*48000/6192
|
||||
do n=2,nblk
|
||||
ib=n*6192
|
||||
ia=ib-6191
|
||||
iwave(ia:ib)=iwave(1:6192)
|
||||
enddo
|
||||
|
||||
nwave=ib
|
||||
msgsent=msg
|
||||
|
||||
return
|
||||
|
@ -6,7 +6,10 @@ subroutine specjtms(k)
|
||||
parameter (NFFT=8192,NH=NFFT/2)
|
||||
integer*2 id
|
||||
real x(NFFT),w(NFFT)
|
||||
complex cx(NFFT),cx2(NFFT)
|
||||
real p(24)
|
||||
real chansym(258),softsym(341)
|
||||
integer nsum(24)
|
||||
complex cx(NFFT),cx2(NFFT),cx0(NFFT)
|
||||
complex covx(NH)
|
||||
real s1a(NH),s2a(580)
|
||||
logical first,window
|
||||
@ -16,6 +19,7 @@ subroutine specjtms(k)
|
||||
|
||||
if(first) then
|
||||
pi=4.0*atan(1.0)
|
||||
twopi=2.0*pi
|
||||
do i=1,nfft
|
||||
w(i)=(sin(i*pi/nfft))**2
|
||||
enddo
|
||||
@ -24,6 +28,9 @@ subroutine specjtms(k)
|
||||
jb=nint(3400.0)/df
|
||||
iz=3000.0/df
|
||||
covx=0.
|
||||
read(10,3001) chansym
|
||||
3001 format(50f1.0)
|
||||
chansym=2.0*chansym - 1.0
|
||||
window=.false.
|
||||
first=.false.
|
||||
endif
|
||||
@ -40,7 +47,6 @@ subroutine specjtms(k)
|
||||
if(k.lt.8192) return
|
||||
|
||||
x(1:nfft)=0.001*id(i0:ib)
|
||||
! call analytic(x,nfft,nfft,s,cx)
|
||||
|
||||
fac=2.0/nfft
|
||||
cx=fac*x
|
||||
@ -71,14 +77,16 @@ subroutine specjtms(k)
|
||||
if(sq.gt.spk0) then
|
||||
spk0=sq
|
||||
f0=0.5*(f-3000.0)
|
||||
phi0=atan2(aimag(cx2(j)),real(cx2(j)))
|
||||
phi0=0.5*atan2(aimag(cx2(j)),real(cx2(j)))
|
||||
endif
|
||||
write(15,1020) (j-1)*df,sq
|
||||
1020 format(f10.3,f12.3)
|
||||
enddo
|
||||
|
||||
slimit=1.5
|
||||
if(spk0.gt.slimit) then
|
||||
slimit=2.0
|
||||
! slimit=87.5
|
||||
! if(spk0.gt.slimit) then
|
||||
if(abs(spk0-87.3).lt.0.1) then
|
||||
write(*,1030) t,f0,phi0,spk0
|
||||
1030 format('t:',f6.2,' f0:',f7.1,' phi0:',f6.2,' spk0:',f8.1)
|
||||
do i=1,iz
|
||||
@ -91,6 +99,63 @@ subroutine specjtms(k)
|
||||
write(17,1050) f0a,s2a(j)
|
||||
1050 format(2f12.3)
|
||||
enddo
|
||||
|
||||
phi=phi0
|
||||
phi=3.9
|
||||
dphi=2.0*pi*(f0+1500.0 -1.1)/48000.0
|
||||
p=0.
|
||||
nsum=0
|
||||
do i=1,nfft
|
||||
phi=phi+dphi
|
||||
if(phi.gt.twopi) phi=phi-twopi
|
||||
cx0(i)=cx(i)*cmplx(cos(phi),-sin(phi))
|
||||
pha=atan2(aimag(cx0(i)),real(cx0(i)))
|
||||
write(18,1060) i,cx0(i),pha
|
||||
1060 format(i6,5f12.3)
|
||||
j=mod(i-1,24) + 1
|
||||
! p(j)=p(j)+abs(cx0(i))
|
||||
p(j)=p(j) + real(cx0(i))**2 + aimag(cx0(i))**2
|
||||
nsum(j)=nsum(j)+1
|
||||
enddo
|
||||
|
||||
do i=1,24
|
||||
p(i)=p(i)/nsum(i)
|
||||
write(20,1070) i,p(i)
|
||||
1070 format(i6,f12.3)
|
||||
enddo
|
||||
|
||||
do i=16,nfft,24
|
||||
amp=abs(cx0(i))
|
||||
pha=atan2(aimag(cx0(i)),real(cx0(i)))
|
||||
j=(i+23)/24
|
||||
write(21,1060) j,cx0(i),pha,pha+twopi,amp
|
||||
softsym(j)=real(cx0(i))
|
||||
enddo
|
||||
|
||||
! do iter=1,5
|
||||
chansym=cshift(chansym,-86)
|
||||
do lag=0,83
|
||||
sum=dot_product(chansym,softsym(lag+1:lag+258))
|
||||
if(abs(sum).gt.smax) then
|
||||
smax=abs(sum)
|
||||
lagpk=lag
|
||||
endif
|
||||
write(22,1080) lag,sum
|
||||
1080 format(i3,f12.3)
|
||||
enddo
|
||||
! chansym=cshift(chansym,43)
|
||||
! enddo
|
||||
|
||||
do i=1,258
|
||||
prod=-chansym(i)*softsym(lagpk+i)
|
||||
write(23,1090) i,prod,chansym(i),softsym(lagpk+i)
|
||||
1090 format(i5,3f10.3)
|
||||
enddo
|
||||
|
||||
do i=1,258,6
|
||||
write(24,1100) (i+5)/6,int(chansym(i)),softsym(lagpk+i)
|
||||
1100 format(2i5,f8.1)
|
||||
enddo
|
||||
endif
|
||||
|
||||
end subroutine specjtms
|
||||
|
@ -1,4 +1,4 @@
|
||||
//------------------------------------------------------------- MainWindow
|
||||
//-------------------------------------------------------------- MainWindow
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "devsetup.h"
|
||||
|
Loading…
Reference in New Issue
Block a user