mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-08-28 10:22:28 -04:00
ATV Demod: put interpolator in place
This commit is contained in:
parent
c3c6b79de4
commit
93a45e88f5
@ -131,12 +131,13 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
float fltQ;
|
float fltQ;
|
||||||
float fltNormI;
|
float fltNormI;
|
||||||
float fltNormQ;
|
float fltNormQ;
|
||||||
|
Complex ci;
|
||||||
|
|
||||||
float fltNorm=0.00f;
|
float fltNorm=0.00f;
|
||||||
float fltVal;
|
float fltVal;
|
||||||
int intVal;
|
int intVal;
|
||||||
|
|
||||||
qint16 * ptrBufferToRelease=NULL;
|
qint16 * ptrBufferToRelease = 0;
|
||||||
|
|
||||||
bool blnComputeImage=false;
|
bool blnComputeImage=false;
|
||||||
|
|
||||||
@ -147,7 +148,6 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
|
|
||||||
m_objSettingsMutex.lock();
|
m_objSettingsMutex.lock();
|
||||||
|
|
||||||
|
|
||||||
//********** Accessing ATV Screen context **********
|
//********** Accessing ATV Screen context **********
|
||||||
|
|
||||||
if(m_intImageIndex==0)
|
if(m_intImageIndex==0)
|
||||||
@ -191,13 +191,51 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
fltI = it->real();
|
fltI = it->real();
|
||||||
fltQ = it->imag();
|
fltQ = it->imag();
|
||||||
#endif
|
#endif
|
||||||
|
Complex c(fltI, fltQ);
|
||||||
|
|
||||||
if (m_objRFRunning.m_intFrequencyOffset != 0)
|
if (m_objRFRunning.m_intFrequencyOffset != 0)
|
||||||
{
|
{
|
||||||
m_nco.nextIQMul(fltI, fltQ);
|
c *= m_nco.nextIQ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_objRFRunning.m_blndecimatorEnable)
|
||||||
|
{
|
||||||
|
if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci))
|
||||||
|
{
|
||||||
|
demod(ci);
|
||||||
|
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
demod(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ptrBufferToRelease != 0)
|
||||||
|
{
|
||||||
|
delete ptrBufferToRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_objSettingsMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ATVDemod::demod(Complex& c)
|
||||||
|
{
|
||||||
|
float fltDivSynchroBlack = 1.0f - m_objRunning.m_fltVoltLevelSynchroBlack;
|
||||||
|
int intSynchroTimeSamples= (3*m_intNumberSamplePerLine)/4;
|
||||||
|
float fltSynchroTrameLevel = 0.5f*((float)intSynchroTimeSamples) * m_objRunning.m_fltVoltLevelSynchroBlack;
|
||||||
|
float fltNormI;
|
||||||
|
float fltNormQ;
|
||||||
|
float fltNorm;
|
||||||
|
float fltVal;
|
||||||
|
int intVal;
|
||||||
|
|
||||||
//********** demodulation **********
|
//********** demodulation **********
|
||||||
|
|
||||||
|
float& fltI = c.real();
|
||||||
|
float& fltQ = c.imag();
|
||||||
|
|
||||||
double magSq = fltI*fltI + fltQ*fltQ;
|
double magSq = fltI*fltI + fltQ*fltQ;
|
||||||
m_objMagSqAverage.feed(magSq);
|
m_objMagSqAverage.feed(magSq);
|
||||||
|
|
||||||
@ -296,7 +334,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
|
|
||||||
//********** Filling pixels **********
|
//********** Filling pixels **********
|
||||||
|
|
||||||
blnComputeImage = (m_objRunning.m_fltRatioOfRowsToDisplay != 0.5f);
|
bool blnComputeImage = (m_objRunning.m_fltRatioOfRowsToDisplay != 0.5f);
|
||||||
|
|
||||||
if (!blnComputeImage)
|
if (!blnComputeImage)
|
||||||
{
|
{
|
||||||
@ -468,17 +506,6 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
|
|
||||||
m_intImageIndex ++;
|
m_intImageIndex ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ptrBufferToRelease!=NULL)
|
|
||||||
{
|
|
||||||
delete ptrBufferToRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_objSettingsMutex.unlock();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATVDemod::start()
|
void ATVDemod::start()
|
||||||
|
@ -281,6 +281,7 @@ private:
|
|||||||
static const float m_fltSecondToUs;
|
static const float m_fltSecondToUs;
|
||||||
|
|
||||||
void applySettings();
|
void applySettings();
|
||||||
|
void demod(Complex& c);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user