Continuing spike of turbo decoder in normal mode. Fine test that works

This commit is contained in:
Jordan Sherer 2019-10-29 11:18:43 -04:00
parent 0ca7b0e5ed
commit b351b72037
2 changed files with 47 additions and 16 deletions

View File

@ -2455,24 +2455,32 @@ void MainWindow::setDecodedTextFont (QFont const& font)
void MainWindow::fixStop() void MainWindow::fixStop()
{ {
m_hsymStop = computeStop(m_nSubMode, m_TRperiod);
}
int MainWindow::computeStop(int submode, int period){
int stop = 0;
#if 0 #if 0
m_hsymStop=((int(m_TRperiod/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288 stop=((int(period/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288
if(m_nSubMode == Varicode::JS8CallUltra){ if(submode == Varicode::JS8CallUltra){
m_hsymStop++; stop++;
} }
#elif 0 #elif 0
m_hsymStop = int(m_TRperiod/0.288); stop = int(period/0.288);
#else #else
int symbolSamples = 0; int symbolSamples = 0;
float threshold = 1.0; float threshold = 1.0;
switch(m_nSubMode){ switch(submode){
case Varicode::JS8CallNormal: symbolSamples = JS8A_SYMBOL_SAMPLES; break; case Varicode::JS8CallNormal: symbolSamples = JS8A_SYMBOL_SAMPLES; break;
case Varicode::JS8CallFast: symbolSamples = JS8B_SYMBOL_SAMPLES; break; case Varicode::JS8CallFast: symbolSamples = JS8B_SYMBOL_SAMPLES; break;
case Varicode::JS8CallTurbo: symbolSamples = JS8C_SYMBOL_SAMPLES; break; case Varicode::JS8CallTurbo: symbolSamples = JS8C_SYMBOL_SAMPLES; break;
case Varicode::JS8CallUltra: symbolSamples = JS8D_SYMBOL_SAMPLES; break; case Varicode::JS8CallUltra: symbolSamples = JS8D_SYMBOL_SAMPLES; break;
} }
m_hsymStop = qFloor(float(symbolSamples*JS8_NUM_SYMBOLS + threshold*RX_SAMPLE_RATE)/(float)m_nsps*2.0); stop = qFloor(float(symbolSamples*JS8_NUM_SYMBOLS + threshold*RX_SAMPLE_RATE)/(float)m_nsps*2.0);
#endif #endif
return stop;
} }
//-------------------------------------------------------------- dataSink() //-------------------------------------------------------------- dataSink()
@ -2556,6 +2564,9 @@ void MainWindow::dataSink(qint64 frames)
#if 0 #if 0
static int lastn = 0; static int lastn = 0;
int n = now.time().second(); int n = now.time().second();
// newDataReady = n != lastn;
// lastn = n;
#elif 1
newDataReady = false; newDataReady = false;
if(!m_decoderBusy) // m_nSubMode == Varicode::JS8CallNormal) if(!m_decoderBusy) // m_nSubMode == Varicode::JS8CallNormal)
@ -2584,10 +2595,12 @@ void MainWindow::dataSink(qint64 frames)
m_hsymStop = m_ihsym; m_hsymStop = m_ihsym;
} }
lastn = n; lastn = n;
#elif 0 #elif 1
qint32 hsymNormalStop = ((int(JS8A_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288 int n = now.time().second();
qint32 hsymFastStop = ((int(JS8B_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288 qint32 hsymNormalStop = computeStop(Varicode::JS8CallNormal, JS8A_TX_SECONDS);
qint32 hsymTurboStop = ((int(JS8C_TX_SECONDS/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288 qint32 hsymFastStop = computeStop(Varicode::JS8CallFast, JS8B_TX_SECONDS);
qint32 hsymTurboStop = computeStop(Varicode::JS8CallTurbo, JS8C_TX_SECONDS);
qint32 hsymUltraStop = computeStop(Varicode::JS8CallUltra, JS8D_TX_SECONDS);
/// if(m_ihsym % hsymNormalStop == 0){ /// if(m_ihsym % hsymNormalStop == 0){
/// period = JS8A_TX_SECONDS; /// period = JS8A_TX_SECONDS;
/// submode = Varicode::JS8CallNormal; /// submode = Varicode::JS8CallNormal;
@ -2602,14 +2615,21 @@ void MainWindow::dataSink(qint64 frames)
/// qDebug() << "could decode fast now" << n; /// qDebug() << "could decode fast now" << n;
/// newDataReady = true; /// newDataReady = true;
/// } /// }
if(m_ihsym % hsymTurboStop == 0 || m_ihsym == hsymTurboStop/2-1){ if(m_ihsym % hsymTurboStop == 0){
period = JS8C_TX_SECONDS; period = JS8C_TX_SECONDS;
submode = Varicode::JS8CallTurbo; submode = Varicode::JS8CallTurbo;
dec_data.params.nsz = hsymTurboStop * m_nsps / 2;
halfSymbolStop = hsymTurboStop; halfSymbolStop = hsymTurboStop;
qDebug() << "could decode turbo now" << n; qDebug() << "could decode turbo now" << n;
newDataReady = true; newDataReady = true;
} }
/// if(m_ihsym % hsymUltraStop == 0){
/// period = JS8D_TX_SECONDS;
/// submode = Varicode::JS8CallUltra;
/// halfSymbolStop = hsymFastStop;
/// qDebug() << "could decode ultra now" << n;
/// newDataReady = true;
/// }
dec_data.params.nsz = halfSymbolStop * m_nsps / 2;
#endif #endif
} }
#endif #endif
@ -4053,7 +4073,17 @@ void MainWindow::decode(int submode, int period)
memcpy(dec_data.d1, &dec_data.d2[dec_data.params.kin-periodFrames], periodFrames * sizeof(dec_data.d2[0])); memcpy(dec_data.d1, &dec_data.d2[dec_data.params.kin-periodFrames], periodFrames * sizeof(dec_data.d2[0]));
qDebug() << "try decode from" << (dec_data.params.kin-periodFrames) << "to" << dec_data.params.kin << "with period frames" << periodFrames; qDebug() << "try decode from" << (dec_data.params.kin-periodFrames) << "to" << dec_data.params.kin << "with period frames" << periodFrames;
} }
#elif 1
int neededFrames = dec_data.params.nsz; // m_hsymStop*m_nsps/2;
int start = qMax(0, dec_data.params.kin-neededFrames);
int stop = qMin(start + neededFrames, dec_data.params.kin);
int availableFrames = stop - start;
int missingFrames = neededFrames - availableFrames;
qDebug() << "try decode from" << start << "to" << stop << "available" << availableFrames << "missing" << missingFrames;
memset(dec_data.d1, 0, sizeof(dec_data.d1));
memcpy(dec_data.d1 + missingFrames, dec_data.d2 + start, sizeof(dec_data.d2[0]) * availableFrames);
#else #else
qDebug() << "try decode from" << 0 << "to" << dec_data.params.kin;
memset(dec_data.d1, 0, sizeof(dec_data.d1)); memset(dec_data.d1, 0, sizeof(dec_data.d1));
memcpy(dec_data.d1, dec_data.d2, sizeof(dec_data.d2)); memcpy(dec_data.d1, dec_data.d2, sizeof(dec_data.d2));
#endif #endif
@ -7037,7 +7067,7 @@ void MainWindow::on_actionJS8_triggered()
ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); ui->decodedTextLabel2->setText(" UTC dB DT Freq Message");
m_wideGraph->setPeriod(m_TRperiod,m_nsps); m_wideGraph->setPeriod(m_TRperiod,m_nsps);
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(30); //m_TRperiod); // TODO - not thread safe
ui->label_7->setText("Rx Frequency"); ui->label_7->setText("Rx Frequency");
if(m_config.bFox()) { if(m_config.bFox()) {
ui->label_6->setText("Stations calling DXpedition " + m_config.my_callsign()); ui->label_6->setText("Stations calling DXpedition " + m_config.my_callsign());

View File

@ -925,6 +925,7 @@ private:
void stub(); void stub();
void statusChanged(); void statusChanged();
void fixStop(); void fixStop();
int computeStop(int submode, int period);
bool shortList(QString callsign); bool shortList(QString callsign);
void transmit (double snr = 99.); void transmit (double snr = 99.);
void rigFailure (QString const& reason); void rigFailure (QString const& reason);