From 3f906baf1f10ae23ad66b53d4fc34fde439ce869 Mon Sep 17 00:00:00 2001 From: srcejon Date: Thu, 7 Sep 2023 09:43:12 +0100 Subject: [PATCH] Tidy up. Add docs. --- doc/img/PSK31Mod_plugin.png | Bin 0 -> 9719 bytes plugins/channeltx/modpsk31/psk31modgui.cpp | 16 +----- plugins/channeltx/modpsk31/psk31modgui.h | 3 +- plugins/channeltx/modpsk31/psk31modgui.ui | 53 ++++++------------ .../channeltx/modpsk31/psk31modsettings.cpp | 6 +- plugins/channeltx/modpsk31/psk31modsource.cpp | 19 +------ plugins/channeltx/modpsk31/psk31modsource.h | 6 +- .../modpsk31/psk31modtxsettingsdialog.ui | 4 +- plugins/channeltx/modpsk31/readme.md | 2 + 9 files changed, 33 insertions(+), 76 deletions(-) create mode 100644 doc/img/PSK31Mod_plugin.png diff --git a/doc/img/PSK31Mod_plugin.png b/doc/img/PSK31Mod_plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..52be4349671a1d1ffcad3bc11fae8c7f433acce2 GIT binary patch literal 9719 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 XomrtxButton->setToolTip(tooltip); - s = s.replace(">", ""); // Don't display LTRS s = s.replace("\r", ""); // Don't display carriage returns if (!s.isEmpty()) @@ -186,7 +185,7 @@ void PSK31GUI::on_deltaFrequency_changed(qint64 value) void PSK31GUI::on_rfBW_valueChanged(int value) { int bw = value; - ui->rfBWText->setText(formatFrequency(bw)); + ui->rfBWText->setText(QString("%1 Hz").arg(bw)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; applySettings(); @@ -444,15 +443,6 @@ void PSK31GUI::applySettings(bool force) } } -QString PSK31GUI::formatFrequency(int frequency) const -{ - QString suffix = ""; - if (width() > 450) { - suffix = " Hz"; - } - return QString("%1%2").arg(frequency).arg(suffix); -} - QString PSK31GUI::substitute(const QString& text) { const MainSettings& mainSettings = MainCore::instance()->getSettings(); @@ -483,14 +473,14 @@ void PSK31GUI::displaySettings() ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); - ui->rfBWText->setText(formatFrequency(m_settings.m_rfBandwidth)); + ui->rfBWText->setText(QString("%1 Hz").arg(m_settings.m_rfBandwidth)); ui->rfBW->setValue(m_settings.m_rfBandwidth); ui->udpEnabled->setChecked(m_settings.m_udpEnabled); ui->udpAddress->setText(m_settings.m_udpAddress); ui->udpPort->setText(QString::number(m_settings.m_udpPort)); - ui->gainText->setText(QString("%1").arg((double)m_settings.m_gain, 0, 'f', 1)); + ui->gainText->setText(QString("%1dB").arg((double)m_settings.m_gain, 0, 'f', 1)); ui->gain->setValue(m_settings.m_gain); ui->channelMute->setChecked(m_settings.m_channelMute); diff --git a/plugins/channeltx/modpsk31/psk31modgui.h b/plugins/channeltx/modpsk31/psk31modgui.h index 25115fa0c..3e6be55b6 100644 --- a/plugins/channeltx/modpsk31/psk31modgui.h +++ b/plugins/channeltx/modpsk31/psk31modgui.h @@ -77,7 +77,7 @@ private: QString m_initialToolTip; PSK31* m_psk31Mod; - MovingAverageUtil m_channelPowerDbAvg; // Less than other mods, as packets are short + MovingAverageUtil m_channelPowerDbAvg; MessageQueue m_inputMessageQueue; @@ -88,7 +88,6 @@ private: void blockApplySettings(bool block); void applySettings(bool force = false); void displaySettings(); - QString formatFrequency(int frequency) const; bool handleMessage(const Message& message); void makeUIConnections(); void updateAbsoluteCenterFrequency(); diff --git a/plugins/channeltx/modpsk31/psk31modgui.ui b/plugins/channeltx/modpsk31/psk31modgui.ui index bcd498b6a..e02bae250 100644 --- a/plugins/channeltx/modpsk31/psk31modgui.ui +++ b/plugins/channeltx/modpsk31/psk31modgui.ui @@ -7,7 +7,7 @@ 0 0 396 - 702 + 700 @@ -43,7 +43,7 @@ 2 2 391 - 211 + 161 @@ -213,19 +213,19 @@ RF bandwidth - 1 - - - 2000 - - 10 + + 500 + + + 1 + - 100 + 10 - 340 + 100 Qt::Horizontal @@ -241,7 +241,7 @@ - 1700 + 500 Hz Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -429,30 +429,6 @@ - - - - - - Qt::Horizontal - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -483,6 +459,13 @@ + + + + Qt::Horizontal + + + diff --git a/plugins/channeltx/modpsk31/psk31modsettings.cpp b/plugins/channeltx/modpsk31/psk31modsettings.cpp index e6a2e2f05..51b7eeba0 100644 --- a/plugins/channeltx/modpsk31/psk31modsettings.cpp +++ b/plugins/channeltx/modpsk31/psk31modsettings.cpp @@ -36,7 +36,7 @@ void PSK31Settings::resetToDefaults() { m_inputFrequencyOffset = 0; m_baud = 31.25; - m_rfBandwidth = 340; + m_rfBandwidth = 100; m_gain = 0.0f; m_channelMute = false; m_repeat = false; @@ -52,7 +52,7 @@ void PSK31Settings::resetToDefaults() "UR 599 QTH IS ${location}", "TU DE ${callsign} CQ" }); - m_rgbColor = QColor(180, 205, 130).rgb(); + m_rgbColor = QColor(25, 180, 200).rgb(); m_title = "PSK31 Modulator"; m_streamIndex = 0; m_useReverseAPI = false; @@ -139,7 +139,7 @@ bool PSK31Settings::deserialize(const QByteArray& data) d.readS32(1, &tmp, 0); m_inputFrequencyOffset = tmp; d.readReal(2, &m_baud, 31.25f); - d.readS32(3, &m_rfBandwidth, 340); + d.readS32(3, &m_rfBandwidth, 100); d.readReal(5, &m_gain, 0.0f); d.readBool(6, &m_channelMute, false); d.readBool(7, &m_repeat, false); diff --git a/plugins/channeltx/modpsk31/psk31modsource.cpp b/plugins/channeltx/modpsk31/psk31modsource.cpp index 2b8b483d1..06cde3e3c 100644 --- a/plugins/channeltx/modpsk31/psk31modsource.cpp +++ b/plugins/channeltx/modpsk31/psk31modsource.cpp @@ -30,7 +30,6 @@ PSK31Source::PSK31Source() : m_channelSampleRate(48000), m_channelFrequencyOffset(0), m_spectrumRate(2000), - m_fmPhase(0.0), m_spectrumSink(nullptr), m_specSampleBufferIndex(0), m_magsq(0.0), @@ -42,8 +41,8 @@ PSK31Source::PSK31Source() : m_bitCount(0) { m_bits.append(0); - m_lowpass.create(301, m_channelSampleRate, 400.0 / 2.0); - m_pulseShape.create(0.5, 6, m_channelSampleRate / 45.45, true); + m_lowpass.create(301, m_channelSampleRate, 100.0 / 2.0); + m_pulseShape.create(0.5, 6, m_channelSampleRate / 31.25, true); m_demodBuffer.resize(1<<12); m_demodBufferFill = 0; @@ -258,8 +257,6 @@ void PSK31Source::applySettings(const PSK31Settings& settings, bool force) m_settings = settings; - // Precalculate FM sensensity and linear gain to save doing it in the loop - m_phaseSensitivity = 2.0f * M_PI * 1100 / (double)m_channelSampleRate; m_linearGain = powf(10.0f, m_settings.m_gain/20.0f); } @@ -303,9 +300,6 @@ void PSK31Source::applyChannelSettings(int channelSampleRate, int channelFrequen m_samplesPerSymbol = m_channelSampleRate / m_settings.m_baud; qDebug() << "m_samplesPerSymbol: " << m_samplesPerSymbol << " (" << m_channelSampleRate << "/" << m_settings.m_baud << ")"; - // Precalculate FM sensensity to save doing it in the loop - m_phaseSensitivity = 2.0f * M_PI * 1100 / (double)m_channelSampleRate; - QList pipes; MainCore::instance()->getMessagePipes().getMessagePipes(m_channel, "reportdemod", pipes); @@ -349,7 +343,6 @@ void PSK31Source::addBit(int bit) m_bits[m_byteIdx] |= bit << m_bitIdx; m_bitIdx++; m_bitCount++; - m_bitCountTotal++; if (m_bitIdx == 8) { m_byteIdx++; @@ -364,8 +357,6 @@ void PSK31Source::initTX() { m_byteIdx = 0; m_bitIdx = 0; - m_bitCount = m_bitCountTotal; // Reset to allow retransmission - m_bit = 0; } void PSK31Source::addTXText(QString text) @@ -377,7 +368,7 @@ void PSK31Source::addTXText(QString text) QString s = text; if (m_settings.m_prefixCRLF) { - s.prepend("\r\r\n>"); // '>' switches to letters + s.prepend("\r\r\n"); } if (m_settings.m_postfixCRLF) { s.append("\r\r\n"); @@ -393,7 +384,6 @@ void PSK31Source::encodeText(const QString& text) m_byteIdx = 0; m_bitIdx = 0; m_bitCount = 0; - m_bitCountTotal = 0; for (int i = 0; i < m_bits.size(); i++) { m_bits[i] = 0; } @@ -423,12 +413,9 @@ void PSK31Source::encodeIdle() m_byteIdx = 0; m_bitIdx = 0; m_bitCount = 0; - m_bitCountTotal = 0; for (int i = 0; i < m_bits.size(); i++) { m_bits[i] = 0; } addBit(0); addBit(0); - addBit(0); - addBit(0); } diff --git a/plugins/channeltx/modpsk31/psk31modsource.h b/plugins/channeltx/modpsk31/psk31modsource.h index 7313ba094..2c0db32a0 100644 --- a/plugins/channeltx/modpsk31/psk31modsource.h +++ b/plugins/channeltx/modpsk31/psk31modsource.h @@ -70,15 +70,12 @@ private: ChannelAPI *m_channel; NCO m_carrierNco; - double m_fmPhase; // Double gives cleaner spectrum than Real - double m_phaseSensitivity; Real m_linearGain; Complex m_modSample; int m_bit; // Current bit - int m_prevBit; // Previous bit, for differential encoding int m_symbol; // Current symbol - int m_prevSymbol; + int m_prevSymbol; // Previous symbol for differential encoding RaisedCosine m_pulseShape; // Pulse shaping filter Lowpass m_lowpass; // Low pass filter to limit RF bandwidth @@ -113,7 +110,6 @@ private: int m_byteIdx; // Index in to m_bits int m_bitIdx; // Index in to current byte of m_bits int m_bitCount; // Count of number of valid bits in m_bits - int m_bitCountTotal; QVector m_demodBuffer; int m_demodBufferFill; diff --git a/plugins/channeltx/modpsk31/psk31modtxsettingsdialog.ui b/plugins/channeltx/modpsk31/psk31modtxsettingsdialog.ui index 579a7f6f9..31f63eb67 100644 --- a/plugins/channeltx/modpsk31/psk31modtxsettingsdialog.ui +++ b/plugins/channeltx/modpsk31/psk31modtxsettingsdialog.ui @@ -29,10 +29,10 @@ - Prefix text with carriage returns, line feed and switch to letters + Prefix text with carriage returns and line feed - Prefix CR+CR+LF+LTRS + Prefix CR+CR+LF diff --git a/plugins/channeltx/modpsk31/readme.md b/plugins/channeltx/modpsk31/readme.md index cf7e44e66..31fa1eecb 100644 --- a/plugins/channeltx/modpsk31/readme.md +++ b/plugins/channeltx/modpsk31/readme.md @@ -63,6 +63,8 @@ Enter text to transmit. Pressing return will transmit the text and clear this fi The list of pre-defined text can be customised via the Transmit Settings dialog (13). +PSK31 supports the extended ASCII character set. +

13: TX

Press to transmit the current text. The text field will not be cleared.