From ef0baa35b7f57cefc3bcdd9a7708064fb710fc7f Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 18 Jun 2023 00:45:13 +0200 Subject: [PATCH] Audio CAT SISO: process mono signals as real signals plus fixes --- .../audiocatsiso/audiocatinputworker.cpp | 32 +++-------------- .../audiocatsiso/audiocatinputworker.h | 1 - .../audiocatsiso/audiocatoutputworker.cpp | 7 ++-- .../samplemimo/audiocatsiso/audiocatsiso.cpp | 24 +++++++++++-- .../audiocatsiso/audiocatsisogui.cpp | 36 +++++++++++-------- .../samplemimo/audiocatsiso/audiocatsisogui.h | 2 +- .../audiocatsiso/audiocatsisogui.ui | 10 ++++++ 7 files changed, 65 insertions(+), 47 deletions(-) diff --git a/plugins/samplemimo/audiocatsiso/audiocatinputworker.cpp b/plugins/samplemimo/audiocatsiso/audiocatinputworker.cpp index 9d45dc08e..1a403e1db 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatinputworker.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatinputworker.cpp @@ -31,8 +31,7 @@ AudioCATInputWorker::AudioCATInputWorker(SampleMIFifo* sampleFifo, AudioFifo *fi m_log2Decim(0), m_iqMapping(AudioCATSISOSettings::IQMapping::L), m_convertBuffer(m_convBufSamples), - m_sampleFifo(sampleFifo), - m_quNCOPhase(0) + m_sampleFifo(sampleFifo) { } @@ -60,31 +59,10 @@ void AudioCATInputWorker::workIQ(unsigned int nbRead) { for (uint32_t i = 0; i < nbRead; i++) { - qint16 r = m_buf[i*2 + (m_iqMapping == AudioCATSISOSettings::IQMapping::R ? 1 : 0)]; // real sample - - if (m_quNCOPhase == 0) // 0 - { - m_buf[i*2] = r; // 1 - m_buf[i*2+1] = 0; // 0 - m_quNCOPhase = 1; // next phase - } - else if (m_quNCOPhase == 1) // -pi/2 - { - m_buf[i*2] = 0; // 0 - m_buf[i*2+1] = -r; // -1 - m_quNCOPhase = 2; // next phase - } - else if (m_quNCOPhase == 2) // pi or -pi - { - m_buf[i*2] = -r; // -1 - m_buf[i*2+1] = 0; // 0 - m_quNCOPhase = 3; // next phase - } - else if (m_quNCOPhase == 3) // pi/2 - { - m_buf[i*2] = 0; // 0 - m_buf[i*2+1] = r; // 1 - m_quNCOPhase = 0; // next phase + if (m_iqMapping == AudioCATSISOSettings::IQMapping::L) { + m_buf[i*2+1] = m_buf[i*2]; + } else { + m_buf[i*2] = m_buf[i*2+1]; } } } diff --git a/plugins/samplemimo/audiocatsiso/audiocatinputworker.h b/plugins/samplemimo/audiocatsiso/audiocatinputworker.h index ce47f7416..1ad1114cb 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatinputworker.h +++ b/plugins/samplemimo/audiocatsiso/audiocatinputworker.h @@ -52,7 +52,6 @@ private: SampleVector m_convertBuffer; SampleMIFifo* m_sampleFifo; Decimators m_decimatorsIQ; - int m_quNCOPhase; //!< Quarter sample rate pseudo NCO phase index (0, 90, 180, 270) void workIQ(unsigned int nbRead); void decimate(qint16 *buf, unsigned int nbRead); diff --git a/plugins/samplemimo/audiocatsiso/audiocatoutputworker.cpp b/plugins/samplemimo/audiocatsiso/audiocatoutputworker.cpp index e92edbe2e..a4db48d4b 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatoutputworker.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatoutputworker.cpp @@ -146,8 +146,11 @@ void AudioCATOutputWorker::callbackPart(SampleVector& data, unsigned int iBegin, { for (unsigned int i = iBegin; i < iEnd; i++) { - m_audioBuffer[m_audioBufferFill].l = (m_iqMapping == AudioCATSISOSettings::LR ? data[i].m_real : data[i].m_imag) * m_volume; - m_audioBuffer[m_audioBufferFill].r = (m_iqMapping == AudioCATSISOSettings::LR ? data[i].m_imag : data[i].m_real) * m_volume; + + m_audioBuffer[m_audioBufferFill].l = + ((m_iqMapping == AudioCATSISOSettings::LR || m_iqMapping == AudioCATSISOSettings::L) ? data[i].m_real : data[i].m_imag) * m_volume; + m_audioBuffer[m_audioBufferFill].r = + ((m_iqMapping == AudioCATSISOSettings::LR || m_iqMapping == AudioCATSISOSettings::R) ? data[i].m_imag : data[i].m_real) * m_volume; m_audioBufferFill++; if (m_audioBufferFill >= m_audioBuffer.size()) diff --git a/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp b/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp index f2947f024..92eb3110f 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp @@ -523,6 +523,8 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi if (settingsKeys.contains("rxIQMapping") || force) { + forwardRxChange = true; + if (m_rxRunning) { m_inputWorker->setIQMapping(settings.m_rxIQMapping); } @@ -530,6 +532,8 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi if (settingsKeys.contains("txIQMapping") || force) { + forwardTxChange = true; + if (m_txRunning) { m_outputWorker->setIQMapping(settings.m_txIQMapping); } @@ -579,7 +583,15 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi if (forwardRxChange) { - DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification(m_rxSampleRate, settings.m_rxCenterFrequency, true, 0); + bool realElseComplex = (m_settings.m_rxIQMapping == AudioCATSISOSettings::L) + || (m_settings.m_rxIQMapping == AudioCATSISOSettings::R); + DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification( + m_rxSampleRate / (1<getDeviceEngineInputMessageQueue()->push(notif); } @@ -589,7 +601,15 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi m_outputWorker->setSamplerate(m_txSampleRate); } - DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification(m_txSampleRate, settings.m_txCenterFrequency, false, 0); + bool realElseComplex = (m_settings.m_txIQMapping == AudioCATSISOSettings::L) + || (m_settings.m_txIQMapping == AudioCATSISOSettings::R); + DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification( + m_txSampleRate, + settings.m_txCenterFrequency, + false, + 0, + realElseComplex + ); m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); } } diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp b/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp index 1cfce1af4..635b931e8 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp @@ -208,7 +208,7 @@ void AudioCATSISOGUI::on_streamSide_currentIndexChanged(int index) m_deviceUISet->setSpectrumScalingFactor(SDR_TX_SCALEF); } - updateSpectrum(); + updateSpectrum(m_rxElseTx); ui->spectrumSide->blockSignals(true); ui->spectrumSide->setCurrentIndex(index); @@ -235,13 +235,14 @@ void AudioCATSISOGUI::on_spectrumSide_currentIndexChanged(int index) m_deviceUISet->setSpectrumScalingFactor(SDR_TX_SCALEF); } - updateSpectrum(); + updateSpectrum(index == 0); if (ui->streamLock->isChecked()) { ui->streamSide->blockSignals(true); ui->streamSide->setCurrentIndex(index); ui->streamSide->blockSignals(false); + m_rxElseTx = index == 0; displayFrequency(); displaySampleRate(); } @@ -435,7 +436,7 @@ void AudioCATSISOGUI::displaySettings() displayFrequency(); displaySampleRate(); displayDecim(); - updateSpectrum(); + updateSpectrum(ui->spectrumSide->currentIndex() == 0); displayFcRxTooltip(); displayCatDevice(); displayCatType(); @@ -565,7 +566,7 @@ bool AudioCATSISOGUI::handleMessage(const Message& message) if (sourceOrSink) { - m_rxSampleRate = notif.getSampleRate(); + m_rxSampleRate = notif.getSampleRate() * (1<spectrumSide->currentIndex() == 0); return true; } @@ -706,23 +707,30 @@ void AudioCATSISOGUI::updateCATStatus(AudioCATSISOSettings::MsgCATReportStatus:: m_lastCATStatus = status; } -void AudioCATSISOGUI::updateSpectrum() +void AudioCATSISOGUI::updateSpectrum(bool rxElseTx) { qint64 centerFrequency; + int sampleRate; + bool realElseComplex; - if (m_rxElseTx) { + if (rxElseTx) + { + realElseComplex = (m_settings.m_rxIQMapping == AudioCATSISOSettings::L) + || (m_settings.m_rxIQMapping == AudioCATSISOSettings::R); + sampleRate = m_rxSampleRate/(1<getSpectrum()->setCenterFrequency(centerFrequency); - - if (m_rxElseTx) { - m_deviceUISet->getSpectrum()->setSampleRate(m_rxSampleRate/(1<getSpectrum()->setSampleRate(m_txSampleRate); - } + m_deviceUISet->getSpectrum()->setSampleRate(sampleRate); + m_deviceUISet->getSpectrum()->setSsbSpectrum(realElseComplex); } void AudioCATSISOGUI::openDeviceSettingsDialog(const QPoint& p) diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisogui.h b/plugins/samplemimo/audiocatsiso/audiocatsisogui.h index 9f94c454a..bc4e5c1be 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisogui.h +++ b/plugins/samplemimo/audiocatsiso/audiocatsisogui.h @@ -76,7 +76,7 @@ private: void displayCatDevice(); void displayCatType(); void updateTxEnable(); - void updateSpectrum(); + void updateSpectrum(bool rxElseTx); void updateCATStatus(AudioCATSISOSettings::MsgCATReportStatus::Status status); void sendSettings(); void setCenterFrequency(qint64 centerFrequency); diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui b/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui index 6c0d9dc58..4fc028312 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui +++ b/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui @@ -790,6 +790,16 @@ I=R, Q=L + + + Mono L + + + + + Mono R + +