Several enhancements to DXpedition mode:

1. Insert dummy report when Hound is called by complex-callsign Fox.
2. Allow Fox to transmit anywhere between 300 and 900 Hz.
3. Restrict randomized Hound freq to the range 1000 - 3000 Hz.
4. Suppress Fox signals that would be duplicates.


git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8376 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2017-12-27 21:06:57 +00:00
parent 6ebf71e4e0
commit d1be2506a9
6 changed files with 22 additions and 13 deletions

View File

@ -83,6 +83,7 @@ extern struct {
extern struct {
float wave[606720];
int nslots;
int nfreq;
int i3bit[5];
char cmsg[5][40];
char mycall[12];

View File

@ -1,4 +1,4 @@
subroutine foxfilt(nslots,width,wave)
subroutine foxfilt(nslots,nfreq,width,wave)
parameter (NN=79,ND=58,KK=87,NSPS=4*1920)
parameter (NWAVE=NN*NSPS,NFFT=614400,NH=NFFT/2)
@ -11,8 +11,8 @@ subroutine foxfilt(nslots,width,wave)
x(NWAVE+1:)=0.
call four2a(x,NFFT,1,-1,0) !r2c
df=48000.0/NFFT
fa=1800.0 - 0.5*6.25
fb=1800.0 + 7.5*6.25 + (nslots-1)*60.0
fa=nfreq - 0.5*6.25
fb=nfreq + 7.5*6.25 + (nslots-1)*60.0
ia2=nint(fa/df)
ib1=nint(fb/df)
ia1=nint(ia2-width/df)

View File

@ -31,7 +31,7 @@ subroutine foxgen()
real x(NFFT)
real*8 dt,twopi,f0,fstep,dfreq,phi,dphi
complex cx(0:NH)
common/foxcom/wave(NWAVE),nslots,i3bit(5),cmsg(5),mycall(12)
common/foxcom/wave(NWAVE),nslots,nfreq,i3bit(5),cmsg(5),mycall(12)
common/foxcom2/itone2(NN),msgbits2(KK)
equivalence (x,cx),(y,cy)
data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern
@ -95,8 +95,7 @@ subroutine foxgen()
! Make copies of itone() and msgbits() for ft8sim
itone2=itone
msgbits2=msgbits
f0=1800.d0 + fstep*(n-1)
f0=nfreq + fstep*(n-1)
phi=0.d0
k=0
do j=1,NN
@ -128,7 +127,7 @@ subroutine foxgen()
! call plotspec(2,wave) !Plot the spectrum
width=50.0
call foxfilt(nslots,width,wave)
call foxfilt(nslots,nfreq,width,wave)
peak3=maxval(abs(wave))
wave=wave/peak3

View File

@ -7,10 +7,11 @@ subroutine foxgen_wrap(msg40,msgbits,itone)
character*12 mycall12
integer*1 msgbits(KK),msgbits2
integer itone(NN)
common/foxcom/wave(NWAVE),nslots,i3bit(5),cmsg(5),mycall12
common/foxcom/wave(NWAVE),nslots,nfreq,i3bit(5),cmsg(5),mycall12
common/foxcom2/itone2(NN),msgbits2(KK)
nslots=1
nfreq=300
i1=index(msg40,'<')
i2=index(msg40,'>')
mycall12=msg40(i1+1:i2-1)//' '

View File

@ -2941,6 +2941,7 @@ void MainWindow::readFromStdout() //readFromStdout
}
} else {
QStringList w=decodedtext.string().mid(24).split(" ",QString::SkipEmptyParts);
if(decodedtext.string().contains("/")) w.append(" +00"); //Add a dummy report
if(w.size()==3) {
QString foxCall=w.at(1);
if(w.at(0)==m_config.my_callsign()) {
@ -3243,12 +3244,12 @@ void MainWindow::guiUpdate()
icw[0]=m_ncw;
g_iptt = 1;
setRig ();
if(m_mode=="FT8" and m_config.bFox() and ui->TxFreqSpinBox->value() > 999) {
if(m_mode=="FT8" and m_config.bFox() and ui->TxFreqSpinBox->value() > 900) {
ui->TxFreqSpinBox->setValue(300);
}
if(m_mode=="FT8" and m_config.bHound() and (ui->TxFreqSpinBox->value() < 999) and
m_ntx != 3) {
int nf = (qrand() % 3000) + 1000;
int nf = (qrand() % 2000) + 1000; // Hound randomized range: 1000-3000 Hz
ui->TxFreqSpinBox->setValue(nf);
}
setXIT (ui->TxFreqSpinBox->value ());
@ -3303,6 +3304,10 @@ void MainWindow::guiUpdate()
}
ba=msg2.toLatin1();
} else {
if(m_config.bHound() and m_ntx!=3) { //Hound transmits only Tx1 or Tx3
m_ntx=1;
ui->txrb1->setChecked(true);
}
if(m_ntx == 1) ba=ui->tx1->text().toLocal8Bit();
if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit();
if(m_ntx == 3) ba=ui->tx3->text().toLocal8Bit();
@ -7427,9 +7432,11 @@ void MainWindow::foxTxSequencer()
fm = hc1 + " " + m_config.my_callsign(); //Tx msg
m_fullFoxCallTime=now;
}
if(islot>0 and fm==m_fm0) break; //Suppress duplicate Fox signals
islot++;
//Generate tx waveform
foxGenWaveform(islot-1,fm);
m_fm0=fm;
if(islot >= m_Nslots) goto Transmit;
}
@ -7467,6 +7474,8 @@ void MainWindow::foxTxSequencer()
Transmit:
foxcom_.nslots=islot;
foxcom_.nfreq=ui->TxFreqSpinBox->value();
if(m_config.split_mode()) foxcom_.nfreq = foxcom_.nfreq + 1500; //Fox Tx freq
QString foxCall=m_config.my_callsign() + " ";
strncpy(&foxcom_.mycall[0], foxCall.toLatin1(),12); //Copy Fox callsign into foxcom_
foxgen_();
@ -7531,12 +7540,10 @@ void MainWindow::foxGenWaveform(int i,QString fm)
QString txModeArg;
txModeArg.sprintf("FT8fox %d",i+1);
ui->decodedTextBrowser2->displayTransmittedText(fm.trimmed(), txModeArg,
300+60*i,m_config.color_TxMsg(),m_bFastMode);
ui->TxFreqSpinBox->value()+60*i,m_config.color_TxMsg(),m_bFastMode);
foxcom_.i3bit[i]=0;
if(fm.indexOf("<")>0) foxcom_.i3bit[i]=1;
strncpy(&foxcom_.cmsg[i][0],fm.toLatin1(),40); //Copy this message into cmsg[i]
// qDebug() << "Fox Transmitting:" << i << fm.trimmed();
writeFoxQSO(" Tx: " + fm.trimmed());
}

View File

@ -565,6 +565,7 @@ private:
QString m_CQtype;
QString m_opCall;
QString m_houndCallers; //Sorted list of Hound callers
QString m_fm0;
QSet<QString> m_pfx;
QSet<QString> m_sfx;