Initial experimentation
This commit is contained in:
		
							parent
							
								
									feeb6540a7
								
							
						
					
					
						commit
						56d457a056
					
				| @ -58,6 +58,7 @@ qint64 Detector::writeData (char const * data, qint64 maxSize) | |||||||
| { | { | ||||||
|   int ns=secondInPeriod(); |   int ns=secondInPeriod(); | ||||||
|   if(ns < m_ns) {                      // When ns has wrapped around to zero, restart the buffers
 |   if(ns < m_ns) {                      // When ns has wrapped around to zero, restart the buffers
 | ||||||
|  |     dec_data.params.kpos = 0; | ||||||
|     dec_data.params.kin = 0; |     dec_data.params.kin = 0; | ||||||
|     m_bufferPos = 0; |     m_bufferPos = 0; | ||||||
|   } |   } | ||||||
| @ -117,8 +118,6 @@ qint64 Detector::writeData (char const * data, qint64 maxSize) | |||||||
|       remaining -= numFramesProcessed; |       remaining -= numFramesProcessed; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   return maxSize;    // we drop any data past the end of the buffer on
 |   return maxSize;    // we drop any data past the end of the buffer on
 | ||||||
|   // the floor until the next period starts
 |   // the floor until the next period starts
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -69,6 +69,7 @@ extern struct dec_data { | |||||||
|   float ss[184*NSMAX]; // symbol spectra
 |   float ss[184*NSMAX]; // symbol spectra
 | ||||||
|   float savg[NSMAX]; |   float savg[NSMAX]; | ||||||
|   float sred[5760]; |   float sred[5760]; | ||||||
|  |   short int d1[NTMAX*RX_SAMPLE_RATE]; // sample frame buffer
 | ||||||
|   short int d2[NTMAX*RX_SAMPLE_RATE]; // sample frame buffer
 |   short int d2[NTMAX*RX_SAMPLE_RATE]; // sample frame buffer
 | ||||||
|   struct |   struct | ||||||
|   { |   { | ||||||
| @ -85,7 +86,9 @@ extern struct dec_data { | |||||||
|     int nfSplit;                //JT65 | JT9 split frequency
 |     int nfSplit;                //JT65 | JT9 split frequency
 | ||||||
|     int nfb;                    //High decode limit (Hz)
 |     int nfb;                    //High decode limit (Hz)
 | ||||||
|     int ntol;                   //+/- decoding range around fQSO (Hz)
 |     int ntol;                   //+/- decoding range around fQSO (Hz)
 | ||||||
|     int kin; |     int knum;                   // maximum number of frames per period in d2
 | ||||||
|  |     int kpos;                   // number of frames already processed in d2
 | ||||||
|  |     int kin;                    // number of frames available in d2
 | ||||||
|     int nzhsym; |     int nzhsym; | ||||||
|     int nsubmode; |     int nsubmode; | ||||||
|     bool nagain; |     bool nagain; | ||||||
|  | |||||||
| @ -61,7 +61,7 @@ subroutine jt9a() | |||||||
|   local_params=shared_data%params !save a copy because wsjtx carries on accessing |   local_params=shared_data%params !save a copy because wsjtx carries on accessing | ||||||
|   call flush(6) |   call flush(6) | ||||||
|   call timer('decoder ',0) |   call timer('decoder ',0) | ||||||
|   call multimode_decoder(shared_data%ss,shared_data%id2,local_params,12000) |   call multimode_decoder(shared_data%ss,shared_data%id1,local_params,12000) | ||||||
|   call timer('decoder ',1) |   call timer('decoder ',1) | ||||||
| 
 | 
 | ||||||
| 100 inquire(file=trim(temp_dir)//'/.lock',exist=fileExists) | 100 inquire(file=trim(temp_dir)//'/.lock',exist=fileExists) | ||||||
|  | |||||||
| @ -18,6 +18,8 @@ | |||||||
|      integer(c_int) :: nfsplit |      integer(c_int) :: nfsplit | ||||||
|      integer(c_int) :: nfb |      integer(c_int) :: nfb | ||||||
|      integer(c_int) :: ntol |      integer(c_int) :: ntol | ||||||
|  |      integer(c_int) :: knum | ||||||
|  |      integer(c_int) :: kpos | ||||||
|      integer(c_int) :: kin |      integer(c_int) :: kin | ||||||
|      integer(c_int) :: nzhsym |      integer(c_int) :: nzhsym | ||||||
|      integer(c_int) :: nsubmode |      integer(c_int) :: nsubmode | ||||||
| @ -52,6 +54,7 @@ | |||||||
|      real(c_float) :: ss(184,NSMAX) |      real(c_float) :: ss(184,NSMAX) | ||||||
|      real(c_float) :: savg(NSMAX) |      real(c_float) :: savg(NSMAX) | ||||||
|      real(c_float) :: sred(5760) |      real(c_float) :: sred(5760) | ||||||
|  |      integer(c_short) :: id1(NMAX) | ||||||
|      integer(c_short) :: id2(NMAX) |      integer(c_short) :: id2(NMAX) | ||||||
|      type(params_block) :: params |      type(params_block) :: params | ||||||
|   end type dec_data |   end type dec_data | ||||||
|  | |||||||
| @ -2,12 +2,13 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s,   & | |||||||
|      df3,ihsym,npts8,pxdbmax) |      df3,ihsym,npts8,pxdbmax) | ||||||
| 
 | 
 | ||||||
| ! Input: | ! Input: | ||||||
| !  k         pointer to the most recent new data | !  shared_data  pointer to the most recent new data | ||||||
| !  ntrperiod T/R sequence length, minutes | !  k            frames in that data | ||||||
| !  nsps      samples per symbol, at 12000 Hz | !  ntrperiod    T/R sequence length, minutes | ||||||
| !  ndiskdat  0/1 to indicate if data from disk | !  nsps         samples per symbol, at 12000 Hz | ||||||
| !  nb        0/1 status of noise blanker (off/on) | !  ndiskdat     0/1 to indicate if data from disk | ||||||
| !  nbslider  NB setting, 0-100 | !  nb           0/1 status of noise blanker (off/on) | ||||||
|  | !  nbslider     NB setting, 0-100 | ||||||
| 
 | 
 | ||||||
| ! Output: | ! Output: | ||||||
| !  pxdb      raw power (0-90 dB) | !  pxdb      raw power (0-90 dB) | ||||||
|  | |||||||
| @ -2496,9 +2496,9 @@ void MainWindow::dataSink(qint64 frames) | |||||||
|     int nsps=m_nsps; |     int nsps=m_nsps; | ||||||
|     int nsmo=m_wideGraph->smoothYellow()-1; |     int nsmo=m_wideGraph->smoothYellow()-1; | ||||||
|     symspec_(&dec_data,&k,&trmin,&nsps,&m_inGain,&nsmo,&m_px,s,&m_df3,&m_ihsym,&m_npts8,&m_pxmax); |     symspec_(&dec_data,&k,&trmin,&nsps,&m_inGain,&nsmo,&m_px,s,&m_df3,&m_ihsym,&m_npts8,&m_pxmax); | ||||||
| 
 |     qDebug() << "dataSink" << k << "ihsym" << m_ihsym; | ||||||
|     if(m_mode=="WSPR") wspr_downsample_(dec_data.d2,&k); |  | ||||||
|     if(m_ihsym <=0) return; |     if(m_ihsym <=0) return; | ||||||
|  | 
 | ||||||
|     if(ui) ui->signal_meter_widget->setValue(m_px,m_pxmax); // Update thermometer
 |     if(ui) ui->signal_meter_widget->setValue(m_px,m_pxmax); // Update thermometer
 | ||||||
|     if(m_monitoring || m_diskData) { |     if(m_monitoring || m_diskData) { | ||||||
|       m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); |       m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); | ||||||
| @ -2519,27 +2519,43 @@ void MainWindow::dataSink(qint64 frames) | |||||||
|     int submode = m_nSubMode; |     int submode = m_nSubMode; | ||||||
|     int period = m_TRperiod; |     int period = m_TRperiod; | ||||||
|     qint32 halfSymbolStop = m_hsymStop; |     qint32 halfSymbolStop = m_hsymStop; | ||||||
|     bool newDataReady = m_ihsym == m_hsymStop; |     //bool newDataReady = m_ihsym == m_hsymStop;
 | ||||||
|  |     bool newDataReady = m_ihsym % m_hsymStop == 0; | ||||||
| 
 | 
 | ||||||
| #if 0 | #if 0 | ||||||
|     if(m_nSubMode == Varicode::JS8CallNormal) |     static int lastn = 0; | ||||||
|  |     int n = now.time().second(); | ||||||
|  | 
 | ||||||
|  |     if(!m_decoderBusy) // m_nSubMode == Varicode::JS8CallNormal)
 | ||||||
|     { |     { | ||||||
|         int n = now.time().second(); |  | ||||||
| #if 0 | #if 0 | ||||||
|         if(n % JS8A_TX_SECONDS == 0){ |         if(lastn != n && n % JS8A_TX_SECONDS == 0){ | ||||||
|             qDebug() << "could decode normal now" << n; |             qDebug() << "could decode normal now" << n; | ||||||
|  |             period = JS8A_TX_SECONDS; | ||||||
|  |             submode = Varicode::JS8CallNormal; | ||||||
|  |             newDataReady = true; | ||||||
|  |             m_hsymStop = m_ihsym; | ||||||
|         } |         } | ||||||
|         if(n % JS8B_TX_SECONDS == 0){ |         if(lastn != n && n % JS8B_TX_SECONDS == 0){ | ||||||
|             qDebug() << "could decode fast now" << n; |             qDebug() << "could decode fast now" << n; | ||||||
|  |             period = JS8B_TX_SECONDS; | ||||||
|  |             submode = Varicode::JS8CallFast; | ||||||
|  |             newDataReady = true; | ||||||
|  |             m_hsymStop = m_ihsym; | ||||||
|         } |         } | ||||||
|         if(n % JS8C_TX_SECONDS == 0){ |         if(lastn != n && n % JS8C_TX_SECONDS == 0){ | ||||||
|             qDebug() << "could decode turbo now" << n; |             qDebug() << "could decode turbo now" << n; | ||||||
|  |             period = JS8C_TX_SECONDS; | ||||||
|  |             submode = Varicode::JS8CallTurbo; | ||||||
|  |             newDataReady = true; | ||||||
|  |             m_hsymStop = m_ihsym; | ||||||
|         } |         } | ||||||
|  |         lastn = n; | ||||||
| #endif | #endif | ||||||
| #if 0 | #if 0 | ||||||
|         qint32 hsymNormalStop = ((int(JS8A_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288
 |         qint32 hsymNormalStop = ((int(JS8A_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288
 | ||||||
|         qint32 hsymFastStop = ((int(JS8B_TX_SECONDS/0.288))/8)*8 - 1;   // 0.288 because 6912/12000/2 = 0.288
 |         qint32 hsymFastStop   = ((int(JS8B_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288
 | ||||||
|         qint32 hsymTurboStop = ((int(JS8C_TX_SECONDS/0.288))/8)*8 - 1;  // 0.288 because 6912/12000/2 = 0.288
 |         qint32 hsymTurboStop  = ((int(JS8C_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288
 | ||||||
|         if(m_ihsym % hsymNormalStop == 0){ |         if(m_ihsym % hsymNormalStop == 0){ | ||||||
|             period = JS8A_TX_SECONDS; |             period = JS8A_TX_SECONDS; | ||||||
|             submode = Varicode::JS8CallNormal; |             submode = Varicode::JS8CallNormal; | ||||||
| @ -2575,12 +2591,19 @@ void MainWindow::dataSink(qint64 frames) | |||||||
|     dec_data.params.newdat=1; |     dec_data.params.newdat=1; | ||||||
|     dec_data.params.nagain=0; |     dec_data.params.nagain=0; | ||||||
|     dec_data.params.nzhsym=halfSymbolStop; |     dec_data.params.nzhsym=halfSymbolStop; | ||||||
|  |     dec_data.params.knum=period * RX_SAMPLE_RATE; | ||||||
|     m_dateTime = now.toString ("yyyy-MMM-dd hh:mm"); |     m_dateTime = now.toString ("yyyy-MMM-dd hh:mm"); | ||||||
| 
 | 
 | ||||||
|     //qDebug() << now << "half symbol" << m_ihsym << "stop symbol" << m_hsymStop;
 |     //qDebug() << now << "half symbol" << m_ihsym << "stop symbol" << m_hsymStop;
 | ||||||
| 
 | 
 | ||||||
|     if(!m_mode.startsWith ("WSPR")){ |     if(!m_mode.startsWith ("WSPR")){ | ||||||
|  | #if 1 | ||||||
|         decode(submode, period); //Start decoder
 |         decode(submode, period); //Start decoder
 | ||||||
|  | #else | ||||||
|  |         if(n % JS8A_TX_SECONDS == 0) decode(Varicode::JS8CallNormal, JS8A_TX_SECONDS); | ||||||
|  |         if(n % JS8B_TX_SECONDS == 0) decode(Varicode::JS8CallFast, JS8B_TX_SECONDS); | ||||||
|  |         if(n % JS8C_TX_SECONDS == 0) decode(Varicode::JS8CallTurbo, JS8C_TX_SECONDS); | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(!m_diskData) {                        //Always save; may delete later
 |     if(!m_diskData) {                        //Always save; may delete later
 | ||||||
| @ -3888,6 +3911,7 @@ void MainWindow::decode(int submode, int period) | |||||||
| 
 | 
 | ||||||
|   m_msec0=DriftingDateTime::currentMSecsSinceEpoch(); |   m_msec0=DriftingDateTime::currentMSecsSinceEpoch(); | ||||||
|   if(!m_dataAvailable or m_TRperiod==0) return; |   if(!m_dataAvailable or m_TRperiod==0) return; | ||||||
|  | 
 | ||||||
|   ui->DecodeButton->setChecked (true); |   ui->DecodeButton->setChecked (true); | ||||||
|   if(dec_data.params.nagain==0 && dec_data.params.newdat==1 && (!m_diskData)) { |   if(dec_data.params.nagain==0 && dec_data.params.newdat==1 && (!m_diskData)) { | ||||||
|     qint64 ms = DriftingDateTime::currentMSecsSinceEpoch() % 86400000; |     qint64 ms = DriftingDateTime::currentMSecsSinceEpoch() % 86400000; | ||||||
| @ -3903,6 +3927,11 @@ void MainWindow::decode(int submode, int period) | |||||||
|       int isec=t.toString("ss").toInt(); |       int isec=t.toString("ss").toInt(); | ||||||
|       isec=isec - isec%m_TRperiod; |       isec=isec - isec%m_TRperiod; | ||||||
|       dec_data.params.nutc=10000*ihr + 100*imin + isec; |       dec_data.params.nutc=10000*ihr + 100*imin + isec; | ||||||
|  | 
 | ||||||
|  |       // qint64 now (DriftingDateTime::currentMSecsSinceEpoch ());
 | ||||||
|  |       //unsigned msInPeriod = (ms % (period * 1000));
 | ||||||
|  |       //unsigned frameInPeriod = qMin ((msInPeriod * RX_SAMPLE_RATE) / 1000, static_cast<unsigned> (sizeof (dec_data.d2) / sizeof (dec_data.d2[0])));
 | ||||||
|  |       //dec_data.params.kpos = qMax(0, (period * RX_SAMPLE_RATE));
 | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -3959,7 +3988,7 @@ void MainWindow::decode(int submode, int period) | |||||||
|   if(m_mode=="FT8") dec_data.params.nmode=8; |   if(m_mode=="FT8") dec_data.params.nmode=8; | ||||||
|   if(m_mode=="FT8") dec_data.params.lft8apon = ui->actionEnable_AP_FT8->isVisible () && ui->actionEnable_AP_FT8->isChecked (); |   if(m_mode=="FT8") dec_data.params.lft8apon = ui->actionEnable_AP_FT8->isVisible () && ui->actionEnable_AP_FT8->isChecked (); | ||||||
|   if(m_mode=="FT8") dec_data.params.napwid=50; |   if(m_mode=="FT8") dec_data.params.napwid=50; | ||||||
|   dec_data.params.ntrperiod= period; //m_TRperiod;
 |   dec_data.params.ntrperiod=period; //m_TRperiod;
 | ||||||
|   dec_data.params.nsubmode=submode; // m_nSubMode;
 |   dec_data.params.nsubmode=submode; // m_nSubMode;
 | ||||||
|   if(m_mode=="QRA64") dec_data.params.nsubmode=100 + m_nSubMode; |   if(m_mode=="QRA64") dec_data.params.nsubmode=100 + m_nSubMode; | ||||||
|   dec_data.params.minw=0; |   dec_data.params.minw=0; | ||||||
| @ -3985,6 +4014,8 @@ void MainWindow::decode(int submode, int period) | |||||||
|   strncpy(dec_data.params.hiscall,(hisCall + "            ").toLatin1 ().constData (), 12); |   strncpy(dec_data.params.hiscall,(hisCall + "            ").toLatin1 ().constData (), 12); | ||||||
|   strncpy(dec_data.params.hisgrid,(hisGrid + "      ").toLatin1 ().constData (), 6); |   strncpy(dec_data.params.hisgrid,(hisGrid + "      ").toLatin1 ().constData (), 6); | ||||||
| 
 | 
 | ||||||
|  |   qDebug() << "knum" << dec_data.params.knum << "kpos" << dec_data.params.kpos << "kin" << dec_data.params.kin; | ||||||
|  | 
 | ||||||
|   //newdat=1  ==> this is new data, must do the big FFT
 |   //newdat=1  ==> this is new data, must do the big FFT
 | ||||||
|   //nagain=1  ==> decode only at fQSO +/- Tol
 |   //nagain=1  ==> decode only at fQSO +/- Tol
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jordan Sherer
						Jordan Sherer