mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-02-21 04:58:33 -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
8c550223d1
commit
ae7ef622d1
@ -17,7 +17,7 @@ CFLAGS = -I. -fbounds-check
|
|||||||
%.o: %.F90
|
%.o: %.F90
|
||||||
${FC} ${FFLAGS} -c $<
|
${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 \
|
OBJS1 = trimlist.o display.o getdphi.o pctile.o ccf65.o \
|
||||||
decode1a.o sort.o filbig.o fil6521.o afc65b.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 \
|
gen65.o chkmsg.o ptt.o astrosub.o astro0.o recvpkt.o symspec.o \
|
||||||
iqcal.o iqfix.o timf2.o s3avg.o genjtms3.o \
|
iqcal.o iqfix.o timf2.o s3avg.o genjtms3.o \
|
||||||
entail.o encode232.o scr258.o analytic.o db.o
|
entail.o encode232.o scr258.o analytic.o db.o
|
||||||
|
|
||||||
libm65.a: $(OBJS1)
|
libm65.a: $(OBJS1)
|
||||||
ar cr libm65.a $(OBJS1)
|
ar cr libm65.a $(OBJS1)
|
||||||
ranlib libm65.a
|
ranlib libm65.a
|
||||||
|
|
||||||
OBJS3 = ms3.o
|
OBJS3 = ms3.o specjtms.o
|
||||||
ms3.exe: $(OBJS3) libm65.a
|
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
|
OBJS2 = JTMScode.o genjtms3a.o fano232.o
|
||||||
JT65code.exe: $(OBJS2) libm65.a
|
JTMScode.exe: $(OBJS2) libm65.a
|
||||||
$(FC) -o JT65code.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' \
|
INCPATH = -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/QtCore' \
|
||||||
-I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include' \
|
-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 s(6192)
|
||||||
real*4 carrier(6192)
|
real*4 carrier(6192)
|
||||||
logical first
|
logical first
|
||||||
|
integer*1 isync(43)
|
||||||
integer indx0(9) !Indices of duplicated symbols
|
integer indx0(9) !Indices of duplicated symbols
|
||||||
data indx0 /16,38,60,82,104,126,148,170,192/
|
data indx0 /16,38,60,82,104,126,148,170,192/
|
||||||
data first/.true./
|
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
|
save
|
||||||
|
|
||||||
sinc(x)=sin(pi*x)/(pi*x)
|
sinc(x)=sin(pi*x)/(pi*x)
|
||||||
|
|
||||||
if(first) then
|
if(first) then
|
||||||
@ -28,7 +33,6 @@ subroutine genjtms3(msg,msgsent,iwave,nwave)
|
|||||||
if(k.gt.3096) k=k-6192
|
if(k.gt.3096) k=k-6192
|
||||||
x=x+dx
|
x=x+dx
|
||||||
p(k)=sinc(x) * (sinc(x/2.0))**2
|
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)
|
if(k.ne.3096) p(-k)=p(k)
|
||||||
enddo
|
enddo
|
||||||
p(0)=1.0
|
p(0)=1.0
|
||||||
@ -75,8 +79,14 @@ subroutine genjtms3(msg,msgsent,iwave,nwave)
|
|||||||
iwave(i)=n
|
iwave(i)=n
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
! print*,'nmax:',nmax
|
nblk=30*48000/6192
|
||||||
nwave=6192
|
do n=2,nblk
|
||||||
|
ib=n*6192
|
||||||
|
ia=ib-6191
|
||||||
|
iwave(ia:ib)=iwave(1:6192)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
nwave=ib
|
||||||
msgsent=msg
|
msgsent=msg
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -6,7 +6,10 @@ subroutine specjtms(k)
|
|||||||
parameter (NFFT=8192,NH=NFFT/2)
|
parameter (NFFT=8192,NH=NFFT/2)
|
||||||
integer*2 id
|
integer*2 id
|
||||||
real x(NFFT),w(NFFT)
|
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)
|
complex covx(NH)
|
||||||
real s1a(NH),s2a(580)
|
real s1a(NH),s2a(580)
|
||||||
logical first,window
|
logical first,window
|
||||||
@ -16,6 +19,7 @@ subroutine specjtms(k)
|
|||||||
|
|
||||||
if(first) then
|
if(first) then
|
||||||
pi=4.0*atan(1.0)
|
pi=4.0*atan(1.0)
|
||||||
|
twopi=2.0*pi
|
||||||
do i=1,nfft
|
do i=1,nfft
|
||||||
w(i)=(sin(i*pi/nfft))**2
|
w(i)=(sin(i*pi/nfft))**2
|
||||||
enddo
|
enddo
|
||||||
@ -24,6 +28,9 @@ subroutine specjtms(k)
|
|||||||
jb=nint(3400.0)/df
|
jb=nint(3400.0)/df
|
||||||
iz=3000.0/df
|
iz=3000.0/df
|
||||||
covx=0.
|
covx=0.
|
||||||
|
read(10,3001) chansym
|
||||||
|
3001 format(50f1.0)
|
||||||
|
chansym=2.0*chansym - 1.0
|
||||||
window=.false.
|
window=.false.
|
||||||
first=.false.
|
first=.false.
|
||||||
endif
|
endif
|
||||||
@ -40,7 +47,6 @@ subroutine specjtms(k)
|
|||||||
if(k.lt.8192) return
|
if(k.lt.8192) return
|
||||||
|
|
||||||
x(1:nfft)=0.001*id(i0:ib)
|
x(1:nfft)=0.001*id(i0:ib)
|
||||||
! call analytic(x,nfft,nfft,s,cx)
|
|
||||||
|
|
||||||
fac=2.0/nfft
|
fac=2.0/nfft
|
||||||
cx=fac*x
|
cx=fac*x
|
||||||
@ -71,14 +77,16 @@ subroutine specjtms(k)
|
|||||||
if(sq.gt.spk0) then
|
if(sq.gt.spk0) then
|
||||||
spk0=sq
|
spk0=sq
|
||||||
f0=0.5*(f-3000.0)
|
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
|
endif
|
||||||
write(15,1020) (j-1)*df,sq
|
write(15,1020) (j-1)*df,sq
|
||||||
1020 format(f10.3,f12.3)
|
1020 format(f10.3,f12.3)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
slimit=1.5
|
slimit=2.0
|
||||||
if(spk0.gt.slimit) then
|
! slimit=87.5
|
||||||
|
! if(spk0.gt.slimit) then
|
||||||
|
if(abs(spk0-87.3).lt.0.1) then
|
||||||
write(*,1030) t,f0,phi0,spk0
|
write(*,1030) t,f0,phi0,spk0
|
||||||
1030 format('t:',f6.2,' f0:',f7.1,' phi0:',f6.2,' spk0:',f8.1)
|
1030 format('t:',f6.2,' f0:',f7.1,' phi0:',f6.2,' spk0:',f8.1)
|
||||||
do i=1,iz
|
do i=1,iz
|
||||||
@ -91,6 +99,63 @@ subroutine specjtms(k)
|
|||||||
write(17,1050) f0a,s2a(j)
|
write(17,1050) f0a,s2a(j)
|
||||||
1050 format(2f12.3)
|
1050 format(2f12.3)
|
||||||
enddo
|
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
|
endif
|
||||||
|
|
||||||
end subroutine specjtms
|
end subroutine specjtms
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//------------------------------------------------------------- MainWindow
|
//-------------------------------------------------------------- MainWindow
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
#include "devsetup.h"
|
#include "devsetup.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user