1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-04 06:54:39 -04:00

DOA2: API implementation

This commit is contained in:
f4exb
2022-05-28 20:15:07 +02:00
parent 1edf7a008d
commit b48db22e84
24 changed files with 1014 additions and 15 deletions
+43 -2
View File
@@ -80,6 +80,7 @@ bool DOA2GUI::handleMessage(const Message& message)
m_centerFrequency = notif.getCenterFrequency();
displayRateAndShift();
updateAbsoluteCenterFrequency();
setFFTAveragingToolitp();
return true;
}
else if (DOA2::MsgConfigureDOA2::match(message))
@@ -205,6 +206,8 @@ void DOA2GUI::displaySettings()
ui->baselineDistance->setValue(m_settings.m_basebandDistance);
ui->squelch->setValue(m_settings.m_squelchdB);
ui->squelchText->setText(tr("%1").arg(m_settings.m_squelchdB, 3));
ui->fftAveraging->setCurrentIndex(m_settings.m_fftAveragingIndex);
setFFTAveragingToolitp();
getRollupContents()->restoreState(m_rollupState);
updateAbsoluteCenterFrequency();
blockApplySettings(false);
@@ -222,6 +225,35 @@ void DOA2GUI::displayRateAndShift()
m_scopeVis->setLiveRate(channelSampleRate);
}
void DOA2GUI::setFFTAveragingToolitp()
{
float channelSampleRate = ((float) m_sampleRate) / (1<<m_settings.m_log2Decim);
float averagingTime = (DOA2::m_fftSize * DOA2Settings::getAveragingValue(m_settings.m_fftAveragingIndex)) /
channelSampleRate;
QString s;
setNumberStr(averagingTime, 2, s);
ui->fftAveraging->setToolTip(QString("Number of averaging FFTs (avg time: %1s)").arg(s));
}
void DOA2GUI::setNumberStr(float v, int decimalPlaces, QString& s)
{
if (v < 1e-6) {
s = tr("%1n").arg(v*1e9, 0, 'f', decimalPlaces);
} else if (v < 1e-3) {
s = tr("%1µ").arg(v*1e6, 0, 'f', decimalPlaces);
} else if (v < 1.0) {
s = tr("%1m").arg(v*1e3, 0, 'f', decimalPlaces);
} else if (v < 1e3) {
s = tr("%1").arg(v, 0, 'f', decimalPlaces);
} else if (v < 1e6) {
s = tr("%1k").arg(v*1e-3, 0, 'f', decimalPlaces);
} else if (v < 1e9) {
s = tr("%1M").arg(v*1e-6, 0, 'f', decimalPlaces);
} else {
s = tr("%1G").arg(v*1e-9, 0, 'f', decimalPlaces);
}
}
void DOA2GUI::leaveEvent(QEvent*)
{
m_channelMarker.setHighlighted(false);
@@ -345,6 +377,14 @@ void DOA2GUI::on_squelch_valueChanged(int value)
applySettings();
}
void DOA2GUI::on_fftAveraging_currentIndexChanged(int index)
{
qDebug("DOA2GUI::on_averaging_currentIndexChanged: %d", index);
m_settings.m_fftAveragingIndex = index;
applySettings();
setFFTAveragingToolitp();
}
void DOA2GUI::applyDecimation()
{
uint32_t maxHash = 1;
@@ -389,6 +429,7 @@ void DOA2GUI::makeUIConnections()
QObject::connect(ui->antAz, QOverload<int>::of(&QSpinBox::valueChanged), this, &DOA2GUI::on_antAz_valueChanged);
QObject::connect(ui->baselineDistance, QOverload<int>::of(&QSpinBox::valueChanged), this, &DOA2GUI::on_baselineDistance_valueChanged);
QObject::connect(ui->squelch, &QDial::valueChanged, this, &DOA2GUI::on_squelch_valueChanged);
QObject::connect(ui->fftAveraging, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &DOA2GUI::on_fftAveraging_currentIndexChanged);
}
void DOA2GUI::updateAbsoluteCenterFrequency()
@@ -402,11 +443,11 @@ void DOA2GUI::updateAbsoluteCenterFrequency()
void DOA2GUI::updateDOA()
{
float cosTheta = (m_doa2->getPhi() * m_hwl * 1000.0) / (M_PI * m_settings.m_basebandDistance);
float blindAngle = ((cosTheta < -1.0) || (cosTheta > 1.0) ? 0 : std::acos(m_hwl * 1000.0 / m_settings.m_basebandDistance)) * (180/M_PI);
float blindAngle = (m_settings.m_basebandDistance > m_hwl * 1000.0) ? std::acos((m_hwl * 1000.0) / m_settings.m_basebandDistance) * (180/M_PI) : 0;
ui->compass->setBlindAngle(blindAngle);
float doaAngle = std::acos(cosTheta < -1.0 ? -1.0 : cosTheta > 1.0 ? 1.0 : cosTheta) * (180/M_PI);
float posAngle = ui->antAz->value() - doaAngle; // DOA angles are trigonometric but displayed angles are clockwise
float negAngle = ui->antAz->value() + doaAngle;
ui->compass->setBlindAngle(blindAngle);
ui->compass->setAzPos(posAngle);
ui->compass->setAzNeg(negAngle);
ui->posText->setText(tr("%1").arg(ui->compass->getAzPos(), 3, 'f', 0, QLatin1Char('0')));