mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	Code cleanup. Implement use of fQSO, ntol, etc.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@2671 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									ed2cd7b155
								
							
						
					
					
						commit
						b10df1efdc
					
				@ -12,10 +12,10 @@ extern struct {
 | 
				
			|||||||
  int nutc;                         //UTC as integer, HHMM
 | 
					  int nutc;                         //UTC as integer, HHMM
 | 
				
			||||||
  int ndiskdat;                     //1 ==> data read from *.wav file
 | 
					  int ndiskdat;                     //1 ==> data read from *.wav file
 | 
				
			||||||
  int ntrperiod;                    //TR period (seconds)
 | 
					  int ntrperiod;                    //TR period (seconds)
 | 
				
			||||||
  int mousefqso;                    //User-selected QSO freq (kHz)
 | 
					  int nfqso;                        //User-selected QSO freq (kHz)
 | 
				
			||||||
  int nagain;                       //1 ==> decode only at fQSO +/- Tol
 | 
					  int nagain;                       //1 ==> decode only at fQSO +/- Tol
 | 
				
			||||||
  int newdat;                       //1 ==> new data, must do long FFT
 | 
					  int newdat;                       //1 ==> new data, must do long FFT
 | 
				
			||||||
  int nfa;                          //Low decode limit (kHz)
 | 
					  int npts8;                        //npts for c0() array
 | 
				
			||||||
  int nfb;                          //High decode limit (kHz)
 | 
					  int nfb;                          //High decode limit (kHz)
 | 
				
			||||||
  int ntol;                         //+/- decoding range around fQSO (Hz)
 | 
					  int ntol;                         //+/- decoding range around fQSO (Hz)
 | 
				
			||||||
  int kin;
 | 
					  int kin;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								jt9.txt
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								jt9.txt
									
									
									
									
									
								
							@ -1,7 +1,7 @@
 | 
				
			|||||||
JT9 is a mode designed for amateur QSOs at MF and LF.  The mode uses
 | 
					JT9 is a mode designed for amateur QSOs at MF and LF.  The mode uses
 | 
				
			||||||
the same 72-bit structured messages as JT65.  Error control coding
 | 
					the same 72-bit structured messages as JT65.  Error control coding
 | 
				
			||||||
(ECC) uses a convolutional code with constraint length K=32, rate
 | 
					(ECC) uses a strong convolutional code with constraint length K=32,
 | 
				
			||||||
r=1/2, and a zero tail, leading to an encoded message length of
 | 
					rate r=1/2, and a zero tail, leading to an encoded message length of
 | 
				
			||||||
(72+31)*2 = 206 information-carrying bits.  Modulation is 9-FSK: 8
 | 
					(72+31)*2 = 206 information-carrying bits.  Modulation is 9-FSK: 8
 | 
				
			||||||
tones for data, one for synchronization.  Sixteen symbol intervals are
 | 
					tones for data, one for synchronization.  Sixteen symbol intervals are
 | 
				
			||||||
used for synchronization, so a transmission requires a total of 207/3
 | 
					used for synchronization, so a transmission requires a total of 207/3
 | 
				
			||||||
@ -10,12 +10,14 @@ used for synchronization, so a transmission requires a total of 207/3
 | 
				
			|||||||
Exact symbol lengths are chosen so that nsps, the number of samples
 | 
					Exact symbol lengths are chosen so that nsps, the number of samples
 | 
				
			||||||
per symbol (at 12000 samples per second) is a number with no prime
 | 
					per symbol (at 12000 samples per second) is a number with no prime
 | 
				
			||||||
factor greater than 7.  This choice makes for efficient FFTs.  Tone
 | 
					factor greater than 7.  This choice makes for efficient FFTs.  Tone
 | 
				
			||||||
spacing of the 9-FSK modulation is df=1/tsym=12000/nsps, equal to
 | 
					spacing of the 9-FSK modulation is df=1/tsym=12000/nsps, equal to the
 | 
				
			||||||
the keying rate.  The total occupied bandwidth is 9*df.
 | 
					keying rate.  The total occupied bandwidth is 9*df.  The generated
 | 
				
			||||||
 | 
					signal has continuous phase, and there are no key clicks.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Parameters of five JT9 sub-modes are summarized in the following
 | 
					Parameters of five JT9 sub-modes are summarized in the following
 | 
				
			||||||
table, along with S/N thresholds measured by simulation on an AWGN
 | 
					table, along with S/N thresholds measured by simulation on an AWGN
 | 
				
			||||||
channel.
 | 
					channel.  Numbers following "JT9-" in the sub-mode names specify the
 | 
				
			||||||
 | 
					T/R period in minutes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--------------------------------------------------------------------------
 | 
					--------------------------------------------------------------------------
 | 
				
			||||||
Mode     nsps nsps2  df    tsym  BW   S/N*   Tdec Tfree Factors 
 | 
					Mode     nsps nsps2  df    tsym  BW   S/N*   Tdec Tfree Factors 
 | 
				
			||||||
@ -46,12 +48,12 @@ Receiving
 | 
				
			|||||||
2.  Filter to 1000 Hz bandwidth and downsample (1/8) to 1500 Hz, saving
 | 
					2.  Filter to 1000 Hz bandwidth and downsample (1/8) to 1500 Hz, saving
 | 
				
			||||||
    complex data to array c0(2,700,000).
 | 
					    complex data to array c0(2,700,000).
 | 
				
			||||||
3.  Compute spectra at half-symbol steps.  Use for waterfall display 
 | 
					3.  Compute spectra at half-symbol steps.  Use for waterfall display 
 | 
				
			||||||
    s(22000) and save in ss(184,22000) and 
 | 
					    s(22000) and save in ss(184,22000) and savg(22000) for detecting 
 | 
				
			||||||
    savg(22000), for detecting sync vectors.
 | 
					    sync vectors.
 | 
				
			||||||
4.  At time Tdec, find sync vectors in ss(); get approx DF or list of DFs
 | 
					4.  At time Tdec, find sync vectors in ss(); get approx DF or list of DFs
 | 
				
			||||||
5.  Do full-length FFT, NFFT1=96*nsps2, zero-padded as required.
 | 
					5.  Do full-length FFT, NFFT1=96*nsps2, zero-padded as required.
 | 
				
			||||||
6.  For each candidate signal, do inverse FFT of length 1536 (or 3072?).  
 | 
					6.  For each candidate signal, do inverse FFT of length 1536 (or 3072?).  
 | 
				
			||||||
    This yields 16 complex samples per symbol, and sync tone should be 
 | 
					    This yields 16 complex samples per symbol; sync tone should be 
 | 
				
			||||||
    close to zero frequency.
 | 
					    close to zero frequency.
 | 
				
			||||||
7.  Use afc65b method to get improved values of DF, DT.
 | 
					7.  Use afc65b method to get improved values of DF, DT.
 | 
				
			||||||
8.  Tweak freq and time offset to 0.
 | 
					8.  Tweak freq and time offset to 0.
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@ subroutine decoder(ntrSeconds,c0)
 | 
				
			|||||||
  integer*2 id2
 | 
					  integer*2 id2
 | 
				
			||||||
  complex c0(NDMAX)
 | 
					  complex c0(NDMAX)
 | 
				
			||||||
  common/jt9com/ss(184,NSMAX),savg(NSMAX),id2(NMAX),nutc,ndiskdat,    &
 | 
					  common/jt9com/ss(184,NSMAX),savg(NSMAX),id2(NMAX),nutc,ndiskdat,    &
 | 
				
			||||||
       ntr,mousefqso,nagain,newdat,nfa,nfb,ntol,kin
 | 
					       ntr,nfqso,nagain,newdat,npts8,nfb,ntol,kin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ntrMinutes=ntrSeconds/60
 | 
					  ntrMinutes=ntrSeconds/60
 | 
				
			||||||
  newdat=1
 | 
					  newdat=1
 | 
				
			||||||
@ -35,24 +35,22 @@ subroutine decoder(ntrSeconds,c0)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
! Now do the decoding
 | 
					! Now do the decoding
 | 
				
			||||||
  nutc=0
 | 
					  nutc=0
 | 
				
			||||||
 | 
					  kstep=nsps/2
 | 
				
			||||||
  tstep=kstep/12000.0
 | 
					  tstep=kstep/12000.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ntol=500
 | 
					 | 
				
			||||||
  nfqso=1500
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
! Get sync, approx freq
 | 
					! Get sync, approx freq
 | 
				
			||||||
  call sync9(ss,tstep,df3,ntol,nfqso,sync,fpk,red)
 | 
					  call sync9(ss,tstep,df3,ntol,nfqso,sync,fpk,red)
 | 
				
			||||||
  npts8=170880                                        !### TEST ONLY ###
 | 
					  print*,'A',nfqso,ntol,fpk
 | 
				
			||||||
  call spec9(c0,npts8,nsps,fpk,xdt,i1SoftSymbols)
 | 
					  call spec9(c0,npts8,nsps,fpk,xdt,i1SoftSymbols)
 | 
				
			||||||
  call decode9(i1SoftSymbols,msg)
 | 
					  call decode9(i1SoftSymbols,msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  open(73,file='decoded.txt',status='unknown')
 | 
					  open(13,file='decoded.txt',status='unknown')
 | 
				
			||||||
  rewind 73
 | 
					  rewind 13
 | 
				
			||||||
!  write(*,1010) nutc,sync,xdt,1000.0+fpk,msg
 | 
					!  write(*,1010) nutc,sync,xdt,1000.0+fpk,msg
 | 
				
			||||||
  write(73,1010) nutc,sync,xdt,1000.0+fpk,msg
 | 
					  write(13,1010) nutc,sync,xdt,1000.0+fpk,msg
 | 
				
			||||||
1010 format(i4.4,3f7.1,2x,a22)
 | 
					1010 format(i4.4,3f7.1,2x,a22)
 | 
				
			||||||
  call flush(73)
 | 
					  call flush(13)
 | 
				
			||||||
  close(73)
 | 
					  close(13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return
 | 
					  return
 | 
				
			||||||
end subroutine decoder
 | 
					end subroutine decoder
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ subroutine spec9(c0,npts8,nsps,fpk,xdt,i1SoftSymbols)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  parameter (MAXFFT=31500)
 | 
					  parameter (MAXFFT=31500)
 | 
				
			||||||
  complex c0(0:npts8-1)
 | 
					  complex c0(0:npts8-1)
 | 
				
			||||||
 | 
					  complex c1(0:2700000)
 | 
				
			||||||
  real ssym(0:7,69)
 | 
					  real ssym(0:7,69)
 | 
				
			||||||
  complex c(0:MAXFFT-1)
 | 
					  complex c(0:MAXFFT-1)
 | 
				
			||||||
  integer*1 i1SoftSymbolsScrambled(207)
 | 
					  integer*1 i1SoftSymbolsScrambled(207)
 | 
				
			||||||
@ -27,17 +28,17 @@ subroutine spec9(c0,npts8,nsps,fpk,xdt,i1SoftSymbols)
 | 
				
			|||||||
     phi=phi+dphi
 | 
					     phi=phi+dphi
 | 
				
			||||||
     if(phi.gt.twopi) phi=phi-twopi
 | 
					     if(phi.gt.twopi) phi=phi-twopi
 | 
				
			||||||
     if(phi.lt.-twopi) phi=phi+twopi
 | 
					     if(phi.lt.-twopi) phi=phi+twopi
 | 
				
			||||||
     c0(i)=cmplx(aimag(c0(i)),real(c0(i)))*cmplx(cos(phi),sin(phi))
 | 
					     c1(i)=cmplx(aimag(c0(i)),real(c0(i)))*cmplx(cos(phi),sin(phi))
 | 
				
			||||||
  enddo
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  nsps8=nsps/8
 | 
					  nsps8=nsps/8
 | 
				
			||||||
  foffset=fpk
 | 
					  foffset=fpk
 | 
				
			||||||
  istart=1520
 | 
					  istart=1520
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  call peakdf9(c0,npts8,nsps8,istart,foffset,idf)
 | 
					  call peakdf9(c1,npts8,nsps8,istart,foffset,idf)
 | 
				
			||||||
  fpk=fpk + idf*0.1*1500.0/nsps8
 | 
					  fpk=fpk + idf*0.1*1500.0/nsps8
 | 
				
			||||||
  foffset=foffset + idf*0.1*1500.0/nsps8
 | 
					  foffset=foffset + idf*0.1*1500.0/nsps8
 | 
				
			||||||
  call peakdt9(c0,npts8,nsps8,istart,foffset,idt)
 | 
					  call peakdt9(c1,npts8,nsps8,istart,foffset,idt)
 | 
				
			||||||
  istart=istart + 0.0625*nsps8*idt
 | 
					  istart=istart + 0.0625*nsps8*idt
 | 
				
			||||||
  xdt=istart/1500.0 - 1.0
 | 
					  xdt=istart/1500.0 - 1.0
 | 
				
			||||||
!  write(*,3002)  0.0625*nsps8*idt/1500.0,idf*0.1*1500.0/nsps8
 | 
					!  write(*,3002)  0.0625*nsps8*idt/1500.0,idf*0.1*1500.0/nsps8
 | 
				
			||||||
@ -57,7 +58,7 @@ subroutine spec9(c0,npts8,nsps,fpk,xdt,i1SoftSymbols)
 | 
				
			|||||||
     k=k+1
 | 
					     k=k+1
 | 
				
			||||||
     ia=(j-1)*nsps8 + istart
 | 
					     ia=(j-1)*nsps8 + istart
 | 
				
			||||||
     ib=ia+nsps8-1
 | 
					     ib=ia+nsps8-1
 | 
				
			||||||
     c(0:nfft-1)=c0(ia:ib)
 | 
					     c(0:nfft-1)=c1(ia:ib)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     phi=0.
 | 
					     phi=0.
 | 
				
			||||||
     do i=0,nfft-1
 | 
					     do i=0,nfft-1
 | 
				
			||||||
 | 
				
			|||||||
@ -37,7 +37,7 @@ subroutine symspec(k,ntrperiod,nsps,nb,nbslider,pxdb,s,red,    &
 | 
				
			|||||||
  data rms/999.0/,k0/99999999/,ntrperiod0/0/,nfft3z/0/
 | 
					  data rms/999.0/,k0/99999999/,ntrperiod0/0/,nfft3z/0/
 | 
				
			||||||
  save
 | 
					  save
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(ntrperiod.eq.1)  nfft3=1024
 | 
					  if(ntrperiod.eq.1)  nfft3=2048
 | 
				
			||||||
  if(ntrperiod.eq.2)  nfft3=2048
 | 
					  if(ntrperiod.eq.2)  nfft3=2048
 | 
				
			||||||
  if(ntrperiod.eq.5)  nfft3=6144
 | 
					  if(ntrperiod.eq.5)  nfft3=6144
 | 
				
			||||||
  if(ntrperiod.eq.10) nfft3=12288
 | 
					  if(ntrperiod.eq.10) nfft3=12288
 | 
				
			||||||
 | 
				
			|||||||
@ -373,9 +373,9 @@ void MainWindow::dataSink(int k)
 | 
				
			|||||||
    ntr0=ntr;
 | 
					    ntr0=ntr;
 | 
				
			||||||
    n=0;
 | 
					    n=0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if(ihsym == m_hsymStop) {
 | 
					  // This is a bit strange.  Why do we need the "-3" ??
 | 
				
			||||||
    jt9com_.newdat=1;
 | 
					  if(ihsym == m_hsymStop-3) {
 | 
				
			||||||
    jt9com_.nagain=0;
 | 
					    jt9com_.npts8=(ihsym*m_nsps)/16;
 | 
				
			||||||
    QDateTime t = QDateTime::currentDateTimeUtc();
 | 
					    QDateTime t = QDateTime::currentDateTimeUtc();
 | 
				
			||||||
    m_dateTime=t.toString("yyyy-MMM-dd hh:mm");
 | 
					    m_dateTime=t.toString("yyyy-MMM-dd hh:mm");
 | 
				
			||||||
    decode();                                           //Start the decoder
 | 
					    decode();                                           //Start the decoder
 | 
				
			||||||
@ -509,19 +509,17 @@ void MainWindow::keyPressEvent( QKeyEvent *e )                //keyPressEvent
 | 
				
			|||||||
  case Qt::Key_F11:
 | 
					  case Qt::Key_F11:
 | 
				
			||||||
    if(e->modifiers() & Qt::ShiftModifier) {
 | 
					    if(e->modifiers() & Qt::ShiftModifier) {
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      int n0=g_pWideGraph->DF();
 | 
					      int n=g_pWideGraph->QSOfreq();
 | 
				
			||||||
      int n=(n0 + 10000) % 5;
 | 
					      n--;
 | 
				
			||||||
      if(n==0) n=5;
 | 
					      g_pWideGraph->setQSOfreq(n);
 | 
				
			||||||
      g_pWideGraph->setDF(n0-n);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    break;
 | 
					    break;
 | 
				
			||||||
  case Qt::Key_F12:
 | 
					  case Qt::Key_F12:
 | 
				
			||||||
    if(e->modifiers() & Qt::ShiftModifier) {
 | 
					    if(e->modifiers() & Qt::ShiftModifier) {
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      int n0=g_pWideGraph->DF();
 | 
					      int n=g_pWideGraph->QSOfreq();
 | 
				
			||||||
      int n=(n0 + 10000) % 5;
 | 
					      n++;
 | 
				
			||||||
      if(n==0) n=5;
 | 
					      g_pWideGraph->setQSOfreq(n);
 | 
				
			||||||
      g_pWideGraph->setDF(n0+n);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    break;
 | 
					    break;
 | 
				
			||||||
  case Qt::Key_G:
 | 
					  case Qt::Key_G:
 | 
				
			||||||
@ -726,10 +724,12 @@ void MainWindow::on_actionDecode_remaining_files_in_directory_triggered()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void MainWindow::diskDat()                                   //diskDat()
 | 
					void MainWindow::diskDat()                                   //diskDat()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  int k;
 | 
				
			||||||
  int kstep=m_nsps/2;
 | 
					  int kstep=m_nsps/2;
 | 
				
			||||||
  m_diskData=true;
 | 
					  m_diskData=true;
 | 
				
			||||||
  for(int n=1; n<=m_hsymStop; n++) {              // Do the half-symbol FFTs
 | 
					  for(int n=1; n<=m_hsymStop; n++) {              // Do the half-symbol FFTs
 | 
				
			||||||
    int k=(n+1)*kstep;
 | 
					    k=(n+1)*kstep;
 | 
				
			||||||
 | 
					    jt9com_.npts8=k/8;
 | 
				
			||||||
    dataSink(k);
 | 
					    dataSink(k);
 | 
				
			||||||
    if(n%10 == 1 or n == m_hsymStop) qApp->processEvents();   //Keep GUI responsive
 | 
					    if(n%10 == 1 or n == m_hsymStop) qApp->processEvents();   //Keep GUI responsive
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -831,12 +831,16 @@ void MainWindow::on_DecodeButton_clicked()                    //Decode request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void MainWindow::freezeDecode(int n)                          //freezeDecode()
 | 
					void MainWindow::freezeDecode(int n)                          //freezeDecode()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  decode();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::decode()                                       //decode()
 | 
					void MainWindow::decode()                                       //decode()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  m_len1=80;
 | 
					  jt9com_.newdat=1;
 | 
				
			||||||
 | 
					  jt9com_.nagain=0;
 | 
				
			||||||
 | 
					  jt9com_.nfqso=g_pWideGraph->QSOfreq();
 | 
				
			||||||
 | 
					  m_tol=g_pWideGraph->Tol();
 | 
				
			||||||
 | 
					  jt9com_.ntol=m_tol;
 | 
				
			||||||
  *future3 = QtConcurrent::run(decoder_, &m_TRperiod, &c0[0]);
 | 
					  *future3 = QtConcurrent::run(decoder_, &m_TRperiod, &c0[0]);
 | 
				
			||||||
  watcher3->setFuture(*future3);
 | 
					  watcher3->setFuture(*future3);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -136,6 +136,7 @@ private:
 | 
				
			|||||||
    qint32  m_nsps;
 | 
					    qint32  m_nsps;
 | 
				
			||||||
    qint32  m_hsymStop;
 | 
					    qint32  m_hsymStop;
 | 
				
			||||||
    qint32  m_len1;
 | 
					    qint32  m_len1;
 | 
				
			||||||
 | 
					    qint32  m_fQSO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool    m_monitoring;
 | 
					    bool    m_monitoring;
 | 
				
			||||||
    bool    m_transmitting;
 | 
					    bool    m_transmitting;
 | 
				
			||||||
 | 
				
			|||||||
@ -66,7 +66,7 @@
 | 
				
			|||||||
        </size>
 | 
					        </size>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
       <property name="title">
 | 
					       <property name="title">
 | 
				
			||||||
        <string>         UTC              T                dB                DF</string>
 | 
					        <string>      UTC              T                dB          Freq</string>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
       <layout class="QVBoxLayout" name="verticalLayout_9">
 | 
					       <layout class="QVBoxLayout" name="verticalLayout_9">
 | 
				
			||||||
        <item>
 | 
					        <item>
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@ CPlotter::CPlotter(QWidget *parent) :                  //CPlotter Constructor
 | 
				
			|||||||
  m_ScalePixmap = QPixmap(0,0);
 | 
					  m_ScalePixmap = QPixmap(0,0);
 | 
				
			||||||
  m_OverlayPixmap = QPixmap(0,0);
 | 
					  m_OverlayPixmap = QPixmap(0,0);
 | 
				
			||||||
  m_Size = QSize(0,0);
 | 
					  m_Size = QSize(0,0);
 | 
				
			||||||
  m_fQSO = 1050;
 | 
					  m_fQSO = 1020;
 | 
				
			||||||
  m_line = 0;
 | 
					  m_line = 0;
 | 
				
			||||||
  m_fSample = 12000;
 | 
					  m_fSample = 12000;
 | 
				
			||||||
  m_nsps=6912;
 | 
					  m_nsps=6912;
 | 
				
			||||||
@ -296,7 +296,7 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QPen pen0(Qt::green, 3);                 //Mark Cal Freq with green tick
 | 
					  QPen pen0(Qt::green, 3);                 //Mark QSO Freq with green tick
 | 
				
			||||||
  painter0.setPen(pen0);
 | 
					  painter0.setPen(pen0);
 | 
				
			||||||
  x = m_xClick;
 | 
					  x = m_xClick;
 | 
				
			||||||
  painter0.drawLine(x,15,x,30);
 | 
					  painter0.drawLine(x,15,x,30);
 | 
				
			||||||
@ -407,6 +407,7 @@ void CPlotter::setFQSO(int x, bool bf)                       //setFQSO()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  if(bf) {
 | 
					  if(bf) {
 | 
				
			||||||
    m_fQSO=x;         // x is freq in kHz
 | 
					    m_fQSO=x;         // x is freq in kHz
 | 
				
			||||||
 | 
					    m_xClick=XfromFreq(m_fQSO);
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    if(x<0) x=0;      // x is pixel number
 | 
					    if(x<0) x=0;      // x is pixel number
 | 
				
			||||||
    if(x>m_Size.width()) x=m_Size.width();
 | 
					    if(x>m_Size.width()) x=m_Size.width();
 | 
				
			||||||
@ -564,7 +565,7 @@ double CPlotter::fGreen()
 | 
				
			|||||||
void CPlotter::setNsps(int n)                                  //setNSpan()
 | 
					void CPlotter::setNsps(int n)                                  //setNSpan()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  m_nsps=n;
 | 
					  m_nsps=n;
 | 
				
			||||||
  m_fftBinWidth=1500.0/1024.0;
 | 
					  m_fftBinWidth=1500.0/2048.0;
 | 
				
			||||||
  if(m_nsps==15360)  m_fftBinWidth=1500.0/2048.0;
 | 
					  if(m_nsps==15360)  m_fftBinWidth=1500.0/2048.0;
 | 
				
			||||||
  if(m_nsps==40960)  m_fftBinWidth=1500.0/6144.0;
 | 
					  if(m_nsps==40960)  m_fftBinWidth=1500.0/6144.0;
 | 
				
			||||||
  if(m_nsps==82944)  m_fftBinWidth=1500.0/12288.0;
 | 
					  if(m_nsps==82944)  m_fftBinWidth=1500.0/12288.0;
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@ extern struct {
 | 
				
			|||||||
  int mousefqso;                    //User-selected QSO freq (kHz)
 | 
					  int mousefqso;                    //User-selected QSO freq (kHz)
 | 
				
			||||||
  int nagain;                       //1 ==> decode only at fQSO +/- Tol
 | 
					  int nagain;                       //1 ==> decode only at fQSO +/- Tol
 | 
				
			||||||
  int newdat;                       //1 ==> new data, must do long FFT
 | 
					  int newdat;                       //1 ==> new data, must do long FFT
 | 
				
			||||||
  int nfa;                          //Low decode limit (kHz)
 | 
					  int npts8;                        //npts in c0() array
 | 
				
			||||||
  int nfb;                          //High decode limit (kHz)
 | 
					  int nfb;                          //High decode limit (kHz)
 | 
				
			||||||
  int ntol;                         //+/- decoding range around fQSO (Hz)
 | 
					  int ntol;                         //+/- decoding range around fQSO (Hz)
 | 
				
			||||||
  int kin;
 | 
					  int kin;
 | 
				
			||||||
 | 
				
			|||||||
@ -183,6 +183,12 @@ void WideGraph::keyPressEvent(QKeyEvent *e)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WideGraph::setQSOfreq(int n)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  m_qsoFreq=n;
 | 
				
			||||||
 | 
					  ui->widePlot->setFQSO(m_qsoFreq,true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int WideGraph::QSOfreq()
 | 
					int WideGraph::QSOfreq()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  return ui->widePlot->fQSO();
 | 
					  return ui->widePlot->fQSO();
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  void   dataSink2(float s[], float red[], float df3, int ihsym,
 | 
					  void   dataSink2(float s[], float red[], float df3, int ihsym,
 | 
				
			||||||
                   int ndiskdata, uchar lstrong[]);
 | 
					                   int ndiskdata, uchar lstrong[]);
 | 
				
			||||||
 | 
					  void   setQSOfreq(int n);
 | 
				
			||||||
  int    QSOfreq();
 | 
					  int    QSOfreq();
 | 
				
			||||||
  int    nSpan();
 | 
					  int    nSpan();
 | 
				
			||||||
  int    nStartFreq();
 | 
					  int    nStartFreq();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user