Tweaking decoder, ensuring negative values are omitted

This commit is contained in:
Jordan Sherer 2019-11-12 09:34:54 -05:00
parent eada85c04d
commit d0d7aaa286
3 changed files with 29 additions and 53 deletions

View File

@ -88,12 +88,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
trydecode=.true. trydecode=.true.
! copy the relevant frames for decoding ! copy the relevant frames for decoding
pos = params%kposE pos = max(0,params%kposE)
sz = params%kszE sz = max(0,params%kszE)
id0=0 id0=0
id0(1:sz+1)=id2(pos+1:pos+sz+1) id0(1:sz+1)=id2(pos+1:pos+sz+1)
call my_js8e%decode(js8e_decoded,id0,params%nQSOProgress,params%nfqso, & call my_js8e%decode(js8e_decoded,id0,params%nQSOProgress,params%nfqso, &
params%nftx,newdat,params%nutc,params%nfa,params%nfb, & params%nftx,newdat,params%nutc,params%nfa,params%nfb, &
params%nexp_decode,params%ndepth,logical(params%nagain), & params%nexp_decode,params%ndepth,logical(params%nagain), &
logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & logical(params%lft8apon),logical(params%lapcqonly),params%napwid, &
@ -108,12 +108,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
trydecode=.true. trydecode=.true.
! copy the relevant frames for decoding ! copy the relevant frames for decoding
pos = params%kposC pos = max(0,params%kposC)
sz = params%kszC sz = max(0,params%kszC)
id0=0 id0=0
id0(1:sz+1)=id2(pos+1:pos+sz+1) id0(1:sz+1)=id2(pos+1:pos+sz+1)
call my_js8c%decode(js8c_decoded,id0,params%nQSOProgress,params%nfqso, & call my_js8c%decode(js8c_decoded,id0,params%nQSOProgress,params%nfqso, &
params%nftx,newdat,params%nutc,params%nfa,params%nfb, & params%nftx,newdat,params%nutc,params%nfa,params%nfb, &
params%nexp_decode,params%ndepth,logical(params%nagain), & params%nexp_decode,params%ndepth,logical(params%nagain), &
logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & logical(params%lft8apon),logical(params%lapcqonly),params%napwid, &
@ -128,12 +128,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
trydecode=.true. trydecode=.true.
! copy the relevant frames for decoding ! copy the relevant frames for decoding
pos = params%kposB pos = max(0,params%kposB)
sz = params%kszB sz = max(0,params%kszB)
id0=0 id0=0
id0(1:sz+1)=id2(pos+1:pos+sz+1) id0(1:sz+1)=id2(pos+1:pos+sz+1)
call my_js8b%decode(js8b_decoded,id0,params%nQSOProgress,params%nfqso, & call my_js8b%decode(js8b_decoded,id0,params%nQSOProgress,params%nfqso, &
params%nftx,newdat,params%nutc,params%nfa,params%nfb, & params%nftx,newdat,params%nutc,params%nfa,params%nfb, &
params%nexp_decode,params%ndepth,logical(params%nagain), & params%nexp_decode,params%ndepth,logical(params%nagain), &
logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & logical(params%lft8apon),logical(params%lapcqonly),params%napwid, &
@ -148,12 +148,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
trydecode=.true. trydecode=.true.
! copy the relevant frames for decoding ! copy the relevant frames for decoding
pos = params%kposA pos = max(0,params%kposA)
sz = params%kszA sz = max(0,params%kszA)
id0=0 id0=0
id0(1:sz+1)=id2(pos+1:pos+sz+1) id0(1:sz+1)=id2(pos+1:pos+sz+1)
call my_js8a%decode(js8a_decoded,id0,params%nQSOProgress,params%nfqso, & call my_js8a%decode(js8a_decoded,id0,params%nQSOProgress,params%nfqso, &
params%nftx,newdat,params%nutc,params%nfa,params%nfb, & params%nftx,newdat,params%nutc,params%nfa,params%nfb, &
params%nexp_decode,params%ndepth,logical(params%nagain), & params%nexp_decode,params%ndepth,logical(params%nagain), &
logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & logical(params%lft8apon),logical(params%lapcqonly),params%napwid, &

View File

@ -954,7 +954,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
palette.setColor(QPalette::Base,Qt::yellow); palette.setColor(QPalette::Base,Qt::yellow);
ui->sbTxPercent->setPalette(palette); ui->sbTxPercent->setPalette(palette);
} }
fixStop();
VHF_features_enabled(m_config.enable_VHF_features()); VHF_features_enabled(m_config.enable_VHF_features());
m_wideGraph->setVHF(m_config.enable_VHF_features()); m_wideGraph->setVHF(m_config.enable_VHF_features());
@ -2483,11 +2482,6 @@ void MainWindow::setDecodedTextFont (QFont const& font)
updateGeometry (); updateGeometry ();
} }
void MainWindow::fixStop()
{
m_hsymStop = computeStop(m_nSubMode, m_TRperiod);
}
int MainWindow::computePeriodForSubmode(int submode){ int MainWindow::computePeriodForSubmode(int submode){
switch(submode){ switch(submode){
case Varicode::JS8CallNormal: return JS8A_TX_SECONDS; case Varicode::JS8CallNormal: return JS8A_TX_SECONDS;
@ -2589,18 +2583,12 @@ void MainWindow::dataSink(qint64 frames)
k0 = k; k0 = k;
} }
#if JS8_USE_REFSPEC
QString fname {QDir::toNativeSeparators(m_config.writeable_data_dir ().absoluteFilePath ("refspec.dat"))}; QString fname {QDir::toNativeSeparators(m_config.writeable_data_dir ().absoluteFilePath ("refspec.dat"))};
QByteArray bafname = fname.toLatin1(); QByteArray bafname = fname.toLatin1();
const char *c_fname = bafname.data(); const char *c_fname = bafname.data();
int len=fname.length(); int len=fname.length();
if(m_diskData) {
dec_data.params.ndiskdat=1;
} else {
dec_data.params.ndiskdat=0;
}
#if JS8_USE_REFSPEC
m_bUseRef=m_wideGraph->useRef(); m_bUseRef=m_wideGraph->useRef();
refspectrum_(&dec_data.d2[k-m_nsps/2],&m_bClearRefSpec,&m_bRefSpec, refspectrum_(&dec_data.d2[k-m_nsps/2],&m_bClearRefSpec,&m_bRefSpec,
&m_bUseRef,c_fname,len); &m_bUseRef,c_fname,len);
@ -2609,11 +2597,6 @@ void MainWindow::dataSink(qint64 frames)
// Get power, spectrum, and ihsym // Get power, spectrum, and ihsym
int trmin=m_TRperiod/60; int trmin=m_TRperiod/60;
// int k (frames - 1);
dec_data.params.nfa=m_wideGraph->nStartFreq();
dec_data.params.nfb=m_wideGraph->Fmax();
int nsps=m_nsps; int nsps=m_nsps;
int nsmo=m_wideGraph->smoothYellow()-1; int nsmo=m_wideGraph->smoothYellow()-1;
@ -2673,19 +2656,13 @@ void MainWindow::dataSink(qint64 frames)
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);
} }
fixStop();
m_dateTime = DriftingDateTime::currentDateTimeUtc().toString ("yyyy-MMM-dd hh:mm"); m_dateTime = DriftingDateTime::currentDateTimeUtc().toString ("yyyy-MMM-dd hh:mm");
dec_data.params.npts8=(m_ihsym*m_nsps)/16;
dec_data.params.newdat=1;
dec_data.params.nagain=0;
dec_data.params.nzhsym=m_ihsym;
decode(); decode();
} }
@ -3886,6 +3863,7 @@ void MainWindow::diskDat() //diskDat()
int k; int k;
int kstep=m_FFTSize; int kstep=m_FFTSize;
m_diskData=true; m_diskData=true;
m_hsymStop=computeStop(m_nSubMode, m_TRperiod);
float db=m_config.degrade(); float db=m_config.degrade();
float bw=m_config.RxBandwidth(); float bw=m_config.RxBandwidth();
if(db > 0.0) degrade_snr_(dec_data.d2,&dec_data.params.kin,&db,&bw); if(db > 0.0) degrade_snr_(dec_data.d2,&dec_data.params.kin,&db,&bw);
@ -3944,20 +3922,6 @@ void MainWindow::on_actionSpecial_mouse_commands_triggered()
{ {
} }
void MainWindow::on_DecodeButton_clicked (bool /* checked */) //Decode request
{
if(m_mode=="MSK144") {
ui->DecodeButton->setChecked(false);
} else {
if(!m_mode.startsWith ("WSPR") && !m_decoderBusy) {
dec_data.params.newdat=0;
dec_data.params.nagain=1;
m_blankLine=false; // don't insert the separator again
decode();
}
}
}
void MainWindow::on_ClrAvgButton_clicked() void MainWindow::on_ClrAvgButton_clicked()
{ {
m_nclearave=1; m_nclearave=1;
@ -4206,6 +4170,20 @@ bool MainWindow::decodeProcessQueue(qint32 *pSubmode){
int period = computePeriodForSubmode(submode); int period = computePeriodForSubmode(submode);
if(m_diskData) {
dec_data.params.ndiskdat=1;
} else {
dec_data.params.ndiskdat=0;
}
dec_data.params.npts8=(m_ihsym*m_nsps)/16;
dec_data.params.newdat=1;
dec_data.params.nagain=0;
dec_data.params.nzhsym=m_ihsym;
dec_data.params.nfa=m_wideGraph->nStartFreq();
dec_data.params.nfb=m_wideGraph->Fmax();
ui->DecodeButton->setChecked(true); ui->DecodeButton->setChecked(true);
m_msec0 = DriftingDateTime::currentMSecsSinceEpoch(); m_msec0 = DriftingDateTime::currentMSecsSinceEpoch();
@ -7356,7 +7334,6 @@ void MainWindow::on_actionJS8_triggered()
m_nsps=6912; m_nsps=6912;
m_FFTSize = m_nsps / 2; m_FFTSize = m_nsps / 2;
Q_EMIT FFTSize (m_FFTSize); Q_EMIT FFTSize (m_FFTSize);
fixStop();
setup_status_bar (bVHF); setup_status_bar (bVHF);
m_toneSpacing=0.0; //??? m_toneSpacing=0.0; //???
ui->actionFT8->setChecked(true); //??? ui->actionFT8->setChecked(true); //???

View File

@ -228,7 +228,6 @@ private slots:
void on_actionSpecial_mouse_commands_triggered(); void on_actionSpecial_mouse_commands_triggered();
void on_actionSolve_FreqCal_triggered(); void on_actionSolve_FreqCal_triggered();
void on_actionCopyright_Notice_triggered(); void on_actionCopyright_Notice_triggered();
void on_DecodeButton_clicked (bool);
void decode(); void decode();
bool isDecodeReady(int submode, qint32 k, qint32 k0, qint32 *pCurrentDecodeStart, qint32 *pNextDecodeStart, qint32 *pStart, qint32 *pSz, qint32 *pCycle); bool isDecodeReady(int submode, qint32 k, qint32 k0, qint32 *pCurrentDecodeStart, qint32 *pNextDecodeStart, qint32 *pStart, qint32 *pSz, qint32 *pCycle);
bool decodeEnqueueReady(qint32 k, qint32 k0); bool decodeEnqueueReady(qint32 k, qint32 k0);