mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	First cut at program "mapsim". (Frequency stuff is not right, yet.)
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2531 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									6cbd5f9f04
								
							
						
					
					
						commit
						6bfe2ed709
					
				@ -17,7 +17,7 @@ CFLAGS = -I. -fbounds-check
 | 
				
			|||||||
%.o: %.F90
 | 
					%.o: %.F90
 | 
				
			||||||
	${FC} ${FFLAGS} -c $<
 | 
						${FC} ${FFLAGS} -c $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all:    libm65.a m65.exe JT65code.exe
 | 
					all:    libm65.a m65.exe JT65code.exe mapsim.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 \
 | 
				
			||||||
@ -50,6 +50,10 @@ OBJS2 = JT65code.o
 | 
				
			|||||||
JT65code.exe: $(OBJS2) libm65.a
 | 
					JT65code.exe: $(OBJS2) libm65.a
 | 
				
			||||||
	$(FC) -o JT65code.exe $(OBJS2) libm65.a
 | 
						$(FC) -o JT65code.exe $(OBJS2) libm65.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OBJS6 = mapsim.o cgen65.o noisegen.o gran.o
 | 
				
			||||||
 | 
					mapsim.exe: $(OBJS6) libm65.a
 | 
				
			||||||
 | 
						$(FC) -o mapsim.exe $(OBJS6) libm65.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' \
 | 
				
			||||||
	 -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/ActiveQt' \
 | 
						 -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/ActiveQt' \
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										96
									
								
								libm65/cgen65.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								libm65/cgen65.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					subroutine cgen65(message,mode65,samfac,nsendingsh,msgsent,cwave,nwave)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Encodes a JT65 message into a wavefile.  
 | 
				
			||||||
 | 
					! Executes in 17 ms on opti-745.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parameter (NMAX=60*96000)     !Max length of wave file
 | 
				
			||||||
 | 
					  character*22 message          !Message to be generated
 | 
				
			||||||
 | 
					  character*22 msgsent          !Message as it will be received
 | 
				
			||||||
 | 
					  character*3 cok               !'   ' or 'OOO'
 | 
				
			||||||
 | 
					  real*8 dt,phi,f,f0,dfgen,dphi,twopi,samfac
 | 
				
			||||||
 | 
					  complex cwave(NMAX)           !Generated complex wave file
 | 
				
			||||||
 | 
					  integer dgen(12)
 | 
				
			||||||
 | 
					  integer sent(63)
 | 
				
			||||||
 | 
					  logical first
 | 
				
			||||||
 | 
					  integer nprc(126)
 | 
				
			||||||
 | 
					  real pr(126)
 | 
				
			||||||
 | 
					  data nprc/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,  &
 | 
				
			||||||
 | 
					            0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,  &
 | 
				
			||||||
 | 
					            0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,  &
 | 
				
			||||||
 | 
					            0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,  &
 | 
				
			||||||
 | 
					            1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,  &
 | 
				
			||||||
 | 
					            0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,  &
 | 
				
			||||||
 | 
					            1,1,1,1,1,1/
 | 
				
			||||||
 | 
					  data twopi/6.283185307179586476d0/,first/.true./
 | 
				
			||||||
 | 
					  save
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(first) then
 | 
				
			||||||
 | 
					     do i=1,126
 | 
				
			||||||
 | 
					        pr(i)=2*nprc(i)-1
 | 
				
			||||||
 | 
					     enddo
 | 
				
			||||||
 | 
					     first=.false.
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  call chkmsg(message,cok,nspecial,flip)
 | 
				
			||||||
 | 
					  if(nspecial.eq.0) then
 | 
				
			||||||
 | 
					     call packmsg(message,dgen)          !Pack message into 72 bits
 | 
				
			||||||
 | 
					     nsendingsh=0
 | 
				
			||||||
 | 
					     if(iand(dgen(10),8).ne.0) nsendingsh=-1    !Plain text flag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     call rs_encode(dgen,sent)
 | 
				
			||||||
 | 
					     call interleave63(sent,1)           !Apply interleaving
 | 
				
			||||||
 | 
					     call graycode(sent,63,1)            !Apply Gray code
 | 
				
			||||||
 | 
					     nsym=126                            !Symbols per transmission
 | 
				
			||||||
 | 
					     nsps=4096
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					     nsym=32
 | 
				
			||||||
 | 
					     nsps=16384
 | 
				
			||||||
 | 
					     nsendingsh=1                         !Flag for shorthand message
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					  if(mode65.eq.0) go to 900
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nsps=nint(nsps*96000.d0/11025.d0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Set up necessary constants
 | 
				
			||||||
 | 
					  dt=1.d0/(samfac*96000.d0)
 | 
				
			||||||
 | 
					  f0=118*11025.d0/1024
 | 
				
			||||||
 | 
					  dfgen=mode65*11025.d0/4096.d0
 | 
				
			||||||
 | 
					  phi=0.d0
 | 
				
			||||||
 | 
					  i=0
 | 
				
			||||||
 | 
					  k=0
 | 
				
			||||||
 | 
					  do j=1,nsym
 | 
				
			||||||
 | 
					     f=f0
 | 
				
			||||||
 | 
					     if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen
 | 
				
			||||||
 | 
					     if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then
 | 
				
			||||||
 | 
					        k=k+1
 | 
				
			||||||
 | 
					        f=f0+(sent(k)+2)*dfgen
 | 
				
			||||||
 | 
					     endif
 | 
				
			||||||
 | 
					     dphi=twopi*dt*f
 | 
				
			||||||
 | 
					     do ii=1,nsps
 | 
				
			||||||
 | 
					        phi=phi+dphi
 | 
				
			||||||
 | 
					        if(phi.gt.twopi) phi=phi-twopi
 | 
				
			||||||
 | 
					        xphi=phi
 | 
				
			||||||
 | 
					        i=i+1
 | 
				
			||||||
 | 
					!        iwave(i)=32767.0*sin(xphi)
 | 
				
			||||||
 | 
					        cwave(i)=cmplx(cos(xphi),-sin(xphi))
 | 
				
			||||||
 | 
					     enddo
 | 
				
			||||||
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cwave(nsym*nsps+1:)=0
 | 
				
			||||||
 | 
					  nwave=nsym*nsps + 5512
 | 
				
			||||||
 | 
					  call unpackmsg(dgen,msgsent)
 | 
				
			||||||
 | 
					  if(flip.lt.0.0) then
 | 
				
			||||||
 | 
					     do i=22,1,-1
 | 
				
			||||||
 | 
					        if(msgsent(i:i).ne.' ') goto 10
 | 
				
			||||||
 | 
					     enddo
 | 
				
			||||||
 | 
					10   msgsent=msgsent(1:i)//' OOO'
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(nsendingsh.eq.1) then
 | 
				
			||||||
 | 
					     if(nspecial.eq.2) msgsent='RO'
 | 
				
			||||||
 | 
					     if(nspecial.eq.3) msgsent='RRR'
 | 
				
			||||||
 | 
					     if(nspecial.eq.4) msgsent='73'
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					900 return
 | 
				
			||||||
 | 
					end subroutine cgen65
 | 
				
			||||||
							
								
								
									
										77
									
								
								libm65/mapsim.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								libm65/mapsim.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					program mapsim
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parameter (NMAX=96000*60)
 | 
				
			||||||
 | 
					  integer*2 id2(2,NMAX)
 | 
				
			||||||
 | 
					  integer*2 id4(4,NMAX)
 | 
				
			||||||
 | 
					  real*4 d4(4,NMAX)
 | 
				
			||||||
 | 
					  complex cwave(NMAX)
 | 
				
			||||||
 | 
					  complex z,zx,zy
 | 
				
			||||||
 | 
					  real*8 fcenter,fsample,samfac,f,dt,twopi,phi,dphi
 | 
				
			||||||
 | 
					  character message*22,msgsent*22,arg*8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nargs=iargc()
 | 
				
			||||||
 | 
					  if(nargs.ne.2) then
 | 
				
			||||||
 | 
					     print*,'Usage: mapsim "message" pol'
 | 
				
			||||||
 | 
					     go to 999
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					  call getarg(1,message)
 | 
				
			||||||
 | 
					  call getarg(2,arg)
 | 
				
			||||||
 | 
					  read(arg,*) pol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  open(10,file='000000_0000.iq',access='stream',status='unknown')
 | 
				
			||||||
 | 
					  open(11,file='000000_0000.tf2',access='stream',status='unknown')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  call noisegen(d4,NMAX)
 | 
				
			||||||
 | 
					  mode65=2
 | 
				
			||||||
 | 
					  samfac=1.d0
 | 
				
			||||||
 | 
					  call cgen65(message,mode65,samfac,nsendingsh,msgsent,cwave,nwave)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fcenter=144.125d0
 | 
				
			||||||
 | 
					  fsample=96000.d0
 | 
				
			||||||
 | 
					  twopi=8.d0*atan(1.d0)
 | 
				
			||||||
 | 
					  rad=360.0/twopi
 | 
				
			||||||
 | 
					  a=cos(pol/rad)
 | 
				
			||||||
 | 
					  b=sin(pol/rad)
 | 
				
			||||||
 | 
					  dt=1.d0/fsample
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  do isig=10,10
 | 
				
			||||||
 | 
					     f=-23 + 3*isig 
 | 
				
			||||||
 | 
					     dt=0.05d0*(isig-1)
 | 
				
			||||||
 | 
					!     snrdb=-(19.0 + (isig-1)/2.0)
 | 
				
			||||||
 | 
					     snrdb=-20.0
 | 
				
			||||||
 | 
					     sig=sqrt(2500.0/96000.0) * 10.0**(0.05*snrdb)
 | 
				
			||||||
 | 
					     sig=1.6*sig
 | 
				
			||||||
 | 
					     dphi=twopi*f*dt
 | 
				
			||||||
 | 
					     phi=0.
 | 
				
			||||||
 | 
					     i0=fsample*(3.5d0+dt)
 | 
				
			||||||
 | 
					     print*,f,dt,dphi,i0,sig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     do i=1,nwave
 | 
				
			||||||
 | 
					        phi=phi + dphi
 | 
				
			||||||
 | 
					!        if(phi.gt.twopi) phi=phi-twopi
 | 
				
			||||||
 | 
					!        xphi=phi
 | 
				
			||||||
 | 
					        z=sig*cwave(i)*cmplx(cos(phi),sin(phi))
 | 
				
			||||||
 | 
					        zx=a*z
 | 
				
			||||||
 | 
					        zy=b*z
 | 
				
			||||||
 | 
					        j=i+i0
 | 
				
			||||||
 | 
					        d4(1,j)=d4(1,j) + real(zx)
 | 
				
			||||||
 | 
					        d4(2,j)=d4(2,j) + aimag(zx)
 | 
				
			||||||
 | 
					        d4(3,j)=d4(3,j) + real(zy)
 | 
				
			||||||
 | 
					        d4(4,j)=d4(4,j) + aimag(zy)
 | 
				
			||||||
 | 
					     enddo
 | 
				
			||||||
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  s=31.6
 | 
				
			||||||
 | 
					  do i=1,NMAX
 | 
				
			||||||
 | 
					     id4(1,i)=nint(s*d4(1,i))
 | 
				
			||||||
 | 
					     id4(2,i)=nint(s*d4(2,i))
 | 
				
			||||||
 | 
					     id4(3,i)=nint(s*d4(3,i))
 | 
				
			||||||
 | 
					     id4(4,i)=nint(s*d4(4,i))
 | 
				
			||||||
 | 
					     id2(1,i)=id4(1,i)
 | 
				
			||||||
 | 
					     id2(2,i)=id4(2,i)
 | 
				
			||||||
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  write(10) fcenter,id2
 | 
				
			||||||
 | 
					  write(11) fcenter,id4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					999 end program mapsim
 | 
				
			||||||
							
								
								
									
										13
									
								
								libm65/noisegen.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								libm65/noisegen.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					subroutine noisegen(d4,nmax)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  real*4 d4(4,nmax)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  do i=1,nmax
 | 
				
			||||||
 | 
					     d4(1,i)=gran()
 | 
				
			||||||
 | 
					     d4(2,i)=gran()
 | 
				
			||||||
 | 
					     d4(3,i)=gran()
 | 
				
			||||||
 | 
					     d4(4,i)=gran()
 | 
				
			||||||
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					end subroutine noisegen
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user