mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-24 10:22:26 -04:00
Fix an off-by-one problem.
This commit is contained in:
parent
83d81bdcd2
commit
26de3219d3
@ -28,7 +28,7 @@ subroutine ft8b_1(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
integer nappasses(0:5) !Number of decoding passes to use for each QSO state
|
integer nappasses(0:5) !Number of decoding passes to use for each QSO state
|
||||||
integer naptypes(0:5,4) ! (nQSOProgress, decoding pass) maximum of 4 passes for now
|
integer naptypes(0:5,4) ! (nQSOProgress, decoding pass) maximum of 4 passes for now
|
||||||
integer*1, target:: i1hiscall(12)
|
integer*1, target:: i1hiscall(12)
|
||||||
complex cd0(3200)
|
complex cd0(0:3199)
|
||||||
complex ctwk(32)
|
complex ctwk(32)
|
||||||
complex csymb(32)
|
complex csymb(32)
|
||||||
logical first,newdat,lsubtract,lapon,lapcqonly,nagain
|
logical first,newdat,lsubtract,lapon,lapcqonly,nagain
|
||||||
@ -126,7 +126,7 @@ subroutine ft8b_1(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
do k=1,NN
|
do k=1,NN
|
||||||
i1=ibest+(k-1)*32
|
i1=ibest+(k-1)*32
|
||||||
csymb=cmplx(0.0,0.0)
|
csymb=cmplx(0.0,0.0)
|
||||||
if( i1.ge.1 .and. i1+31 .le. NP2 ) csymb=cd0(i1:i1+31)
|
if( i1.ge.0 .and. i1+31 .le. NP2-1 ) csymb=cd0(i1:i1+31)
|
||||||
call four2a(csymb,32,1,-1,1)
|
call four2a(csymb,32,1,-1,1)
|
||||||
s2(0:7,k)=abs(csymb(1:8))/1e3
|
s2(0:7,k)=abs(csymb(1:8))/1e3
|
||||||
enddo
|
enddo
|
||||||
|
@ -31,7 +31,7 @@ subroutine ft8b_2(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
integer*1, target:: i1hiscall(12)
|
integer*1, target:: i1hiscall(12)
|
||||||
logical one(0:511,0:8)
|
logical one(0:511,0:8)
|
||||||
integer graymap(0:7)
|
integer graymap(0:7)
|
||||||
complex cd0(3200)
|
complex cd0(0:3199)
|
||||||
complex ctwk(32)
|
complex ctwk(32)
|
||||||
complex csymb(32)
|
complex csymb(32)
|
||||||
complex cs(0:7,NN)
|
complex cs(0:7,NN)
|
||||||
@ -132,12 +132,12 @@ subroutine ft8b_2(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
xdt=xdt2
|
xdt=xdt2
|
||||||
f1=f1+delfbest !Improved estimate of DF
|
f1=f1+delfbest !Improved estimate of DF
|
||||||
|
|
||||||
call sync8d(cd0,i0,ctwk,2,2,sync)
|
call sync8d(cd0,i0,ctwk,0,2,sync)
|
||||||
|
|
||||||
do k=1,NN
|
do k=1,NN
|
||||||
i1=ibest+(k-1)*32
|
i1=ibest+(k-1)*32
|
||||||
csymb=cmplx(0.0,0.0)
|
csymb=cmplx(0.0,0.0)
|
||||||
if( i1.ge.1 .and. i1+31 .le. NP2 ) csymb=cd0(i1:i1+31)
|
if( i1.ge.0 .and. i1+31 .le. NP2-1 ) csymb=cd0(i1:i1+31)
|
||||||
call four2a(csymb,32,1,-1,1)
|
call four2a(csymb,32,1,-1,1)
|
||||||
cs(0:7,k)=csymb(1:8)/1e3
|
cs(0:7,k)=csymb(1:8)/1e3
|
||||||
s8(0:7,k)=abs(csymb(1:8))
|
s8(0:7,k)=abs(csymb(1:8))
|
||||||
@ -323,7 +323,14 @@ subroutine ft8b_2(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
call extractmessage77(message77,message)
|
call extractmessage77(message77,message)
|
||||||
! This needs fixing for messages with i5bit=1
|
! This needs fixing for messages with i5bit=1
|
||||||
call genft8_174_91(message,mygrid6,bcontest,i5bit,msgsent,msgbits,itone)
|
call genft8_174_91(message,mygrid6,bcontest,i5bit,msgsent,msgbits,itone)
|
||||||
if(lsubtract) call subtractft8(dd0,itone,f1,xdt2)
|
if(lsubtract) then
|
||||||
|
call sync8d(cd0,i0-1,ctwk,0,2,sm1)
|
||||||
|
call sync8d(cd0,i0,ctwk,0,2,sp0)
|
||||||
|
call sync8d(cd0,i0+1,ctwk,0,2,sp1)
|
||||||
|
pk=0.5*(sm1-sp1)/(sp1-2*sp0+sm1)
|
||||||
|
xdti=(i0+pk)*dt2
|
||||||
|
call subtractft8(dd0,itone,f1,xdti)
|
||||||
|
endif
|
||||||
xsig=0.0
|
xsig=0.0
|
||||||
xnoi=0.0
|
xnoi=0.0
|
||||||
do i=1,79
|
do i=1,79
|
||||||
@ -331,6 +338,7 @@ subroutine ft8b_2(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
ios=mod(itone(i)+4,7)
|
ios=mod(itone(i)+4,7)
|
||||||
xnoi=xnoi+s8(ios,i)**2
|
xnoi=xnoi+s8(ios,i)**2
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
xsnr=0.001
|
xsnr=0.001
|
||||||
if(xnoi.gt.0 .and. xnoi.lt.xsig) xsnr=xsig/xnoi-1.0
|
if(xnoi.gt.0 .and. xnoi.lt.xsig) xsnr=xsig/xnoi-1.0
|
||||||
xsnr=10.0*log10(xsnr)-27.0
|
xsnr=10.0*log10(xsnr)-27.0
|
||||||
@ -338,40 +346,7 @@ subroutine ft8b_2(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
|||||||
if(.not.nagain) xsnr=xsnr2
|
if(.not.nagain) xsnr=xsnr2
|
||||||
if(xsnr .lt. -24.0) xsnr=-24.0
|
if(xsnr .lt. -24.0) xsnr=-24.0
|
||||||
|
|
||||||
if(i5bit.eq.1) then
|
|
||||||
do i=1,12
|
|
||||||
i1hiscall(i)=ichar(hiscall12(i:i))
|
|
||||||
enddo
|
|
||||||
icrc10=crc10(c_loc(i1hiscall),12)
|
|
||||||
write(cbits,1001) decoded
|
|
||||||
1001 format(87i1)
|
|
||||||
read(cbits,1002) ncrc10,nrpt
|
|
||||||
1002 format(56x,b10,b6)
|
|
||||||
irpt=nrpt-30
|
|
||||||
i1=index(message,' ')
|
|
||||||
i2=index(message(i1+1:),' ') + i1
|
|
||||||
c1=message(1:i1)//' '
|
|
||||||
c2=message(i1+1:i2)//' '
|
|
||||||
|
|
||||||
if(ncrc10.eq.icrc10) msg37=c1//' RR73; '//c2//' <'// &
|
|
||||||
trim(hiscall12)//'> '
|
|
||||||
if(ncrc10.ne.icrc10) msg37=c1//' RR73; '//c2//' <...> '
|
|
||||||
|
|
||||||
msg37=c1//' RR73; '//c2//' <...> '
|
|
||||||
write(msg37(35:37),1010) irpt
|
|
||||||
1010 format(i3.2)
|
|
||||||
if(msg37(35:35).ne.'-') msg37(35:35)='+'
|
|
||||||
|
|
||||||
iz=len(trim(msg37))
|
|
||||||
do iter=1,10 !Collapse multiple blanks
|
|
||||||
ib2=index(msg37(1:iz),' ')
|
|
||||||
if(ib2.lt.1) exit
|
|
||||||
msg37=msg37(1:ib2)//msg37(ib2+2:)
|
|
||||||
iz=iz-1
|
|
||||||
enddo
|
|
||||||
else
|
|
||||||
msg37=message//' '
|
msg37=message//' '
|
||||||
endif
|
|
||||||
return
|
return
|
||||||
enddo
|
enddo
|
||||||
return
|
return
|
||||||
|
@ -142,16 +142,16 @@ program ft8sim
|
|||||||
call genft8_174_91(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
call genft8_174_91(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
k=-1 + nint((xdt+0.5+0.01*gran())/dt)
|
! k=-1 + nint((xdt+0.5+0.01*gran())/dt)
|
||||||
! k=-1 + nint((xdt+0.5)/dt)
|
k=-1 + nint((xdt+0.5)/dt)
|
||||||
ia=k+1
|
ia=k+1
|
||||||
phi=0.0
|
phi=0.0
|
||||||
do j=1,NN !Generate complex waveform
|
do j=1,NN !Generate complex waveform
|
||||||
dphi=twopi*(f0+itone(j)*baud)*dt
|
dphi=twopi*(f0*dt+itone(j)/real(NSPS))
|
||||||
do i=1,NSPS
|
do i=1,NSPS
|
||||||
k=k+1
|
k=k+1
|
||||||
phi=mod(phi+dphi,twopi)
|
|
||||||
if(k.ge.0 .and. k.lt.NMAX) c0(k)=cmplx(cos(phi),sin(phi))
|
if(k.ge.0 .and. k.lt.NMAX) c0(k)=cmplx(cos(phi),sin(phi))
|
||||||
|
phi=mod(phi+dphi,twopi)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,fs,delay,fspread)
|
if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,fs,delay,fspread)
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
subroutine genft8refsig(itone,cref,f0)
|
subroutine genft8refsig(itone,cref,f0)
|
||||||
complex cref(79*1920)
|
complex cref(79*1920)
|
||||||
integer itone(79)
|
integer itone(79)
|
||||||
real*8 twopi,phi,dphi,dt,xnsps
|
! real*8 twopi,phi,dphi,dt,xnsps
|
||||||
|
real twopi,phi,dphi,dt,xnsps
|
||||||
data twopi/0.d0/
|
data twopi/0.d0/
|
||||||
save twopi
|
save twopi
|
||||||
if( twopi .lt. 0.1 ) twopi=8.d0*atan(1.d0)
|
if( twopi .lt. 0.1 ) twopi=8.d0*atan(1.d0)
|
||||||
|
@ -4,7 +4,7 @@ subroutine sync8d(cd0,i0,ctwk,itwk,itype,sync)
|
|||||||
! itype specifies which Costas array to use
|
! itype specifies which Costas array to use
|
||||||
|
|
||||||
parameter(NP2=2812,NDOWN=60)
|
parameter(NP2=2812,NDOWN=60)
|
||||||
complex cd0(3125)
|
complex cd0(0:3199)
|
||||||
complex csync_1(0:6,32),csync_2(0:6,32)
|
complex csync_1(0:6,32),csync_2(0:6,32)
|
||||||
complex csync2(32)
|
complex csync2(32)
|
||||||
complex ctwk(32)
|
complex ctwk(32)
|
||||||
@ -54,9 +54,9 @@ subroutine sync8d(cd0,i0,ctwk,itwk,itype,sync)
|
|||||||
z1=0.
|
z1=0.
|
||||||
z2=0.
|
z2=0.
|
||||||
z3=0.
|
z3=0.
|
||||||
if(i1.ge.1 .and. i1+31.le.NP2) z1=sum(cd0(i1:i1+31)*conjg(csync2))
|
if(i1.ge.0 .and. i1+31.le.NP2-1) z1=sum(cd0(i1:i1+31)*conjg(csync2))
|
||||||
if(i2.ge.1 .and. i2+31.le.NP2) z2=sum(cd0(i2:i2+31)*conjg(csync2))
|
if(i2.ge.0 .and. i2+31.le.NP2-1) z2=sum(cd0(i2:i2+31)*conjg(csync2))
|
||||||
if(i3.ge.1 .and. i3+31.le.NP2) z3=sum(cd0(i3:i3+31)*conjg(csync2))
|
if(i3.ge.0 .and. i3+31.le.NP2-1) z3=sum(cd0(i3:i3+31)*conjg(csync2))
|
||||||
sync = sync + p(z1) + p(z2) + p(z3)
|
sync = sync + p(z1) + p(z2) + p(z3)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user