diff --git a/about.cpp b/about.cpp
index 2c5d4ce91..95bb7ee1e 100644
--- a/about.cpp
+++ b/about.cpp
@@ -9,7 +9,7 @@ CAboutDlg::CAboutDlg(QWidget *parent, QString Revision) :
ui->setupUi(this);
ui->labelTxt->clear();
m_Str = "
" + m_Revision + "
\n\n";
- m_Str += "WSJT-X implements experimental mode JT8 for
";
+ m_Str += "WSJT-X implements experimental mode JT9 for
";
m_Str += "Amateur Radio communication at MF and LF.
";
m_Str += "Copyright 2001-2012 by Joe Taylor, K1JT. Additional
";
m_Str += "acknowledgments are contained in the source code.
";
diff --git a/jt8.txt b/jt8.txt
deleted file mode 100644
index ed7067af3..000000000
--- a/jt8.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-JT8 is a mode designed for amateur QSOs and beacon-like transmissions
-at MF and LF. The mode uses the same 72-bit user messages as JT65,
-augmented by a 12-bit cyclic redundancy check (CRC). Error-control
-coding uses a convolutional code with constraint length K=16, rate
-r=1/2, and a zero tail, leading to an encoded message length of
-(72+12+15)*2 = 198 bits. Modulation is 8-FSK, so a transmission
-requires 198/3 = 66 information-carrying channel symbols. Two 8x8
-Costas arrays are added to each transmission for purposes of time and
-frequency synchronization. A full transmission thus contains 66 + 16
-= 82 symbols. Tone spacing df of the 8-FSK modulation is equal to the
-keying rate; symbol duration tsym = 1/df, and the total occupied
-bandwidth is 8*df. The actual transmission length TxT is slightly
-less than the T/R sequence time, to allow for possible message
-decoding before the next transmission starts.
-
-Parameters of the five JT8 sub-modes are summarized in the following
-table, along with S/N thresholds measured by simulation on an AWGN
-(additive white Gaussian noise) channel. Parameter nsps is the number
-of samples per symbol at sample rate 1500 Hz.
-
------------------------------------------------------
-Mode T/R TxT nsps df tsym BW S/N*
- (m) (s) (Hz) (s) (Hz) (dB)
------------------------------------------------------
-JT8-1 1 52.5 960 1.562 0.64 12.6 -26.9
-JT8-2 2 112.0 2048 0.732 1.37 5.9 -30.2
-JT8-5 5 293.9 5376 0.279 3.58 2.2 -34.4
-JT8-10 10 587.8 10752 0.140 7.17 1.1 -37.5
-JT8-30 30 1791.3 32768 0.046 21.85 0.4 -42.3
------------------------------------------------------
-* Noise power measured in a 2500 Hz bandwidth.
diff --git a/jtmsk.txt b/jtmsk.txt
deleted file mode 100644
index fadeb35db..000000000
--- a/jtmsk.txt
+++ /dev/null
@@ -1,72 +0,0 @@
- JTMSK: Possible New Mode for Meteor Scatter
- -------------------------------------------
-
-JTMSK is a digital mode designed for amateur meteor-scatter
-communication. The "MSK" part of the name could mean "Meteor Scatter
-King": the mode works at the same signal levels as the popular mode
-FSK441, but at about twice the character transmission rate, so it
-makes much better use of short pings. MSK also means "Minimum Shift
-Keying", which is the modulation technique used in JTMSK. It is a
-form of continuous-phase frequency-shift keying that achieves high
-transmission rate with a narrow bandwidth, while maintaining a
-constant-envelope waveform.
-
-1. Transmitting
-
-Messages are sent character-by character, 6 bits plus odd parity.
-Message length in characters is automatically selected from among the
-possibilities 5 7 9 11 13 17 19 23 29. (Note that these lengths share
-no common factor.) Messages are padded with blanks when required, up
-to the next available length.
-
-
-Modulation is Minimum Shift Keying (MSK) at 2000 baud. A "0" bit is
-sent as an audio sine wave at f0=1000 Hz, lasting 0.5 ms; a "1" bit is
-a sine wave at f1=2000 Hz. The carrier phase increment over one bit
-is thus 0.5 cycles (pi radians) at f0, or 1.0 cycles at f1. Odd
-parity assures an odd number of 1's and even number of 0's in every
-7-bit character, so the phase increment over a full character is
-always an integer number of cycles.
-
-2. Receiving
-
- a. Detect pings and update display in real time. (rtping)
-
- b. Compute real-to-complex FFT. Zap birdies, remove frequency
- components outside the range 300 - 2700 Hz, convert to analytic
- time-domain signal. (analytic)
-
- c. Square the complex signal and compute FFT. Look for narrow
- spectral lines at frequency 2000 + 2*(DF +/- Tol) Hz and
- 4000 + 2*(DF +/- Tol) Hz. (msdf)
-
- d. If a signal is found, measure frequency offset DF and phase Dphi.
- (DF and Dphi are measured relative to the original frequencies f0
- and f1, not their doubled values.) Multiply cx by
- exp(-twopi*i*DF*t - Dphi) to recover the standard-frequency
- baseband signal. (tweak1)
-
- e. Establish symbol and character sync by cross-correlating with
- conjg(cwb), MSK waveform for the character.
-
- f. Find message length by computing ACF.
-
- g. Decode the message by cross-correlating character-length segments
- of cdat against complex waveforms for each possible character.
-
- h. If ping is long enough, try folding the data and determining the
- best-fit characters as above.
-
-3. Parameters of fast modes:
-
-+--------------------+-----------------------+-------------------+
-| | Meteor Scatter | IonoScatter |
-| | FSK441 JTMS JTMSK | JT6M ISCAT |
-+--------------------+-----------------------+-------------------|
-| T/R period (s) | 30 30 30 | 30 30 |
-| Modulation type | 4-FSK MSK MSK | 44-FSK 41-FSK |
-| Keying rate (baud) | 441 1378 2000 | 21.5 43.1 |
-| Bit rate (bps) | 882 1378 2000 | - - |
-| Characters/s | 147 197 286 | 14.3 32.3 |
-| Bandwidth (Hz) | 1764 1378 2000 | 947 1809 |
-+--------------------+-----------------------+-------------------+
diff --git a/lib/symspec.f90 b/lib/symspec.f90
index 90434b3ef..4269c8be8 100644
--- a/lib/symspec.f90
+++ b/lib/symspec.f90
@@ -65,6 +65,7 @@ subroutine symspec(k,ntrperiod,nsps,ndiskdat,nb,nbslider,pxdb,s,f0a,df3, &
k1=0
k8=0
x2=0.
+ if(ndiskdat.eq.0) id2(k+1:60*ntrperiod*12000)=0
endif
k0=k
@@ -99,14 +100,9 @@ subroutine symspec(k,ntrperiod,nsps,ndiskdat,nb,nbslider,pxdb,s,f0a,df3, &
npts8=k8
ja=ja+jstep !Index of first sample
- if(ja.lt.0 .or. npts8.lt.ja+nfft3) go to 999
- do i=0,nfft3-1 !Copy data into cx
- cx(i)=c0(ja+i+1)
- enddo
-
+ nsum=nblks*kstep1 - nzap
!###
! if(nzap/178.lt.50 .and. (ndiskdat.eq.0 .or. ihsym.lt.280)) then
- nsum=nblks*kstep1 - nzap
if(nsum.le.0) nsum=1
rms=sqrt(0.5*px/nsum)
! endif
@@ -114,30 +110,36 @@ subroutine symspec(k,ntrperiod,nsps,ndiskdat,nb,nbslider,pxdb,s,f0a,df3, &
if(rms.gt.0.0) pxdb=20.0*log10(rms)
if(pxdb.gt.60.0) pxdb=60.0
!###
+! if(ja.lt.0 .or. npts8.lt.ja+nfft3) go to 999
+ if(ja.gt.0) then
+ do i=0,nfft3-1 !Copy data into cx
+ cx(i)=c0(ja+i+1)
+ enddo
- ihsym=ihsym+1
- cx(0:nfft3-1)=w3(1:nfft3)*cx(0:nfft3-1) !Apply window w3
- call four2a(cx,nfft3,1,1,1) !Third forward FFT (X)
+ ihsym=ihsym+1
+ cx(0:nfft3-1)=w3(1:nfft3)*cx(0:nfft3-1) !Apply window w3
+ call four2a(cx,nfft3,1,1,1) !Third forward FFT (X)
- n=min(184,ihsym)
- df3=1500.0/nfft3
- i0=nint(-500.0/df3)
- iz=min(NSMAX,nint(1000.0/df3))
- fac=(1.0/nfft3)**2
- do i=1,iz
- j=i0+i-1
- if(j.lt.0) j=j+nfft3
- sx=fac*(real(cx(j))**2 + aimag(cx(j))**2)
- ss(n,i)=sx
- savg(i)=savg(i) + sx
- s(i)=sx
- enddo
+ n=min(184,ihsym)
+ df3=1500.0/nfft3
+ i0=nint(-500.0/df3)
+ iz=min(NSMAX,nint(1000.0/df3))
+ fac=(1.0/nfft3)**2
+ do i=1,iz
+ j=i0+i-1
+ if(j.lt.0) j=j+nfft3
+ sx=fac*(real(cx(j))**2 + aimag(cx(j))**2)
+ ss(n,i)=sx
+ savg(i)=savg(i) + sx
+ s(i)=sx
+ enddo
+ endif
999 continue
-! write(71,3003) k,nsum,nzap,px,rms,pxdb
-!3003 format(3i10,3f12.2)
-! flush(71)
+! write(71,*) ja,npts8,ja,ja+nfft3,px,rms,pxdb
+!3003 format(5i9,3f11.0)
+! flush(71)
return
end subroutine symspec
diff --git a/lib/tastro.f90 b/lib/tastro.f90
deleted file mode 100644
index fac5c8003..000000000
--- a/lib/tastro.f90
+++ /dev/null
@@ -1,35 +0,0 @@
-program tastro
-
- implicit real*8 (a-h,o-z)
-
- character grid*6
- character*9 cauxra,cauxdec
-
- character*12 clock(3)
- integer nt(8)
- equivalence (nt(1),nyear)
-
- grid='FN20qi'
- nfreq=144
- cauxra='00:00:00'
-
-10 call date_and_time(clock(1),clock(2),clock(3),nt)
- ih=ihour-ntz/60
- if(ih.le.0) then
- ih=ih+24
- nday=nday+1
- endif
- uth8=ih + imin/60.d0 + isec/3600.d0 + ims/3600000.d0
- call astro0(nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec, &
- AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00, &
- dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0, &
- RaAux8,DecAux8,AzAux8,ElAux8,width1,width2,w501,w502,xlst8)
-
- write(*,1010) nyear,month,nday,ih,imin,isec,AzMoon8,ElMoon8, &
- AzSun8,ElSun8,ndop,dgrd8,ntsky
-1010 format(i4,i3,i3,i4.2,':',i2.2,':',i2.2,4f8.1,i6,f6.1,i6)
-
- call system('sleep 1')
- go to 10
-
-end program tastro
diff --git a/lib/timf2.f90 b/lib/timf2.f90
index 0debfba0d..04c0d61a0 100644
--- a/lib/timf2.f90
+++ b/lib/timf2.f90
@@ -35,7 +35,8 @@ subroutine timf2(x0,k,nfft,nwindow,nb,peaklimit,faclim,x1, &
equivalence (x,cx),(xw,cxw),(xs,cxs)
data first/.true./
data k0/99999999/
- save w,xsov,xwov,s,ntc,ntot,nh,kstep,fac,first,k0
+! save w,xsov,xwov,s,ntc,ntot,nh,kstep,fac,first,k0
+ save
if(first) then
pi=4.0*atan(1.0)
diff --git a/mainwindow.cpp b/mainwindow.cpp
index b57af5fe4..5a1d8c25b 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -42,11 +42,11 @@ MainWindow::MainWindow(QWidget *parent) :
ui->actionBlue->setActionGroup(paletteGroup);
QActionGroup* modeGroup = new QActionGroup(this);
- ui->actionJT8_1->setActionGroup(modeGroup);
- ui->actionJT8_2->setActionGroup(modeGroup);
- ui->actionJT8_5->setActionGroup(modeGroup);
- ui->actionJT8_10->setActionGroup(modeGroup);
- ui->actionJT8_30->setActionGroup(modeGroup);
+ ui->actionJT9_1->setActionGroup(modeGroup);
+ ui->actionJT9_2->setActionGroup(modeGroup);
+ ui->actionJT9_5->setActionGroup(modeGroup);
+ ui->actionJT9_10->setActionGroup(modeGroup);
+ ui->actionJT9_30->setActionGroup(modeGroup);
QActionGroup* saveGroup = new QActionGroup(this);
ui->actionSave_all->setActionGroup(saveGroup);
@@ -107,7 +107,7 @@ MainWindow::MainWindow(QWidget *parent) :
m_RxLog=1; //Write Date and Time to RxLog
m_nutc0=9999;
m_NB=false;
- m_mode="JT8-1";
+ m_mode="JT9-1";
m_TRperiod=60;
ui->xThermo->setFillBrush(Qt::green);
@@ -129,11 +129,11 @@ MainWindow::MainWindow(QWidget *parent) :
genStdMsgs("-30");
on_actionWide_Waterfall_triggered(); //###
- if(m_mode=="JT8-1") on_actionJT8_1_triggered();
- if(m_mode=="JT8-2") on_actionJT8_2_triggered();
- if(m_mode=="JT8-5") on_actionJT8_5_triggered();
- if(m_mode=="JT8-10") on_actionJT8_10_triggered();
- if(m_mode=="JT8-30") on_actionJT8_30_triggered();
+ if(m_mode=="JT9-1") on_actionJT9_1_triggered();
+ if(m_mode=="JT9-2") on_actionJT9_2_triggered();
+ if(m_mode=="JT9-5") on_actionJT9_5_triggered();
+ if(m_mode=="JT9-10") on_actionJT9_10_triggered();
+ if(m_mode=="JT9-30") on_actionJT9_30_triggered();
future1 = new QFuture;
watcher1 = new QFutureWatcher;
@@ -273,7 +273,7 @@ void MainWindow::readSettings()
"PaletteAFMHot",false).toBool());
ui->actionBlue->setChecked(settings.value(
"PaletteBlue",false).toBool());
- m_mode=settings.value("Mode","JT8-1").toString();
+ m_mode=settings.value("Mode","JT9-1").toString();
ui->actionNone->setChecked(settings.value("SaveNone",true).toBool());
ui->actionSave_all->setChecked(settings.value("SaveAll",false).toBool());
m_NB=settings.value("NB",false).toBool();
@@ -893,7 +893,7 @@ void MainWindow::guiUpdate()
ba2msg(ba,message);
ba2msg(ba,msgsent);
int len1=28;
-// genjt8_(message,iwave,&nwave,len1);
+// genjt9_(message,iwave,&nwave,len1);
if(m_restart) {
QFile f("wsjtx_tx.log");
f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
@@ -1306,9 +1306,9 @@ void MainWindow::on_actionErase_wsjtx_tx_log_triggered() //Erase Tx log
}
}
-void MainWindow::on_actionJT8_1_triggered()
+void MainWindow::on_actionJT9_1_triggered()
{
- m_mode="JT8-1";
+ m_mode="JT9-1";
m_TRperiod=60;
m_nsps=6912;
soundInThread.setPeriod(m_TRperiod,m_nsps);
@@ -1316,12 +1316,12 @@ void MainWindow::on_actionJT8_1_triggered()
g_pWideGraph->setPeriod(m_TRperiod,m_nsps);
lab5->setStyleSheet("QLabel{background-color: #ff6ec7}");
lab5->setText(m_mode);
- ui->actionJT8_1->setChecked(true);
+ ui->actionJT9_1->setChecked(true);
}
-void MainWindow::on_actionJT8_2_triggered()
+void MainWindow::on_actionJT9_2_triggered()
{
- m_mode="JT8-2";
+ m_mode="JT9-2";
m_TRperiod=120;
m_nsps=15360;
soundInThread.setPeriod(m_TRperiod,m_nsps);
@@ -1329,12 +1329,12 @@ void MainWindow::on_actionJT8_2_triggered()
g_pWideGraph->setPeriod(m_TRperiod,m_nsps);
lab5->setStyleSheet("QLabel{background-color: #ffff00}");
lab5->setText(m_mode);
- ui->actionJT8_2->setChecked(true);
+ ui->actionJT9_2->setChecked(true);
}
-void MainWindow::on_actionJT8_5_triggered()
+void MainWindow::on_actionJT9_5_triggered()
{
- m_mode="JT8-5";
+ m_mode="JT9-5";
m_TRperiod=300;
m_nsps=40960;
soundInThread.setPeriod(m_TRperiod,m_nsps);
@@ -1342,12 +1342,12 @@ void MainWindow::on_actionJT8_5_triggered()
g_pWideGraph->setPeriod(m_TRperiod,m_nsps);
lab5->setStyleSheet("QLabel{background-color: #ffa500}");
lab5->setText(m_mode);
- ui->actionJT8_5->setChecked(true);
+ ui->actionJT9_5->setChecked(true);
}
-void MainWindow::on_actionJT8_10_triggered()
+void MainWindow::on_actionJT9_10_triggered()
{
- m_mode="JT8-10";
+ m_mode="JT9-10";
m_TRperiod=600;
m_nsps=82944;
soundInThread.setPeriod(m_TRperiod,m_nsps);
@@ -1355,12 +1355,12 @@ void MainWindow::on_actionJT8_10_triggered()
g_pWideGraph->setPeriod(m_TRperiod,m_nsps);
lab5->setStyleSheet("QLabel{background-color: #7fff00}");
lab5->setText(m_mode);
- ui->actionJT8_10->setChecked(true);
+ ui->actionJT9_10->setChecked(true);
}
-void MainWindow::on_actionJT8_30_triggered()
+void MainWindow::on_actionJT9_30_triggered()
{
- m_mode="JT8-30";
+ m_mode="JT9-30";
m_TRperiod=1800;
m_nsps=250880;
soundInThread.setPeriod(m_TRperiod,m_nsps);
@@ -1368,7 +1368,7 @@ void MainWindow::on_actionJT8_30_triggered()
g_pWideGraph->setPeriod(m_TRperiod,m_nsps);
lab5->setStyleSheet("QLabel{background-color: #97ffff}");
lab5->setText(m_mode);
- ui->actionJT8_30->setChecked(true);
+ ui->actionJT9_30->setChecked(true);
}
void MainWindow::on_NBcheckBox_toggled(bool checked)
diff --git a/mainwindow.h b/mainwindow.h
index d49c26ea5..3c7b75e98 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -101,15 +101,15 @@ private slots:
void on_actionAFMHot_triggered();
void on_actionBlue_triggered();
- void on_actionJT8_2_triggered();
+ void on_actionJT9_2_triggered();
- void on_actionJT8_1_triggered();
+ void on_actionJT9_1_triggered();
- void on_actionJT8_5_triggered();
+ void on_actionJT9_5_triggered();
- void on_actionJT8_30_triggered();
+ void on_actionJT9_30_triggered();
- void on_actionJT8_10_triggered();
+ void on_actionJT9_10_triggered();
void on_NBcheckBox_toggled(bool checked);
@@ -221,7 +221,7 @@ void symspec_(int* k, int* ntrperiod, int* nsps, int* ndiskdat,
int* nb, int* m_NBslider, float* px, float s[],
float* f0a, float* df3, int* nhsym, int* nzap,
float* slimit, uchar lstrong[]);
-void genjt8_(char* msg, char* msgsent, short itone[], int* nsym,
+void genJT9_(char* msg, char* msgsent, short itone[], int* nsym,
int len1, int len2);
int ptt_(int* nport, int* itx, int* iptt);
}
diff --git a/mainwindow.ui b/mainwindow.ui
index b3c5782d0..d7e9db54e 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -1152,11 +1152,11 @@ p, li { white-space: pre-wrap; }
Mode
-
-
-
-
-
+
+
+
+
+
@@ -1492,44 +1492,44 @@ p, li { white-space: pre-wrap; }
FUNcube Dongle Settings
-
+
true
- JT8-1
+ JT9-1
-
+
true
- JT8-2
+ JT9-2
-
+
true
- JT8-5
+ JT9-5
-
+
true
- JT8-10
+ JT9-10
-
+
true
- JT8-30
+ JT9-30