mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-27 15:26:33 -04:00
WFM demod: variable RF bandwidth. Implements #320
This commit is contained in:
parent
e061a45e62
commit
8a66650df4
@ -1,3 +1,10 @@
|
|||||||
|
sdrangel (4.9.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* WFM demod: variable RF bandwidth. Implements #320
|
||||||
|
* Fixed buddies list handling at buddy termination time. Fixes #359
|
||||||
|
|
||||||
|
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sat, 08 Jun 2019 20:44:06 +0100
|
||||||
|
|
||||||
sdrangel (4.9.0-1) unstable; urgency=medium
|
sdrangel (4.9.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
* New build system
|
* New build system
|
||||||
|
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -1,3 +1,10 @@
|
|||||||
|
sdrangel (4.9.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* WFM demod: variable RF bandwidth. Implements #320
|
||||||
|
* Fixed buddies list handling at buddy termination time. Fixes #359
|
||||||
|
|
||||||
|
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sat, 08 Jun 2019 20:44:06 +0100
|
||||||
|
|
||||||
sdrangel (4.9.0-1) unstable; urgency=medium
|
sdrangel (4.9.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
* New build system
|
* New build system
|
||||||
|
@ -126,10 +126,10 @@ void WFMDemodGUI::on_deltaFrequency_changed(qint64 value)
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WFMDemodGUI::on_rfBW_currentIndexChanged(int index)
|
void WFMDemodGUI::on_rfBW_changed(quint64 value)
|
||||||
{
|
{
|
||||||
m_channelMarker.setBandwidth(WFMDemodSettings::getRFBW(index));
|
m_channelMarker.setBandwidth(value);
|
||||||
m_settings.m_rfBandwidth = WFMDemodSettings::getRFBW(index);
|
m_settings.m_rfBandwidth = value;
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,16 +225,11 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
|
|||||||
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
||||||
ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue);
|
ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue);
|
||||||
|
|
||||||
blockApplySettings(true);
|
ui->rfBW->setColorMapper(ColorMapper(ColorMapper::GrayYellow));
|
||||||
ui->rfBW->clear();
|
ui->rfBW->setValueRange(WFMDemodSettings::m_rfBWDigits, WFMDemodSettings::m_rfBWMin, WFMDemodSettings::m_rfBWMax);
|
||||||
for (int i = 0; i < WFMDemodSettings::m_nbRFBW; i++) {
|
|
||||||
ui->rfBW->addItem(QString("%1").arg(WFMDemodSettings::getRFBW(i) / 1000.0, 0, 'f', 2));
|
|
||||||
}
|
|
||||||
ui->rfBW->setCurrentIndex(6);
|
|
||||||
blockApplySettings(false);
|
|
||||||
|
|
||||||
m_channelMarker.blockSignals(true);
|
m_channelMarker.blockSignals(true);
|
||||||
m_channelMarker.setBandwidth(WFMDemodSettings::getRFBW(4));
|
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth);
|
||||||
m_channelMarker.setCenterFrequency(0);
|
m_channelMarker.setCenterFrequency(0);
|
||||||
m_channelMarker.setTitle("WFM Demodulator");
|
m_channelMarker.setTitle("WFM Demodulator");
|
||||||
m_channelMarker.setColor(m_settings.m_rgbColor);
|
m_channelMarker.setColor(m_settings.m_rgbColor);
|
||||||
@ -273,7 +268,7 @@ void WFMDemodGUI::applySettings(bool force)
|
|||||||
if (m_doApplySettings)
|
if (m_doApplySettings)
|
||||||
{
|
{
|
||||||
WFMDemod::MsgConfigureChannelizer *msgChan = WFMDemod::MsgConfigureChannelizer::create(
|
WFMDemod::MsgConfigureChannelizer *msgChan = WFMDemod::MsgConfigureChannelizer::create(
|
||||||
WFMDemod::requiredBW(WFMDemodSettings::getRFBW(ui->rfBW->currentIndex())),
|
m_settings.m_rfBandwidth,
|
||||||
m_channelMarker.getCenterFrequency());
|
m_channelMarker.getCenterFrequency());
|
||||||
m_wfmDemod->getInputMessageQueue()->push(msgChan);
|
m_wfmDemod->getInputMessageQueue()->push(msgChan);
|
||||||
|
|
||||||
@ -297,18 +292,13 @@ void WFMDemodGUI::displaySettings()
|
|||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
|
|
||||||
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
||||||
|
ui->rfBW->setValue(m_settings.m_rfBandwidth);
|
||||||
ui->rfBW->setCurrentIndex(WFMDemodSettings::getRFBWIndex(m_settings.m_rfBandwidth));
|
|
||||||
|
|
||||||
ui->afBW->setValue(m_settings.m_afBandwidth/1000.0);
|
ui->afBW->setValue(m_settings.m_afBandwidth/1000.0);
|
||||||
ui->afBWText->setText(QString("%1 kHz").arg(m_settings.m_afBandwidth/1000.0));
|
ui->afBWText->setText(QString("%1 kHz").arg(m_settings.m_afBandwidth/1000.0));
|
||||||
|
|
||||||
ui->volume->setValue(m_settings.m_volume * 10.0);
|
ui->volume->setValue(m_settings.m_volume * 10.0);
|
||||||
ui->volumeText->setText(QString("%1").arg(m_settings.m_volume, 0, 'f', 1));
|
ui->volumeText->setText(QString("%1").arg(m_settings.m_volume, 0, 'f', 1));
|
||||||
|
|
||||||
ui->squelch->setValue(m_settings.m_squelch);
|
ui->squelch->setValue(m_settings.m_squelch);
|
||||||
ui->squelchText->setText(QString("%1 dB").arg(m_settings.m_squelch));
|
ui->squelchText->setText(QString("%1 dB").arg(m_settings.m_squelch));
|
||||||
|
|
||||||
ui->audioMute->setChecked(m_settings.m_audioMute);
|
ui->audioMute->setChecked(m_settings.m_audioMute);
|
||||||
|
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
|
@ -65,7 +65,7 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_deltaFrequency_changed(qint64 value);
|
void on_deltaFrequency_changed(qint64 value);
|
||||||
void on_rfBW_currentIndexChanged(int index);
|
void on_rfBW_changed(quint64 value);
|
||||||
void on_afBW_valueChanged(int value);
|
void on_afBW_valueChanged(int value);
|
||||||
void on_volume_valueChanged(int value);
|
void on_volume_valueChanged(int value);
|
||||||
void on_squelch_valueChanged(int value);
|
void on_squelch_valueChanged(int value);
|
||||||
|
@ -216,15 +216,56 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="rfBW">
|
<widget class="ValueDial" name="rfBW" native="true">
|
||||||
<property name="maximumSize">
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>70</width>
|
<width>32</width>
|
||||||
<height>16777215</height>
|
<height>16</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Liberation Mono</family>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>RF Bandwidth (Hz)</string>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="rfBWUnits">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hz</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="volumeLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="afBWLabel">
|
<widget class="QLabel" name="afBWLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -270,10 +311,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="volumeLayout">
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="volumeLabel">
|
<widget class="QLabel" name="volumeLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -416,6 +453,12 @@
|
|||||||
<header>gui/valuedialz.h</header>
|
<header>gui/valuedialz.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>ValueDial</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>gui/valuedial.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../sdrgui/resources/res.qrc"/>
|
<include location="../../../sdrgui/resources/res.qrc"/>
|
||||||
|
@ -24,10 +24,9 @@
|
|||||||
|
|
||||||
#include "wfmdemodsettings.h"
|
#include "wfmdemodsettings.h"
|
||||||
|
|
||||||
const int WFMDemodSettings::m_rfBW[] = {
|
const int WFMDemodSettings::m_rfBWMin = 10000;
|
||||||
12500, 25000, 40000, 60000, 75000, 80000, 100000, 125000, 140000, 160000, 180000, 200000, 220000, 250000
|
const int WFMDemodSettings::m_rfBWMax = 300000;
|
||||||
};
|
const int WFMDemodSettings::m_rfBWDigits = 6;
|
||||||
const int WFMDemodSettings::m_nbRFBW = 14;
|
|
||||||
|
|
||||||
WFMDemodSettings::WFMDemodSettings() :
|
WFMDemodSettings::WFMDemodSettings() :
|
||||||
m_channelMarker(0)
|
m_channelMarker(0)
|
||||||
@ -38,7 +37,7 @@ WFMDemodSettings::WFMDemodSettings() :
|
|||||||
void WFMDemodSettings::resetToDefaults()
|
void WFMDemodSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_inputFrequencyOffset = 0;
|
m_inputFrequencyOffset = 0;
|
||||||
m_rfBandwidth = getRFBW(5);
|
m_rfBandwidth = 80000;
|
||||||
m_afBandwidth = 15000;
|
m_afBandwidth = 15000;
|
||||||
m_volume = 2.0;
|
m_volume = 2.0;
|
||||||
m_squelch = -60.0;
|
m_squelch = -60.0;
|
||||||
@ -57,7 +56,7 @@ QByteArray WFMDemodSettings::serialize() const
|
|||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
s.writeS32(1, m_inputFrequencyOffset);
|
s.writeS32(1, m_inputFrequencyOffset);
|
||||||
s.writeS32(2, getRFBWIndex(m_rfBandwidth));
|
s.writeS32(2, m_rfBandwidth);
|
||||||
s.writeS32(3, m_afBandwidth/1000.0);
|
s.writeS32(3, m_afBandwidth/1000.0);
|
||||||
s.writeS32(4, m_volume*10.0);
|
s.writeS32(4, m_volume*10.0);
|
||||||
s.writeS32(5, m_squelch);
|
s.writeS32(5, m_squelch);
|
||||||
@ -98,7 +97,7 @@ bool WFMDemodSettings::deserialize(const QByteArray& data)
|
|||||||
d.readS32(1, &tmp, 0);
|
d.readS32(1, &tmp, 0);
|
||||||
m_inputFrequencyOffset = tmp;
|
m_inputFrequencyOffset = tmp;
|
||||||
d.readS32(2, &tmp, 4);
|
d.readS32(2, &tmp, 4);
|
||||||
m_rfBandwidth = getRFBW(tmp);
|
m_rfBandwidth = tmp < m_rfBWMin ? m_rfBWMin : tmp > m_rfBWMax ? m_rfBWMax : tmp;
|
||||||
d.readS32(3, &tmp, 3);
|
d.readS32(3, &tmp, 3);
|
||||||
m_afBandwidth = tmp * 1000.0;
|
m_afBandwidth = tmp * 1000.0;
|
||||||
d.readS32(4, &tmp, 20);
|
d.readS32(4, &tmp, 20);
|
||||||
@ -138,28 +137,3 @@ bool WFMDemodSettings::deserialize(const QByteArray& data)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int WFMDemodSettings::getRFBW(int index)
|
|
||||||
{
|
|
||||||
if (index < 0) {
|
|
||||||
return m_rfBW[0];
|
|
||||||
} else if (index < m_nbRFBW) {
|
|
||||||
return m_rfBW[index];
|
|
||||||
} else {
|
|
||||||
return m_rfBW[m_nbRFBW-1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int WFMDemodSettings::getRFBWIndex(int rfbw)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_nbRFBW; i++)
|
|
||||||
{
|
|
||||||
if (rfbw <= m_rfBW[i])
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_nbRFBW-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -42,17 +42,15 @@ struct WFMDemodSettings
|
|||||||
|
|
||||||
Serializable *m_channelMarker;
|
Serializable *m_channelMarker;
|
||||||
|
|
||||||
static const int m_nbRFBW;
|
static const int m_rfBWMin;
|
||||||
static const int m_rfBW[];
|
static const int m_rfBWMax;
|
||||||
|
static const int m_rfBWDigits;
|
||||||
|
|
||||||
WFMDemodSettings();
|
WFMDemodSettings();
|
||||||
void resetToDefaults();
|
void resetToDefaults();
|
||||||
void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
|
void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
|
||||||
QByteArray serialize() const;
|
QByteArray serialize() const;
|
||||||
bool deserialize(const QByteArray& data);
|
bool deserialize(const QByteArray& data);
|
||||||
|
|
||||||
static int getRFBW(int index);
|
|
||||||
static int getRFBWIndex(int rfbw);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PLUGINS_CHANNELRX_DEMODWFM_WFMDEMODSETTINGS_H_ */
|
#endif /* PLUGINS_CHANNELRX_DEMODWFM_WFMDEMODSETTINGS_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user