Hi All,

I noticed that many of the reports on the sites are wrong in frequency more than expected.

This is verified on HF band, where some errors in WSPR are near 60 Hz in 20m (near to 1/3 of 200Hz of used band)

Also in JT65/JT9 I see similar errors comparing reports in some minute.

There are many warnings to synchronize the computer clock to improve the decoding of signals, but few warnings to verify your frequency.

There is a very precise calibration process described in
http://physics.princeton.edu/pulsar/k1jt/FMT_User.pdf

Only for a verify can also be used a fast/raw  method:
in WSJT-X JT65A tune the radio to WWV CHU RWM(*) minus 1 KHz
expand wide graph in bins/pix=1 ,"linear avg" and adjust start frequency so the 1KHz tone is visible in center of graph.

You'll be amazed how precise is this method for evaluating your frequency or adjust it.

In few free time I also experiment read wav files of WSJT-X by fmtest.
Can be a idea ?

(*)RWM transmit 4 KHz down from 5 10 15 MHZ
For EU users please read schedule in https://en.wikipedia.org/wiki/RWM as the station is "part time" for calibration.
Other users can test propagation (now that sun going to sleep period)

--
73
Sandro
IW3RAB
!-------------------------------------------------------------------------------
!
! This file is part of the WSPR application, Weak Signal Propagation Reporter
!
! File Name:    fmtest.f90
! Description:
!
! Copyright (C) 2001-2014 Joseph Taylor, K1JT
! License: GPL-3
!
! This program is free software; you can redistribute it and/or modify it under
! the terms of the GNU General Public License as published by the Free Software
! Foundation; either version 3 of the License, or (at your option) any later
! version.
!
! This program is distributed in the hope that it will be useful, but WITHOUT
! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
! FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
! details.
!
! You should have received a copy of the GNU General Public License along with
! this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
! Street, Fifth Floor, Boston, MA 02110-1301, USA.
!
!-------------------------------------------------------------------------------
program fmtd

  use readwav
! Conduct measurements for ARRL Frequency Measuring Test, etc.
! experiment of IW3RAB for read WSJT-X wav files to see transceiver frequency 
error

!  parameter (NMAX=600*48000)                 !Max length of 48 kHz waveform
  parameter (NMAX=60*48000)                 !Max length of 48 kHz waveform
  parameter (NMAX2=NMAX/4)                   !Max length at 12 kHz
  parameter (NFFT=65536)
  parameter (NH=NFFT/2)
  parameter (NQ=NFFT/4)
  
  type(wav_header) :: wav
!  integer*2 kwave(NMAX)                      !Raw data samples at 48 kHz
  integer*2 iwave(NMAX2)                     !Downsampled data, 12 kHz
!  character arg*12                           !Command-line arg
  character callsign*6
!  character cmnd*120                         !Command to set rig frequency
  character cflag*1
  real x(NFFT)                               !Real data for FFT
  real w(NFFT)                               !Window function
  complex c(0:NH-1)                          !Complex FFT result
  real s(NQ)                                !Power spectrum
!  integer time
! integer  soundin                       !External functions
  equivalence (x,c)

!  nargs=iargc()
!  if(nargs.ne.6) then
!     print*,'Usage:   fmtest <kHz> <0|1> <offset> <range> <tsec> <call>'
!     print*,'Example: fmtest 10000   1    1500     100      30    WWV'
!     go to 999
!  endif
!  call getarg(1,arg)
!  read(arg,*) nkhz                     !Nominal frequency to be measured (kHz)
!  call getarg(2,arg)
!  read(arg,*) ncal                     !1=CAL, 0=to be measured
!  call getarg(3,arg)
!  read(arg,*) noffset                  !Offset (Hz)
!  call getarg(4,arg)
!  read(arg,*) nrange                   !Search range (Hz)
!  call getarg(5,arg)
!  read(arg,*) ntsec                    !Length of measurement (s)
!  call getarg(6,callsign)
nkhz=14996
ncal=1
noffset=1500
nrange=50
ntsec=50     !wav stop at 50 s
callsign='RWM'
!  open(10,file='fmt.ini',status='old',err=910)
!  read(10,'(a120)') cmnd              !Get rigctl command to set frequency
!  read(10,*) ndevin
!  close(10)
!  open(12,file='fmt.out',status='unknown')
!  open(13,file='fmt.all',status='unknown',position='append')

