1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-07-11 13:24:19 -04:00

Add 9600 FSK modem with scrambler and raised-cosine pulse-shaping. Add baseband BPF for AFSK.

This commit is contained in:
Jon Beniston
2020-09-23 13:42:29 +01:00
committed by f4exb
parent 5211f4a25b
commit 9187cda3c2
27 changed files with 1529 additions and 219 deletions
@@ -39,6 +39,7 @@
#include "packetmodgui.h"
#include "packetmodrepeatdialog.h"
#include "packetmodtxsettingsdialog.h"
#include "packetmodbpfdialog.h"
PacketModGUI* PacketModGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx)
@@ -140,6 +141,28 @@ void PacketModGUI::on_deltaFrequency_changed(qint64 value)
applySettings();
}
void PacketModGUI::on_mode_currentIndexChanged(int value)
{
QString mode = ui->mode->currentText();
// If m_doApplySettings is set, we are here from a call to displaySettings,
// so we only want to display the current settings, not update them
// as though a user had selected a new mode
if (m_doApplySettings)
m_settings.setMode(mode);
ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1));
ui->fmDevText->setText(QString("%1k").arg(m_settings.m_fmDeviation / 1000.0, 0, 'f', 1));
ui->fmDev->setValue(m_settings.m_fmDeviation / 100.0);
ui->glSpectrum->setCenterFrequency(m_settings.m_spectrumRate/4);
ui->glSpectrum->setSampleRate(m_settings.m_spectrumRate/2);
applySettings();
// Remove custom mode when deselected, as we no longer know how to set it
if (value < 2)
ui->mode->removeItem(2);
}
void PacketModGUI::on_rfBW_valueChanged(int value)
{
float bw = value * 100.0f;
@@ -254,6 +277,12 @@ void PacketModGUI::on_preEmphasis_toggled(bool checked)
applySettings();
}
void PacketModGUI::on_bpf_toggled(bool checked)
{
m_settings.m_bpf = checked;
applySettings();
}
void PacketModGUI::preEmphasisSelect()
{
FMPreemphasisDialog dialog(m_settings.m_preEmphasisTau, m_settings.m_preEmphasisHighFreq);
@@ -265,6 +294,18 @@ void PacketModGUI::preEmphasisSelect()
}
}
void PacketModGUI::bpfSelect()
{
PacketModBPFDialog dialog(m_settings.m_bpfLowCutoff, m_settings.m_bpfHighCutoff, m_settings.m_bpfTaps);
if (dialog.exec() == QDialog::Accepted)
{
m_settings.m_bpfLowCutoff = dialog.m_lowFreq;
m_settings.m_bpfHighCutoff = dialog.m_highFreq;
m_settings.m_bpfTaps = dialog.m_taps;
applySettings();
}
}
void PacketModGUI::repeatSelect()
{
PacketModRepeatDialog dialog(m_settings.m_repeatDelay, m_settings.m_repeatCount);
@@ -280,7 +321,10 @@ void PacketModGUI::txSettingsSelect()
{
PacketModTXSettingsDialog dialog(m_settings.m_rampUpBits, m_settings.m_rampDownBits,
m_settings.m_rampRange, m_settings.m_modulateWhileRamping,
m_settings.m_modulation, m_settings.m_baud,
m_settings.m_markFrequency, m_settings.m_spaceFrequency,
m_settings.m_pulseShaping, m_settings.m_beta, m_settings.m_symbolSpan,
m_settings.m_scramble, m_settings.m_polynomial,
m_settings.m_ax25PreFlags, m_settings.m_ax25PostFlags,
m_settings.m_ax25Control, m_settings.m_ax25PID,
m_settings.m_lpfTaps,
@@ -292,8 +336,15 @@ void PacketModGUI::txSettingsSelect()
m_settings.m_rampDownBits = dialog.m_rampDownBits;
m_settings.m_rampRange = dialog.m_rampRange;
m_settings.m_modulateWhileRamping = dialog.m_modulateWhileRamping;
m_settings.m_modulation = static_cast<PacketModSettings::Modulation>(dialog.m_modulation);
m_settings.m_baud = dialog.m_baud;
m_settings.m_markFrequency = dialog.m_markFrequency;
m_settings.m_spaceFrequency = dialog.m_spaceFrequency;
m_settings.m_pulseShaping = dialog.m_pulseShaping;
m_settings.m_beta = dialog.m_beta;
m_settings.m_symbolSpan = dialog.m_symbolSpan;
m_settings.m_scramble = dialog.m_scramble;
m_settings.m_polynomial = dialog.m_polynomial;
m_settings.m_ax25PreFlags = dialog.m_ax25PreFlags;
m_settings.m_ax25PostFlags = dialog.m_ax25PostFlags;
m_settings.m_ax25Control = dialog.m_ax25Control;
@@ -302,6 +353,7 @@ void PacketModGUI::txSettingsSelect()
m_settings.m_bbNoise = dialog.m_bbNoise;
m_settings.m_rfNoise = dialog.m_rfNoise;
m_settings.m_writeToFile = dialog.m_writeToFile;
displaySettings();
applySettings();
}
}
@@ -399,6 +451,9 @@ PacketModGUI::PacketModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
CRightClickEnabler *preempRightClickEnabler = new CRightClickEnabler(ui->preEmphasis);
connect(preempRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(preEmphasisSelect()));
CRightClickEnabler *bpfRightClickEnabler = new CRightClickEnabler(ui->bpf);
connect(bpfRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(bpfSelect()));
ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03)));
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
@@ -479,6 +534,18 @@ void PacketModGUI::displaySettings()
blockApplySettings(true);
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
if ((m_settings.m_baud == 1200) && (m_settings.m_modulation == PacketModSettings::AFSK))
ui->mode->setCurrentIndex(0);
else if ((m_settings.m_baud == 9600) && (m_settings.m_modulation == PacketModSettings::FSK))
ui->mode->setCurrentIndex(1);
else
{
ui->mode->removeItem(2);
ui->mode->addItem(m_settings.getMode());
ui->mode->setCurrentIndex(2);
}
ui->glSpectrum->setCenterFrequency(m_settings.m_spectrumRate/4);
ui->glSpectrum->setSampleRate(m_settings.m_spectrumRate/2);
ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1));
ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0);