mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
Channel analyzer NG: use input selection
This commit is contained in:
parent
d673278f86
commit
cbda404926
@ -148,8 +148,7 @@ void ChannelAnalyzerNG::processOneSample(Complex& c, fftfilt::cmplx *sideband)
|
||||
Real re = m_sum.real() / SDR_RX_SCALED;
|
||||
Real im = m_sum.imag() / SDR_RX_SCALED;
|
||||
m_magsq = re*re + im*im;
|
||||
Real mixI = 1.0f;
|
||||
Real mixQ = 0.0f;
|
||||
std::complex<float> mix;
|
||||
|
||||
if (m_settings.m_pll)
|
||||
{
|
||||
@ -157,40 +156,17 @@ void ChannelAnalyzerNG::processOneSample(Complex& c, fftfilt::cmplx *sideband)
|
||||
{
|
||||
m_fll.feed(re, im);
|
||||
// Use -fPLL to mix (exchange PLL real and image in the complex multiplication)
|
||||
mixI = m_sum.real() * m_fll.getImag() - m_sum.imag() * m_fll.getReal();
|
||||
mixQ = m_sum.real() * m_fll.getReal() + m_sum.imag() * m_fll.getImag();
|
||||
// mixI = m_fll.getReal() * SDR_RX_SCALED;
|
||||
// mixQ = m_fll.getImag() * SDR_RX_SCALED;
|
||||
mix = m_sum * std::conj(m_fll.getComplex());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pll.feed(re, im);
|
||||
// Use -fPLL to mix (exchange PLL real and image in the complex multiplication)
|
||||
mixI = m_sum.real() * m_pll.getImag() - m_sum.imag() * m_pll.getReal();
|
||||
mixQ = m_sum.real() * m_pll.getReal() + m_sum.imag() * m_pll.getImag();
|
||||
}
|
||||
|
||||
if (m_settings.m_ssb & !m_usb)
|
||||
{ // invert spectrum for LSB
|
||||
m_sampleBuffer.push_back(Sample(mixQ, mixI));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sampleBuffer.push_back(Sample(mixI, mixQ));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_settings.m_ssb & !m_usb)
|
||||
{ // invert spectrum for LSB
|
||||
m_sampleBuffer.push_back(Sample(m_sum.imag(), m_sum.real()));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sampleBuffer.push_back(Sample(m_sum.real(), m_sum.imag()));
|
||||
mix = m_sum * std::conj(m_pll.getComplex());
|
||||
}
|
||||
}
|
||||
|
||||
feedOneSample(m_settings.m_pll ? mix : m_sum, m_settings.m_fll ? m_fll.getComplex() : m_pll.getComplex());
|
||||
m_sum = 0;
|
||||
}
|
||||
}
|
||||
|
@ -240,6 +240,32 @@ private:
|
||||
void applySettings(const ChannelAnalyzerNGSettings& settings, bool force = false);
|
||||
void setFilters(int sampleRate, float bandwidth, float lowCutoff);
|
||||
void processOneSample(Complex& c, fftfilt::cmplx *sideband);
|
||||
|
||||
inline void feedOneSample(const fftfilt::cmplx& s, const fftfilt::cmplx& pll)
|
||||
{
|
||||
switch (m_settings.m_inputType)
|
||||
{
|
||||
case ChannelAnalyzerNGSettings::InputPLL:
|
||||
{
|
||||
if (m_settings.m_ssb & !m_usb) { // invert spectrum for LSB
|
||||
m_sampleBuffer.push_back(Sample(pll.imag(), pll.real()));
|
||||
} else {
|
||||
m_sampleBuffer.push_back(Sample(pll.real(), pll.imag()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ChannelAnalyzerNGSettings::InputSignal:
|
||||
default:
|
||||
{
|
||||
if (m_settings.m_ssb & !m_usb) { // invert spectrum for LSB
|
||||
m_sampleBuffer.push_back(Sample(s.imag(), s.real()));
|
||||
} else {
|
||||
m_sampleBuffer.push_back(Sample(s.real(), s.imag()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif // INCLUDE_CHANALYZERNG_H
|
||||
|
@ -41,6 +41,7 @@ void ChannelAnalyzerNGSettings::resetToDefaults()
|
||||
m_pll = false;
|
||||
m_fll = false;
|
||||
m_pllPskOrder = 1;
|
||||
m_inputType = InputSignal;
|
||||
m_rgbColor = QColor(128, 128, 128).rgb();
|
||||
}
|
||||
|
||||
@ -61,6 +62,7 @@ QByteArray ChannelAnalyzerNGSettings::serialize() const
|
||||
s.writeBool(11, m_pll);
|
||||
s.writeBool(12, m_fll);
|
||||
s.writeU32(13, m_pllPskOrder);
|
||||
s.writeS32(14, (int) m_inputType);
|
||||
|
||||
return s.final();
|
||||
}
|
||||
@ -78,6 +80,7 @@ bool ChannelAnalyzerNGSettings::deserialize(const QByteArray& data)
|
||||
if(d.getVersion() == 1)
|
||||
{
|
||||
QByteArray bytetmp;
|
||||
int tmp;
|
||||
|
||||
d.readS32(1, &m_frequency, 0);
|
||||
d.readS32(2, &m_bandwidth, 5000);
|
||||
@ -102,6 +105,8 @@ bool ChannelAnalyzerNGSettings::deserialize(const QByteArray& data)
|
||||
d.readBool(11, &m_pll, false);
|
||||
d.readBool(12, &m_fll, false);
|
||||
d.readU32(13, &m_pllPskOrder, 1);
|
||||
d.readS32(14, &tmp, 0);
|
||||
m_inputType = (InputType) tmp;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -23,6 +23,13 @@ class Serializable;
|
||||
|
||||
struct ChannelAnalyzerNGSettings
|
||||
{
|
||||
enum InputType
|
||||
{
|
||||
InputSignal,
|
||||
InputPLL,
|
||||
InputAutoCorr
|
||||
};
|
||||
|
||||
int m_frequency;
|
||||
bool m_downSample;
|
||||
quint32 m_downSampleRate;
|
||||
@ -33,6 +40,7 @@ struct ChannelAnalyzerNGSettings
|
||||
bool m_pll;
|
||||
bool m_fll;
|
||||
unsigned int m_pllPskOrder;
|
||||
InputType m_inputType;
|
||||
quint32 m_rgbColor;
|
||||
QString m_title;
|
||||
Serializable *m_channelMarker;
|
||||
|
Loading…
Reference in New Issue
Block a user