!  nHz=1000*nkhz - noffset
!  i1=index(cmnd,' F ')
!  write(cmnd(i1+2:),*) nHz            !Insert the desired frequency
!  iret=system(cmnd)
!  if(iret.ne.0) then
!     print*,'Error executing rigctl command to set frequency:'
!     print*,cmnd
!     go to 999
!  endif

  df=12000.d0/NFFT
  do i=1,NFFT
     w(i)=sin(i*3.14159/NFFT)
  enddo

  write(*,1000)
1000 format(                                                              &
     '   UTC     Freq CAL Offset  fMeas        DF    Level   S/N  Call'/   &
     '          (kHz)  ?   (Hz)    (Hz)       (Hz)    (dB)  (dB)      '/   &
     '------------------------------------------------------------------')

!  call soundinit                             !Initialize Portaudio

!  npts=ntsec*48000
!  iqmode=0
!  nsec0=mod(time(),86400)
nsec0=9*3600+6*60
!  ierr=soundin(ndevin,48000,kwave,npts,iqmode)  !Get audio data, 48 kHz rate
!  if(ierr.ne.0) then
!     print*,'Error in soundin',ierr
!     stop
!  endif

!  call fil1(kwave,npts,iwave,n2)          !Filter and downsample to 12 kHz
! subroutine fil1(id1,n1,id2,n2)
!  n2=(n1-NTAPS+NDOWN)/NDOWN
! n1=48000*60, NTAPS=37 , NDOWN=4
n2=12000*60
! read data from wsjtx file, 1 minute data , only 50 sec contain data
call wav%read ('160815_0906.wav')
!call wav%read ('000000_0000.wav')
!write (*,*) 'Sample rate is: ', wav%audio_format%sample_rate
read(unit=wav%lun) iwave(1:n2)
close(unit=wav%lun)

  n2=12000*50
  nrpt=n2/NH - 1
  fac=1.0/float(NFFT)**2
  ia=(noffset-nrange)/df
  ib=(noffset+nrange)/df

  do irpt=0,nrpt
     k=irpt*NH
     t0=nsec0 + k/12000.0
     do i=1,NFFT
        k=k+1
        if(k.gt.NMAX2) go to 999
        x(i)=w(i)*iwave(k)
     enddo
     call four2a(x,NFFT,1,-1,0)              !Compute spectrum
     do i=1,nq
        s(i)=fac * (real(c(i))**2 + aimag(c(i))**2)
     enddo
  
     smax=0.
     ipk=ib                                  !Silence compiler warning
     do i=ia,ib                              !Find fpeak
        if(s(i).gt.smax) then
           smax=s(i)
           ipk=i
        endif
     enddo

     call peakup(s(ipk-1),s(ipk),s(ipk+1),dx)
     fpeak=df * (ipk+dx)

     sum=0.
     nsum=0
     do i=ia,ib
        if(abs(i-ipk).gt.10) then
           sum=sum+s(i)
           nsum=nsum+1
        endif
     enddo
     ave=sum/nsum

     n=nint(mod(t0,86400.0))
     nhr=n/3600
     nmin=mod(n/60,60)
     nsec=mod(n,60)
     pave=db(ave) + 8.0
     snr=db(smax/ave)
     ferr=fpeak-noffset
     cflag=' '
     if(snr.lt.20.0) cflag='*'
     write(*,1100)  nhr,nmin,nsec,nkhz,ncal,noffset,fpeak,ferr,pave,   &
          snr,callsign,cflag
1100 format(i2.2,':',i2.2,':',i2.2,i7,i3,i6,2f10.3,2f7.1,2x,a6,2x,a1)
!   UTC     Freq CAL Offset  fMeas        DF    Level   S/N  Call
!          (kHz)  ?   (Hz)    (Hz)       (Hz)    (dB)  (dB)
!------------------------------------------------------------------
!09:06:00  14996  1  1500  1495.436    -4.564   17.2   43.9  RWM

!     write(12,1100) nhr,nmin,nsec,nkhz,ncal,noffset,fpeak,ferr,pave,   &
!          snr,callsign,cflag
!     write(13,1100) nhr,nmin,nsec,nkhz,ncal,noffset,fpeak,ferr,pave,   &
!          snr,callsign,cflag
!     call flush(12)
!     call flush(13)
  enddo
  go to 999

! 910 print*,'Cannot open file: fmt.ini'

999 end program fmtd

------------------------------------------------------------------------------
_______________________________________________
wsjt-devel mailing list
wsjt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wsjt-devel

Reply via email to