From c393740b0a8cba7edfd6032ec7165a496b7a91b8 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 11 May 2019 01:57:56 +0100 Subject: [PATCH 01/29] Fix an off by error --- Audio/tools/record_time_signal.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp index 8cd4f8ee1..c128e34ff 100644 --- a/Audio/tools/record_time_signal.cpp +++ b/Audio/tools/record_time_signal.cpp @@ -112,10 +112,10 @@ public: sink_.setNotifyInterval (notify_interval); connect (&sink_, &QAudioOutput::notify, this, &Playback::notify); } + connect (&sink_, &QAudioOutput::stateChanged, this, &Playback::sink_state_changed); if (start == -1) { start_playback (); - } else { @@ -136,7 +136,6 @@ private: qtout << "started playback at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; sink_.start (input_); qtout << QString {"buffer size used is: %1 (%2 frames)"}.arg (sink_.bufferSize ()).arg (sink_.format ().framesForBytes (sink_.bufferSize ())) << endl; - connect (&sink_, &QAudioOutput::stateChanged, this, &Playback::sink_state_changed); } Q_SLOT void notify () @@ -160,6 +159,7 @@ private: break; case QAudio::IdleState: stop_playback (); + qtout << "\naudio output state changed to idle\n"; break; #if QT_VERSION >= QT_VERSION_CHECK (5, 10, 0) case QAudio::InterruptedState: @@ -276,6 +276,7 @@ int main(int argc, char *argv[]) { start = parser.value ("s").toInt (&ok); if (!ok) throw std::invalid_argument {"start time not a number"}; + if (0 > start || start > 59) throw std::invalid_argument {"0 > start > 59"}; } int sample_rate {48000}; if (parser.isSet ("r")) @@ -344,7 +345,7 @@ int main(int argc, char *argv[]) audio_format.setSampleType (QAudioFormat::SignedInt); audio_format.setCodec ("audio/pcm"); - auto source = input_device ? input_devices[input_device] : QAudioDeviceInfo::defaultInputDevice (); + auto source = input_device ? input_devices[input_device - 1] : QAudioDeviceInfo::defaultInputDevice (); if (!source.isFormatSupported (audio_format)) { qtout << "warning, requested format not supported, using nearest" << endl; @@ -367,7 +368,7 @@ int main(int argc, char *argv[]) } BWFFile input_file {audio_format, ifi.filePath ()}; if (!input_file.open (BWFFile::ReadOnly)) throw std::invalid_argument {QString {"cannot open input file \"%1\""}.arg (ifi.filePath ()).toStdString ()}; - auto sink = output_device ? output_devices[output_device] : QAudioDeviceInfo::defaultOutputDevice (); + auto sink = output_device ? output_devices[output_device - 1] : QAudioDeviceInfo::defaultOutputDevice (); if (!sink.isFormatSupported (input_file.format ())) { throw std::invalid_argument {"audio output device does not support input file audio format"}; From ab1454a24cc14fc320a43205b541023e199d7d1c Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Sat, 11 May 2019 09:36:15 -0500 Subject: [PATCH 02/29] Try to avoid a crash in freqcal.f90 when data is all zeros. --- lib/freqcal.f90 | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/lib/freqcal.f90 b/lib/freqcal.f90 index 540237f6e..80ce90c66 100644 --- a/lib/freqcal.f90 +++ b/lib/freqcal.f90 @@ -41,6 +41,7 @@ subroutine freqcal(id2,k,nkhz,noffset,ntol,line) endif smax=0. s=0. + ipk=-99 do i=ia,ib s(i)=real(cx(i))**2 + aimag(cx(i))**2 if(s(i).gt.smax) then @@ -48,25 +49,32 @@ subroutine freqcal(id2,k,nkhz,noffset,ntol,line) ipk=i endif enddo - - call peakup(s(ipk-1),s(ipk),s(ipk+1),dx) - fpeak=df * (ipk+dx) - ap=(fpeak/fs+1.0/(2.0*NFFT)) - an=(fpeak/fs-1.0/(2.0*NFFT)) - sp=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*ap),-sin(xi*ap))) - sn=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*an),-sin(xi*an))) - fpeak=fpeak+fs*(abs(sp)-abs(sn))/(abs(sp)+abs(sn))/(2*NFFT) - xsum=0. - nsum=0 - do i=ia,ib - if(abs(i-ipk).gt.10) then - xsum=xsum+s(i) - nsum=nsum+1 - endif - enddo - ave=xsum/nsum - snr=db(smax/ave) - pave=db(ave) + 8.0 + + if(ipk.ge.1) then + call peakup(s(ipk-1),s(ipk),s(ipk+1),dx) + fpeak=df * (ipk+dx) + ap=(fpeak/fs+1.0/(2.0*NFFT)) + an=(fpeak/fs-1.0/(2.0*NFFT)) + sp=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*ap),-sin(xi*ap))) + sn=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*an),-sin(xi*an))) + fpeak=fpeak+fs*(abs(sp)-abs(sn))/(abs(sp)+abs(sn))/(2*NFFT) + xsum=0. + nsum=0 + do i=ia,ib + if(abs(i-ipk).gt.10) then + xsum=xsum+s(i) + nsum=nsum+1 + endif + enddo + ave=xsum/nsum + snr=db(smax/ave) + pave=db(ave) + 8.0 + else + snr=-99.9 + pave=-99.9 + fpeak=-99.9 + ferr=-99.9 + endif cflag=' ' if(snr.lt.20.0) cflag='*' n=n+1 @@ -77,7 +85,7 @@ subroutine freqcal(id2,k,nkhz,noffset,ntol,line) ncal=1 ferr=fpeak-noffset write(line,1100) nhr,nmin,nsec,nkhz,ncal,noffset,fpeak,ferr,pave, & - snr,cflag,char(0) + snr,cflag,char(0) 1100 format(i2.2,':',i2.2,':',i2.2,i7,i3,i6,2f10.3,2f7.1,2x,a1,a1) 900 return From 350391d66ef817444477b6408ce8defb0616d512 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 11 May 2019 16:43:48 +0100 Subject: [PATCH 03/29] AAdded audio o/p category to playback options --- Audio/tools/record_time_signal.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp index c128e34ff..6a78a0a2c 100644 --- a/Audio/tools/record_time_signal.cpp +++ b/Audio/tools/record_time_signal.cpp @@ -101,12 +101,13 @@ class Playback final Q_OBJECT; public: - Playback (int start, BWFFile * input, QAudioDeviceInfo const& sink_device, int notify_interval, int buffer_size) + Playback (int start, BWFFile * input, QAudioDeviceInfo const& sink_device, int notify_interval, int buffer_size, QString const& category) : input_ {input} , sink_ {sink_device, input->format ()} , notify_interval_ {notify_interval} { if (buffer_size) sink_.setBufferSize (input_->format ().bytesForFrames (buffer_size)); + if (category.size ()) sink_.setCategory (category); if (notify_interval_) { sink_.setNotifyInterval (notify_interval); @@ -239,6 +240,9 @@ int main(int argc, char *argv[]) {{"P", "playback-device-number"}, app.translate ("main", "Playback to "), app.translate ("main", "device-number")}, + {{"C", "category"}, + app.translate ("main", "Playback "), + app.translate ("main", "category-name")}, {{"n", "notify-interval"}, app.translate ("main", "use notify signals every milliseconds, zero to use a timer"), app.translate ("main", "interval")}, @@ -375,7 +379,7 @@ int main(int argc, char *argv[]) } // run the application - Playback play {start, &input_file, sink, notify_interval, buffer_size}; + Playback play {start, &input_file, sink, notify_interval, buffer_size, parser.value ("category")}; QObject::connect (&play, &Playback::done, &app, &QCoreApplication::quit); return app.exec(); } From 2044b736dad8444272d3dd5f89cf63716ccbf073 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 20 May 2019 12:46:36 -0400 Subject: [PATCH 04/29] Fix a bug in calculation of S/N in JT4 mode. --- lib/jt4_decode.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/jt4_decode.f90 b/lib/jt4_decode.f90 index da0fbda68..ff0b33c4d 100644 --- a/lib/jt4_decode.f90 +++ b/lib/jt4_decode.f90 @@ -156,7 +156,7 @@ contains nfreqz=nint(dfx) call timer('sync4 ',1) - nsnr=nint(snrx) + nsnr=-26 if(sync.lt.syncmin) then if (associated (this%decode_callback)) then call this%decode_callback(nsnr,dtxz,nfreqz,.false.,csync, & @@ -166,6 +166,7 @@ contains endif ! We have achieved sync + nsnr=nint(snrsync - 22.9) decoded=blank deepmsg=blank special=' ' From 10aaec90e3309b77a6965c41193839c72ced7a3e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 21 May 2019 12:09:17 -0400 Subject: [PATCH 05/29] FT4 decodes using jt9 from command line now use ndepth=3. --- lib/jt9.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index a0ffcda31..68984e33a 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -157,7 +157,7 @@ program jt9 end do go to 999 endif - + iret=fftwf_init_threads() !Initialize FFTW threading ! Default to 1 thread, but use nthreads for the big ones @@ -179,6 +179,7 @@ program jt9 go to 999 endif + if(mode.eq.5) ndepth=3 allocate(shared_data) nflatten=0 From 6507fedec3d3aa21e5f3921fcab8690d155f7915 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 22 May 2019 02:23:04 +0100 Subject: [PATCH 06/29] Correct FT4 mode designation for ADIF v3.1.0 and later FT4 -> MFSK FT4 When reading ADIF records FT4 is acceptable as well. --- logbook/WorkedBefore.cpp | 7 ++++++- logbook/logbook.cpp | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/logbook/WorkedBefore.cpp b/logbook/WorkedBefore.cpp index daaf18fc7..31380b4c3 100644 --- a/logbook/WorkedBefore.cpp +++ b/logbook/WorkedBefore.cpp @@ -332,10 +332,15 @@ namespace // will parse a record { auto const& entity = prefixes->lookup (call); + auto mode = extractField (record, "MODE").toUpper (); + if (!mode.size () || "MFSK" == mode) + { + mode = extractField (record, "SUBMODE").toUpper (); + } worked.emplace (call.toUpper () , extractField (record, "GRIDSQUARE").left (4).toUpper () // not interested in 6-digit grids , extractField (record, "BAND").toUpper () - , extractField (record, "MODE").toUpper () + , mode , entity.entity_name , entity.continent , entity.CQ_zone diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index b84b65c1a..e4a04f64a 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -69,7 +69,14 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q QString t; t = "" + hisCall; t += " " + hisGrid; - t += " " + mode; + if (mode != "FT4") + { + t += " " + mode; + } + else + { + t += " MFSK " + mode; + } t += " " + rptSent; t += " " + rptRcvd; t += " " + dateTimeOn.date().toString("yyyyMMdd"); From 0d3be0128b1361bddf816279e08e4001f1c5d0a2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 22 May 2019 12:44:28 -0400 Subject: [PATCH 07/29] Change m_TRperiod from qint32 to double. Functional, but needs more testing! --- Detector.cpp | 6 ++- Detector.hpp | 7 +-- Modulator.cpp | 19 ++++--- Modulator.hpp | 10 ++-- widgets/astro.cpp | 7 +-- widgets/astro.h | 2 +- widgets/fastgraph.cpp | 4 +- widgets/fastgraph.h | 6 +-- widgets/fastplot.cpp | 6 +-- widgets/fastplot.h | 4 +- widgets/mainwindow.cpp | 109 +++++++++++++++++++++-------------------- widgets/mainwindow.h | 2 +- widgets/plotter.cpp | 8 +-- widgets/plotter.h | 4 +- widgets/widegraph.cpp | 16 +++--- widgets/widegraph.h | 7 +-- 16 files changed, 113 insertions(+), 104 deletions(-) diff --git a/Detector.cpp b/Detector.cpp index 69a10f5e8..3bf5cf410 100644 --- a/Detector.cpp +++ b/Detector.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "commons.h" #include "moc_Detector.cpp" @@ -10,7 +11,7 @@ extern "C" { void fil4_(qint16*, qint32*, qint16*, qint32*); } -Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds, +Detector::Detector (unsigned frameRate, double periodLengthInSeconds, unsigned downSampleFactor, QObject * parent) : AudioDevice (parent) , m_frameRate (frameRate) @@ -128,5 +129,6 @@ unsigned Detector::secondInPeriod () const qint64 now (QDateTime::currentMSecsSinceEpoch ()); unsigned secondInToday ((now % 86400000LL) / 1000); - return secondInToday % m_period; + unsigned secInPeriod = fmod(double(secondInToday),m_period); + return secInPeriod; } diff --git a/Detector.hpp b/Detector.hpp index d5e5b0a38..404951a90 100644 --- a/Detector.hpp +++ b/Detector.hpp @@ -22,9 +22,10 @@ public: // // the samplesPerFFT argument is the number after down sampling // - Detector (unsigned frameRate, unsigned periodLengthInSeconds, unsigned downSampleFactor = 4u, QObject * parent = 0); + Detector (unsigned frameRate, double periodLengthInSeconds, unsigned downSampleFactor = 4u, + QObject * parent = 0); - void setTRPeriod(unsigned p) {m_period=p;} + void setTRPeriod(double p) {m_period=p;} bool reset () override; Q_SIGNAL void framesWritten (qint64) const; @@ -43,7 +44,7 @@ private: unsigned secondInPeriod () const; unsigned m_frameRate; - unsigned m_period; + double m_period; unsigned m_downSampleFactor; qint32 m_samplesPerFFT; // after any down sampling qint32 m_ns; diff --git a/Modulator.cpp b/Modulator.cpp index 725de9e42..e5587120b 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -25,7 +25,7 @@ double constexpr Modulator::m_twoPi; // unsigned m_nspd=1.2*48000.0/wpm; // m_nspd=3072; //18.75 WPM -Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds, +Modulator::Modulator (unsigned frameRate, double periodLengthInSeconds, QObject * parent) : AudioDevice {parent} , m_quickClose {false} @@ -45,14 +45,13 @@ Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds, void Modulator::start (unsigned symbolsLength, double framesPerSymbol, double frequency, double toneSpacing, SoundOutput * stream, Channel channel, - bool synchronize, bool fastMode, double dBSNR, int TRperiod) + bool synchronize, bool fastMode, double dBSNR, double TRperiod) { Q_ASSERT (stream); // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; -// qDebug() << "ModStart" << symbolsLength << framesPerSymbol -// << frequency << toneSpacing; +// qDebug() << "ModStart" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.sss"); if(m_state != Idle) stop (); @@ -78,7 +77,7 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (m_snr > 1.0) m_fac = 3000.0 / m_snr; } - unsigned mstr = ms0 % (1000 * m_period); // ms in period + unsigned mstr = ms0 % int(1000.0*m_period); // ms in period // round up to an exact portion of a second that allows for startup // delays @@ -183,12 +182,12 @@ qint64 Modulator::readData (char * data, qint64 maxSize) 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; + if(m_TRperiod==3.0) slowCwId=false; bool fastCwId=false; static bool bCwId=false; qint64 ms = QDateTime::currentMSecsSinceEpoch(); - float tsec=0.001*(ms % (1000*m_TRperiod)); - if(m_bFastMode and (icw[0]>0) and (tsec>(m_TRperiod-5.0))) fastCwId=true; + float tsec=0.001*(ms % int(1000*m_TRperiod)); + 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; @@ -259,7 +258,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) i1= m_symbolsLength * 4.0 * m_nsps; } if(m_bFastMode and !m_tuning) { - i1=m_TRperiod*48000 - 24000; + i1=m_TRperiod*48000.0 - 24000.0; i0=i1-816; } @@ -267,7 +266,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) 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.0) 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) { diff --git a/Modulator.hpp b/Modulator.hpp index e8df7f2dd..3371cbe5e 100644 --- a/Modulator.hpp +++ b/Modulator.hpp @@ -23,7 +23,7 @@ class Modulator public: enum ModulatorState {Synchronizing, Active, Idle}; - Modulator (unsigned frameRate, unsigned periodLengthInSeconds, QObject * parent = nullptr); + Modulator (unsigned frameRate, double periodLengthInSeconds, QObject * parent = nullptr); void close () override; @@ -31,14 +31,14 @@ public: double frequency () const {return m_frequency;} bool isActive () const {return m_state != Idle;} void setSpread(double s) {m_fSpread=s;} - void setTRPeriod(unsigned p) {m_period=p;} + void setTRPeriod(double p) {m_period=p;} void set_nsym(int n) {m_symbolsLength=n;} void set_ms0(qint64 ms) {m_ms0=ms;} Q_SLOT void start (unsigned symbolsLength, double framesPerSymbol, double frequency, double toneSpacing, SoundOutput *, Channel = Mono, bool synchronize = true, bool fastMode = false, - double dBSNR = 99., int TRperiod=60); + double dBSNR = 99., double TRperiod=60.0); Q_SLOT void stop (bool quick = false); Q_SLOT void tune (bool newState = true); Q_SLOT void setFrequency (double newFrequency) {m_frequency = newFrequency;} @@ -72,14 +72,14 @@ private: double m_fac; double m_toneSpacing; double m_fSpread; + double m_TRperiod; + double m_period; qint64 m_silentFrames; qint64 m_ms0; - qint32 m_TRperiod; qint16 m_ramp; unsigned m_frameRate; - unsigned m_period; ModulatorState volatile m_state; bool volatile m_tuning; diff --git a/widgets/astro.cpp b/widgets/astro.cpp index 4ee55da4a..c1eee0157 100644 --- a/widgets/astro.cpp +++ b/widgets/astro.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "commons.h" #include "MessageBox.hpp" @@ -90,7 +91,7 @@ void Astro::write_settings () } auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const& hisgrid, Frequency freq, - bool dx_is_self, bool bTx, bool no_tx_QSY, int TR_period) -> Correction + bool dx_is_self, bool bTx, bool no_tx_QSY, double TR_period) -> Correction { Frequency freq_moon {freq}; double azsun,elsun,azmoon,elmoon,azmoondx,elmoondx; @@ -211,8 +212,8 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const // // use a base time of (secs-since-epoch + 2) so as to be sure // we do the next period if we calculate just before it starts - auto sec_since_epoch = t.toMSecsSinceEpoch () / 1000 + 2; - auto target_sec = sec_since_epoch - sec_since_epoch % TR_period + TR_period / 2; + auto sec_since_epoch = t.toMSecsSinceEpoch ()/1000 + 2; + auto target_sec = sec_since_epoch - fmod(double(sec_since_epoch),TR_period) + 0.5*TR_period; auto target_date_time = QDateTime::fromMSecsSinceEpoch (target_sec * 1000, Qt::UTC); QString date {target_date_time.date().toString("yyyy MMM dd").trimmed ()}; QString utc {target_date_time.time().toString().trimmed ()}; diff --git a/widgets/astro.h b/widgets/astro.h index 03d8c66c6..4f7f71d5b 100644 --- a/widgets/astro.h +++ b/widgets/astro.h @@ -44,7 +44,7 @@ public: bool dx_is_self, bool bTx, bool no_tx_QSY, - int TR_period); + double TR_period); bool doppler_tracking () const; Q_SLOT void nominal_frequency (Frequency rx, Frequency tx); diff --git a/widgets/fastgraph.cpp b/widgets/fastgraph.cpp index e599138f2..9efe5fc63 100644 --- a/widgets/fastgraph.cpp +++ b/widgets/fastgraph.cpp @@ -86,9 +86,9 @@ void FastGraph::on_greenZeroSlider_valueChanged(int value) ui->fastPlot->draw(); } -void FastGraph::setTRPeriod(int n) +void FastGraph::setTRPeriod(double p) { - m_TRperiod=n; + m_TRperiod=p; ui->fastPlot->setTRperiod(m_TRperiod); } diff --git a/widgets/fastgraph.h b/widgets/fastgraph.h index 7ed32671f..b5f7c0b8d 100644 --- a/widgets/fastgraph.h +++ b/widgets/fastgraph.h @@ -22,7 +22,7 @@ public: void plotSpec(bool diskData, int UTCdisk); void saveSettings(); - void setTRPeriod(int n); + void setTRPeriod(double p); void setMode(QString mode); signals: @@ -40,8 +40,8 @@ protected: private: QSettings * m_settings; - float m_ave; - qint32 m_TRperiod; + float m_ave; + double m_TRperiod; QScopedPointer ui; }; diff --git a/widgets/fastplot.cpp b/widgets/fastplot.cpp index 1437834d8..a388f0ac7 100644 --- a/widgets/fastplot.cpp +++ b/widgets/fastplot.cpp @@ -135,11 +135,11 @@ void FPlotter::setGreenZero(int n) m_bPaint2=true; } -void FPlotter::setTRperiod(int n) +void FPlotter::setTRperiod(double p) { - m_TRperiod=n; + m_TRperiod=p; m_pixPerSecond=12000.0/512.0; - if(m_TRperiod<30) m_pixPerSecond=12000.0/256.0; + if(m_TRperiod<30.0) m_pixPerSecond=12000.0/256.0; drawScale(); update(); } diff --git a/widgets/fastplot.h b/widgets/fastplot.h index b13913388..f24fcc24e 100644 --- a/widgets/fastplot.h +++ b/widgets/fastplot.h @@ -37,7 +37,7 @@ public: void setPlotZero(int plotZero); void setPlotGain(int plotGain); void setGreenZero(int n); - void setTRperiod(int n); + void setTRperiod(double p); void drawScale(); void setMode(QString mode); @@ -68,6 +68,7 @@ private: QString m_mode; double m_pixPerSecond; + double m_TRperiod; qint32 m_hdivs; qint32 m_h; @@ -75,7 +76,6 @@ private: qint32 m_h2; QPixmap m_HorizPixmap; qint32 m_jh0; - qint32 m_TRperiod; bool m_bPaint2; }; diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 88fe0016e..d40e0d1c9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -246,7 +246,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_logDlg (new LogQSO (program_title (), m_settings, &m_config, nullptr)), m_lastDialFreq {0}, m_dialFreqRxWSPR {0}, - m_detector {new Detector {RX_SAMPLE_RATE, NTMAX, downSampleFactor}}, + m_detector {new Detector {RX_SAMPLE_RATE, double(NTMAX), downSampleFactor}}, m_FFTSize {6192 / 2}, // conservative value to avoid buffer overruns m_soundInput {new SoundInput}, m_modulator {new Modulator {TX_SAMPLE_RATE, NTMAX}}, @@ -257,6 +257,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_freqTxNominal {0}, m_s6 {0.}, m_tRemaining {0.}, + m_TRperiod {60.0}, m_DTtol {3.0}, m_waterfallAvg {1}, m_ntx {1}, @@ -268,7 +269,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_nutc0 {999999}, m_ntr {0}, m_tx {0}, - m_TRperiod {60}, m_inGain {0}, m_secID {0}, m_idleMinutes {0}, @@ -877,7 +877,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, connect (&m_wav_future_watcher, &QFutureWatcher::finished, this, &MainWindow::diskDat); connect(&watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done())); -// Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ()); Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, m_detector, m_downSampleFactor, m_config.audio_input_channel ()); Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered); Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT); @@ -1355,7 +1354,7 @@ void MainWindow::dataSink(qint64 frames) } // Get power, spectrum, and ihsym - int trmin=m_TRperiod/60; + int trmin=m_TRperiod/60.0; // int k (frames - 1); dec_data.params.nfa=m_wideGraph->nStartFreq(); dec_data.params.nfb=m_wideGraph->Fmax(); @@ -1452,14 +1451,15 @@ void MainWindow::dataSink(qint64 frames) if(!m_mode.startsWith ("WSPR")) decode(); //Start decoder if(!m_diskData) { //Always save; may delete later - if(m_mode=="FT8" or m_mode=="FT4") { - int n=now.time().second() % m_TRperiod; + int n=fmod(double(now.time().second()),m_TRperiod); if(n<(m_TRperiod/2)) n=n+m_TRperiod; auto const& period_start=now.addSecs(-n); m_fnameWE=m_config.save_directory().absoluteFilePath (period_start.toString("yyMMdd_hhmmss")); +// qDebug() << "datasink 2" << QDateTime::currentDateTimeUtc().toString("ss.zzz") +// << n << period_start.toString("ss.zzz"); } else { - auto const& period_start = now.addSecs (-(now.time ().minute () % (m_TRperiod / 60)) * 60); + auto const& period_start = now.addSecs (-(now.time ().minute () % (int(m_TRperiod) / 60)) * 60); m_fnameWE=m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmm")); } m_fileToSave.clear (); @@ -1589,7 +1589,7 @@ void MainWindow::fastSink(qint64 frames) int ihr=tnow.toString("hh").toInt(); int imin=tnow.toString("mm").toInt(); int isec=tnow.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; + isec=isec - fmod(double(isec),m_TRperiod); int nutc0=10000*ihr + 100*imin + isec; if(m_diskData) nutc0=m_UTCdisk; char line[80]; @@ -1669,7 +1669,7 @@ void MainWindow::fastSink(qint64 frames) if(decodeNow or m_bFastDone) { if(!m_diskData) { QDateTime now {QDateTime::currentDateTimeUtc()}; - int n=now.time().second() % m_TRperiod; + int n=fmod(double(now.time().second()),m_TRperiod); if(n<(m_TRperiod/2)) n=n+m_TRperiod; auto const& period_start = now.addSecs (-n); m_fnameWE = m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmmss")); @@ -1679,11 +1679,11 @@ void MainWindow::fastSink(qint64 frames) // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], m_TRperiod*12000, m_config.my_callsign(), + this, m_fnameWE, &dec_data.d2[0], int(m_TRperiod*12000.0), m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); } if(m_mode!="MSK144") { - killFileTimer.start (3*1000*m_TRperiod/4); //Kill 3/4 period from now + killFileTimer.start (int(750.0*m_TRperiod)); //Kill 3/4 period from now } } m_bFastDone=false; @@ -2218,7 +2218,6 @@ void MainWindow::createStatusBar() //createStatusBar statusBar()->addPermanentWidget(&progressBar); progressBar.setMinimumSize (QSize {150, 18}); - progressBar.setFormat ("%v/%m"); statusBar ()->addPermanentWidget (&watchdog_label); update_watchdog_label (); @@ -2631,7 +2630,8 @@ void MainWindow::read_wav_file (QString const& fname) bool ok=file.open (BWFFile::ReadOnly); if(ok) { auto bytes_per_frame = file.format ().bytesPerFrame (); - qint64 max_bytes = std::min (std::size_t (m_TRperiod * RX_SAMPLE_RATE), + int nsamples=m_TRperiod * RX_SAMPLE_RATE; + qint64 max_bytes = std::min (std::size_t (nsamples), sizeof (dec_data.d2) / sizeof (dec_data.d2[0]))* bytes_per_frame; auto n = file.read (reinterpret_cast (dec_data.d2), std::min (max_bytes, file.size ())); @@ -2822,7 +2822,7 @@ void MainWindow::decode() //decode() } m_msec0=QDateTime::currentMSecsSinceEpoch(); - if(!m_dataAvailable or m_TRperiod==0) return; + if(!m_dataAvailable or m_TRperiod==0.0) return; ui->DecodeButton->setChecked (true); if(!dec_data.params.nagain && m_diskData && !m_bFastMode && m_mode!="FT8" && m_mode!="FT4") { dec_data.params.nutc=dec_data.params.nutc/100; @@ -2832,14 +2832,16 @@ void MainWindow::decode() //decode() int imin=ms/60000; int ihr=imin/60; imin=imin % 60; - if(m_TRperiod>=60) imin=imin - (imin % (m_TRperiod/60)); + if(m_TRperiod>=60) imin=imin - (imin % (int(m_TRperiod)/60)); dec_data.params.nutc=100*ihr + imin; if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9 or m_mode=="FT8" or m_mode=="FT4") { - QDateTime t=QDateTime::currentDateTimeUtc().addSecs(2-m_TRperiod); + qint64 ms=1000.0*(2.0-m_TRperiod); + if(m_mode=="FT4") ms=1000.0*(3.0-m_TRperiod); + QDateTime t=QDateTime::currentDateTimeUtc().addMSecs(ms); ihr=t.toString("hh").toInt(); imin=t.toString("mm").toInt(); int isec=t.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; + if(m_mode!="FT4") isec=isec - fmod(double(isec),m_TRperiod); dec_data.params.nutc=10000*ihr + 100*imin + isec; } } @@ -2849,7 +2851,7 @@ void MainWindow::decode() //decode() int ihr=t.toString("hh").toInt(); int imin=t.toString("mm").toInt(); int isec=t.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; + isec=isec - fmod(double(isec),m_TRperiod); dec_data.params.nutc=10000*ihr + 100*imin + isec; } if(m_nPick==2) dec_data.params.nutc=m_nutc0; @@ -2948,8 +2950,8 @@ void MainWindow::decode() //decode() } static short int d2b[360000]; narg[0]=dec_data.params.nutc; - if(m_kdone>12000*m_TRperiod) { - m_kdone=12000*m_TRperiod; + if(m_kdone>int(12000.0*m_TRperiod)) { + m_kdone=int(12000.0*m_TRperiod); } narg[1]=m_kdone; narg[2]=m_nSubMode; @@ -2968,9 +2970,10 @@ void MainWindow::decode() //decode() narg[12]=0; narg[13]=-1; narg[14]=m_config.aggressive(); + int nTRperiod=m_TRperiod; memcpy(d2b,dec_data.d2,2*360000); watcher3.setFuture (QtConcurrent::run (std::bind (fast_decode_,&d2b[0], - &narg[0],&m_TRperiod,&m_msg[0][0], + &narg[0],&nTRperiod,&m_msg[0][0], dec_data.params.mycall,dec_data.params.hiscall,8000,12,12))); } else { memcpy(to, from, qMin(mem_jt9->size(), size)); @@ -3055,7 +3058,7 @@ void MainWindow::readFromStdout() //readFromStdout if(line_read.indexOf("") >= 0) { if(m_mode=="QRA64") m_wideGraph->drawRed(0,0); m_bDecoded = line_read.mid(20).trimmed().toInt() > 0; - int mswait=3*1000*m_TRperiod/4; + int mswait=750.0*m_TRperiod; if(!m_diskData) killFileTimer.start(mswait); //Kill in 3/4 period decodeDone (); m_startAnother=m_loopall; @@ -3081,7 +3084,7 @@ void MainWindow::readFromStdout() //readFromStdout write_all("Rx",line_read.trimmed()); if (m_config.insert_blank () && m_blankLine && SpecOp::FOX != m_config.special_op_id()) { QString band; - if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*m_TRperiod/4) { + if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4) { band = ' ' + m_config.bands ()->find (m_freqNominal); } ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-')); @@ -3241,7 +3244,7 @@ void MainWindow::readFromStdout() //readFromStdout } // extract details and send to PSKreporter int nsec=QDateTime::currentMSecsSinceEpoch()/1000-m_secBandChanged; - bool okToPost=(nsec>(4*m_TRperiod)/5); + bool okToPost=(nsec > int(4*m_TRperiod)/5); if (stdMsg && okToPost) pskPost(decodedtext); if((m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64") and m_msgAvgWidget!=NULL) { @@ -3421,7 +3424,7 @@ void MainWindow::guiUpdate() double txDuration; QString rt; - if(m_TRperiod==0) m_TRperiod=60; + if(m_TRperiod==0) m_TRperiod=60.0; txDuration=0.0; if(m_modeTx=="FT4") txDuration=0.35 + 105*512/12000.0; // FT4 if(m_modeTx=="FT8") txDuration=1.0 + 79*1920/12000.0; // FT8 @@ -3451,8 +3454,8 @@ void MainWindow::guiUpdate() double tsec=0.001*ms; double t2p=fmod(tsec,2*m_TRperiod); m_s6=fmod(tsec,6.0); - m_nseq = nsec % m_TRperiod; - m_tRemaining=m_TRperiod - fmod(tsec,double(m_TRperiod)); + m_nseq = fmod(double(nsec),m_TRperiod); + m_tRemaining=m_TRperiod - fmod(tsec,m_TRperiod); if(m_mode=="Echo") { txDuration=2.4; @@ -3495,8 +3498,7 @@ void MainWindow::guiUpdate() // Check for "txboth" (testing purposes only) QFile f(m_appDir + "/txboth"); - if(f.exists() and - fmod(tsec,m_TRperiod)<(1.0 + 85.0*m_nsps/12000.0)) m_bTxTime=true; + if(f.exists() and fmod(tsec,m_TRperiod) < (1.0 + 85.0*m_nsps/12000.0)) m_bTxTime=true; // Don't transmit another mode in the 30 m WSPR sub-band Frequency onAirFreq = m_freqNominal + ui->TxFreqSpinBox->value(); @@ -3539,7 +3541,7 @@ void MainWindow::guiUpdate() tx_watchdog (true); // disable transmit } - float fTR=float((ms%(1000*m_TRperiod)))/(1000*m_TRperiod); + float fTR=float((ms%int(1000.0*m_TRperiod)))/int(1000.0*m_TRperiod); QString txMsg; if(m_ntx == 1) txMsg=ui->tx1->text(); @@ -3959,17 +3961,21 @@ void MainWindow::guiUpdate() if(tHound >= 120 and m_ntx==1) auto_tx_mode(false); } -// progressBar.setVisible(!(m_mode=="FT4")); progressBar.setVisible(true); + progressBar.setFormat ("%v/%m"); if(m_auto and m_mode=="Echo" and m_bEchoTxOK) { - progressBar.setMaximum(6); + progressBar.setMaximum(3); progressBar.setValue(int(m_s6)); } -// if(m_mode!="Echo" and m_mode!="FT4") { if(m_mode!="Echo") { if(m_monitoring or m_transmitting) { progressBar.setMaximum(m_TRperiod); int isec=int(fmod(tsec,m_TRperiod)); + if(m_TRperiod-int(m_TRperiod)>0.0) { + QString progBarLabel; + progBarLabel.sprintf("%d/%3.1f",isec,m_TRperiod); + progressBar.setFormat (progBarLabel); + } progressBar.setValue(isec); } else { progressBar.setValue(0); @@ -4152,7 +4158,8 @@ void MainWindow::set_dateTimeQSO(int m_ntx) } else { // we also take of m_TRperiod/2 to allow for late clicks auto now = QDateTime::currentDateTimeUtc(); - m_dateTimeQSOOn = now.addSecs (-(m_ntx - 2) * m_TRperiod - (now.time ().second () % m_TRperiod)); + m_dateTimeQSOOn = now.addSecs (-(m_ntx - 2) * int(m_TRperiod) - + int(fmod(double(now.time().second()),m_TRperiod))); } } @@ -4405,7 +4412,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } } - int nmod = message.timeInSeconds () % (2*m_TRperiod); + int nmod = fmod(double(message.timeInSeconds()),2.0*m_TRperiod); m_txFirst=(nmod!=0); if( SpecOp::HOUND == m_config.special_op_id() ) m_txFirst=false; //Hound must not transmit first if( SpecOp::FOX == m_config.special_op_id() ) m_txFirst=true; //Fox must always transmit first @@ -5632,7 +5639,7 @@ void MainWindow::on_actionFT4_triggered() { m_mode="FT4"; m_modeTx="FT4"; - m_TRperiod=6; + m_TRperiod=7.5; bool bVHF=m_config.enable_VHF_features(); m_bFast9=false; m_bFastMode=false; @@ -5693,7 +5700,7 @@ void MainWindow::on_actionFT8_triggered() m_wideGraph->setModeTx(m_modeTx); VHF_features_enabled(bVHF); ui->cbAutoSeq->setChecked(true); - m_TRperiod=15; + m_TRperiod=15.0; m_fastGraph->hide(); m_wideGraph->show(); ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); @@ -5782,7 +5789,7 @@ void MainWindow::on_actionJT4_triggered() WSPR_config(false); switch_mode (Modes::JT4); m_modeTx="JT4"; - m_TRperiod=60; + m_TRperiod=60.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -5855,7 +5862,7 @@ void MainWindow::on_actionJT9_triggered() ui->decodedTextLabel2->setText("UTC dB T Freq Message"); } else { ui->cbAutoSeq->setChecked(false); - m_TRperiod=60; + m_TRperiod=60.0; ui->decodedTextLabel->setText("UTC dB DT Freq Message"); ui->decodedTextLabel2->setText("UTC dB DT Freq Message"); } @@ -5884,7 +5891,7 @@ void MainWindow::on_actionJT9_JT65_triggered() m_modeTx="JT9"; } m_nSubMode=0; //Dual-mode always means JT9 and JT65A - m_TRperiod=60; + m_TRperiod=60.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; @@ -5926,7 +5933,7 @@ void MainWindow::on_actionJT65_triggered() WSPR_config(false); switch_mode (Modes::JT65); if(m_modeTx!="JT65") on_pbTxMode_clicked(); - m_TRperiod=60; + m_TRperiod=60.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -6102,7 +6109,7 @@ void MainWindow::on_actionWSPR_triggered() WSPR_config(true); switch_mode (Modes::WSPR); m_modeTx="WSPR"; - m_TRperiod=120; + m_TRperiod=120.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -6130,7 +6137,7 @@ void MainWindow::on_actionWSPR_LF_triggered() m_mode="WSPR-LF"; switch_mode (Modes::WSPR); m_modeTx="WSPR-LF"; - m_TRperiod=240; + m_TRperiod=240.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_hsymStop=813; @@ -6146,7 +6153,7 @@ void MainWindow::on_actionEcho_triggered() on_actionJT4_triggered(); m_mode="Echo"; ui->actionEcho->setChecked(true); - m_TRperiod=3; + m_TRperiod=3.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -6425,7 +6432,6 @@ void MainWindow::on_bandComboBox_activated (int index) void MainWindow::band_changed (Frequency f) { -// bool monitor_off=!m_monitoring; // Set the attenuation value if options are checked QString curBand = ui->bandComboBox->currentText(); if (m_config.pwrBandTxMemory() && !m_tune) { @@ -6461,7 +6467,6 @@ void MainWindow::band_changed (Frequency f) if(r<0.9 or r>1.1) m_bVHFwarned=false; setRig (f); setXIT (ui->TxFreqSpinBox->value ()); -// if(monitor_off) monitor(false); } } @@ -7245,7 +7250,7 @@ void MainWindow::on_sbSubmode_valueChanged(int n) on_cbFast9_clicked(false); ui->cbFast9->setEnabled(false); ui->sbTR->setVisible(false); - m_TRperiod=60; + m_TRperiod=60.0; } else { ui->cbFast9->setEnabled(true); } @@ -7267,9 +7272,9 @@ void MainWindow::on_cbFast9_clicked(bool b) if(b) { m_TRperiod = ui->sbTR->value (); } else { - m_TRperiod=60; + m_TRperiod=60.0; } - progressBar.setMaximum(m_TRperiod); + progressBar.setMaximum(int(m_TRperiod)); m_wideGraph->setPeriod(m_TRperiod,m_nsps); fast_config(b); statusChanged (); @@ -7813,7 +7818,7 @@ void MainWindow::setRig (Frequency f) void MainWindow::fastPick(int x0, int x1, int y) { float pixPerSecond=12000.0/512.0; - if(m_TRperiod<30) pixPerSecond=12000.0/256.0; + if(m_TRperiod<30.0) pixPerSecond=12000.0/256.0; if(m_mode!="ISCAT" and m_mode!="MSK144") return; if(!m_decoderBusy) { dec_data.params.newdat=0; @@ -8014,7 +8019,7 @@ void MainWindow::write_transmit_entry (QString const& file_name) { QTextStream out(&f); auto time = QDateTime::currentDateTimeUtc (); - time = time.addSecs (-(time.time ().second () % m_TRperiod)); + time = time.addSecs (-fmod(double(time.time().second()),m_TRperiod)); out << time.toString("yyMMdd_hhmmss") << " Transmitting " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz " << m_modeTx @@ -8677,7 +8682,7 @@ void MainWindow::write_all(QString txRx, QString message) t.sprintf("%5d",ui->TxFreqSpinBox->value()); if (txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); - time = time.addSecs(-(time.time().second() % m_TRperiod)); + time = time.addSecs(-fmod(double(time.time().second()),m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); if (m_diskData) { if (m_fileDateTime.size()==11) { diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index eada752bc..ffa71c1fe 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -406,6 +406,7 @@ private: double m_s6; double m_tRemaining; + double m_TRperiod; float m_DTtol; float m_t0; @@ -428,7 +429,6 @@ private: qint32 m_ntr; qint32 m_tx; qint32 m_hsym; - qint32 m_TRperiod; qint32 m_nsps; qint32 m_hsymStop; qint32 m_inGain; diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 98c1af168..85c662a7a 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -241,9 +241,9 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) painter1.setPen(Qt::white); QString t; qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - int n=(ms/1000) % m_TRperiod; + int n = fmod(0.001*ms,m_TRperiod); QDateTime t1=QDateTime::currentDateTimeUtc().addSecs(-n); - if(m_TRperiod < 60 or m_mode=="FT4") { + if(m_TRperiod<60.0) { t=t1.toString("hh:mm:ss") + " " + m_rxBand; } else { t=t1.toString("hh:mm") + " " + m_rxBand; @@ -721,9 +721,9 @@ void CPlotter::mouseDoubleClickEvent (QMouseEvent * event) } } -void CPlotter::setNsps(int ntrperiod, int nsps) //setNsps +void CPlotter::setNsps(double trperiod, int nsps) //setNsps { - m_TRperiod=ntrperiod; + m_TRperiod=trperiod; m_nsps=nsps; m_fftBinWidth=1500.0/2048.0; if(m_nsps==15360) m_fftBinWidth=1500.0/2048.0; diff --git a/widgets/plotter.h b/widgets/plotter.h index e243c1777..2cbfd202b 100644 --- a/widgets/plotter.h +++ b/widgets/plotter.h @@ -56,7 +56,7 @@ public: void DrawOverlay(); int rxFreq(); void setFsample(int n); - void setNsps(int ntrperiod, int nsps); + void setNsps(double trperiod, int nsps); void setTxFreq(int n); void setMode(QString mode); void setSubMode(int n); @@ -145,6 +145,7 @@ private: double m_fftBinWidth; double m_dialFreq; double m_xOffset; + double m_TRperiod; float m_sum[2048]; @@ -161,7 +162,6 @@ private: qint32 m_h; qint32 m_h1; qint32 m_h2; - qint32 m_TRperiod; qint32 m_rxFreq; qint32 m_txFreq; qint32 m_fMin; diff --git a/widgets/widegraph.cpp b/widgets/widegraph.cpp index 1f3110cee..6234f731a 100644 --- a/widgets/widegraph.cpp +++ b/widgets/widegraph.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "ui_widegraph.h" #include "commons.h" #include "Configuration.hpp" @@ -23,7 +24,7 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) : ui(new Ui::WideGraph), m_settings (settings), m_palettes_path {":/Palettes"}, - m_ntr0 {0}, + m_tr0 {0.0}, m_n {0}, m_bHaveTransmitted {false} { @@ -186,9 +187,8 @@ void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dat // Time according to this computer qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - int ntr = (ms/1000) % m_TRperiod; - if((ndiskdata && ihsym <= m_waterfallAvg) || (!ndiskdata && - (ntrwidePlot->draw(swide,true,false); } } @@ -278,11 +278,11 @@ int WideGraph::fSpan() return ui->widePlot->fSpan (); } -void WideGraph::setPeriod(int ntrperiod, int nsps) //SetPeriod +void WideGraph::setPeriod(double trperiod, int nsps) //SetPeriod { - m_TRperiod=ntrperiod; + m_TRperiod=trperiod; m_nsps=nsps; - ui->widePlot->setNsps(ntrperiod, nsps); + ui->widePlot->setNsps(trperiod, nsps); } void WideGraph::setTxFreq(int n) //setTxFreq diff --git a/widgets/widegraph.h b/widgets/widegraph.h index 2b172ef7d..c87bab050 100644 --- a/widgets/widegraph.h +++ b/widgets/widegraph.h @@ -35,7 +35,7 @@ public: int fSpan(); void saveSettings(); void setFsample(int n); - void setPeriod(int ntrperiod, int nsps); + void setPeriod(double trperiod, int nsps); void setTxFreq(int n); void setMode(QString mode); void setSubMode(int n); @@ -95,10 +95,11 @@ private: WFPalette m_userPalette; QHash m_fMinPerBand; + double m_tr0; + double m_TRperiod; + qint32 m_waterfallAvg; - qint32 m_TRperiod; qint32 m_nsps; - qint32 m_ntr0; qint32 m_fMax; qint32 m_nSubMode; qint32 m_nsmo; From 912e40876a6c58ee5be719121eeb27dc161636bc Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 22 May 2019 13:06:16 -0400 Subject: [PATCH 08/29] Disable the "not_GA_warning_message", for now. --- widgets/mainwindow.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d40e0d1c9..b7a600bd8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -989,6 +989,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, void MainWindow::not_GA_warning_message () { + /* MessageBox::critical_message (this, "

" "This is a pre-release version of WSJT-X 2.1.0 made " @@ -997,6 +998,7 @@ void MainWindow::not_GA_warning_message () QDateTime now=QDateTime::currentDateTime(); QDateTime timeout=QDateTime(QDate(2019,6,7)); if(now.daysTo(timeout) < 0) Q_EMIT finished(); + */ } void MainWindow::initialize_fonts () @@ -3945,7 +3947,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { -// qDebug() << "cc onesec" << (SpecOp::RTTY == m_config.special_op_id()); +// qDebug() << "cc onesec" << m_bBestSPArmed; // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { From 7bfbca4532a658042111411739b39c51bec2a3d7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 22 May 2019 15:10:14 -0400 Subject: [PATCH 09/29] Increase the FT4 received record length to 21*3456 = 72576 ==> 6.048 s. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b7a600bd8..0242d570f 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1466,7 +1466,7 @@ void MainWindow::dataSink(qint64 frames) } m_fileToSave.clear (); int samples=m_TRperiod*12000; - if(m_mode=="FT4") samples=18*3456; + if(m_mode=="FT4") samples=21*3456; // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread From 80307b64ad026070c0615d85428141747b263bb3 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 22 May 2019 17:01:06 -0500 Subject: [PATCH 10/29] Add a temporary research tool. --- CMakeLists.txt | 4 +++ lib/ft4/averaged_mf.f90 | 64 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 lib/ft4/averaged_mf.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index eb8ece5ac..787ac38e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -383,6 +383,7 @@ set (wsjt_FSRCS lib/astro0.f90 lib/avecho.f90 lib/averms.f90 + lib/ft4/averaged_mf.f90 lib/azdist.f90 lib/badmsg.f90 lib/ft8/baseline.f90 @@ -1283,6 +1284,9 @@ target_link_libraries (msk144sim wsjt_fort wsjt_cxx) add_executable (ft4sim lib/ft4/ft4sim.f90 wsjtx.rc) target_link_libraries (ft4sim wsjt_fort wsjt_cxx) +add_executable (averaged_mf lib/ft4/averaged_mf.f90 wsjtx.rc) +target_link_libraries (averaged_mf wsjt_fort wsjt_cxx) + add_executable (ft4sim_mult lib/ft4/ft4sim_mult.f90 wsjtx.rc) target_link_libraries (ft4sim_mult wsjt_fort wsjt_cxx) diff --git a/lib/ft4/averaged_mf.f90 b/lib/ft4/averaged_mf.f90 new file mode 100644 index 000000000..2986572b3 --- /dev/null +++ b/lib/ft4/averaged_mf.f90 @@ -0,0 +1,64 @@ +program averaged_mf + + parameter (nsps=32) + complex cgfsk(3*nsps,64) + complex clin(3*nsps,64) + complex cavg(3*nsps,4) + complex cavl(3*nsps,4) + real pulse(3*nsps) + real dphi(3*nsps) + + do i=1,3*NSPS + t=(i-1.5*nsps)/real(nsps) + pulse(i)=gfsk_pulse(1.0,t) + enddo + + twopi=8.0*atan(1.0) + hmod=1.0 + dphi_peak=twopi*hmod/real(nsps) + + do iwf=1,64 + i0=mod((iwf-1)/16,4) + i1=mod((iwf-1)/4,4) + i2=mod(iwf-1,4) + dphi=0.0 + dphi(1:64)=dphi_peak*pulse(33:96)*i1 + dphi(1:96)=dphi(1:96)+dphi_peak*pulse(1:96)*i0 + dphi(33:96)=dphi(33:96)+dphi_peak*pulse(1:64)*i2 + phi=0.0 + do j=1,96 + cgfsk(j,iwf)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + cgfsk(:,iwf)=cgfsk(:,iwf)*conjg(cgfsk(48,iwf)) + enddo + + do iwf=1,64 + i0=mod((iwf-1)/16,4) + i1=mod((iwf-1)/4,4) + i2=mod(iwf-1,4) + dphi=0.0 + dphi(1:32)=dphi_peak*i1 + dphi(33:64)=dphi_peak*i0 + dphi(65:96)=dphi_peak*i2 + phi=0.0 + do j=1,96 + clin(j,iwf)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + enddo + + + do i=1,4 + ib=(i-1)*16+1 + ie=ib+15 + cavg(:,i)=sum(cgfsk(:,ib:ie),2)/16.0 + cavl(:,i)=sum(clin(:,ib:ie),2)/16.0 + do j=1,96 +write(*,*) j +write(21,*) i,j,real(cavg(j,i)),imag(cavg(j,i)),real(cavl(j,i)),imag(cavl(j,i)) + enddo + enddo + +end program averaged_mf + From a9623703b3ed1bdbe6c7ff06dd33f0d3d72bec57 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 22 May 2019 17:02:15 -0500 Subject: [PATCH 11/29] FT4: Change Fortran code to NSPS=576 and make necessary accompanying changes on the C++ side. Basically works except that Tx audio has incorrect DT and audio is truncated at the end. Also, command line decoding using JT9 is not as sensitive as decoding from within WSJT-X. --- Modulator.cpp | 4 ++-- lib/ft4/ft4_downsample.f90 | 2 +- lib/ft4/ft4_params.f90 | 12 ++++++------ lib/ft4/ft4sim.f90 | 5 ++--- lib/ft4/gen_ft4wave.f90 | 4 ++-- lib/ft4/getcandidates4.f90 | 2 +- lib/ft4/subtractft4.f90 | 10 +++++----- lib/ft4_decode.f90 | 12 ++++++------ widgets/mainwindow.cpp | 10 +++++----- widgets/plotter.cpp | 2 +- 10 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Modulator.cpp b/Modulator.cpp index e5587120b..63c4e1ff0 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -91,8 +91,8 @@ 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==105 and framesPerSymbol==512 - and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) { + if(symbolsLength==105 and framesPerSymbol==576 + and (toneSpacing==12000.0/576.0 or toneSpacing==-2.0)) { //### FT4 parameters m_ic=0; m_silentFrames=0; diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index d3760a506..ed55fb9a0 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -4,7 +4,7 @@ subroutine ft4_downsample(dd,newdata,f0,c) ! Output: Complex data in c(), sampled at 1200 Hz include 'ft4_params.f90' - parameter (NFFT2=NMAX/16) + parameter (NFFT2=NMAX/NDOWN) real dd(NMAX) complex c(0:NMAX/NDOWN-1) complex c1(0:NFFT2-1) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 46630cc25..2914260d8 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -6,11 +6,11 @@ parameter (ND=87) !Data symbols parameter (NS=16) !Sync symbols parameter (NN=NS+ND) !Sync and data symbols (103) parameter (NN2=NS+ND+2) !Total channel symbols (105) -parameter (NSPS=512) !Samples per symbol at 12000 S/s -parameter (NZ=NSPS*NN) !Sync and Data samples (52736) -parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) -parameter (NMAX=18*3456) !Samples in iwave -parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSPS=576) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Sync and Data samples (59328) +parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (60480) +parameter (NMAX=21*3456) !Samples in iwave (72576) +parameter (NFFT1=2304, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS) !Coarse time-sync step size parameter (NHSYM=(NMAX-NFFT1)/NSTEP) !Number of symbol spectra (1/4-sym steps) -parameter (NDOWN=16) !Downsample factor +parameter (NDOWN=18) !Downsample factor diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 94ab8218f..e35e5ad8a 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -6,7 +6,7 @@ program ft4sim use packjt77 include 'ft4_params.f90' !Set various constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=18*3456) !62208 + parameter (NZZ=21*3456) !72576 type(hdr) h !Header for .wav file character arg*12,fname*17 character msg37*37,msgsent37*37 @@ -51,12 +51,11 @@ program ft4sim hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) tt=NSPS*dt !Duration of symbols (s) baud=1.0/tt !Keying rate (baud) - txt=NZ*dt !Transmission length (s) + txt=NZ2*dt !Transmission length (s) bandwidth_ratio=2500.0/(fs/2.0) sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) if(snrdb.gt.90.0) sig=1.0 - txt=NN*NSPS/12000.0 ! Source-encode, then get itone() i3=-1 diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 index c4cd2eafb..823993612 100644 --- a/lib/ft4/gen_ft4wave.f90 +++ b/lib/ft4/gen_ft4wave.f90 @@ -2,8 +2,8 @@ subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) real wave(nwave) complex cwave(nwave) - real pulse(6144) !512*4*3 - real dphi(0:240000-1) + real pulse(6912) !576*4*3 + real dphi(0:250000-1) integer itone(nsym) logical first data first/.true./ diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index badbbcfb5..97aeb54bf 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -61,7 +61,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! call ft4_baseline(savg,nfa,nfb,sbase) ! savsm=savsm/sbase - f_offset = -1.5*12000/512 + f_offset = -1.5*12000.0/NSPS do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. & savsm(i).ge.syncmin) then diff --git a/lib/ft4/subtractft4.f90 b/lib/ft4/subtractft4.f90 index 83470d7ea..ae104ddb3 100644 --- a/lib/ft4/subtractft4.f90 +++ b/lib/ft4/subtractft4.f90 @@ -9,8 +9,8 @@ subroutine subtractft4(dd,itone,f0,dt) use timer_module, only: timer - parameter (NMAX=18*3456,NFRAME=(103+2)*512) - parameter (NFFT=NMAX,NFILT=1400) + parameter (NMAX=21*3456,NSPS=576,NFFT=NMAX,NFILT=1400) + parameter (NFRAME=(103+2)*NSPS) real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk complex cref,camp,cfilt,cw integer itone(103) @@ -19,13 +19,13 @@ subroutine subtractft4(dd,itone,f0,dt) common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX),xjunk(NFRAME) save first - nstart=dt*12000+1-512 + nstart=dt*12000+1-NSPS nsym=103 - nsps=512 fs=12000.0 icmplx=1 bt=1.0 - call gen_ft4wave(itone,nsym,nsps,fs,f0,cref,xjunk,icmplx,NFRAME) + nss=NSPS + call gen_ft4wave(itone,nsym,nss,fs,f0,cref,xjunk,icmplx,NFRAME) camp=0. do i=1,nframe id=nstart-1+i diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index aa27387ce..cf4acaab7 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -249,14 +249,14 @@ contains if(dobigfft) dobigfft=.false. sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) -! Sample rate is now 12000/16 = 750 samples/second +! Sample rate is now 12000/18 = 666.67 samples/second do isync=1,2 if(isync.eq.1) then idfmin=-12 idfmax=12 idfstp=3 - ibmin=-200 - ibmax=950 + ibmin=-333 + ibmax=1000 ibstp=4 else idfmin=idfbest-4 @@ -493,7 +493,7 @@ contains call unpack77(c77,1,message,unpk77_success) if(unpk77_success.and.dosubtract) then call get_ft4_tones_from_77bits(message77,i4tone) - dt=real(ibest)/750.0 + dt=real(ibest)/666.67 call timer('subtract',0) call subtractft4(dd,i4tone,f0,dt) call timer('subtract',1) @@ -506,12 +506,12 @@ contains ndecodes=ndecodes+1 decodes(ndecodes)=message if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.0 + xsnr=10*log10(snr)-14.8 else xsnr=-20.0 endif nsnr=nint(max(-20.0,xsnr)) - xdt=ibest/750.0 - 0.5 + xdt=ibest/666.67 - 0.5 !write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b7a600bd8..0676e89be 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1466,7 +1466,7 @@ void MainWindow::dataSink(qint64 frames) } m_fileToSave.clear (); int samples=m_TRperiod*12000; - if(m_mode=="FT4") samples=18*3456; + if(m_mode=="FT4") samples=21*3456; // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread @@ -3428,7 +3428,7 @@ void MainWindow::guiUpdate() if(m_TRperiod==0) m_TRperiod=60.0; txDuration=0.0; - if(m_modeTx=="FT4") txDuration=0.35 + 105*512/12000.0; // FT4 + if(m_modeTx=="FT4") txDuration=1.0 + 105*576/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 @@ -3748,7 +3748,7 @@ void MainWindow::guiUpdate() genft4_(message, &ichk, msgsent, const_cast (ft4msgbits), const_cast(itone), 37, 37); int nsym=103; - int nsps=4*512; + int nsps=4*576; float fsample=48000.0; float f0=ui->TxFreqSpinBox->value() - m_XIT; int nwave=(nsym+2)*nsps; @@ -5652,7 +5652,7 @@ void MainWindow::on_actionFT4_triggered() Q_EMIT FFTSize (m_FFTSize); m_hsymStop=18; setup_status_bar (bVHF); - m_toneSpacing=12000.0/512.0; + m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); @@ -6949,7 +6949,7 @@ void MainWindow::transmit (double snr) m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform. Q_EMIT sendMessage (NUM_FT4_SYMBOLS, - 512.0, ui->TxFreqSpinBox->value() - m_XIT, + 576.0, ui->TxFreqSpinBox->value() - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel(), true, false, snr, m_TRperiod); } diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 85c662a7a..badeff57b 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -411,7 +411,7 @@ void CPlotter::DrawOverlay() //DrawOverlay() } float bw=9.0*12000.0/m_nsps; //JT9 - if(m_mode=="FT4") bw=3*12000.0/512.0; //FT4 ### (3x, or 4x???) ### + if(m_mode=="FT4") bw=3*12000.0/576.0; //FT4 ### (3x, or 4x???) ### if(m_mode=="FT8") bw=7*12000.0/1920.0; //FT8 if(m_mode=="JT4") { //JT4 From 8761ccef9b55d6dc3d7eb1c978a477c3c408d376 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 09:23:58 -0400 Subject: [PATCH 12/29] Received data length for FT4 should be 21*3456 = 72576 samples = 6.048 s. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0676e89be..494607fbf 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1324,7 +1324,7 @@ void MainWindow::fixStop() } else if (m_mode=="FT8") { m_hsymStop=50; } else if (m_mode=="FT4") { - m_hsymStop=18; + m_hsymStop=21; } } @@ -5650,7 +5650,7 @@ void MainWindow::on_actionFT4_triggered() m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=18; + m_hsymStop=21; setup_status_bar (bVHF); m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); From 53c6b50d900cde51973252170e8ac916f83d4dfa Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 23 May 2019 09:17:00 -0500 Subject: [PATCH 13/29] FT4: change m_hsymStop from 18 to 21 --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0676e89be..494607fbf 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1324,7 +1324,7 @@ void MainWindow::fixStop() } else if (m_mode=="FT8") { m_hsymStop=50; } else if (m_mode=="FT4") { - m_hsymStop=18; + m_hsymStop=21; } } @@ -5650,7 +5650,7 @@ void MainWindow::on_actionFT4_triggered() m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=18; + m_hsymStop=21; setup_status_bar (bVHF); m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); From 932e100a2cba479a6b64e7c5b98948aab9a6e1ba Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 23 May 2019 09:55:50 -0500 Subject: [PATCH 14/29] Update jt9.f90 to account for changes to FT4. --- lib/jt9.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 68984e33a..67e7ac319 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -226,7 +226,7 @@ program jt9 endif shared_data%id2=0 !??? Why is this necessary ??? - if(mode.eq.5) npts=62208 + if(mode.eq.5) npts=21*3456 do iblk=1,npts/kstep k=iblk*kstep if(mode.eq.8 .and. k.gt.179712) exit From dfedc40db1569aee2db441f93f18aa19e8518dee Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 13:24:35 -0400 Subject: [PATCH 15/29] Fix some timing issues resulting from non-integral m_TRperiod for FT4. --- Detector.cpp | 21 ++++++--------------- Detector.hpp | 1 - Modulator.cpp | 37 +++++++++++++++---------------------- widgets/mainwindow.cpp | 8 ++++---- 4 files changed, 25 insertions(+), 42 deletions(-) diff --git a/Detector.cpp b/Detector.cpp index 3bf5cf410..05a631b13 100644 --- a/Detector.cpp +++ b/Detector.cpp @@ -55,12 +55,14 @@ void Detector::clear () qint64 Detector::writeData (char const * data, qint64 maxSize) { - int ns=secondInPeriod(); - if(ns < m_ns) { // When ns has wrapped around to zero, restart the buffers + static unsigned mstr0=999999; + qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; + unsigned mstr = ms0 % int(1000.0*m_period); // ms into the nominal Tx start time + if(mstr < mstr0) { //When mstr has wrapped around to 0, restart the buffer dec_data.params.kin = 0; m_bufferPos = 0; } - m_ns=ns; + mstr0=mstr; // no torn frames Q_ASSERT (!(maxSize % static_cast (bytesPerFrame ()))); @@ -73,7 +75,7 @@ qint64 Detector::writeData (char const * data, qint64 maxSize) if (framesAccepted < static_cast (maxSize / bytesPerFrame ())) { qDebug () << "dropped " << maxSize / bytesPerFrame () - framesAccepted << " frames of data on the floor!" - << dec_data.params.kin << ns; + << dec_data.params.kin << mstr; } for (unsigned remaining = framesAccepted; remaining; ) { @@ -121,14 +123,3 @@ qint64 Detector::writeData (char const * data, qint64 maxSize) return maxSize; // we drop any data past the end of the buffer on // the floor until the next period starts } - -unsigned Detector::secondInPeriod () const -{ - // we take the time of the data as the following assuming no latency - // delivering it to us (not true but close enough for us) - qint64 now (QDateTime::currentMSecsSinceEpoch ()); - - unsigned secondInToday ((now % 86400000LL) / 1000); - unsigned secInPeriod = fmod(double(secondInToday),m_period); - return secInPeriod; -} diff --git a/Detector.hpp b/Detector.hpp index 404951a90..4d584c130 100644 --- a/Detector.hpp +++ b/Detector.hpp @@ -41,7 +41,6 @@ protected: private: void clear (); // discard buffer contents - unsigned secondInPeriod () const; unsigned m_frameRate; double m_period; diff --git a/Modulator.cpp b/Modulator.cpp index 63c4e1ff0..4d0171770 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -32,8 +32,8 @@ Modulator::Modulator (unsigned frameRate, double periodLengthInSeconds, , m_phi {0.0} , m_toneSpacing {0.0} , m_fSpread {0.0} - , m_frameRate {frameRate} , m_period {periodLengthInSeconds} + , m_frameRate {frameRate} , m_state {Idle} , m_tuning {false} , m_cwLevel {false} @@ -50,13 +50,10 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, Q_ASSERT (stream); // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; + unsigned mstr = ms0 % int(1000.0*m_period); // ms into the nominal Tx start time -// qDebug() << "ModStart" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.sss"); - - if(m_state != Idle) stop (); - + if(m_state != Idle) stop(); m_quickClose = false; - m_symbolsLength = symbolsLength; m_isym0 = std::numeric_limits::max (); // big number m_frequency0 = 0.; @@ -68,37 +65,33 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, m_toneSpacing = toneSpacing; m_bFastMode=fastMode; m_TRperiod=TRperiod; - unsigned delay_ms = 1920 == m_nsps && 15 == m_period ? 500 : 1000; + unsigned delay_ms=1000; + if(m_nsps==1920) delay_ms=500; //FT8 + if(m_nsps==576) delay_ms=300; //FT4 - // noise generator parameters +// noise generator parameters if (m_addNoise) { m_snr = qPow (10.0, 0.05 * (dBSNR - 6.0)); m_fac = 3000.0; if (m_snr > 1.0) m_fac = 3000.0 / m_snr; } - unsigned mstr = ms0 % int(1000.0*m_period); // ms in period - - // round up to an exact portion of a second that allows for startup - // delays +// round up to an exact portion of a second that allows for startup delays m_ic = (mstr / delay_ms) * m_frameRate * delay_ms / 1000; if(m_bFastMode) m_ic=0; m_silentFrames = 0; - // calculate number of silent frames to send, so that audio will start at - // the nominal time "delay_ms" into the Tx sequence. +// calculate number of silent frames to send, so that audio will start at +// the nominal time "delay_ms" into the Tx sequence. if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } - if(symbolsLength==105 and framesPerSymbol==576 - and (toneSpacing==12000.0/576.0 or toneSpacing==-2.0)) { -//### FT4 parameters - m_ic=0; - m_silentFrames=0; - } -// qDebug() << "Mod AA" << symbolsLength << framesPerSymbol << toneSpacing; -// qDebug() << "Mod AB" << delay_ms << mstr << m_ic << m_silentFrames; + +// qDebug() << "aa" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.zzz") +// << m_ic << m_silentFrames << m_silentFrames/48000.0 +// << mstr << fmod(double(ms0),1000.0*m_period); + initialize (QIODevice::ReadOnly, channel); Q_EMIT stateChanged ((m_state = (synchronize && m_silentFrames) ? diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 494607fbf..9b8a7b26a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2838,12 +2838,12 @@ void MainWindow::decode() //decode() dec_data.params.nutc=100*ihr + imin; if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9 or m_mode=="FT8" or m_mode=="FT4") { qint64 ms=1000.0*(2.0-m_TRperiod); - if(m_mode=="FT4") ms=1000.0*(3.0-m_TRperiod); + if(m_mode=="FT4") ms=1000.0*(2.0-m_TRperiod); QDateTime t=QDateTime::currentDateTimeUtc().addMSecs(ms); ihr=t.toString("hh").toInt(); imin=t.toString("mm").toInt(); int isec=t.toString("ss").toInt(); - if(m_mode!="FT4") isec=isec - fmod(double(isec),m_TRperiod); + isec=isec - fmod(double(isec),m_TRperiod); dec_data.params.nutc=10000*ihr + 100*imin + isec; } } @@ -3498,9 +3498,9 @@ void MainWindow::guiUpdate() if(m_transmitting or m_auto or m_tune) { m_dateTimeLastTX = QDateTime::currentDateTimeUtc (); -// Check for "txboth" (testing purposes only) +// Check for "txboth" (FT4 testing purposes only) QFile f(m_appDir + "/txboth"); - if(f.exists() and fmod(tsec,m_TRperiod) < (1.0 + 85.0*m_nsps/12000.0)) m_bTxTime=true; + if(f.exists() and fmod(tsec,m_TRperiod) < (0.5 + 105.0*576.0/12000.0)) m_bTxTime=true; // Don't transmit another mode in the 30 m WSPR sub-band Frequency onAirFreq = m_freqNominal + ui->TxFreqSpinBox->value(); From 2ab4b59d88959a4503dcdae27e2a0db0b3d05a88 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 14:06:00 -0400 Subject: [PATCH 16/29] Fix ft4sim_mult for 7.5 s T/R sequences. --- lib/ft4/ft4sim_mult.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 313093289..582a48f77 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -6,7 +6,7 @@ program ft4sim_mult use packjt77 include 'ft4_params.f90' !FT4 protocol constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=65760) !Length of .wav file (4.48+1.0)*12000 + parameter (NZZ=72576) !Length of .wav file (21*3456) type(hdr) h !Header for .wav file character arg*12,fname*17,cjunk*4 character msg37*37,msgsent37*37,c77*77 @@ -55,8 +55,8 @@ program ft4sim_mult read(10,1003,end=100) cjunk,isnr,xdt0,ifreq,msg37 1003 format(a4,30x,i3,f5.1,i5,1x,a37) if(cjunk.eq.'File') go to 100 - if(isnr.lt.-16) isnr=-16 - f0=ifreq*93.75/50.0 + if(isnr.lt.-17) isnr=-17 + f0=ifreq*960.0/576.0 call random_number(r) xdt=r-0.5 ! Source-encode, then get itone() From 7334ebb20b2f55dbdf045ac1e17cf861dc572fc3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 14:31:08 -0400 Subject: [PATCH 17/29] New user option: "Calling CQ forces Call 1st". --- Configuration.cpp | 6 +++ Configuration.hpp | 1 + Configuration.ui | 117 ++++++++++++++++++++++------------------- widgets/mainwindow.cpp | 3 +- 4 files changed, 71 insertions(+), 56 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index cce8db23c..5526a1ec4 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -609,6 +609,7 @@ private: bool miles_; bool quick_call_; bool disable_TX_on_73_; + bool force_call_1st_; bool alternate_bindings_; int watchdog_; bool TX_messages_; @@ -705,6 +706,7 @@ bool Configuration::clear_DX () const {return m_->clear_DX_;} bool Configuration::miles () const {return m_->miles_;} bool Configuration::quick_call () const {return m_->quick_call_;} bool Configuration::disable_TX_on_73 () const {return m_->disable_TX_on_73_;} +bool Configuration::force_call_1st() const {return m_->force_call_1st_;} bool Configuration::alternate_bindings() const {return m_->alternate_bindings_;} int Configuration::watchdog () const {return m_->watchdog_;} bool Configuration::TX_messages () const {return m_->TX_messages_;} @@ -1242,6 +1244,7 @@ void Configuration::impl::initialize_models () ui_->miles_check_box->setChecked (miles_); ui_->quick_call_check_box->setChecked (quick_call_); ui_->disable_TX_on_73_check_box->setChecked (disable_TX_on_73_); + ui_->force_call_1st_check_box->setChecked (force_call_1st_); ui_->alternate_bindings_check_box->setChecked (alternate_bindings_); ui_->tx_watchdog_spin_box->setValue (watchdog_); ui_->TX_messages_check_box->setChecked (TX_messages_); @@ -1496,6 +1499,7 @@ void Configuration::impl::read_settings () miles_ = settings_->value ("Miles", false).toBool (); quick_call_ = settings_->value ("QuickCall", false).toBool (); disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool (); + force_call_1st_ = settings_->value ("ForceCallFirst", false).toBool (); alternate_bindings_ = settings_->value ("AlternateBindings", false).toBool (); watchdog_ = settings_->value ("TxWatchdog", 6).toInt (); TX_messages_ = settings_->value ("Tx2QSO", true).toBool (); @@ -1598,6 +1602,7 @@ void Configuration::impl::write_settings () settings_->setValue ("Miles", miles_); settings_->setValue ("QuickCall", quick_call_); settings_->setValue ("73TxDisable", disable_TX_on_73_); + settings_->setValue ("ForceCallFirst", force_call_1st_); settings_->setValue ("AlternateBindings", alternate_bindings_); settings_->setValue ("TxWatchdog", watchdog_); settings_->setValue ("Tx2QSO", TX_messages_); @@ -2042,6 +2047,7 @@ void Configuration::impl::accept () miles_ = ui_->miles_check_box->isChecked (); quick_call_ = ui_->quick_call_check_box->isChecked (); disable_TX_on_73_ = ui_->disable_TX_on_73_check_box->isChecked (); + force_call_1st_ = ui_->force_call_1st_check_box->isChecked (); alternate_bindings_ = ui_->alternate_bindings_check_box->isChecked (); watchdog_ = ui_->tx_watchdog_spin_box->value (); TX_messages_ = ui_->TX_messages_check_box->isChecked (); diff --git a/Configuration.hpp b/Configuration.hpp index 991e126fb..0ed7a4057 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -127,6 +127,7 @@ public: bool miles () const; bool quick_call () const; bool disable_TX_on_73 () const; + bool force_call_1st() const; bool alternate_bindings() const; int watchdog () const; bool TX_messages () const; diff --git a/Configuration.ui b/Configuration.ui index 9701fb633..9e36e7ee1 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -301,7 +301,14 @@ Behavior - + + + + Decode after EME delay + + + + @@ -347,10 +354,27 @@ - - + + - Decode after EME delay + Enable VHF/UHF/Microwave features + + + + + + + Single decode + + + + + + + <html><head/><body><p>Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.</p></body></html> + + + Allow Tx frequency changes while transmitting @@ -367,31 +391,35 @@ - - - - Single decode - - - - - - - Enable VHF/UHF/Microwave features - - - - - + + - <html><head/><body><p>Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.</p></body></html> + <html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html> - Allow Tx frequency changes while transmitting + Monitor returns to last used frequency - + + + + Alternate F1-F6 bindings + + + + + + + Turns off automatic transmissions after sending a 73 or any other free +text message. + + + Di&sable Tx after sending 73 + + + + @@ -444,34 +472,6 @@ quiet period when decoding is done. - - - - <html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html> - - - Monitor returns to last used frequency - - - - - - - Alternate F1-F6 bindings - - - - - - - Turns off automatic transmissions after sending a 73 or any other free -text message. - - - Di&sable Tx after sending 73 - - - @@ -482,6 +482,13 @@ text message. + + + + Calling CQ forces Call 1st + + + @@ -3078,13 +3085,13 @@ Right click for insert and delete options. + + - - - - + + diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 9b8a7b26a..23fa97772 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3947,7 +3947,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { -// qDebug() << "cc onesec" << m_bBestSPArmed; +// qDebug() << "onesec" << m_config.force_call_1st(); // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { @@ -4076,6 +4076,7 @@ void MainWindow::startTx2() t=ui->tx6->text(); if(t.mid(0,1)=="#") snr=t.mid(1,5).toDouble(); if(snr>0.0 or snr < -50.0) snr=99.0; + if((m_ntx==6 or m_ntx==7) and m_config.force_call_1st()) ui->cbFirst->setChecked(true); transmit (snr); ui->signal_meter_widget->setValue(0,0); if(m_mode=="Echo" and !m_tune) m_bTransmittedEcho=true; From 26f7fed8aa50f3b96b036622c0fc8378078a30ca Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 14:50:17 -0400 Subject: [PATCH 18/29] New FT4 sample file. --- samples/FT4/000000_000002.wav | Bin 0 -> 145196 bytes samples/FT4/190106_000112.wav | Bin 131564 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 samples/FT4/000000_000002.wav delete mode 100644 samples/FT4/190106_000112.wav diff --git a/samples/FT4/000000_000002.wav b/samples/FT4/000000_000002.wav new file mode 100644 index 0000000000000000000000000000000000000000..e5cdc88040b477cad842d51c4dd8e5fb6fdbe803 GIT binary patch literal 145196 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 literal 0 HcmV?d00001 diff --git a/samples/FT4/190106_000112.wav b/samples/FT4/190106_000112.wav deleted file mode 100644 index 2c6e0a9d49a912b80878257a3a16d0577749f30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131564 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%0DZXk>CWQLI&1lzy=CE9hR1!&#int8)fU|>6Zm-27 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 aY$L@cEe0f>N7kKb(y8Iop8K7IU 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 From 637d4d04114a8b75c91a6ec2612c9b5c850bd2b4 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 24 May 2019 08:31:56 -0400 Subject: [PATCH 19/29] "Force Call 1st" must also force AutoSeq. --- widgets/mainwindow.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 23fa97772..54422a8b7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4076,7 +4076,10 @@ void MainWindow::startTx2() t=ui->tx6->text(); if(t.mid(0,1)=="#") snr=t.mid(1,5).toDouble(); if(snr>0.0 or snr < -50.0) snr=99.0; - if((m_ntx==6 or m_ntx==7) and m_config.force_call_1st()) ui->cbFirst->setChecked(true); + if((m_ntx==6 or m_ntx==7) and m_config.force_call_1st()) { + ui->cbAutoSeq->setChecked(true); + ui->cbFirst->setChecked(true); + } transmit (snr); ui->signal_meter_widget->setValue(0,0); if(m_mode=="Echo" and !m_tune) m_bTransmittedEcho=true; @@ -4608,7 +4611,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie logQSOTimer.start(0); m_ntx=6; ui->txrb6->setChecked(true); - ui->cbFirst->setChecked(false); } else { m_ntx=5; ui->txrb5->setChecked(true); From d5cd9db6961983576bf3e1475cea2b5356b52f48 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 24 May 2019 10:42:30 -0400 Subject: [PATCH 20/29] In FT4 mode, Shift+F11/F12 should move Tx freq by +/- 100 Hz. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 54422a8b7..60a331111 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1986,7 +1986,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { int offset=60; - if(m_mode=="FT4") offset=120; + if(m_mode=="FT4") offset=100; ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()-offset); } else{ bumpFqso(n); @@ -2002,7 +2002,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { int offset=60; - if(m_mode=="FT4") offset=120; + if(m_mode=="FT4") offset=100; ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()+offset); } else { bumpFqso(n); From a521000775199f1e67036ea74867518c6d8ba8f7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 24 May 2019 11:04:30 -0400 Subject: [PATCH 21/29] No need to test FT4 and FT8 messages for trailing "f" or "d" indicators. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 60a331111..99bcc410d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3070,7 +3070,7 @@ void MainWindow::readFromStdout() //readFromStdout } return; } else { - if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") { + if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64") { int n=line_read.indexOf("f"); if(n<0) n=line_read.indexOf("d"); if(n>0) { From 883c914d29693bca8c269339df2c6823187fb700 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 24 May 2019 20:09:00 -0500 Subject: [PATCH 22/29] Make DT=0 mean that the first full symbol starts at t=0.5s. Formerly DT=0 corresponded to the beginning of the ramp-up symbol. Fix a bug that caused signals with large DT to wrap around instead of truncating them. --- lib/ft4/ft4sim.f90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index e35e5ad8a..959cf423c 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -110,8 +110,10 @@ program ft4sim c0((NN+1)*NSPS:(NN+2)*NSPS-1)=c0((NN+1)*NSPS:(NN+2)*NSPS-1)*(1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS) ))/2.0 c0((NN+2)*NSPS:)=0. - k=nint((xdt+0.5)/dt) + k=nint((xdt+0.5)/dt)-NSPS c0=cshift(c0,-k) + if(k.gt.0) c0(0:k-1)=0.0 + if(k.lt.0) c0(NZZ+k:NZZ-1)=0.0 do ifile=1,nfiles c=c0 From 6dbaa28a014fcb2a2a2293af2ec69d1e422a348d Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 24 May 2019 20:11:20 -0500 Subject: [PATCH 23/29] Fix DT search range so that it includes DT= +/-1.0. --- lib/ft4_decode.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index cf4acaab7..001ee4c33 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -255,8 +255,8 @@ contains idfmin=-12 idfmax=12 idfstp=3 - ibmin=-333 - ibmax=1000 + ibmin=-344 + ibmax=1012 ibstp=4 else idfmin=idfbest-4 From 3bc5e538d29e97ca1fc1981af85094812fdde260 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 25 May 2019 10:58:04 -0500 Subject: [PATCH 24/29] FT4: Implement polynomial baseline fit. --- CMakeLists.txt | 1 + lib/ft4/ft4_baseline.f90 | 49 ++++++++++++++++++++++++++++++++++++++ lib/ft4/ft4sim_mult.f90 | 2 -- lib/ft4/getcandidates4.f90 | 21 +++++----------- 4 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 lib/ft4/ft4_baseline.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 787ac38e9..74f382421 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,6 +387,7 @@ set (wsjt_FSRCS lib/azdist.f90 lib/badmsg.f90 lib/ft8/baseline.f90 + lib/ft4/ft4_baseline.f90 lib/bpdecode40.f90 lib/bpdecode128_90.f90 lib/ft8/bpdecode174_91.f90 diff --git a/lib/ft4/ft4_baseline.f90 b/lib/ft4/ft4_baseline.f90 new file mode 100644 index 000000000..afdbeb5eb --- /dev/null +++ b/lib/ft4/ft4_baseline.f90 @@ -0,0 +1,49 @@ +subroutine ft4_baseline(s,nfa,nfb,sbase) + +! Fit baseline to spectrum (for FT8) +! Input: s(npts) Linear scale in power +! Output: sbase(npts) Baseline + + include 'ft4_params.f90' + implicit real*8 (a-h,o-z) + real*4 s(NH1) + real*4 sbase(NH1) + real*4 base + real*8 x(1000),y(1000),a(5) + data nseg/10/,npct/10/ + + df=12000.0/NFFT1 !5.21 Hz + ia=max(nint(200.0/df),nfa) + ib=min(NH1,nfb) + do i=ia,ib + s(i)=10.0*log10(s(i)) !Convert to dB scale + enddo + + nterms=5 + nlen=(ib-ia+1)/nseg !Length of test segment + i0=(ib-ia+1)/2 !Midpoint + k=0 + do n=1,nseg !Loop over all segments + ja=ia + (n-1)*nlen + jb=ja+nlen-1 + call pctile(s(ja),nlen,npct,base) !Find lowest npct of points + do i=ja,jb + if(s(i).le.base) then + if (k.lt.1000) k=k+1 !Save all "lower envelope" points + x(k)=i-i0 + y(k)=s(i) + endif + enddo + enddo + kz=k + a=0. + call polyfit(x,y,y,kz,nterms,0,a,chisqr) !Fit a low-order polynomial + do i=ia,ib + t=i-i0 + sbase(i)=a(1)+t*(a(2)+t*(a(3)+t*(a(4)+t*(a(5))))) + 0.65 +! write(51,3051) i*df,s(i),sbase(i) +!3051 format(3f12.3) + sbase(i)=10**(sbase(i)/10.0) + enddo + return +end subroutine ft4_baseline diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 582a48f77..d93978e5f 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -17,8 +17,6 @@ program ft4sim_mult integer itone(NN) integer*1 msgbits(77) integer*2 iwave(NZZ) !Generated full-length waveform - integer icos4(4) - data icos4/0,1,3,2/ ! Get command-line argument(s) nargs=iargc() diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 97aeb54bf..dd875336d 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -10,7 +10,6 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & complex cx(0:NH1) real candidate(3,maxcand) real dd(NMAX) - integer indx(NH1) integer ipk(1) equivalence (x,cx) logical first @@ -26,7 +25,6 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! Compute symbol spectra, stepping by NSTEP steps. savg=0. - tstep=NSTEP/12000.0 df=12000.0/NFFT1 fac=1.0/300.0 do j=1,NHSYM @@ -40,27 +38,20 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & enddo savg=savg + s(1:NH1,j) !Average spectrum enddo + savg=savg/NHSYM savsm=0. do i=8,NH1-7 savsm(i)=sum(savg(i-7:i+7))/15. enddo + nfa=fa/df - if(nfa.lt.1) nfa=1 + if(nfa.lt.8) nfa=8 nfb=fb/df if(nfb.gt.nint(5000.0/df)) nfb=nint(5000.0/df) - n300=300/df - n2500=2500/df -! np=nfb-nfa+1 - np=n2500-n300+1 - indx=0 - call indexx(savsm(n300:n2500),np,indx) - xn=savsm(n300+indx(nint(0.3*np))) ncand=0 - if(xn.le.1.e-8) return - savsm=savsm/xn -! call ft4_baseline(savg,nfa,nfb,sbase) -! savsm=savsm/sbase - + call ft4_baseline(savg,nfa,nfb,sbase) + if(any(sbase(nfa:nfb).le.0)) return + savsm(nfa:nfb)=savsm(nfa:nfb)/sbase(nfa:nfb) f_offset = -1.5*12000.0/NSPS do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. & From 7e4de9162683fc25b098657270dd3232d12e0781 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 09:52:17 -0500 Subject: [PATCH 25/29] Fix a comment. --- lib/ft4/ft4_baseline.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4_baseline.f90 b/lib/ft4/ft4_baseline.f90 index afdbeb5eb..85a60d9ec 100644 --- a/lib/ft4/ft4_baseline.f90 +++ b/lib/ft4/ft4_baseline.f90 @@ -1,6 +1,6 @@ subroutine ft4_baseline(s,nfa,nfb,sbase) -! Fit baseline to spectrum (for FT8) +! Fit baseline to spectrum ! Input: s(npts) Linear scale in power ! Output: sbase(npts) Baseline From 8c371d7d66447cf62013264e7de4f4a4aa7dd85a Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 09:55:39 -0500 Subject: [PATCH 26/29] Remove an obsolete routine. --- lib/ft4/syncft4.f90 | 145 -------------------------------------------- 1 file changed, 145 deletions(-) delete mode 100644 lib/ft4/syncft4.f90 diff --git a/lib/ft4/syncft4.f90 b/lib/ft4/syncft4.f90 deleted file mode 100644 index 4841c560e..000000000 --- a/lib/ft4/syncft4.f90 +++ /dev/null @@ -1,145 +0,0 @@ -subroutine syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate, & - ncand,sbase) - - include 'ft4_params.f90' -! Search over +/- 2.5s relative to 0.5s TX start time. - parameter (JZ=20) - complex cx(0:NH1) - real s(NH1,NHSYM) - real savg(NH1) - real sbase(NH1) - real x(NFFT1) - real sync2d(NH1,-JZ:JZ) - real red(NH1) - real candidate0(3,maxcand) - real candidate(3,maxcand) - real dd(NMAX) - integer jpeak(NH1) - integer indx(NH1) - integer ii(1) - integer*2 iwave(NMAX) - integer icos4(0:3) - data icos4/0,1,3,2/ !Costas 4x4 tone pattern - equivalence (x,cx) - - dd=iwave/1e3 -! Compute symbol spectra, stepping by NSTEP steps. - savg=0. - tstep=NSTEP/12000.0 - df=12000.0/NFFT1 - fac=1.0/300.0 - do j=1,NHSYM - ia=(j-1)*NSTEP + 1 - ib=ia+NSPS-1 - x(1:NSPS)=fac*dd(ia:ib) - x(NSPS+1:)=0. - call four2a(x,NFFT1,1,-1,0) !r2c FFT - do i=1,NH1 - s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 - enddo - savg=savg + s(1:NH1,j) !Average spectrum - enddo - - call baseline(savg,nfa,nfb,sbase) - - ia=max(1,nint(nfa/df)) - ib=nint(nfb/df) - nssy=NSPS/NSTEP ! # steps per symbol - nfos=NFFT1/NSPS ! # frequency bin oversampling factor - jstrt=0.25/tstep - candidate0=0. - k=0 - - do i=ia,ib - do j=-JZ,+JZ - ta=0. - tb=0. - tc=0. - t0a=0. - t0b=0. - t0c=0. - do n=0,3 - m=j+jstrt+nssy*n - if(m.ge.1.and.m.le.NHSYM) then - ta=ta + s(i+nfos*icos4(n),m) - t0a=t0a + sum(s(i:i+nfos*3:nfos,m)) - endif - tb=tb + s(i+nfos*icos4(n),m+nssy*36) - t0b=t0b + sum(s(i:i+nfos*3:nfos,m+nssy*36)) - if(m+nssy*72.le.NHSYM) then - tc=tc + s(i+nfos*icos4(n),m+nssy*72) - t0c=t0c + sum(s(i:i+nfos*3:nfos,m+nssy*72)) - endif - enddo - t=ta+tb+tc - t0=t0a+t0b+t0c - t0=(t0-t)/3.0 - sync_abc=t/t0 - t=tb+tc - t0=t0b+t0c - t0=(t0-t)/3.0 - sync_bc=t/t0 - sync2d(i,j)=max(sync_abc,sync_bc) - enddo - enddo - - red=0. - do i=ia,ib - ii=maxloc(sync2d(i,-JZ:JZ)) - 1 - JZ - j0=ii(1) - jpeak(i)=j0 - red(i)=sync2d(i,j0) - enddo - iz=ib-ia+1 - call indexx(red(ia:ib),iz,indx) - ibase=indx(nint(0.40*iz)) - 1 + ia - if(ibase.lt.1) ibase=1 - if(ibase.gt.nh1) ibase=nh1 - base=red(ibase) - red=red/base - do i=1,min(maxcand,iz) - n=ia + indx(iz+1-i) - 1 - if(red(n).lt.syncmin.or.isnan(red(n)).or.k.eq.maxcand) exit - k=k+1 -! candidate0(1,k)=n*df+37.5*1.5 - candidate0(1,k)=n*df - candidate0(2,k)=(jpeak(n)-1)*tstep - candidate0(3,k)=red(n) - enddo - ncand=k - -! Put nfqso at top of list, and save only the best of near-dupe freqs. - do i=1,ncand - if(abs(candidate0(1,i)-nfqso).lt.10.0) candidate0(1,i)=-candidate0(1,i) - if(i.ge.2) then - do j=1,i-1 - fdiff=abs(candidate0(1,i))-abs(candidate0(1,j)) - if(abs(fdiff).lt.4.0) then - if(candidate0(3,i).ge.candidate0(3,j)) candidate0(3,j)=0. - if(candidate0(3,i).lt.candidate0(3,j)) candidate0(3,i)=0. - endif - enddo - endif - enddo - - fac=20.0/maxval(s) - s=fac*s - -! Sort by sync -! call indexx(candidate0(3,1:ncand),ncand,indx) -! Sort by frequency - call indexx(candidate0(1,1:ncand),ncand,indx) - k=1 -! do i=ncand,1,-1 - do i=1,ncand - j=indx(i) -! if( candidate0(3,j) .ge. syncmin .and. candidate0(2,j).ge.-1.5 ) then - if( candidate0(3,j) .ge. syncmin ) then - candidate(2:3,k)=candidate0(2:3,j) - candidate(1,k)=abs(candidate0(1,j)) - k=k+1 - endif - enddo - ncand=k-1 - return -end subroutine syncft4 From a56960a19b9676fd37ee7e0bfeec2e3fcacef576 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 10:06:59 -0500 Subject: [PATCH 27/29] Remove syncft4.f90 from CMakeLists.txt. --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74f382421..a8093b100 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -566,7 +566,6 @@ set (wsjt_FSRCS lib/sync64.f90 lib/sync65.f90 lib/ft4/getcandidates4.f90 - lib/ft4/syncft4.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 lib/ft4/sync4d.f90 From 11065c349c3683c0a52f6196de5b32c71038c380 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 12:08:07 -0500 Subject: [PATCH 28/29] Call OSD if Deep decoding is selected. --- lib/ft4_decode.f90 | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 001ee4c33..5b36ed8dd 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -74,7 +74,7 @@ contains logical nohiscall,unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first, dobigfft - logical dosubtract + logical dosubtract,doosd data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ @@ -210,19 +210,23 @@ contains fb=nfb dd=iwave -! ndepth=3: 2 passes, subtract on each pass -! ndepth=2: 1 pass, no subtraction -! ndepth=1: 1 pass, no subtraction, fewer candidates +! ndepth=3: 3 passes, bp+osd +! ndepth=2: 3 passes, bp only +! ndepth=1: 1 pass, no subtraction max_iterations=40 syncmin=1.2 dosubtract=.true. + doosd=.true. nsp=3 - if(ndepth.lt.3) then + if(ndepth.eq.2) then + doosd=.false. + endif + if(ndepth.eq.1) then nsp=1 dosubtract=.false. + doosd=.false. endif - if(ndepth.eq.1) syncmin=2.0 do isp = 1,nsp if(isp.eq.2) then @@ -482,10 +486,22 @@ contains llr=llrd endif message77=0 + dmin=0.0 call timer('bpdec174',0) call bpdecode174_91(llr,apmask,max_iterations,message77, & cw,nharderror,niterations) call timer('bpdec174',1) + + if(doosd .and. nharderror.lt.0) then + ndeep=3 + if(abs(nfqso-f1).le.napwid) then + ndeep=4 + endif + call timer('osd174_91 ',0) + call osd174_91(llr,apmask,ndeep,message77,cw,nharderror,dmin) + call timer('osd174_91 ',1) + endif + if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then message77=mod(message77+rvec,2) ! remove rvec scrambling @@ -508,11 +524,11 @@ contains if(snr.gt.0.0) then xsnr=10*log10(snr)-14.8 else - xsnr=-20.0 + xsnr=-21.0 endif - nsnr=nint(max(-20.0,xsnr)) + nsnr=nint(max(-21.0,xsnr)) xdt=ibest/666.67 - 0.5 -!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp +!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3,f5.1)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp,dmin call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit endif From f00bcebb9c462e369aa503b4cf5b2b86e3ec4d4a Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 13:25:36 -0500 Subject: [PATCH 29/29] Enable lapcqonly for FT4. This disables AP for all but CQ messages if 5 minutes or more have elapsed since the last Tx. --- lib/decoder.f90 | 4 ++-- lib/ft4_decode.f90 | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 174b75115..d3f1153f4 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -152,8 +152,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) if(params%nmode.eq.5) then call timer('decft4 ',0) call my_ft4%decode(ft4_decoded,id2,params%nQSOProgress,params%nfqso, & - params%nutc,params%nfa,params%nfb,params%ndepth,ncontest, & - mycall,hiscall) + params%nutc,params%nfa,params%nfb,params%ndepth, & + logical(params%lapcqonly),ncontest,mycall,hiscall) call timer('decft4 ',1) go to 800 endif diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 5b36ed8dd..50c9fa47d 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -24,7 +24,7 @@ module ft4_decode contains subroutine decode(this,callback,iwave,nQSOProgress,nfqso, & - nutc,nfa,nfb,ndepth,ncontest,mycall,hiscall) + nutc,nfa,nfb,ndepth,lapcqonly,ncontest,mycall,hiscall) use timer_module, only: timer use packjt77 include 'ft4/ft4_params.f90' @@ -75,6 +75,7 @@ contains logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first, dobigfft logical dosubtract,doosd + logical, intent(in) :: lapcqonly data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ @@ -407,6 +408,7 @@ contains apmag=maxval(abs(llra))*1.1 npasses=3+nappasses(nQSOProgress) + if(lapcqonly) npasses=4 if(ndepth.eq.1) npasses=3 if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound do ipass=1,npasses @@ -421,6 +423,7 @@ contains if(ipass .gt. 3) then llrd=llra iaptype=naptypes(nQSOProgress,ipass-3) + if(lapcqonly) iaptype=1 ! ncontest=0 : NONE ! 1 : NA_VHF