mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-08-28 10:22:28 -04:00
GLScope: new delta phase displays
This commit is contained in:
parent
9641895e68
commit
f6b19085fb
@ -40,6 +40,8 @@ public:
|
|||||||
ModeIQ,
|
ModeIQ,
|
||||||
ModeMagLinPha,
|
ModeMagLinPha,
|
||||||
ModeMagdBPha,
|
ModeMagdBPha,
|
||||||
|
ModeMagLinDPha,
|
||||||
|
ModeMagdBDPha,
|
||||||
ModeDerived12,
|
ModeDerived12,
|
||||||
ModeCyclostationary
|
ModeCyclostationary
|
||||||
};
|
};
|
||||||
@ -116,6 +118,7 @@ private:
|
|||||||
Real m_triggerLevel;
|
Real m_triggerLevel;
|
||||||
Real m_triggerPre;
|
Real m_triggerPre;
|
||||||
int m_nbPow;
|
int m_nbPow;
|
||||||
|
Real m_prevArg;
|
||||||
|
|
||||||
// graphics stuff
|
// graphics stuff
|
||||||
QRectF m_glScopeRect1;
|
QRectF m_glScopeRect1;
|
||||||
|
@ -37,6 +37,7 @@ GLScope::GLScope(QWidget* parent) :
|
|||||||
m_triggerChannel(ScopeVis::TriggerFreeRun),
|
m_triggerChannel(ScopeVis::TriggerFreeRun),
|
||||||
m_triggerLevel(0.0),
|
m_triggerLevel(0.0),
|
||||||
m_triggerPre(0.0),
|
m_triggerPre(0.0),
|
||||||
|
m_prevArg(0),
|
||||||
m_displayGridIntensity(5),
|
m_displayGridIntensity(5),
|
||||||
m_displayTraceIntensity(50),
|
m_displayTraceIntensity(50),
|
||||||
m_left1ScaleTextureAllocated(false),
|
m_left1ScaleTextureAllocated(false),
|
||||||
@ -393,7 +394,7 @@ void GLScope::paintGL()
|
|||||||
v = negLimit;
|
v = negLimit;
|
||||||
glVertex2f(i - start, v);
|
glVertex2f(i - start, v);
|
||||||
|
|
||||||
if (m_mode == ModeMagdBPha)
|
if ((m_mode == ModeMagdBPha) || (m_mode == ModeMagdBDPha))
|
||||||
{
|
{
|
||||||
if (i == start)
|
if (i == start)
|
||||||
{
|
{
|
||||||
@ -422,7 +423,7 @@ void GLScope::paintGL()
|
|||||||
|
|
||||||
// Paint powers overlays
|
// Paint powers overlays
|
||||||
|
|
||||||
if (m_mode == ModeMagdBPha)
|
if ((m_mode == ModeMagdBPha) || (m_mode == ModeMagdBDPha))
|
||||||
{
|
{
|
||||||
if (m_nbPow > 0)
|
if (m_nbPow > 0)
|
||||||
{
|
{
|
||||||
@ -760,11 +761,9 @@ void GLScope::handleMode()
|
|||||||
m_powTrace.resize(m_rawTrace.size());
|
m_powTrace.resize(m_rawTrace.size());
|
||||||
std::vector<Complex>::iterator dst = m_mathTrace.begin();
|
std::vector<Complex>::iterator dst = m_mathTrace.begin();
|
||||||
std::vector<Real>::iterator powDst = m_powTrace.begin();
|
std::vector<Real>::iterator powDst = m_powTrace.begin();
|
||||||
//Real mult = (10.0f / log2f(10.0f));
|
|
||||||
for(std::vector<Complex>::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src) {
|
for(std::vector<Complex>::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src) {
|
||||||
Real v = src->real() * src->real() + src->imag() * src->imag();
|
Real v = src->real() * src->real() + src->imag() * src->imag();
|
||||||
*powDst++ = v;
|
*powDst++ = v;
|
||||||
//v = (100.0 - m_ofs*100.0 + (mult * log2f(v))) / 100.0; // TODO: first term is the offset
|
|
||||||
v = (100.0f - m_ofs*100.0f + (10.0f * log10f(v))) / 100.0f; // TODO: first term is the offset
|
v = (100.0f - m_ofs*100.0f + (10.0f * log10f(v))) / 100.0f; // TODO: first term is the offset
|
||||||
*dst++ = Complex(v, arg(*src) / M_PI);
|
*dst++ = Complex(v, arg(*src) / M_PI);
|
||||||
}
|
}
|
||||||
@ -775,6 +774,49 @@ void GLScope::handleMode()
|
|||||||
m_ofs2 = 0.0;
|
m_ofs2 = 0.0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ModeMagLinDPha: {
|
||||||
|
m_mathTrace.resize(m_rawTrace.size());
|
||||||
|
std::vector<Complex>::iterator dst = m_mathTrace.begin();
|
||||||
|
Real curArg;
|
||||||
|
|
||||||
|
for(std::vector<Complex>::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src)
|
||||||
|
{
|
||||||
|
curArg = arg(*src) - m_prevArg;
|
||||||
|
*dst++ = Complex(abs(*src) - m_ofs/2.0, curArg / M_PI);
|
||||||
|
m_prevArg = arg(*src);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_displayTrace = &m_mathTrace;
|
||||||
|
m_amp1 = m_amp;
|
||||||
|
m_amp2 = 1.0;
|
||||||
|
m_ofs1 = -1.0 / m_amp1;
|
||||||
|
m_ofs2 = 0.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ModeMagdBDPha: {
|
||||||
|
m_mathTrace.resize(m_rawTrace.size());
|
||||||
|
m_powTrace.resize(m_rawTrace.size());
|
||||||
|
std::vector<Complex>::iterator dst = m_mathTrace.begin();
|
||||||
|
std::vector<Real>::iterator powDst = m_powTrace.begin();
|
||||||
|
Real curArg;
|
||||||
|
|
||||||
|
for(std::vector<Complex>::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src)
|
||||||
|
{
|
||||||
|
Real v = src->real() * src->real() + src->imag() * src->imag();
|
||||||
|
*powDst++ = v;
|
||||||
|
v = (100.0f - m_ofs*100.0f + (10.0f * log10f(v))) / 100.0f;
|
||||||
|
curArg = arg(*src) - m_prevArg;
|
||||||
|
*dst++ = Complex(v, curArg / M_PI);
|
||||||
|
m_prevArg = arg(*src);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_displayTrace = &m_mathTrace;
|
||||||
|
m_amp1 = 2.0 * m_amp;
|
||||||
|
m_amp2 = 1.0;
|
||||||
|
m_ofs1 = -1.0 / m_amp1;
|
||||||
|
m_ofs2 = 0.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ModeDerived12: {
|
case ModeDerived12: {
|
||||||
if(m_rawTrace.size() > 3) {
|
if(m_rawTrace.size() > 3) {
|
||||||
m_mathTrace.resize(m_rawTrace.size() - 3);
|
m_mathTrace.resize(m_rawTrace.size() - 3);
|
||||||
@ -901,7 +943,9 @@ void GLScope::applyConfig()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ModeMagLinPha: {
|
case ModeMagLinPha:
|
||||||
|
case ModeMagLinDPha:
|
||||||
|
{
|
||||||
if (amp_range < 2.0) {
|
if (amp_range < 2.0) {
|
||||||
m_y1Scale.setRange(Unit::None, amp_ofs * 500.0, amp_range * 1000.0 + amp_ofs * 500.0);
|
m_y1Scale.setRange(Unit::None, amp_ofs * 500.0, amp_range * 1000.0 + amp_ofs * 500.0);
|
||||||
} else {
|
} else {
|
||||||
@ -910,7 +954,9 @@ void GLScope::applyConfig()
|
|||||||
m_y2Scale.setRange(Unit::None, -1.0, 1.0); // Scale to Pi
|
m_y2Scale.setRange(Unit::None, -1.0, 1.0); // Scale to Pi
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ModeMagdBPha: {
|
case ModeMagdBPha:
|
||||||
|
case ModeMagdBDPha:
|
||||||
|
{
|
||||||
m_y1Scale.setRange(Unit::Decibel, pow_floor, pow_floor + pow_range);
|
m_y1Scale.setRange(Unit::Decibel, pow_floor, pow_floor + pow_range);
|
||||||
m_y2Scale.setRange(Unit::AngleDegrees, -1.0, 1.0); // Scale to Pi
|
m_y2Scale.setRange(Unit::AngleDegrees, -1.0, 1.0); // Scale to Pi
|
||||||
break;
|
break;
|
||||||
|
@ -262,9 +262,12 @@ void GLScopeGUI::setTrigLevelDisplay()
|
|||||||
|
|
||||||
void GLScopeGUI::setAmpScaleDisplay()
|
void GLScopeGUI::setAmpScaleDisplay()
|
||||||
{
|
{
|
||||||
if (m_glScope->getDataMode() == GLScope::ModeMagdBPha) {
|
if ((m_glScope->getDataMode() == GLScope::ModeMagdBPha) || (m_glScope->getDataMode() == GLScope::ModeMagdBDPha))
|
||||||
|
{
|
||||||
ui->ampText->setText(tr("%1\ndB").arg(amps[m_amplification]*500.0, 0, 'f', 1));
|
ui->ampText->setText(tr("%1\ndB").arg(amps[m_amplification]*500.0, 0, 'f', 1));
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
qreal a = amps[m_amplification]*10.0;
|
qreal a = amps[m_amplification]*10.0;
|
||||||
|
|
||||||
if(a < 0.000001)
|
if(a < 0.000001)
|
||||||
@ -280,16 +283,20 @@ void GLScopeGUI::setAmpScaleDisplay()
|
|||||||
|
|
||||||
void GLScopeGUI::setAmpOfsDisplay()
|
void GLScopeGUI::setAmpOfsDisplay()
|
||||||
{
|
{
|
||||||
if (m_glScope->getDataMode() == GLScope::ModeMagdBPha) {
|
if ((m_glScope->getDataMode() == GLScope::ModeMagdBPha) || (m_glScope->getDataMode() == GLScope::ModeMagdBDPha))
|
||||||
|
{
|
||||||
ui->ampOfsText->setText(tr("%1\ndB").arg(m_ampOffset/10.0 - 100.0, 0, 'f', 1));
|
ui->ampOfsText->setText(tr("%1\ndB").arg(m_ampOffset/10.0 - 100.0, 0, 'f', 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qreal a;
|
qreal a;
|
||||||
|
|
||||||
if (m_glScope->getDataMode() == GLScope::ModeMagLinPha) {
|
if ((m_glScope->getDataMode() == GLScope::ModeMagLinPha) || (m_glScope->getDataMode() == GLScope::ModeMagLinDPha))
|
||||||
|
{
|
||||||
a = m_ampOffset/2000.0;
|
a = m_ampOffset/2000.0;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
a = m_ampOffset/1000.0;
|
a = m_ampOffset/1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,10 +505,16 @@ void GLScopeGUI::on_dataMode_currentIndexChanged(int index)
|
|||||||
case 2: // mag(dB)+pha
|
case 2: // mag(dB)+pha
|
||||||
m_glScope->setMode(GLScope::ModeMagdBPha);
|
m_glScope->setMode(GLScope::ModeMagdBPha);
|
||||||
break;
|
break;
|
||||||
case 3: // derived1+derived2
|
case 3: // mag(lin)+dPha
|
||||||
|
m_glScope->setMode(GLScope::ModeMagLinDPha);
|
||||||
|
break;
|
||||||
|
case 4: // mag(dB)+dPha
|
||||||
|
m_glScope->setMode(GLScope::ModeMagdBDPha);
|
||||||
|
break;
|
||||||
|
case 5: // derived1+derived2
|
||||||
m_glScope->setMode(GLScope::ModeDerived12);
|
m_glScope->setMode(GLScope::ModeDerived12);
|
||||||
break;
|
break;
|
||||||
case 4: // clostationary
|
case 6: // clostationary
|
||||||
m_glScope->setMode(GLScope::ModeCyclostationary);
|
m_glScope->setMode(GLScope::ModeCyclostationary);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -79,12 +79,12 @@
|
|||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>1:I 2:Q (linear)</string>
|
<string>1:I 2:Q (lin)</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>1:Mag (linear) 2:Phi</string>
|
<string>1:Mag (lin) 2:Phi</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -92,6 +92,16 @@
|
|||||||
<string>1:Mag (dB) 2:Phi</string>
|
<string>1:Mag (dB) 2:Phi</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1:Mag (lin) 2:dPhi</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1:Mag(dB) 2:dPhi</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>1:Derived 1 2:2nd </string>
|
<string>1:Derived 1 2:2nd </string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user