mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-12-11 13:35:00 -05:00
msk144d now decodes msk40 frames.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6970 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
8bedcd755c
commit
0f49f343f6
@ -46,11 +46,12 @@ subroutine detectmsk144(cbig,n,pchk_file,lines,nmessages,nutc,ntol,t00)
|
|||||||
data s8r/1,0,1,1,0,0,0,1/
|
data s8r/1,0,1,1,0,0,0,1/
|
||||||
save df,first,cb,fs,pi,twopi,dt,s8,rcw,pp,nmatchedfilter
|
save df,first,cb,fs,pi,twopi,dt,s8,rcw,pp,nmatchedfilter
|
||||||
|
|
||||||
if(first) then
|
|
||||||
nmatchedfilter=1
|
|
||||||
i=index(pchk_file,".pchk")
|
i=index(pchk_file,".pchk")
|
||||||
gen_file=pchk_file(1:i-1)//".gen"
|
gen_file=pchk_file(1:i-1)//".gen"
|
||||||
call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0))
|
call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0))
|
||||||
|
|
||||||
|
if(first) then
|
||||||
|
nmatchedfilter=1
|
||||||
! define half-sine pulse and raised-cosine edge window
|
! define half-sine pulse and raised-cosine edge window
|
||||||
pi=4d0*datan(1d0)
|
pi=4d0*datan(1d0)
|
||||||
twopi=8d0*datan(1d0)
|
twopi=8d0*datan(1d0)
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
subroutine detectmsk40(cbig,n,mycall,partnercall,lines,nmessages,nutc,ntol,t00)
|
subroutine detectmsk40(cbig,n,mycall,hiscall,lines,nmessages,nutc,ntol,t00)
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
|
|
||||||
parameter (NSPM=240, NPTS=3*NSPM, MAXSTEPS=7500, NFFT=3*NSPM, MAXCAND=10)
|
parameter (NSPM=240, NPTS=3*NSPM, MAXSTEPS=7500, NFFT=3*NSPM, MAXCAND=10)
|
||||||
character*4 rpt(0:63)
|
character*4 rpt(0:63)
|
||||||
character*6 mycall,partnercall
|
character*6 mycall,hiscall
|
||||||
character*22 hashmsg,msgreceived
|
character*22 hashmsg,msgreceived
|
||||||
character*80 lines(100)
|
character*80 lines(100)
|
||||||
character*40 pchk_file,gen_file
|
character*40 pchk_file,gen_file
|
||||||
@ -43,7 +43,7 @@ subroutine detectmsk40(cbig,n,mycall,partnercall,lines,nmessages,nutc,ntol,t00)
|
|||||||
data first/.true./
|
data first/.true./
|
||||||
data s8/0,1,1,1,0,0,1,0/
|
data s8/0,1,1,1,0,0,1,0/
|
||||||
data s8r/1,0,1,1,0,0,0,1/
|
data s8r/1,0,1,1,0,0,0,1/
|
||||||
save df,first,cb,cbr,fs,nhashes,pi,twopi,dt,s8,s8r,rcw,pp,nmatchedfilter
|
save df,first,cb,cbr,fs,nhashes,pi,twopi,dt,s8,s8r,rcw,pp,nmatchedfilter,rpt
|
||||||
|
|
||||||
if(first) then
|
if(first) then
|
||||||
nmatchedfilter=1
|
nmatchedfilter=1
|
||||||
@ -95,7 +95,7 @@ subroutine detectmsk40(cbig,n,mycall,partnercall,lines,nmessages,nutc,ntol,t00)
|
|||||||
rpt(63)='73 '
|
rpt(63)='73 '
|
||||||
|
|
||||||
do i=0,63
|
do i=0,63
|
||||||
hashmsg=trim(mycall)//' '//trim(partnercall)//' '//rpt(i)
|
hashmsg=trim(mycall)//' '//trim(hiscall)//' '//rpt(i)
|
||||||
call fmtmsg(hashmsg,iz)
|
call fmtmsg(hashmsg,iz)
|
||||||
call hash(hashmsg,22,ihash)
|
call hash(hashmsg,22,ihash)
|
||||||
nhashes(i)=iand(ihash,1023)
|
nhashes(i)=iand(ihash,1023)
|
||||||
@ -187,13 +187,9 @@ subroutine detectmsk40(cbig,n,mycall,partnercall,lines,nmessages,nutc,ntol,t00)
|
|||||||
! detmet(il)=0.0
|
! detmet(il)=0.0
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
! ndet=15
|
! do ip=1,ndet
|
||||||
do ip=1,ndet
|
! write(*,'(i5,f7.2,f7.2,f7.2)') ip,times(ip),snrs(ip),ferrs(ip)
|
||||||
! times(ip)=ip+0.012
|
! enddo
|
||||||
! snrs(ip)=-3.0
|
|
||||||
! ferrs(ip)=0.0
|
|
||||||
write(*,'(i5,f7.2,f7.2,f7.2)') ip,times(ip),snrs(ip),ferrs(ip)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
nmessages=0
|
nmessages=0
|
||||||
lines=char(0)
|
lines=char(0)
|
||||||
@ -225,9 +221,9 @@ subroutine detectmsk40(cbig,n,mycall,partnercall,lines,nmessages,nutc,ntol,t00)
|
|||||||
ddr=abs(ccr1)*abs(ccr2)
|
ddr=abs(ccr1)*abs(ccr2)
|
||||||
crmax=maxval(abs(ccr))
|
crmax=maxval(abs(ccr))
|
||||||
|
|
||||||
do i=1,NPTS
|
!do i=1,NPTS
|
||||||
write(14,*) i,abs(ccr(i)),ddr(i)
|
!write(14,*) i,abs(ccr(i)),ddr(i)
|
||||||
enddo
|
!enddo
|
||||||
|
|
||||||
|
|
||||||
! Find 6 largest peaks
|
! Find 6 largest peaks
|
||||||
@ -239,9 +235,9 @@ enddo
|
|||||||
ipeaks(ipk)=ic1
|
ipeaks(ipk)=ic1
|
||||||
ccr(max(1,ic1-7):min(NPTS-40*6-41,ic1+7))=0.0
|
ccr(max(1,ic1-7):min(NPTS-40*6-41,ic1+7))=0.0
|
||||||
enddo
|
enddo
|
||||||
do i=1,6
|
!do i=1,6
|
||||||
write(*,*) i,ipeaks(i)
|
!write(*,*) i,ipeaks(i)
|
||||||
enddo
|
!enddo
|
||||||
do ipk=1,6
|
do ipk=1,6
|
||||||
|
|
||||||
! we want ic to be the index of the first sample of the frame
|
! we want ic to be the index of the first sample of the frame
|
||||||
@ -262,7 +258,7 @@ enddo
|
|||||||
if( ibb .le. 3 ) ibb=ibb-1
|
if( ibb .le. 3 ) ibb=ibb-1
|
||||||
if( ibb .gt. 3 ) ibb=ibb-7
|
if( ibb .gt. 3 ) ibb=ibb-7
|
||||||
|
|
||||||
do id=1,1 ! slicer dither.
|
do id=1,3 ! slicer dither.
|
||||||
if( id .eq. 1 ) is=0
|
if( id .eq. 1 ) is=0
|
||||||
if( id .eq. 2 ) is=-1
|
if( id .eq. 2 ) is=-1
|
||||||
if( id .eq. 3 ) is=1
|
if( id .eq. 3 ) is=1
|
||||||
@ -286,13 +282,13 @@ enddo
|
|||||||
! Final estimate of the carrier frequency - returned to the calling program
|
! Final estimate of the carrier frequency - returned to the calling program
|
||||||
fest=1500+ferr+ferr2
|
fest=1500+ferr+ferr2
|
||||||
|
|
||||||
do idf=0,0 ! frequency jitter
|
do idf=0,6 ! frequency jitter
|
||||||
if( idf .eq. 0 ) then
|
if( idf .eq. 0 ) then
|
||||||
deltaf=0.0
|
deltaf=0.0
|
||||||
elseif( mod(idf,2) .eq. 0 ) then
|
elseif( mod(idf,2) .eq. 0 ) then
|
||||||
deltaf=2*idf
|
deltaf=4*idf
|
||||||
else
|
else
|
||||||
deltaf=-2*(idf+1)
|
deltaf=-4*(idf+1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! Remove fine frequency error
|
! Remove fine frequency error
|
||||||
@ -316,7 +312,7 @@ enddo
|
|||||||
cca=sum(c(1:1+41)*conjg(cb))
|
cca=sum(c(1:1+41)*conjg(cb))
|
||||||
phase0=atan2(imag(cca),real(cca))
|
phase0=atan2(imag(cca),real(cca))
|
||||||
|
|
||||||
do ipha=1,1
|
do ipha=1,3
|
||||||
if( ipha.eq.2 ) phase0=phase0-20*pi/180.0
|
if( ipha.eq.2 ) phase0=phase0-20*pi/180.0
|
||||||
if( ipha.eq.3 ) phase0=phase0+20*pi/180.0
|
if( ipha.eq.3 ) phase0=phase0+20*pi/180.0
|
||||||
|
|
||||||
@ -347,7 +343,7 @@ enddo
|
|||||||
nbadsync1=(8-sum( (2*hardbits(1:8)-1)*s8r ) )/2
|
nbadsync1=(8-sum( (2*hardbits(1:8)-1)*s8r ) )/2
|
||||||
nbadsync=nbadsync1
|
nbadsync=nbadsync1
|
||||||
if( nbadsync .gt. 3 ) cycle
|
if( nbadsync .gt. 3 ) cycle
|
||||||
write(*,*) ip,id,nbadsync
|
|
||||||
! normalize the softsymbols before submitting to decoder
|
! normalize the softsymbols before submitting to decoder
|
||||||
sav=sum(softbits)/40
|
sav=sum(softbits)/40
|
||||||
s2av=sum(softbits*softbits)/40
|
s2av=sum(softbits*softbits)/40
|
||||||
@ -359,17 +355,17 @@ write(*,*) ip,id,nbadsync
|
|||||||
|
|
||||||
max_iterations=5
|
max_iterations=5
|
||||||
max_dither=1
|
max_dither=1
|
||||||
|
|
||||||
call ldpc_decode(lratio,decoded,max_iterations,niterations,max_dither,ndither)
|
call ldpc_decode(lratio,decoded,max_iterations,niterations,max_dither,ndither)
|
||||||
|
|
||||||
nhashflag=0
|
nhashflag=0
|
||||||
if( niterations .ge. 0 ) then
|
if( niterations .ge. 0 ) then
|
||||||
imsg=0
|
imsg=0
|
||||||
do i=1,16
|
do i=1,16
|
||||||
imsg=ishft(imsg,1)+iand(1,decoded(i))
|
imsg=ishft(imsg,1)+iand(1 , decoded(17-i))
|
||||||
enddo
|
enddo
|
||||||
nrxrpt=iand(imsg,63)
|
nrxrpt=iand(imsg,63)
|
||||||
nrxhash=(imsg-nrxrpt)/64
|
nrxhash=(imsg-nrxrpt)/64
|
||||||
write(*,*) niterations,decoded,nrxrpt,nrxhash,nhashes(nrxrpt)
|
|
||||||
if( nrxhash .eq. nhashes(nrxrpt) ) then
|
if( nrxhash .eq. nhashes(nrxrpt) ) then
|
||||||
nhashflag=1
|
nhashflag=1
|
||||||
goto 999
|
goto 999
|
||||||
@ -381,12 +377,13 @@ write(*,*) niterations,decoded,nrxrpt,nrxhash,nhashes(nrxrpt)
|
|||||||
enddo ! slicer dither loop
|
enddo ! slicer dither loop
|
||||||
enddo ! time-sync correlation-peak loop
|
enddo ! time-sync correlation-peak loop
|
||||||
enddo ! candidate loop
|
enddo ! candidate loop
|
||||||
|
return
|
||||||
999 continue
|
999 continue
|
||||||
msgreceived=' '
|
msgreceived=' '
|
||||||
if( nhashflag.eq.1 ) then
|
if( nhashflag.eq.1 ) then
|
||||||
nmessages=1
|
nmessages=1
|
||||||
write(msgreceived,'(a1,a,1x,a,a1,1x,a4)') "<",trim(mycall), &
|
write(msgreceived,'(a1,a,1x,a,a1,1x,a4)') "<",trim(mycall), &
|
||||||
trim(partnercall),">",rpt(nrxrpt)
|
trim(hiscall),">",rpt(nrxrpt)
|
||||||
write(lines(nmessages),1020) nutc,nsnr,t0,nint(fest),msgreceived
|
write(lines(nmessages),1020) nutc,nsnr,t0,nint(fest),msgreceived
|
||||||
1020 format(i6.6,i4,f5.1,i5,' & ',a22)
|
1020 format(i6.6,i4,f5.1,i5,' & ',a22)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user