mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	Rename refspec() to refspectrum().
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6601 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									122b83e0c1
								
							
						
					
					
						commit
						2fd8f10727
					
				@ -387,7 +387,7 @@ set (wsjt_FSRCS
 | 
			
		||||
  lib/ps4.f90
 | 
			
		||||
  lib/readwav.f90
 | 
			
		||||
  lib/rectify_msk.f90
 | 
			
		||||
  lib/refspec.f90
 | 
			
		||||
  lib/refspectrum.f90
 | 
			
		||||
  lib/savec2.f90
 | 
			
		||||
  lib/sec_midn.f90
 | 
			
		||||
  lib/setup65.f90
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ CFLAGS = -O2 -I.
 | 
			
		||||
%.o: %.F90
 | 
			
		||||
	${FC} ${FFLAGS} -c $<
 | 
			
		||||
 | 
			
		||||
all:	 jt9w
 | 
			
		||||
all:	 jt9w 
 | 
			
		||||
 | 
			
		||||
OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \
 | 
			
		||||
      softsym9w.o four2a.o interleave9.o jt9fano.o fano232.o packjt.o \
 | 
			
		||||
@ -40,6 +40,14 @@ OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \
 | 
			
		||||
jt9w: $(OBJS1) 
 | 
			
		||||
	$(FC) -o jt9w $(OBJS1) -lfftw3f
 | 
			
		||||
 | 
			
		||||
OBJS2 = t1.o four2a.o db.o
 | 
			
		||||
t1:   $(OBJS2)
 | 
			
		||||
	$(FC) -o t1 $(OBJS2) -lfftw3f
 | 
			
		||||
 | 
			
		||||
OBJS3 = t2.o four2a.o db.o
 | 
			
		||||
t2:   $(OBJS3)
 | 
			
		||||
	$(FC) -o t2 $(OBJS3) -lfftw3f
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
 | 
			
		||||
@ -1,17 +0,0 @@
 | 
			
		||||
subroutine refspec(id2,k)
 | 
			
		||||
 | 
			
		||||
! Input:
 | 
			
		||||
!  id2       raw 16-bit integer data, 12000 Hz sample rate
 | 
			
		||||
!  k         pointer to the most recent new data
 | 
			
		||||
 | 
			
		||||
! Output (in common/c0com)
 | 
			
		||||
!  c0        complex data downsampled to 1500 Hz
 | 
			
		||||
 | 
			
		||||
  parameter (NMAX=120*12000)         !Total sample intervals per 30 minutes
 | 
			
		||||
  integer*2 id2(0:NMAX-1)
 | 
			
		||||
 | 
			
		||||
!  write(*,3001) id2(k-3456:k-3456+9),k
 | 
			
		||||
!3001 format(10i5,i10)
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine refspec
 | 
			
		||||
							
								
								
									
										14
									
								
								lib/refspectrum.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								lib/refspectrum.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
subroutine refspectrum(id2,brefspec)
 | 
			
		||||
 | 
			
		||||
! Input:
 | 
			
		||||
!  id2       i*2        Raw 16-bit integer data, 12000 Hz sample rate
 | 
			
		||||
!  brefspec  logical    True when accumulating a reference spectrum
 | 
			
		||||
 | 
			
		||||
  integer*2 id2(3456)
 | 
			
		||||
  logical brefspec
 | 
			
		||||
 | 
			
		||||
!  write(*,3001) id2(1:10),brefspec
 | 
			
		||||
!3001 format(10i5,L8)
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine refspectrum
 | 
			
		||||
							
								
								
									
										172
									
								
								lib/t1.f90
									
									
									
									
									
								
							
							
						
						
									
										172
									
								
								lib/t1.f90
									
									
									
									
									
								
							@ -1,140 +1,52 @@
 | 
			
		||||
program t1
 | 
			
		||||
 | 
			
		||||
  parameter (NSPM=1404)
 | 
			
		||||
  complex csig(0:NSPM-1)
 | 
			
		||||
  complex c(0:NSPM-1)
 | 
			
		||||
  complex cnoise(0:NSPM-1)
 | 
			
		||||
  complex cd(0:11,0:3)
 | 
			
		||||
  complex z,zmax
 | 
			
		||||
  integer itone(234)
 | 
			
		||||
  real r(234)
 | 
			
		||||
  real ss(0:3)
 | 
			
		||||
  character*12 arg
 | 
			
		||||
  parameter (NFFT=1024,NH=NFFT/2)
 | 
			
		||||
  real w(-24:24)
 | 
			
		||||
  real x(0:NFFT-1)
 | 
			
		||||
  complex cx(0:NH)
 | 
			
		||||
  equivalence (x,cx)
 | 
			
		||||
 | 
			
		||||
  nargs=iargc()
 | 
			
		||||
  if(nargs.ne.3) then
 | 
			
		||||
     print*,'Usage: t1 nsymtest snrdb iters'
 | 
			
		||||
     go to 999
 | 
			
		||||
  endif
 | 
			
		||||
  call getarg(1,arg)
 | 
			
		||||
  read(arg,*) nsymtest
 | 
			
		||||
  call getarg(2,arg)
 | 
			
		||||
  read(arg,*) snrdb
 | 
			
		||||
  call getarg(3,arg)
 | 
			
		||||
  read(arg,*) iters
 | 
			
		||||
! FIR lowpass filter designed using ScopeFIR
 | 
			
		||||
 | 
			
		||||
  call init_random_seed()       ! seed Fortran RANDOM_NUMBER generator
 | 
			
		||||
  call sgran()                  ! see C rand generator (used in gran)
 | 
			
		||||
! fsample     = 48000 Hz
 | 
			
		||||
! Ntaps       = 49
 | 
			
		||||
! fc          = 4500  Hz
 | 
			
		||||
! fstop       = 6000  Hz
 | 
			
		||||
! Ripple      = 1     dB
 | 
			
		||||
! Stop Atten  = 40    dB
 | 
			
		||||
! fout        = 12000 Hz
 | 
			
		||||
! Filter coefficients:
 | 
			
		||||
  data w/                                                                 &
 | 
			
		||||
        0.000861074040, 0.010051920210, 0.010161983649, 0.011363155076,   &
 | 
			
		||||
        0.008706594219, 0.002613872664,-0.005202883094,-0.011720748164,   &
 | 
			
		||||
       -0.013752163325,-0.009431602741, 0.000539063909, 0.012636767098,   &
 | 
			
		||||
        0.021494659597, 0.021951235065, 0.011564169382,-0.007656470131,   &
 | 
			
		||||
       -0.028965787341,-0.042637874109,-0.039203309748,-0.013153301537,   &
 | 
			
		||||
        0.034320769178, 0.094717832646, 0.154224604789, 0.197758325022,   &
 | 
			
		||||
        0.213715139513, 0.197758325022, 0.154224604789, 0.094717832646,   &
 | 
			
		||||
        0.034320769178,-0.013153301537,-0.039203309748,-0.042637874109,   &
 | 
			
		||||
       -0.028965787341,-0.007656470131, 0.011564169382, 0.021951235065,   &
 | 
			
		||||
        0.021494659597, 0.012636767098, 0.000539063909,-0.009431602741,   &
 | 
			
		||||
       -0.013752163325,-0.011720748164,-0.005202883094, 0.002613872664,   &
 | 
			
		||||
        0.008706594219, 0.011363155076, 0.010161983649, 0.010051920210,   &
 | 
			
		||||
        0.000861074040/
 | 
			
		||||
 | 
			
		||||
  call random_number(r)
 | 
			
		||||
  itone=0
 | 
			
		||||
  where(r.gt.0.5) itone=1
 | 
			
		||||
 | 
			
		||||
  twopi=8.0*atan(1.0)
 | 
			
		||||
  fmid=1500.0
 | 
			
		||||
  f0=fmid-500.
 | 
			
		||||
  f1=fmid+500.
 | 
			
		||||
  dt=1.0/12000.0
 | 
			
		||||
 | 
			
		||||
  phi=0.
 | 
			
		||||
  do n=0,3
 | 
			
		||||
     k=-1
 | 
			
		||||
     dphi=twopi*f0*dt
 | 
			
		||||
     if(n.ge.2) dphi=twopi*f1*dt
 | 
			
		||||
     do i=0,5
 | 
			
		||||
        k=k+1
 | 
			
		||||
        phi=phi+dphi
 | 
			
		||||
        if(phi.gt.twopi) phi=phi-twopi
 | 
			
		||||
        cd(k,n)=cmplx(cos(phi),sin(phi))
 | 
			
		||||
     enddo
 | 
			
		||||
 | 
			
		||||
     dphi=twopi*f0*dt
 | 
			
		||||
     if(mod(n,2).eq.1) dphi=twopi*f1*dt
 | 
			
		||||
     do i=6,11
 | 
			
		||||
        k=k+1
 | 
			
		||||
        phi=phi+dphi
 | 
			
		||||
        if(phi.gt.twopi) phi=phi-twopi
 | 
			
		||||
        cd(k,n)=cmplx(cos(phi),sin(phi))
 | 
			
		||||
     enddo
 | 
			
		||||
  x=0.
 | 
			
		||||
  do i=-24,24
 | 
			
		||||
     j=i
 | 
			
		||||
     if(j.lt.0) j=j+NFFT
 | 
			
		||||
     x(j)=w(i)
 | 
			
		||||
  enddo
 | 
			
		||||
 | 
			
		||||
!  do k=0,11
 | 
			
		||||
!     write(13,1000) k,cd(k,0:3)
 | 
			
		||||
!1000 format(i4,8f9.3)
 | 
			
		||||
!enddo
 | 
			
		||||
  call four2a(x,NFFT,1,-1,0)                     !r2c FFT
 | 
			
		||||
 | 
			
		||||
! Generate signal waveform
 | 
			
		||||
  k=-1
 | 
			
		||||
  phi=0.
 | 
			
		||||
  do j=1,234
 | 
			
		||||
     dphi=twopi*f0*dt
 | 
			
		||||
     if(itone(j).eq.1) dphi=twopi*f1*dt
 | 
			
		||||
     do i=1,6
 | 
			
		||||
        k=k+1
 | 
			
		||||
        phi=phi+dphi
 | 
			
		||||
        if(phi.gt.twopi) phi=phi-twopi
 | 
			
		||||
        csig(k)=cmplx(cos(phi),sin(phi))
 | 
			
		||||
!        write(14,1000) k,csig(k)
 | 
			
		||||
     enddo
 | 
			
		||||
  df=48000.0/NFFT
 | 
			
		||||
  do i=0,NH
 | 
			
		||||
     y=abs(cx(i))
 | 
			
		||||
     s=y*y
 | 
			
		||||
     f=i*df
 | 
			
		||||
     write(13,1000) f,y,s,db(s),cx(i)
 | 
			
		||||
1000 format(6f12.6)
 | 
			
		||||
  enddo
 | 
			
		||||
 | 
			
		||||
     write(*,1010) 
 | 
			
		||||
1010 format('  S/N  (S+N)/N    BER'/'----------------------')
 | 
			
		||||
 | 
			
		||||
  isnra=10
 | 
			
		||||
  isnrb=-3
 | 
			
		||||
  nsyms=234
 | 
			
		||||
  do isnr=isnra,isnrb,-1
 | 
			
		||||
     snr=10.0**(0.1*isnr)
 | 
			
		||||
     if(snrdb.ne.0.0) snr=10.0**(0.1*snrdb)
 | 
			
		||||
     fac=1.0/sqrt(snr)
 | 
			
		||||
     nsumerr=0
 | 
			
		||||
     do iter=1,iters
 | 
			
		||||
        do i=0,NSPM-1
 | 
			
		||||
           x=gran()
 | 
			
		||||
           y=gran()
 | 
			
		||||
           cnoise(i)=cmplx(x,y)
 | 
			
		||||
        enddo
 | 
			
		||||
 | 
			
		||||
        c=csig + fac*cnoise
 | 
			
		||||
        nerr=0
 | 
			
		||||
        n1=2
 | 
			
		||||
        nstep=2
 | 
			
		||||
        iz=5
 | 
			
		||||
        if(nsymtest.eq.2) then
 | 
			
		||||
           n1=3
 | 
			
		||||
           nstep=1
 | 
			
		||||
           iz=11
 | 
			
		||||
        endif
 | 
			
		||||
 | 
			
		||||
        do j=1,nsyms
 | 
			
		||||
           smax=0.
 | 
			
		||||
           do n=0,n1,nstep
 | 
			
		||||
              s=0.
 | 
			
		||||
              k=6*(j-1)
 | 
			
		||||
              do i=0,iz
 | 
			
		||||
                 s=s + aimag(c(k+i))*aimag(cd(i,n))
 | 
			
		||||
              enddo
 | 
			
		||||
              ss(n)=s
 | 
			
		||||
              if(abs(s).gt.abs(smax)) then
 | 
			
		||||
                 smax=s
 | 
			
		||||
                 npk=n
 | 
			
		||||
              endif
 | 
			
		||||
           enddo
 | 
			
		||||
           sym=max(abs(ss(2)),abs(ss(3))) - max(abs(ss(0)),abs(ss(1)))
 | 
			
		||||
!           ibit=npk/2
 | 
			
		||||
           ibit=0
 | 
			
		||||
           if(sym.ge.0.0) ibit=1
 | 
			
		||||
           if(ibit.ne.itone(j)) nerr=nerr+1
 | 
			
		||||
        enddo
 | 
			
		||||
        nsumerr=nsumerr+nerr
 | 
			
		||||
     enddo
 | 
			
		||||
 | 
			
		||||
     write(*,1020) 10.0*log10(snr),10.0*log10(snr+1.0),            &
 | 
			
		||||
          float(nsumerr)/(nsyms*iters)
 | 
			
		||||
1020 format(f5.1,f7.1,f9.3)
 | 
			
		||||
     if(snrdb.ne.0.0) exit
 | 
			
		||||
  enddo
 | 
			
		||||
 | 
			
		||||
999 end program t1
 | 
			
		||||
 | 
			
		||||
end program t1
 | 
			
		||||
 | 
			
		||||
@ -37,13 +37,13 @@ Mode    nsps     Rate       B        t_sym     t_msg   Suggested
 | 
			
		||||
Slow modes, sample Rate 12000 Hz:
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
JT9A    6912     1.736    15.625     576      48.96    QRP HF dxing
 | 
			
		||||
JT9B    3840     1.736    28.125     576      48.96
 | 
			
		||||
JT9C    1920     1.736    56.25      576      48.96
 | 
			
		||||
JT9D     960     1.736    112.5      576      48.96
 | 
			
		||||
JT9E     480     1.736     225       576      48.96
 | 
			
		||||
JT9F     240     1.736     450       576      48.96
 | 
			
		||||
JT9G     120     1.736     900       576      48.96
 | 
			
		||||
JT9H      60     1.736    1800       576      48.96    Microwave EME?
 | 
			
		||||
JT9B    6912     1.736    28.125     576      48.96
 | 
			
		||||
JT9C    6912     1.736    56.25      576      48.96
 | 
			
		||||
JT9D    6912     1.736    112.5      576      48.96
 | 
			
		||||
JT9E    6912     1.736     225       576      48.96
 | 
			
		||||
JT9F    6912     1.736     450       576      48.96
 | 
			
		||||
JT9G    6912     1.736     900       576      48.96    Microwave EME?
 | 
			
		||||
JT9H    6912     1.736    1800       576      48.96    Microwave EME?
 | 
			
		||||
 | 
			
		||||
WSPR    8192     1.465     5.86      683     110.59    Propagation probe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -99,7 +99,7 @@ extern "C" {
 | 
			
		||||
  void hash_calls_(char calls[], int* ih9, int len);
 | 
			
		||||
  void degrade_snr_(short d2[], int* n, float* db, float* bandwidth);
 | 
			
		||||
  void wav12_(short d2[], short d1[], int* nbytes, short* nbitsam2);
 | 
			
		||||
  void refspec_(short int d2[], int* k);
 | 
			
		||||
  void refspectrum_(short int d2[], bool* brefspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int volatile itone[NUM_ISCAT_SYMBOLS];	//Audio tones for all Tx symbols
 | 
			
		||||
@ -874,8 +874,7 @@ void MainWindow::dataSink(qint64 frames)
 | 
			
		||||
  static float df3;
 | 
			
		||||
 | 
			
		||||
  int k (frames);
 | 
			
		||||
  refspec_(dec_data.d2,&k);
 | 
			
		||||
//  wspr_downsample_(dec_data.d2,&k);
 | 
			
		||||
  refspectrum_(&dec_data.d2[k-3456],&m_bRefSpec);
 | 
			
		||||
 | 
			
		||||
  if(m_diskData) {
 | 
			
		||||
    dec_data.params.ndiskdat=1;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user