mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-25 10:00:23 -04:00 
			
		
		
		
	Clean up some timing issues with time-synchronized FT4.
This commit is contained in:
		
							parent
							
								
									888b5fee28
								
							
						
					
					
						commit
						fd239d9c07
					
				| @ -92,11 +92,9 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, | ||||
|   if (synchronize && !m_tuning && !m_bFastMode)	{ | ||||
|     m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); | ||||
|   } | ||||
|   if((symbolsLength==103 or symbolsLength==105) and framesPerSymbol==512 | ||||
|   if(symbolsLength==105 and framesPerSymbol==512 | ||||
|      and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) { | ||||
| //### FT4 parameters
 | ||||
|     delay_ms=100; | ||||
|     mstr=5000; | ||||
|     m_ic=0; | ||||
|     m_silentFrames=0; | ||||
|   } | ||||
| @ -159,6 +157,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
|   qint16 * end (samples + numFrames * (bytesPerFrame () / sizeof (qint16))); | ||||
|   qint64 framesGenerated (0); | ||||
| 
 | ||||
| //  if(m_ic==0) qDebug() << "Modulator::readData" << 0.001*(QDateTime::currentMSecsSinceEpoch() % (1000*m_TRperiod));
 | ||||
| 
 | ||||
|   switch (m_state) | ||||
|     { | ||||
|     case Synchronizing: | ||||
| @ -180,8 +180,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
|     case Active: | ||||
|       { | ||||
|         unsigned int isym=0; | ||||
| //        qDebug() << "Mod A" << m_toneSpacing << m_frequency << m_nsps
 | ||||
| //                 << m_ic << m_symbolsLength << icw[0];
 | ||||
| 
 | ||||
|         if(!m_tuning) isym=m_ic/(4.0*m_nsps);            // Actual fsample=48000
 | ||||
|         bool slowCwId=((isym >= m_symbolsLength) && (icw[0] > 0)) && (!m_bFastMode); | ||||
|         if(m_TRperiod==3) slowCwId=false; | ||||
| @ -192,6 +191,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
|         if(m_bFastMode and (icw[0]>0) and (tsec>(m_TRperiod-5.0))) fastCwId=true; | ||||
|         if(!m_bFastMode) m_nspd=2560;                 // 22.5 WPM
 | ||||
| 
 | ||||
| //        qDebug() << "Mod A" << m_ic << isym << tsec;
 | ||||
| 
 | ||||
|         if(slowCwId or fastCwId) {     // Transmit CW ID?
 | ||||
|           m_dphi = m_twoPi*m_frequency/m_frameRate; | ||||
|           if(m_bFastMode and !bCwId) { | ||||
| @ -263,10 +264,10 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
|         } | ||||
| 
 | ||||
|         qint16 sample; | ||||
| 
 | ||||
|         for (unsigned i = 0; i < numFrames && m_ic <= i1; ++i) { | ||||
|           isym=0; | ||||
|           if(!m_tuning and m_TRperiod!=3) isym=m_ic / (4.0 * m_nsps);         //Actual
 | ||||
|                                                                               //fsample=48000
 | ||||
|           if(!m_tuning and m_TRperiod!=3) isym=m_ic/(4.0*m_nsps);   //Actual fsample=48000
 | ||||
|           if(m_bFastMode) isym=isym%m_symbolsLength; | ||||
|           if (isym != m_isym0 || m_frequency != m_frequency0) { | ||||
|             if(itone[0]>=100) { | ||||
| @ -278,8 +279,6 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
|                 m_toneFrequency0=m_frequency + itone[isym]*m_toneSpacing; | ||||
|               } | ||||
|             } | ||||
| //            qDebug() << "Mod B" << m_bFastMode << m_ic << numFrames << isym << itone[isym]
 | ||||
| //                     << m_toneFrequency0 << m_nsps;
 | ||||
|             m_dphi = m_twoPi * m_toneFrequency0 / m_frameRate; | ||||
|             m_isym0 = isym; | ||||
|             m_frequency0 = m_frequency;         //???
 | ||||
| @ -302,10 +301,10 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
|           sample=qRound(m_amp*qSin(m_phi)); | ||||
| 
 | ||||
| //Here's where we transmit from a precomputed wave[] array:
 | ||||
|           if(!m_tuning and (m_toneSpacing < 0)) sample=qRound(m_amp*foxcom_.wave[m_ic]); | ||||
| //          if(m_ic < 10) qDebug() << "Mod Tx" << m_ic << m_amp
 | ||||
| //                                  << foxcom_.wave[m_ic] << sample
 | ||||
| //                                  << m_toneSpacing;
 | ||||
|           if(!m_tuning and (m_toneSpacing < 0)) { | ||||
|             m_amp=32767.0; | ||||
|             sample=qRound(m_amp*foxcom_.wave[m_ic]); | ||||
|           } | ||||
| 
 | ||||
|           samples = load(postProcessSample(sample), samples); | ||||
|           ++framesGenerated; | ||||
| @ -323,8 +322,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) | ||||
| 
 | ||||
|         m_frequency0 = m_frequency; | ||||
| // done for this chunk - continue on next call
 | ||||
| //        qint64 ms1=QDateTime::currentMSecsSinceEpoch() - m_ms0;
 | ||||
| //        if(m_ic>=4*144*160) qDebug() << "Modulator finished" << m_ic << 0.001*ms1;
 | ||||
| 
 | ||||
| //        qDebug() << "Mod B" << m_ic << i1 << 0.001*(QDateTime::currentMSecsSinceEpoch() % (1000*m_TRperiod));
 | ||||
| 
 | ||||
|         while (samples != end)  // pad block with silence
 | ||||
|           { | ||||
|  | ||||
| @ -1331,7 +1331,7 @@ void MainWindow::fixStop() | ||||
|   } else if (m_mode=="FT8") { | ||||
|     m_hsymStop=50; | ||||
|   } else if (m_mode=="FT4") { | ||||
|   m_hsymStop=17; | ||||
|   m_hsymStop=18; | ||||
| } | ||||
| } | ||||
| 
 | ||||
| @ -1340,7 +1340,6 @@ void MainWindow::dataSink(qint64 frames) | ||||
| { | ||||
|   static float s[NSMAX]; | ||||
|   char line[80]; | ||||
| 
 | ||||
|   int k(frames); | ||||
|   QString fname {QDir::toNativeSeparators(m_config.writeable_data_dir ().absoluteFilePath ("refspec.dat"))}; | ||||
|   QByteArray bafname = fname.toLatin1(); | ||||
| @ -3396,7 +3395,7 @@ void MainWindow::guiUpdate() | ||||
| 
 | ||||
|   if(m_TRperiod==0) m_TRperiod=60; | ||||
|   txDuration=0.0; | ||||
|   if(m_modeTx=="FT4")  txDuration=0.25 + 103*512/12000.0;      // FT4
 | ||||
|   if(m_modeTx=="FT4")  txDuration=0.35 + 105*512/12000.0;     // FT4
 | ||||
|   if(m_modeTx=="FT8")  txDuration=1.0 + 79*1920/12000.0;      // FT8
 | ||||
|   if(m_modeTx=="JT4")  txDuration=1.0 + 207.0*2520/11025.0;   // JT4
 | ||||
|   if(m_modeTx=="JT9")  txDuration=1.0 + 85.0*m_nsps/12000.0;  // JT9
 | ||||
| @ -5650,7 +5649,7 @@ void MainWindow::on_actionFT4_triggered() | ||||
|   m_nsps=6912; | ||||
|   m_FFTSize = m_nsps/2; | ||||
|   Q_EMIT FFTSize (m_FFTSize); | ||||
|   m_hsymStop=17; | ||||
|   m_hsymStop=18; | ||||
|   setup_status_bar (bVHF); | ||||
|   m_toneSpacing=12000.0/512.0; | ||||
|   ui->actionFT4->setChecked(true); | ||||
| @ -6787,15 +6786,14 @@ void MainWindow::setFreq4(int rxFreq, int txFreq) | ||||
| 
 | ||||
| void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const& s) | ||||
| { | ||||
|   // qDebug () << "MainWindow::handle_transceiver_update:" << s;
 | ||||
|   Transceiver::TransceiverState old_state {m_rigState}; | ||||
|   //transmitDisplay (s.ptt ());
 | ||||
|   if (s.ptt () && !m_rigState.ptt ()) // safe to start audio
 | ||||
|   if (s.ptt () && !m_rigState.ptt ()) { // safe to start audio
 | ||||
|                                         // (caveat - DX Lab Suite Commander)
 | ||||
|     { | ||||
|       if (m_tx_when_ready && g_iptt) // waiting to Tx and still needed
 | ||||
|         { | ||||
|           ptt1Timer.start(1000 * m_config.txDelay ()); //Start-of-transmission sequencer delay
 | ||||
|     if (m_tx_when_ready && g_iptt) {    // waiting to Tx and still needed
 | ||||
|       int ms_delay=1000*m_config.txDelay(); | ||||
|       if(m_mode=="FT4") ms_delay=20; | ||||
|       ptt1Timer.start(ms_delay); //Start-of-transmission sequencer delay
 | ||||
|     } | ||||
|     m_tx_when_ready = false; | ||||
|   } | ||||
|  | ||||
| @ -46,7 +46,7 @@ | ||||
| #define NUM_MSK144_SYMBOLS 144             //s8 + d48 + s8 + d80
 | ||||
| #define NUM_QRA64_SYMBOLS 84               //63 data + 21 sync
 | ||||
| #define NUM_FT8_SYMBOLS 79 | ||||
| #define NUM_FT4_SYMBOLS 103 | ||||
| #define NUM_FT4_SYMBOLS 105 | ||||
| #define NUM_CW_SYMBOLS 250 | ||||
| #define TX_SAMPLE_RATE 48000 | ||||
| #define N_WIDGETS 33 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user