mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-29 21:42:26 -04: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 re = m_sum.real() / SDR_RX_SCALED;
|
||||||
Real im = m_sum.imag() / SDR_RX_SCALED;
|
Real im = m_sum.imag() / SDR_RX_SCALED;
|
||||||
m_magsq = re*re + im*im;
|
m_magsq = re*re + im*im;
|
||||||
Real mixI = 1.0f;
|
std::complex<float> mix;
|
||||||
Real mixQ = 0.0f;
|
|
||||||
|
|
||||||
if (m_settings.m_pll)
|
if (m_settings.m_pll)
|
||||||
{
|
{
|
||||||
@ -157,40 +156,17 @@ void ChannelAnalyzerNG::processOneSample(Complex& c, fftfilt::cmplx *sideband)
|
|||||||
{
|
{
|
||||||
m_fll.feed(re, im);
|
m_fll.feed(re, im);
|
||||||
// Use -fPLL to mix (exchange PLL real and image in the complex multiplication)
|
// 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();
|
mix = m_sum * std::conj(m_fll.getComplex());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_pll.feed(re, im);
|
m_pll.feed(re, im);
|
||||||
// Use -fPLL to mix (exchange PLL real and image in the complex multiplication)
|
// 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();
|
mix = m_sum * std::conj(m_pll.getComplex());
|
||||||
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()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
feedOneSample(m_settings.m_pll ? mix : m_sum, m_settings.m_fll ? m_fll.getComplex() : m_pll.getComplex());
|
||||||
m_sum = 0;
|
m_sum = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,6 +240,32 @@ private:
|
|||||||
void applySettings(const ChannelAnalyzerNGSettings& settings, bool force = false);
|
void applySettings(const ChannelAnalyzerNGSettings& settings, bool force = false);
|
||||||
void setFilters(int sampleRate, float bandwidth, float lowCutoff);
|
void setFilters(int sampleRate, float bandwidth, float lowCutoff);
|
||||||
void processOneSample(Complex& c, fftfilt::cmplx *sideband);
|
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
|
#endif // INCLUDE_CHANALYZERNG_H
|
||||||
|
@ -41,6 +41,7 @@ void ChannelAnalyzerNGSettings::resetToDefaults()
|
|||||||
m_pll = false;
|
m_pll = false;
|
||||||
m_fll = false;
|
m_fll = false;
|
||||||
m_pllPskOrder = 1;
|
m_pllPskOrder = 1;
|
||||||
|
m_inputType = InputSignal;
|
||||||
m_rgbColor = QColor(128, 128, 128).rgb();
|
m_rgbColor = QColor(128, 128, 128).rgb();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,6 +62,7 @@ QByteArray ChannelAnalyzerNGSettings::serialize() const
|
|||||||
s.writeBool(11, m_pll);
|
s.writeBool(11, m_pll);
|
||||||
s.writeBool(12, m_fll);
|
s.writeBool(12, m_fll);
|
||||||
s.writeU32(13, m_pllPskOrder);
|
s.writeU32(13, m_pllPskOrder);
|
||||||
|
s.writeS32(14, (int) m_inputType);
|
||||||
|
|
||||||
return s.final();
|
return s.final();
|
||||||
}
|
}
|
||||||
@ -78,6 +80,7 @@ bool ChannelAnalyzerNGSettings::deserialize(const QByteArray& data)
|
|||||||
if(d.getVersion() == 1)
|
if(d.getVersion() == 1)
|
||||||
{
|
{
|
||||||
QByteArray bytetmp;
|
QByteArray bytetmp;
|
||||||
|
int tmp;
|
||||||
|
|
||||||
d.readS32(1, &m_frequency, 0);
|
d.readS32(1, &m_frequency, 0);
|
||||||
d.readS32(2, &m_bandwidth, 5000);
|
d.readS32(2, &m_bandwidth, 5000);
|
||||||
@ -102,6 +105,8 @@ bool ChannelAnalyzerNGSettings::deserialize(const QByteArray& data)
|
|||||||
d.readBool(11, &m_pll, false);
|
d.readBool(11, &m_pll, false);
|
||||||
d.readBool(12, &m_fll, false);
|
d.readBool(12, &m_fll, false);
|
||||||
d.readU32(13, &m_pllPskOrder, 1);
|
d.readU32(13, &m_pllPskOrder, 1);
|
||||||
|
d.readS32(14, &tmp, 0);
|
||||||
|
m_inputType = (InputType) tmp;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,13 @@ class Serializable;
|
|||||||
|
|
||||||
struct ChannelAnalyzerNGSettings
|
struct ChannelAnalyzerNGSettings
|
||||||
{
|
{
|
||||||
|
enum InputType
|
||||||
|
{
|
||||||
|
InputSignal,
|
||||||
|
InputPLL,
|
||||||
|
InputAutoCorr
|
||||||
|
};
|
||||||
|
|
||||||
int m_frequency;
|
int m_frequency;
|
||||||
bool m_downSample;
|
bool m_downSample;
|
||||||
quint32 m_downSampleRate;
|
quint32 m_downSampleRate;
|
||||||
@ -33,6 +40,7 @@ struct ChannelAnalyzerNGSettings
|
|||||||
bool m_pll;
|
bool m_pll;
|
||||||
bool m_fll;
|
bool m_fll;
|
||||||
unsigned int m_pllPskOrder;
|
unsigned int m_pllPskOrder;
|
||||||
|
InputType m_inputType;
|
||||||
quint32 m_rgbColor;
|
quint32 m_rgbColor;
|
||||||
QString m_title;
|
QString m_title;
|
||||||
Serializable *m_channelMarker;
|
Serializable *m_channelMarker;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user