mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-30 03:38:55 -05:00
ATV Demod: renaming of some attributes
This commit is contained in:
parent
dcfdffaf49
commit
35c5d623fd
@ -70,7 +70,7 @@ ATVDemod::ATVDemod(BasebandSampleSink* objScopeSink) :
|
|||||||
|
|
||||||
m_objMagSqAverage.resize(32, 1.0);
|
m_objMagSqAverage.resize(32, 1.0);
|
||||||
|
|
||||||
m_DSBFilter = new fftfilt((2.0f * m_objRFConfig.m_fltRFBandwidth) / 1000000, 2 * m_ssbFftLen); // arbitrary 1 MS/s sample rate
|
m_DSBFilter = new fftfilt((2.0f * m_rfConfig.m_fltRFBandwidth) / 1000000, 2 * m_ssbFftLen); // arbitrary 1 MS/s sample rate
|
||||||
m_DSBFilterBuffer = new Complex[m_ssbFftLen];
|
m_DSBFilterBuffer = new Complex[m_ssbFftLen];
|
||||||
memset(m_DSBFilterBuffer, 0, sizeof(Complex)*(m_ssbFftLen));
|
memset(m_DSBFilterBuffer, 0, sizeof(Complex)*(m_ssbFftLen));
|
||||||
|
|
||||||
@ -188,12 +188,12 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
#endif
|
#endif
|
||||||
Complex c(fltI, fltQ);
|
Complex c(fltI, fltQ);
|
||||||
|
|
||||||
if (m_objRFRunning.m_intFrequencyOffset != 0)
|
if (m_rfRunning.m_intFrequencyOffset != 0)
|
||||||
{
|
{
|
||||||
c *= m_nco.nextIQ();
|
c *= m_nco.nextIQ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_objRFRunning.m_blndecimatorEnable)
|
if (m_rfRunning.m_blndecimatorEnable)
|
||||||
{
|
{
|
||||||
if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci))
|
if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci))
|
||||||
{
|
{
|
||||||
@ -207,7 +207,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_objRunning.m_intVideoTabIndex == 1) && (m_objScopeSink != 0)) // do only if scope tab is selected and scope is available
|
if ((m_running.m_intVideoTabIndex == 1) && (m_objScopeSink != 0)) // do only if scope tab is selected and scope is available
|
||||||
{
|
{
|
||||||
m_objScopeSink->feed(m_objScopeSampleBuffer.begin(), m_objScopeSampleBuffer.end(), false); // m_ssb = positive only
|
m_objScopeSink->feed(m_objScopeSampleBuffer.begin(), m_objScopeSampleBuffer.end(), false); // m_ssb = positive only
|
||||||
m_objScopeSampleBuffer.clear();
|
m_objScopeSampleBuffer.clear();
|
||||||
@ -223,7 +223,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
|
|
||||||
void ATVDemod::demod(Complex& c)
|
void ATVDemod::demod(Complex& c)
|
||||||
{
|
{
|
||||||
float fltDivSynchroBlack = 1.0f - m_objRunning.m_fltVoltLevelSynchroBlack;
|
float fltDivSynchroBlack = 1.0f - m_running.m_fltVoltLevelSynchroBlack;
|
||||||
float fltNormI;
|
float fltNormI;
|
||||||
float fltNormQ;
|
float fltNormQ;
|
||||||
float fltNorm;
|
float fltNorm;
|
||||||
@ -232,12 +232,12 @@ void ATVDemod::demod(Complex& c)
|
|||||||
|
|
||||||
//********** FFT filtering **********
|
//********** FFT filtering **********
|
||||||
|
|
||||||
if (m_objRFRunning.m_blnFFTFiltering)
|
if (m_rfRunning.m_blnFFTFiltering)
|
||||||
{
|
{
|
||||||
int n_out;
|
int n_out;
|
||||||
fftfilt::cmplx *filtered;
|
fftfilt::cmplx *filtered;
|
||||||
|
|
||||||
n_out = m_DSBFilter->runAsym(c, &filtered, m_objRFRunning.m_enmModulation != ATV_LSB); // all usb except explicitely lsb
|
n_out = m_DSBFilter->runAsym(c, &filtered, m_rfRunning.m_enmModulation != ATV_LSB); // all usb except explicitely lsb
|
||||||
|
|
||||||
if (n_out > 0)
|
if (n_out > 0)
|
||||||
{
|
{
|
||||||
@ -250,11 +250,11 @@ void ATVDemod::demod(Complex& c)
|
|||||||
|
|
||||||
//********** demodulation **********
|
//********** demodulation **********
|
||||||
|
|
||||||
const float& fltI = m_objRFRunning.m_blnFFTFiltering ? m_DSBFilterBuffer[m_DSBFilterBufferIndex-1].real() : c.real();
|
const float& fltI = m_rfRunning.m_blnFFTFiltering ? m_DSBFilterBuffer[m_DSBFilterBufferIndex-1].real() : c.real();
|
||||||
const float& fltQ = m_objRFRunning.m_blnFFTFiltering ? m_DSBFilterBuffer[m_DSBFilterBufferIndex-1].imag() : c.imag();
|
const float& fltQ = m_rfRunning.m_blnFFTFiltering ? m_DSBFilterBuffer[m_DSBFilterBufferIndex-1].imag() : c.imag();
|
||||||
double magSq;
|
double magSq;
|
||||||
|
|
||||||
if ((m_objRFRunning.m_enmModulation == ATV_FM1) || (m_objRFRunning.m_enmModulation == ATV_FM2))
|
if ((m_rfRunning.m_enmModulation == ATV_FM1) || (m_rfRunning.m_enmModulation == ATV_FM2))
|
||||||
{
|
{
|
||||||
//Amplitude FM
|
//Amplitude FM
|
||||||
magSq = fltI*fltI + fltQ*fltQ;
|
magSq = fltI*fltI + fltQ*fltQ;
|
||||||
@ -266,7 +266,7 @@ void ATVDemod::demod(Complex& c)
|
|||||||
//-2 > 2 : 0 -> 1 volt
|
//-2 > 2 : 0 -> 1 volt
|
||||||
//0->0.3 synchro 0.3->1 image
|
//0->0.3 synchro 0.3->1 image
|
||||||
|
|
||||||
if (m_objRFRunning.m_enmModulation == ATV_FM1)
|
if (m_rfRunning.m_enmModulation == ATV_FM1)
|
||||||
{
|
{
|
||||||
//YDiff Cd
|
//YDiff Cd
|
||||||
fltVal = m_fltBufferI[0]*(fltNormQ - m_fltBufferQ[1]);
|
fltVal = m_fltBufferI[0]*(fltNormQ - m_fltBufferQ[1]);
|
||||||
@ -304,12 +304,12 @@ void ATVDemod::demod(Complex& c)
|
|||||||
m_fltBufferI[0]=fltNormI;
|
m_fltBufferI[0]=fltNormI;
|
||||||
m_fltBufferQ[0]=fltNormQ;
|
m_fltBufferQ[0]=fltNormQ;
|
||||||
|
|
||||||
if (m_objRFRunning.m_fmDeviation != 1.0f)
|
if (m_rfRunning.m_fmDeviation != 1.0f)
|
||||||
{
|
{
|
||||||
fltVal = ((fltVal - 0.5f) / m_objRFRunning.m_fmDeviation) + 0.5f;
|
fltVal = ((fltVal - 0.5f) / m_rfRunning.m_fmDeviation) + 0.5f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_objRFRunning.m_enmModulation == ATV_AM)
|
else if (m_rfRunning.m_enmModulation == ATV_AM)
|
||||||
{
|
{
|
||||||
//Amplitude AM
|
//Amplitude AM
|
||||||
magSq = fltI*fltI + fltQ*fltQ;
|
magSq = fltI*fltI + fltQ*fltQ;
|
||||||
@ -334,7 +334,7 @@ void ATVDemod::demod(Complex& c)
|
|||||||
fltVal -= m_fltAmpMin;
|
fltVal -= m_fltAmpMin;
|
||||||
fltVal /=m_fltAmpDelta;
|
fltVal /=m_fltAmpDelta;
|
||||||
}
|
}
|
||||||
else if ((m_objRFRunning.m_enmModulation == ATV_USB) || (m_objRFRunning.m_enmModulation == ATV_LSB))
|
else if ((m_rfRunning.m_enmModulation == ATV_USB) || (m_rfRunning.m_enmModulation == ATV_LSB))
|
||||||
{
|
{
|
||||||
magSq = fltI*fltI + fltQ*fltQ;
|
magSq = fltI*fltI + fltQ*fltQ;
|
||||||
m_objMagSqAverage.feed(magSq);
|
m_objMagSqAverage.feed(magSq);
|
||||||
@ -349,7 +349,7 @@ void ATVDemod::demod(Complex& c)
|
|||||||
float mixI = fltI * bfoValues[0] - fltQ * bfoValues[1];
|
float mixI = fltI * bfoValues[0] - fltQ * bfoValues[1];
|
||||||
float mixQ = fltI * bfoValues[1] + fltQ * bfoValues[0];
|
float mixQ = fltI * bfoValues[1] + fltQ * bfoValues[0];
|
||||||
|
|
||||||
if (m_objRFRunning.m_enmModulation == ATV_USB) {
|
if (m_rfRunning.m_enmModulation == ATV_USB) {
|
||||||
fltVal = (mixI + mixQ);
|
fltVal = (mixI + mixQ);
|
||||||
} else {
|
} else {
|
||||||
fltVal = (mixI - mixQ);
|
fltVal = (mixI - mixQ);
|
||||||
@ -371,7 +371,7 @@ void ATVDemod::demod(Complex& c)
|
|||||||
fltVal -= m_fltAmpMin;
|
fltVal -= m_fltAmpMin;
|
||||||
fltVal /=m_fltAmpDelta;
|
fltVal /=m_fltAmpDelta;
|
||||||
}
|
}
|
||||||
else if (m_objRFRunning.m_enmModulation == ATV_FM3)
|
else if (m_rfRunning.m_enmModulation == ATV_FM3)
|
||||||
{
|
{
|
||||||
float rawDeviation;
|
float rawDeviation;
|
||||||
fltVal = m_objPhaseDiscri.phaseDiscriminatorDelta(c, magSq, rawDeviation) + 0.5f;
|
fltVal = m_objPhaseDiscri.phaseDiscriminatorDelta(c, magSq, rawDeviation) + 0.5f;
|
||||||
@ -387,10 +387,10 @@ void ATVDemod::demod(Complex& c)
|
|||||||
fltVal = 0.0f;
|
fltVal = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
fltVal = m_objRunning.m_blnInvertVideo ? 1.0f - fltVal : fltVal;
|
fltVal = m_running.m_blnInvertVideo ? 1.0f - fltVal : fltVal;
|
||||||
fltVal = (fltVal < -1.0f) ? -1.0f : (fltVal > 1.0f) ? 1.0f : fltVal;
|
fltVal = (fltVal < -1.0f) ? -1.0f : (fltVal > 1.0f) ? 1.0f : fltVal;
|
||||||
|
|
||||||
if ((m_objRunning.m_intVideoTabIndex == 1) && (m_objScopeSink != 0)) { // feed scope buffer only if scope is present and visible
|
if ((m_running.m_intVideoTabIndex == 1) && (m_objScopeSink != 0)) { // feed scope buffer only if scope is present and visible
|
||||||
m_objScopeSampleBuffer.push_back(Sample(fltVal*32767.0f, 0.0f));
|
m_objScopeSampleBuffer.push_back(Sample(fltVal*32767.0f, 0.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,7 +398,7 @@ void ATVDemod::demod(Complex& c)
|
|||||||
|
|
||||||
//********** gray level **********
|
//********** gray level **********
|
||||||
//-0.3 -> 0.7
|
//-0.3 -> 0.7
|
||||||
intVal = (int) 255.0*(fltVal - m_objRunning.m_fltVoltLevelSynchroBlack) / fltDivSynchroBlack;
|
intVal = (int) 255.0*(fltVal - m_running.m_fltVoltLevelSynchroBlack) / fltDivSynchroBlack;
|
||||||
|
|
||||||
//0 -> 255
|
//0 -> 255
|
||||||
if(intVal<0)
|
if(intVal<0)
|
||||||
@ -412,7 +412,7 @@ void ATVDemod::demod(Complex& c)
|
|||||||
|
|
||||||
//********** process video sample **********
|
//********** process video sample **********
|
||||||
|
|
||||||
if (m_objRunning.m_enmATVStandard == ATVStdHSkip)
|
if (m_running.m_enmATVStandard == ATVStdHSkip)
|
||||||
{
|
{
|
||||||
processHSkip(fltVal, intVal);
|
processHSkip(fltVal, intVal);
|
||||||
}
|
}
|
||||||
@ -438,12 +438,12 @@ bool ATVDemod::handleMessage(const Message& cmd)
|
|||||||
if (DownChannelizer::MsgChannelizerNotification::match(cmd))
|
if (DownChannelizer::MsgChannelizerNotification::match(cmd))
|
||||||
{
|
{
|
||||||
DownChannelizer::MsgChannelizerNotification& objNotif = (DownChannelizer::MsgChannelizerNotification&) cmd;
|
DownChannelizer::MsgChannelizerNotification& objNotif = (DownChannelizer::MsgChannelizerNotification&) cmd;
|
||||||
m_objConfig.m_intSampleRate = objNotif.getSampleRate();
|
m_config.m_intSampleRate = objNotif.getSampleRate();
|
||||||
m_objRFConfig.m_intFrequencyOffset = objNotif.getFrequencyOffset();
|
m_rfConfig.m_intFrequencyOffset = objNotif.getFrequencyOffset();
|
||||||
|
|
||||||
qDebug() << "ATVDemod::handleMessage: MsgChannelizerNotification:"
|
qDebug() << "ATVDemod::handleMessage: MsgChannelizerNotification:"
|
||||||
<< " m_intSampleRate: " << m_objConfig.m_intSampleRate
|
<< " m_intSampleRate: " << m_config.m_intSampleRate
|
||||||
<< " m_intFrequencyOffset: " << m_objRFConfig.m_intFrequencyOffset;
|
<< " m_intFrequencyOffset: " << m_rfConfig.m_intFrequencyOffset;
|
||||||
|
|
||||||
applySettings();
|
applySettings();
|
||||||
|
|
||||||
@ -453,17 +453,17 @@ bool ATVDemod::handleMessage(const Message& cmd)
|
|||||||
{
|
{
|
||||||
MsgConfigureATVDemod& objCfg = (MsgConfigureATVDemod&) cmd;
|
MsgConfigureATVDemod& objCfg = (MsgConfigureATVDemod&) cmd;
|
||||||
|
|
||||||
m_objConfig = objCfg.m_objMsgConfig;
|
m_config = objCfg.m_objMsgConfig;
|
||||||
|
|
||||||
qDebug() << "ATVDemod::handleMessage: MsgConfigureATVDemod:"
|
qDebug() << "ATVDemod::handleMessage: MsgConfigureATVDemod:"
|
||||||
<< " m_fltVoltLevelSynchroBlack:" << m_objConfig.m_fltVoltLevelSynchroBlack
|
<< " m_fltVoltLevelSynchroBlack:" << m_config.m_fltVoltLevelSynchroBlack
|
||||||
<< " m_fltVoltLevelSynchroTop:" << m_objConfig.m_fltVoltLevelSynchroTop
|
<< " m_fltVoltLevelSynchroTop:" << m_config.m_fltVoltLevelSynchroTop
|
||||||
<< " m_fltFramePerS:" << m_objConfig.m_fltFramePerS
|
<< " m_fltFramePerS:" << m_config.m_fltFramePerS
|
||||||
<< " m_fltLineDurationUs:" << m_objConfig.m_fltLineDuration
|
<< " m_fltLineDurationUs:" << m_config.m_fltLineDuration
|
||||||
<< " m_fltRatioOfRowsToDisplay:" << m_objConfig.m_fltRatioOfRowsToDisplay
|
<< " m_fltRatioOfRowsToDisplay:" << m_config.m_fltRatioOfRowsToDisplay
|
||||||
<< " m_fltTopDurationUs:" << m_objConfig.m_fltTopDuration
|
<< " m_fltTopDurationUs:" << m_config.m_fltTopDuration
|
||||||
<< " m_blnHSync:" << m_objConfig.m_blnHSync
|
<< " m_blnHSync:" << m_config.m_blnHSync
|
||||||
<< " m_blnVSync:" << m_objConfig.m_blnVSync;
|
<< " m_blnVSync:" << m_config.m_blnVSync;
|
||||||
|
|
||||||
applySettings();
|
applySettings();
|
||||||
|
|
||||||
@ -473,16 +473,16 @@ bool ATVDemod::handleMessage(const Message& cmd)
|
|||||||
{
|
{
|
||||||
MsgConfigureRFATVDemod& objCfg = (MsgConfigureRFATVDemod&) cmd;
|
MsgConfigureRFATVDemod& objCfg = (MsgConfigureRFATVDemod&) cmd;
|
||||||
|
|
||||||
m_objRFConfig = objCfg.m_objMsgConfig;
|
m_rfConfig = objCfg.m_objMsgConfig;
|
||||||
|
|
||||||
qDebug() << "ATVDemod::handleMessage: MsgConfigureRFATVDemod:"
|
qDebug() << "ATVDemod::handleMessage: MsgConfigureRFATVDemod:"
|
||||||
<< " m_enmModulation:" << m_objRFConfig.m_enmModulation
|
<< " m_enmModulation:" << m_rfConfig.m_enmModulation
|
||||||
<< " m_fltRFBandwidth:" << m_objRFConfig.m_fltRFBandwidth
|
<< " m_fltRFBandwidth:" << m_rfConfig.m_fltRFBandwidth
|
||||||
<< " m_fltRFOppBandwidth:" << m_objRFConfig.m_fltRFOppBandwidth
|
<< " m_fltRFOppBandwidth:" << m_rfConfig.m_fltRFOppBandwidth
|
||||||
<< " m_blnFFTFiltering:" << m_objRFConfig.m_blnFFTFiltering
|
<< " m_blnFFTFiltering:" << m_rfConfig.m_blnFFTFiltering
|
||||||
<< " m_blnDecimatorEnable:" << m_objRFConfig.m_blndecimatorEnable
|
<< " m_blnDecimatorEnable:" << m_rfConfig.m_blndecimatorEnable
|
||||||
<< " m_fltBFOFrequency:" << m_objRFConfig.m_fltBFOFrequency
|
<< " m_fltBFOFrequency:" << m_rfConfig.m_fltBFOFrequency
|
||||||
<< " m_fmDeviation:" << m_objRFConfig.m_fmDeviation;
|
<< " m_fmDeviation:" << m_rfConfig.m_fmDeviation;
|
||||||
|
|
||||||
applySettings();
|
applySettings();
|
||||||
|
|
||||||
@ -504,30 +504,30 @@ bool ATVDemod::handleMessage(const Message& cmd)
|
|||||||
void ATVDemod::applySettings()
|
void ATVDemod::applySettings()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (m_objConfig.m_intSampleRate == 0)
|
if (m_config.m_intSampleRate == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool forwardSampleRateChange = false;
|
bool forwardSampleRateChange = false;
|
||||||
|
|
||||||
if((m_objRFConfig.m_intFrequencyOffset != m_objRFRunning.m_intFrequencyOffset)
|
if((m_rfConfig.m_intFrequencyOffset != m_rfRunning.m_intFrequencyOffset)
|
||||||
|| (m_objRFConfig.m_enmModulation != m_objRFRunning.m_enmModulation)
|
|| (m_rfConfig.m_enmModulation != m_rfRunning.m_enmModulation)
|
||||||
|| (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate))
|
|| (m_config.m_intSampleRate != m_running.m_intSampleRate))
|
||||||
{
|
{
|
||||||
m_nco.setFreq(-m_objRFConfig.m_intFrequencyOffset, m_objConfig.m_intSampleRate);
|
m_nco.setFreq(-m_rfConfig.m_intFrequencyOffset, m_config.m_intSampleRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate)
|
if ((m_config.m_intSampleRate != m_running.m_intSampleRate)
|
||||||
|| (m_objRFConfig.m_fltRFBandwidth != m_objRFRunning.m_fltRFBandwidth)
|
|| (m_rfConfig.m_fltRFBandwidth != m_rfRunning.m_fltRFBandwidth)
|
||||||
|| (m_objConfig.m_fltFramePerS != m_objRunning.m_fltFramePerS)
|
|| (m_config.m_fltFramePerS != m_running.m_fltFramePerS)
|
||||||
|| (m_objConfig.m_intNumberOfLines != m_objRunning.m_intNumberOfLines))
|
|| (m_config.m_intNumberOfLines != m_running.m_intNumberOfLines))
|
||||||
{
|
{
|
||||||
m_objSettingsMutex.lock();
|
m_objSettingsMutex.lock();
|
||||||
|
|
||||||
int linesPerSecond = m_objConfig.m_intNumberOfLines * m_objConfig.m_fltFramePerS;
|
int linesPerSecond = m_config.m_intNumberOfLines * m_config.m_fltFramePerS;
|
||||||
|
|
||||||
int maxPoints = m_objConfig.m_intSampleRate / linesPerSecond;
|
int maxPoints = m_config.m_intSampleRate / linesPerSecond;
|
||||||
int i = maxPoints;
|
int i = maxPoints;
|
||||||
|
|
||||||
for (; i > 0; i--)
|
for (; i > 0; i--)
|
||||||
@ -537,53 +537,53 @@ void ATVDemod::applySettings()
|
|||||||
}
|
}
|
||||||
|
|
||||||
int nbPointsPerRateUnit = i == 0 ? maxPoints : i;
|
int nbPointsPerRateUnit = i == 0 ? maxPoints : i;
|
||||||
m_objConfigPrivate.m_intTVSampleRate = nbPointsPerRateUnit * linesPerSecond;
|
m_configPrivate.m_intTVSampleRate = nbPointsPerRateUnit * linesPerSecond;
|
||||||
|
|
||||||
if (m_objConfigPrivate.m_intTVSampleRate > 0)
|
if (m_configPrivate.m_intTVSampleRate > 0)
|
||||||
{
|
{
|
||||||
m_interpolatorDistance = (Real) m_objConfigPrivate.m_intTVSampleRate / (Real) m_objConfig.m_intSampleRate;
|
m_interpolatorDistance = (Real) m_configPrivate.m_intTVSampleRate / (Real) m_config.m_intSampleRate;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_objConfigPrivate.m_intTVSampleRate = m_objConfig.m_intSampleRate;
|
m_configPrivate.m_intTVSampleRate = m_config.m_intSampleRate;
|
||||||
m_interpolatorDistance = 1.0f;
|
m_interpolatorDistance = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_interpolatorDistanceRemain = 0;
|
m_interpolatorDistanceRemain = 0;
|
||||||
m_interpolator.create(24,
|
m_interpolator.create(24,
|
||||||
m_objConfigPrivate.m_intTVSampleRate,
|
m_configPrivate.m_intTVSampleRate,
|
||||||
m_objRFConfig.m_fltRFBandwidth / getRFBandwidthDivisor(m_objRFConfig.m_enmModulation),
|
m_rfConfig.m_fltRFBandwidth / getRFBandwidthDivisor(m_rfConfig.m_enmModulation),
|
||||||
3.0);
|
3.0);
|
||||||
m_objSettingsMutex.unlock();
|
m_objSettingsMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_objConfig.m_fltFramePerS != m_objRunning.m_fltFramePerS)
|
if((m_config.m_fltFramePerS != m_running.m_fltFramePerS)
|
||||||
|| (m_objConfig.m_fltLineDuration != m_objRunning.m_fltLineDuration)
|
|| (m_config.m_fltLineDuration != m_running.m_fltLineDuration)
|
||||||
|| (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate)
|
|| (m_config.m_intSampleRate != m_running.m_intSampleRate)
|
||||||
|| (m_objConfig.m_fltTopDuration != m_objRunning.m_fltTopDuration)
|
|| (m_config.m_fltTopDuration != m_running.m_fltTopDuration)
|
||||||
|| (m_objConfig.m_fltRatioOfRowsToDisplay != m_objRunning.m_fltRatioOfRowsToDisplay)
|
|| (m_config.m_fltRatioOfRowsToDisplay != m_running.m_fltRatioOfRowsToDisplay)
|
||||||
|| (m_objConfig.m_enmATVStandard != m_objRunning.m_enmATVStandard)
|
|| (m_config.m_enmATVStandard != m_running.m_enmATVStandard)
|
||||||
|| (m_objConfig.m_intNumberOfLines != m_objRunning.m_intNumberOfLines))
|
|| (m_config.m_intNumberOfLines != m_running.m_intNumberOfLines))
|
||||||
{
|
{
|
||||||
m_objSettingsMutex.lock();
|
m_objSettingsMutex.lock();
|
||||||
|
|
||||||
m_intNumberOfLines = m_objConfig.m_intNumberOfLines;
|
m_intNumberOfLines = m_config.m_intNumberOfLines;
|
||||||
|
|
||||||
applyStandard();
|
applyStandard();
|
||||||
|
|
||||||
m_objConfigPrivate.m_intNumberSamplePerLine = (int) (m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate);
|
m_configPrivate.m_intNumberSamplePerLine = (int) (m_config.m_fltLineDuration * m_config.m_intSampleRate);
|
||||||
m_intNumberSamplePerTop = (int) (m_objConfig.m_fltTopDuration * m_objConfig.m_intSampleRate);
|
m_intNumberSamplePerTop = (int) (m_config.m_fltTopDuration * m_config.m_intSampleRate);
|
||||||
|
|
||||||
m_objRegisteredATVScreen->setRenderImmediate(!(m_objConfig.m_fltFramePerS > 25.0f));
|
m_objRegisteredATVScreen->setRenderImmediate(!(m_config.m_fltFramePerS > 25.0f));
|
||||||
m_objRegisteredATVScreen->resizeATVScreen(
|
m_objRegisteredATVScreen->resizeATVScreen(
|
||||||
m_objConfigPrivate.m_intNumberSamplePerLine - m_intNumberSamplePerLineSignals,
|
m_configPrivate.m_intNumberSamplePerLine - m_intNumberSamplePerLineSignals,
|
||||||
m_intNumberOfLines - m_intNumberOfBlackLines);
|
m_intNumberOfLines - m_intNumberOfBlackLines);
|
||||||
|
|
||||||
qDebug() << "ATVDemod::applySettings:"
|
qDebug() << "ATVDemod::applySettings:"
|
||||||
<< " m_fltLineDuration: " << m_objConfig.m_fltLineDuration
|
<< " m_fltLineDuration: " << m_config.m_fltLineDuration
|
||||||
<< " m_fltFramePerS: " << m_objConfig.m_fltFramePerS
|
<< " m_fltFramePerS: " << m_config.m_fltFramePerS
|
||||||
<< " m_intNumberOfLines: " << m_intNumberOfLines
|
<< " m_intNumberOfLines: " << m_intNumberOfLines
|
||||||
<< " m_intNumberSamplePerLine: " << m_objConfigPrivate.m_intNumberSamplePerLine
|
<< " m_intNumberSamplePerLine: " << m_configPrivate.m_intNumberSamplePerLine
|
||||||
<< " m_intNumberOfBlackLines: " << m_intNumberOfBlackLines;
|
<< " m_intNumberOfBlackLines: " << m_intNumberOfBlackLines;
|
||||||
|
|
||||||
m_intImageIndex = 0;
|
m_intImageIndex = 0;
|
||||||
@ -593,56 +593,56 @@ void ATVDemod::applySettings()
|
|||||||
m_objSettingsMutex.unlock();
|
m_objSettingsMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_objConfigPrivate.m_intTVSampleRate != m_objRunningPrivate.m_intTVSampleRate)
|
if ((m_configPrivate.m_intTVSampleRate != m_runningPrivate.m_intTVSampleRate)
|
||||||
|| (m_objConfigPrivate.m_intNumberSamplePerLine != m_objRunningPrivate.m_intNumberSamplePerLine)
|
|| (m_configPrivate.m_intNumberSamplePerLine != m_runningPrivate.m_intNumberSamplePerLine)
|
||||||
|| (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate)
|
|| (m_config.m_intSampleRate != m_running.m_intSampleRate)
|
||||||
|| (m_objRFConfig.m_blndecimatorEnable != m_objRFRunning.m_blndecimatorEnable))
|
|| (m_rfConfig.m_blndecimatorEnable != m_rfRunning.m_blndecimatorEnable))
|
||||||
{
|
{
|
||||||
forwardSampleRateChange = true;
|
forwardSampleRateChange = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_objConfigPrivate.m_intTVSampleRate != m_objRunningPrivate.m_intTVSampleRate)
|
if ((m_configPrivate.m_intTVSampleRate != m_runningPrivate.m_intTVSampleRate)
|
||||||
|| (m_objRFConfig.m_fltRFBandwidth != m_objRFRunning.m_fltRFBandwidth)
|
|| (m_rfConfig.m_fltRFBandwidth != m_rfRunning.m_fltRFBandwidth)
|
||||||
|| (m_objRFConfig.m_fltRFOppBandwidth != m_objRFRunning.m_fltRFOppBandwidth))
|
|| (m_rfConfig.m_fltRFOppBandwidth != m_rfRunning.m_fltRFOppBandwidth))
|
||||||
{
|
{
|
||||||
m_objSettingsMutex.lock();
|
m_objSettingsMutex.lock();
|
||||||
m_DSBFilter->create_asym_filter(m_objRFConfig.m_fltRFOppBandwidth / m_objConfigPrivate.m_intTVSampleRate,
|
m_DSBFilter->create_asym_filter(m_rfConfig.m_fltRFOppBandwidth / m_configPrivate.m_intTVSampleRate,
|
||||||
m_objRFConfig.m_fltRFBandwidth / m_objConfigPrivate.m_intTVSampleRate);
|
m_rfConfig.m_fltRFBandwidth / m_configPrivate.m_intTVSampleRate);
|
||||||
memset(m_DSBFilterBuffer, 0, sizeof(Complex)*(m_ssbFftLen));
|
memset(m_DSBFilterBuffer, 0, sizeof(Complex)*(m_ssbFftLen));
|
||||||
m_DSBFilterBufferIndex = 0;
|
m_DSBFilterBufferIndex = 0;
|
||||||
m_objSettingsMutex.unlock();
|
m_objSettingsMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_objConfigPrivate.m_intTVSampleRate != m_objRunningPrivate.m_intTVSampleRate)
|
if ((m_configPrivate.m_intTVSampleRate != m_runningPrivate.m_intTVSampleRate)
|
||||||
|| (m_objRFConfig.m_fltBFOFrequency != m_objRFRunning.m_fltBFOFrequency))
|
|| (m_rfConfig.m_fltBFOFrequency != m_rfRunning.m_fltBFOFrequency))
|
||||||
{
|
{
|
||||||
m_bfoPLL.configure(m_objRFConfig.m_fltBFOFrequency / m_objConfigPrivate.m_intTVSampleRate,
|
m_bfoPLL.configure(m_rfConfig.m_fltBFOFrequency / m_configPrivate.m_intTVSampleRate,
|
||||||
100.0 / m_objConfigPrivate.m_intTVSampleRate,
|
100.0 / m_configPrivate.m_intTVSampleRate,
|
||||||
0.01);
|
0.01);
|
||||||
m_bfoFilter.setFrequencies(m_objRFConfig.m_fltBFOFrequency, m_objConfigPrivate.m_intTVSampleRate);
|
m_bfoFilter.setFrequencies(m_rfConfig.m_fltBFOFrequency, m_configPrivate.m_intTVSampleRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_objRFConfig.m_fmDeviation != m_objRFRunning.m_fmDeviation)
|
if (m_rfConfig.m_fmDeviation != m_rfRunning.m_fmDeviation)
|
||||||
{
|
{
|
||||||
m_objPhaseDiscri.setFMScaling(1.0f / m_objRFConfig.m_fmDeviation);
|
m_objPhaseDiscri.setFMScaling(1.0f / m_rfConfig.m_fmDeviation);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_objRunning = m_objConfig;
|
m_running = m_config;
|
||||||
m_objRFRunning = m_objRFConfig;
|
m_rfRunning = m_rfConfig;
|
||||||
m_objRunningPrivate = m_objConfigPrivate;
|
m_runningPrivate = m_configPrivate;
|
||||||
|
|
||||||
if (forwardSampleRateChange)
|
if (forwardSampleRateChange)
|
||||||
{
|
{
|
||||||
int sampleRate = m_objRFRunning.m_blndecimatorEnable ? m_objRunningPrivate.m_intTVSampleRate : m_objRunning.m_intSampleRate;
|
int sampleRate = m_rfRunning.m_blndecimatorEnable ? m_runningPrivate.m_intTVSampleRate : m_running.m_intSampleRate;
|
||||||
MsgReportEffectiveSampleRate *report;
|
MsgReportEffectiveSampleRate *report;
|
||||||
report = MsgReportEffectiveSampleRate::create(sampleRate, m_objRunningPrivate.m_intNumberSamplePerLine);
|
report = MsgReportEffectiveSampleRate::create(sampleRate, m_runningPrivate.m_intNumberSamplePerLine);
|
||||||
getMessageQueueToGUI()->push(report);
|
getMessageQueueToGUI()->push(report);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATVDemod::applyStandard()
|
void ATVDemod::applyStandard()
|
||||||
{
|
{
|
||||||
switch(m_objConfig.m_enmATVStandard)
|
switch(m_config.m_enmATVStandard)
|
||||||
{
|
{
|
||||||
case ATVStdHSkip:
|
case ATVStdHSkip:
|
||||||
// what is left in a line for the image
|
// what is left in a line for the image
|
||||||
@ -689,23 +689,23 @@ void ATVDemod::applyStandard()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// for now all standards apply this
|
// for now all standards apply this
|
||||||
m_intNumberSamplePerLineSignals = (int) ((12.0f/64.0f)*m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate); // 12.0 = 7.3 + 4.7
|
m_intNumberSamplePerLineSignals = (int) ((12.0f/64.0f)*m_config.m_fltLineDuration * m_config.m_intSampleRate); // 12.0 = 7.3 + 4.7
|
||||||
m_intNumberSaplesPerHSync = (int) ((9.6f/64.0f)*m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate); // 9.4 = 4.7 + 4.7
|
m_intNumberSaplesPerHSync = (int) ((9.6f/64.0f)*m_config.m_fltLineDuration * m_config.m_intSampleRate); // 9.4 = 4.7 + 4.7
|
||||||
}
|
}
|
||||||
|
|
||||||
int ATVDemod::getSampleRate()
|
int ATVDemod::getSampleRate()
|
||||||
{
|
{
|
||||||
return m_objRunning.m_intSampleRate;
|
return m_running.m_intSampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ATVDemod::getEffectiveSampleRate()
|
int ATVDemod::getEffectiveSampleRate()
|
||||||
{
|
{
|
||||||
return m_objRFRunning.m_blndecimatorEnable ? m_objRunningPrivate.m_intTVSampleRate : m_objRunning.m_intSampleRate;
|
return m_rfRunning.m_blndecimatorEnable ? m_runningPrivate.m_intTVSampleRate : m_running.m_intSampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ATVDemod::getBFOLocked()
|
bool ATVDemod::getBFOLocked()
|
||||||
{
|
{
|
||||||
if ((m_objRFRunning.m_enmModulation == ATV_USB) || (m_objRFRunning.m_enmModulation == ATV_LSB))
|
if ((m_rfRunning.m_enmModulation == ATV_USB) || (m_rfRunning.m_enmModulation == ATV_LSB))
|
||||||
{
|
{
|
||||||
return m_bfoPLL.locked();
|
return m_bfoPLL.locked();
|
||||||
}
|
}
|
||||||
|
@ -411,14 +411,14 @@ private:
|
|||||||
|
|
||||||
//QElapsedTimer m_objTimer;
|
//QElapsedTimer m_objTimer;
|
||||||
|
|
||||||
ATVConfig m_objRunning;
|
ATVConfig m_running;
|
||||||
ATVConfig m_objConfig;
|
ATVConfig m_config;
|
||||||
|
|
||||||
ATVRFConfig m_objRFRunning;
|
ATVRFConfig m_rfRunning;
|
||||||
ATVRFConfig m_objRFConfig;
|
ATVRFConfig m_rfConfig;
|
||||||
|
|
||||||
ATVConfigPrivate m_objRunningPrivate;
|
ATVConfigPrivate m_runningPrivate;
|
||||||
ATVConfigPrivate m_objConfigPrivate;
|
ATVConfigPrivate m_configPrivate;
|
||||||
|
|
||||||
QMutex m_objSettingsMutex;
|
QMutex m_objSettingsMutex;
|
||||||
|
|
||||||
@ -434,12 +434,12 @@ private:
|
|||||||
// Horizontal Synchro detection
|
// Horizontal Synchro detection
|
||||||
|
|
||||||
// Floor Detection 0
|
// Floor Detection 0
|
||||||
if (fltVal < m_objRunning.m_fltVoltLevelSynchroTop)
|
if (fltVal < m_running.m_fltVoltLevelSynchroTop)
|
||||||
{
|
{
|
||||||
m_intSynchroPoints++;
|
m_intSynchroPoints++;
|
||||||
}
|
}
|
||||||
// Black detection 0.3
|
// Black detection 0.3
|
||||||
else if (fltVal > m_objRunning.m_fltVoltLevelSynchroBlack)
|
else if (fltVal > m_running.m_fltVoltLevelSynchroBlack)
|
||||||
{
|
{
|
||||||
m_intSynchroPoints = 0;
|
m_intSynchroPoints = 0;
|
||||||
}
|
}
|
||||||
@ -450,7 +450,7 @@ private:
|
|||||||
|
|
||||||
if (m_blnSynchroDetected)
|
if (m_blnSynchroDetected)
|
||||||
{
|
{
|
||||||
if (m_intSampleIndex >= (3 * m_objRunningPrivate.m_intNumberSamplePerLine)/2) // first after skip
|
if (m_intSampleIndex >= (3 * m_runningPrivate.m_intNumberSamplePerLine)/2) // first after skip
|
||||||
{
|
{
|
||||||
//qDebug("VSync: %d %d %d", m_intColIndex, m_intSampleIndex, m_intLineIndex);
|
//qDebug("VSync: %d %d %d", m_intColIndex, m_intSampleIndex, m_intLineIndex);
|
||||||
m_intAvgColIndex = m_intColIndex;
|
m_intAvgColIndex = m_intColIndex;
|
||||||
@ -468,25 +468,25 @@ private:
|
|||||||
m_intSampleIndex++;
|
m_intSampleIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_intColIndex < m_objRunningPrivate.m_intNumberSamplePerLine + m_intNumberSamplePerTop - 1)
|
if (m_intColIndex < m_runningPrivate.m_intNumberSamplePerLine + m_intNumberSamplePerTop - 1)
|
||||||
{
|
{
|
||||||
m_intColIndex++;
|
m_intColIndex++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_objRunning.m_blnHSync && (m_intLineIndex == 0))
|
if (m_running.m_blnHSync && (m_intLineIndex == 0))
|
||||||
{
|
{
|
||||||
//qDebug("HCorr: %d", m_intAvgColIndex);
|
//qDebug("HCorr: %d", m_intAvgColIndex);
|
||||||
m_intColIndex = m_intNumberSamplePerTop + (m_objRunningPrivate.m_intNumberSamplePerLine - m_intAvgColIndex)/2; // amortizing factor 1/2
|
m_intColIndex = m_intNumberSamplePerTop + (m_runningPrivate.m_intNumberSamplePerLine - m_intAvgColIndex)/2; // amortizing factor 1/2
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_intColIndex = m_intNumberSamplePerTop;
|
m_intColIndex = m_intNumberSamplePerTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_objRFRunning.m_enmModulation == ATV_AM)
|
if ((m_rfRunning.m_enmModulation == ATV_AM)
|
||||||
|| (m_objRFRunning.m_enmModulation == ATV_USB)
|
|| (m_rfRunning.m_enmModulation == ATV_USB)
|
||||||
|| (m_objRFRunning.m_enmModulation == ATV_LSB))
|
|| (m_rfRunning.m_enmModulation == ATV_LSB))
|
||||||
{
|
{
|
||||||
m_fltAmpMin = m_fltEffMin;
|
m_fltAmpMin = m_fltEffMin;
|
||||||
m_fltAmpMax = m_fltEffMax;
|
m_fltAmpMax = m_fltEffMax;
|
||||||
@ -510,18 +510,18 @@ private:
|
|||||||
|
|
||||||
inline void processClassic(float& fltVal, int& intVal)
|
inline void processClassic(float& fltVal, int& intVal)
|
||||||
{
|
{
|
||||||
int intSynchroTimeSamples= (3 * m_objRunningPrivate.m_intNumberSamplePerLine)/4;
|
int intSynchroTimeSamples= (3 * m_runningPrivate.m_intNumberSamplePerLine)/4;
|
||||||
float fltSynchroTrameLevel = 0.5f*((float)intSynchroTimeSamples) * m_objRunning.m_fltVoltLevelSynchroBlack;
|
float fltSynchroTrameLevel = 0.5f*((float)intSynchroTimeSamples) * m_running.m_fltVoltLevelSynchroBlack;
|
||||||
|
|
||||||
// Horizontal Synchro detection
|
// Horizontal Synchro detection
|
||||||
|
|
||||||
// Floor Detection 0
|
// Floor Detection 0
|
||||||
if (fltVal < m_objRunning.m_fltVoltLevelSynchroTop)
|
if (fltVal < m_running.m_fltVoltLevelSynchroTop)
|
||||||
{
|
{
|
||||||
m_intSynchroPoints++;
|
m_intSynchroPoints++;
|
||||||
}
|
}
|
||||||
// Black detection 0.3
|
// Black detection 0.3
|
||||||
else if (fltVal > m_objRunning.m_fltVoltLevelSynchroBlack)
|
else if (fltVal > m_running.m_fltVoltLevelSynchroBlack)
|
||||||
{
|
{
|
||||||
m_intSynchroPoints = 0;
|
m_intSynchroPoints = 0;
|
||||||
}
|
}
|
||||||
@ -534,7 +534,7 @@ private:
|
|||||||
|
|
||||||
if (m_blnSynchroDetected)
|
if (m_blnSynchroDetected)
|
||||||
{
|
{
|
||||||
m_intAvgColIndex = m_intSampleIndex - m_intColIndex - (m_intColIndex < m_objRunningPrivate.m_intNumberSamplePerLine/2 ? 150 : 0);
|
m_intAvgColIndex = m_intSampleIndex - m_intColIndex - (m_intColIndex < m_runningPrivate.m_intNumberSamplePerLine/2 ? 150 : 0);
|
||||||
//qDebug("HSync: %d %d %d", m_intSampleIndex, m_intColIndex, m_intAvgColIndex);
|
//qDebug("HSync: %d %d %d", m_intSampleIndex, m_intColIndex, m_intAvgColIndex);
|
||||||
m_intSampleIndex = 0;
|
m_intSampleIndex = 0;
|
||||||
}
|
}
|
||||||
@ -543,14 +543,14 @@ private:
|
|||||||
m_intSampleIndex++;
|
m_intSampleIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_objRunning.m_blnHSync && (m_intColIndex >= m_objRunningPrivate.m_intNumberSamplePerLine)) // H Sync not active
|
if (!m_running.m_blnHSync && (m_intColIndex >= m_runningPrivate.m_intNumberSamplePerLine)) // H Sync not active
|
||||||
{
|
{
|
||||||
m_intColIndex = 0;
|
m_intColIndex = 0;
|
||||||
blnNewLine = true;
|
blnNewLine = true;
|
||||||
}
|
}
|
||||||
else if (m_intColIndex >= m_objRunningPrivate.m_intNumberSamplePerLine + m_intNumberSamplePerTop) // No valid H sync
|
else if (m_intColIndex >= m_runningPrivate.m_intNumberSamplePerLine + m_intNumberSamplePerTop) // No valid H sync
|
||||||
{
|
{
|
||||||
if (m_objRunning.m_blnHSync && (m_intLineIndex == 0))
|
if (m_running.m_blnHSync && (m_intLineIndex == 0))
|
||||||
{
|
{
|
||||||
//qDebug("HSync: %d %d", m_intColIndex, m_intAvgColIndex);
|
//qDebug("HSync: %d %d", m_intColIndex, m_intAvgColIndex);
|
||||||
m_intColIndex = m_intNumberSamplePerTop + m_intAvgColIndex/4; // amortizing 1/4
|
m_intColIndex = m_intNumberSamplePerTop + m_intAvgColIndex/4; // amortizing 1/4
|
||||||
@ -565,9 +565,9 @@ private:
|
|||||||
|
|
||||||
if (blnNewLine)
|
if (blnNewLine)
|
||||||
{
|
{
|
||||||
if ((m_objRFRunning.m_enmModulation == ATV_AM)
|
if ((m_rfRunning.m_enmModulation == ATV_AM)
|
||||||
|| (m_objRFRunning.m_enmModulation == ATV_USB)
|
|| (m_rfRunning.m_enmModulation == ATV_USB)
|
||||||
|| (m_objRFRunning.m_enmModulation == ATV_LSB))
|
|| (m_rfRunning.m_enmModulation == ATV_LSB))
|
||||||
{
|
{
|
||||||
m_fltAmpMin = m_fltEffMin;
|
m_fltAmpMin = m_fltEffMin;
|
||||||
m_fltAmpMax = m_fltEffMax;
|
m_fltAmpMax = m_fltEffMax;
|
||||||
@ -604,7 +604,7 @@ private:
|
|||||||
|
|
||||||
// Vertical sync and image rendering
|
// Vertical sync and image rendering
|
||||||
|
|
||||||
if ((m_objRunning.m_blnVSync) && (m_intLineIndex < m_intNumberOfLines)) // VSync activated and lines in range
|
if ((m_running.m_blnVSync) && (m_intLineIndex < m_intNumberOfLines)) // VSync activated and lines in range
|
||||||
{
|
{
|
||||||
if (m_intColIndex >= intSynchroTimeSamples)
|
if (m_intColIndex >= intSynchroTimeSamples)
|
||||||
{
|
{
|
||||||
@ -645,7 +645,7 @@ private:
|
|||||||
{
|
{
|
||||||
m_objRegisteredATVScreen->renderImage(0);
|
m_objRegisteredATVScreen->renderImage(0);
|
||||||
|
|
||||||
if (m_objRFRunning.m_enmModulation == ATV_AM)
|
if (m_rfRunning.m_enmModulation == ATV_AM)
|
||||||
{
|
{
|
||||||
m_fltAmpMin = m_fltEffMin;
|
m_fltAmpMin = m_fltEffMin;
|
||||||
m_fltAmpMax = m_fltEffMax;
|
m_fltAmpMax = m_fltEffMax;
|
||||||
|
@ -61,12 +61,12 @@ QString ATVDemodGUI::getName() const
|
|||||||
|
|
||||||
qint64 ATVDemodGUI::getCenterFrequency() const
|
qint64 ATVDemodGUI::getCenterFrequency() const
|
||||||
{
|
{
|
||||||
return m_objChannelMarker.getCenterFrequency();
|
return m_channelMarker.getCenterFrequency();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATVDemodGUI::setCenterFrequency(qint64 intCenterFrequency)
|
void ATVDemodGUI::setCenterFrequency(qint64 intCenterFrequency)
|
||||||
{
|
{
|
||||||
m_objChannelMarker.setCenterFrequency(intCenterFrequency);
|
m_channelMarker.setCenterFrequency(intCenterFrequency);
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,8 +105,8 @@ QByteArray ATVDemodGUI::serialize() const
|
|||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
s.writeS32(1, m_objChannelMarker.getCenterFrequency());
|
s.writeS32(1, m_channelMarker.getCenterFrequency());
|
||||||
s.writeU32(2, m_objChannelMarker.getColor().rgb());
|
s.writeU32(2, m_channelMarker.getColor().rgb());
|
||||||
s.writeS32(3, ui->synchLevel->value());
|
s.writeS32(3, ui->synchLevel->value());
|
||||||
s.writeS32(4, ui->blackLevel->value());
|
s.writeS32(4, ui->blackLevel->value());
|
||||||
s.writeS32(5, ui->lineTime->value());
|
s.writeS32(5, ui->lineTime->value());
|
||||||
@ -144,10 +144,10 @@ bool ATVDemodGUI::deserialize(const QByteArray& arrData)
|
|||||||
bool booltmp;
|
bool booltmp;
|
||||||
|
|
||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
m_objChannelMarker.blockSignals(true);
|
m_channelMarker.blockSignals(true);
|
||||||
|
|
||||||
d.readS32(1, &tmp, 0);
|
d.readS32(1, &tmp, 0);
|
||||||
m_objChannelMarker.setCenterFrequency(tmp);
|
m_channelMarker.setCenterFrequency(tmp);
|
||||||
|
|
||||||
// if (d.readU32(2, &u32tmp)) {
|
// if (d.readU32(2, &u32tmp)) {
|
||||||
// m_objChannelMarker.setColor(u32tmp);
|
// m_objChannelMarker.setColor(u32tmp);
|
||||||
@ -189,7 +189,7 @@ bool ATVDemodGUI::deserialize(const QByteArray& arrData)
|
|||||||
ui->standard->setCurrentIndex(tmp);
|
ui->standard->setCurrentIndex(tmp);
|
||||||
|
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
m_objChannelMarker.blockSignals(false);
|
m_channelMarker.blockSignals(false);
|
||||||
|
|
||||||
lineTimeUpdate();
|
lineTimeUpdate();
|
||||||
topTimeUpdate();
|
topTimeUpdate();
|
||||||
@ -211,7 +211,7 @@ bool ATVDemodGUI::handleMessage(const Message& objMessage)
|
|||||||
int nbPointsPerLine = ((ATVDemod::MsgReportEffectiveSampleRate&)objMessage).getNbPointsPerLine();
|
int nbPointsPerLine = ((ATVDemod::MsgReportEffectiveSampleRate&)objMessage).getNbPointsPerLine();
|
||||||
ui->channelSampleRateText->setText(tr("%1k").arg(sampleRate/1000.0f, 0, 'f', 2));
|
ui->channelSampleRateText->setText(tr("%1k").arg(sampleRate/1000.0f, 0, 'f', 2));
|
||||||
ui->nbPointsPerLineText->setText(tr("%1p").arg(nbPointsPerLine));
|
ui->nbPointsPerLineText->setText(tr("%1p").arg(nbPointsPerLine));
|
||||||
m_objScopeVis->setSampleRate(sampleRate);
|
m_scopeVis->setSampleRate(sampleRate);
|
||||||
setRFFiltersSlidersRange(sampleRate);
|
setRFFiltersSlidersRange(sampleRate);
|
||||||
lineTimeUpdate();
|
lineTimeUpdate();
|
||||||
topTimeUpdate();
|
topTimeUpdate();
|
||||||
@ -261,7 +261,7 @@ void ATVDemodGUI::onMenuDoubleClicked()
|
|||||||
{
|
{
|
||||||
m_blnBasicSettingsShown = true;
|
m_blnBasicSettingsShown = true;
|
||||||
BasicChannelSettingsWidget* bcsw = new BasicChannelSettingsWidget(
|
BasicChannelSettingsWidget* bcsw = new BasicChannelSettingsWidget(
|
||||||
&m_objChannelMarker, this);
|
&m_channelMarker, this);
|
||||||
bcsw->show();
|
bcsw->show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,9 +270,9 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI,
|
|||||||
QWidget* objParent) :
|
QWidget* objParent) :
|
||||||
RollupWidget(objParent),
|
RollupWidget(objParent),
|
||||||
ui(new Ui::ATVDemodGUI),
|
ui(new Ui::ATVDemodGUI),
|
||||||
m_objPluginAPI(objPluginAPI),
|
m_pluginAPI(objPluginAPI),
|
||||||
m_objDeviceAPI(objDeviceAPI),
|
m_deviceAPI(objDeviceAPI),
|
||||||
m_objChannelMarker(this),
|
m_channelMarker(this),
|
||||||
m_blnBasicSettingsShown(false),
|
m_blnBasicSettingsShown(false),
|
||||||
m_blnDoApplySettings(true),
|
m_blnDoApplySettings(true),
|
||||||
m_objMagSqAverage(40, 0),
|
m_objMagSqAverage(40, 0),
|
||||||
@ -283,43 +283,43 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI,
|
|||||||
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
||||||
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
|
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
|
||||||
|
|
||||||
m_objScopeVis = new ScopeVisNG(ui->glScope);
|
m_scopeVis = new ScopeVisNG(ui->glScope);
|
||||||
m_objATVDemod = new ATVDemod(m_objScopeVis);
|
m_atvDemod = new ATVDemod(m_scopeVis);
|
||||||
m_objATVDemod->setMessageQueueToGUI(getInputMessageQueue());
|
m_atvDemod->setMessageQueueToGUI(getInputMessageQueue());
|
||||||
m_objATVDemod->setATVScreen(ui->screenTV);
|
m_atvDemod->setATVScreen(ui->screenTV);
|
||||||
|
|
||||||
m_objChannelizer = new DownChannelizer(m_objATVDemod);
|
m_channelizer = new DownChannelizer(m_atvDemod);
|
||||||
m_objThreadedChannelizer = new ThreadedBasebandSampleSink(m_objChannelizer, this);
|
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
|
||||||
m_objDeviceAPI->addThreadedSink(m_objThreadedChannelizer);
|
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
|
||||||
|
|
||||||
ui->glScope->connectTimer(m_objPluginAPI->getMainWindow()->getMasterTimer());
|
ui->glScope->connectTimer(m_pluginAPI->getMainWindow()->getMasterTimer());
|
||||||
connect(&m_objPluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); // 50 ms
|
connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); // 50 ms
|
||||||
|
|
||||||
ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03)));
|
ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03)));
|
||||||
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
||||||
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
||||||
|
|
||||||
connect(m_objChannelizer, SIGNAL(inputSampleRateChanged()), this, SLOT(channelSampleRateChanged()));
|
connect(m_channelizer, SIGNAL(inputSampleRateChanged()), this, SLOT(channelSampleRateChanged()));
|
||||||
|
|
||||||
//m_objPluginAPI->addThreadedSink(m_objThreadedChannelizer);
|
//m_objPluginAPI->addThreadedSink(m_objThreadedChannelizer);
|
||||||
m_objChannelMarker.setColor(Qt::white);
|
m_channelMarker.setColor(Qt::white);
|
||||||
m_objChannelMarker.setMovable(false);
|
m_channelMarker.setMovable(false);
|
||||||
m_objChannelMarker.setBandwidth(6000000);
|
m_channelMarker.setBandwidth(6000000);
|
||||||
m_objChannelMarker.setCenterFrequency(0);
|
m_channelMarker.setCenterFrequency(0);
|
||||||
m_objChannelMarker.setVisible(true);
|
m_channelMarker.setVisible(true);
|
||||||
setTitleColor(m_objChannelMarker.getColor());
|
setTitleColor(m_channelMarker.getColor());
|
||||||
|
|
||||||
connect(&m_objChannelMarker, SIGNAL(changed()), this, SLOT(viewChanged()));
|
connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(viewChanged()));
|
||||||
|
|
||||||
m_objDeviceAPI->registerChannelInstance(m_strChannelID, this);
|
m_deviceAPI->registerChannelInstance(m_strChannelID, this);
|
||||||
m_objDeviceAPI->addChannelMarker(&m_objChannelMarker);
|
m_deviceAPI->addChannelMarker(&m_channelMarker);
|
||||||
m_objDeviceAPI->addRollupWidget(this);
|
m_deviceAPI->addRollupWidget(this);
|
||||||
|
|
||||||
//ui->screenTV->connectTimer(m_objPluginAPI->getMainWindow()->getMasterTimer());
|
//ui->screenTV->connectTimer(m_objPluginAPI->getMainWindow()->getMasterTimer());
|
||||||
|
|
||||||
m_objMagSqAverage.resize(4, 1.0);
|
m_objMagSqAverage.resize(4, 1.0);
|
||||||
|
|
||||||
ui->scopeGUI->setBuddies(m_objScopeVis->getInputMessageQueue(), m_objScopeVis, ui->glScope);
|
ui->scopeGUI->setBuddies(m_scopeVis->getInputMessageQueue(), m_scopeVis, ui->glScope);
|
||||||
|
|
||||||
resetToDefaults(); // does applySettings()
|
resetToDefaults(); // does applySettings()
|
||||||
|
|
||||||
@ -346,12 +346,12 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI,
|
|||||||
|
|
||||||
ATVDemodGUI::~ATVDemodGUI()
|
ATVDemodGUI::~ATVDemodGUI()
|
||||||
{
|
{
|
||||||
m_objDeviceAPI->removeChannelInstance(this);
|
m_deviceAPI->removeChannelInstance(this);
|
||||||
m_objDeviceAPI->removeThreadedSink(m_objThreadedChannelizer);
|
m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
|
||||||
delete m_objThreadedChannelizer;
|
delete m_threadedChannelizer;
|
||||||
delete m_objChannelizer;
|
delete m_channelizer;
|
||||||
delete m_objATVDemod;
|
delete m_atvDemod;
|
||||||
delete m_objScopeVis;
|
delete m_scopeVis;
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -364,13 +364,13 @@ void ATVDemodGUI::applySettings()
|
|||||||
{
|
{
|
||||||
if (m_blnDoApplySettings)
|
if (m_blnDoApplySettings)
|
||||||
{
|
{
|
||||||
ui->deltaFrequency->setValue(m_objChannelMarker.getCenterFrequency());
|
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
||||||
|
|
||||||
m_objChannelizer->configure(m_objChannelizer->getInputMessageQueue(),
|
m_channelizer->configure(m_channelizer->getInputMessageQueue(),
|
||||||
m_objChannelizer->getInputSampleRate(), // always use maximum available bandwidth
|
m_channelizer->getInputSampleRate(), // always use maximum available bandwidth
|
||||||
m_objChannelMarker.getCenterFrequency());
|
m_channelMarker.getCenterFrequency());
|
||||||
|
|
||||||
m_objATVDemod->configure(m_objATVDemod->getInputMessageQueue(),
|
m_atvDemod->configure(m_atvDemod->getInputMessageQueue(),
|
||||||
getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) + ui->lineTime->value() * m_fltLineTimeMultiplier,
|
getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) + ui->lineTime->value() * m_fltLineTimeMultiplier,
|
||||||
getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f) + ui->topTime->value() * m_fltTopTimeMultiplier,
|
getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f) + ui->topTime->value() * m_fltTopTimeMultiplier,
|
||||||
getFps(ui->fps->currentIndex()),
|
getFps(ui->fps->currentIndex()),
|
||||||
@ -385,8 +385,8 @@ void ATVDemodGUI::applySettings()
|
|||||||
ui->screenTabWidget->currentIndex());
|
ui->screenTabWidget->currentIndex());
|
||||||
|
|
||||||
qDebug() << "ATVDemodGUI::applySettings:"
|
qDebug() << "ATVDemodGUI::applySettings:"
|
||||||
<< " m_objChannelizer.inputSampleRate: " << m_objChannelizer->getInputSampleRate()
|
<< " m_objChannelizer.inputSampleRate: " << m_channelizer->getInputSampleRate()
|
||||||
<< " m_objATVDemod.sampleRate: " << m_objATVDemod->getSampleRate();
|
<< " m_objATVDemod.sampleRate: " << m_atvDemod->getSampleRate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,7 +394,7 @@ void ATVDemodGUI::applyRFSettings()
|
|||||||
{
|
{
|
||||||
if (m_blnDoApplySettings)
|
if (m_blnDoApplySettings)
|
||||||
{
|
{
|
||||||
m_objATVDemod->configureRF(m_objATVDemod->getInputMessageQueue(),
|
m_atvDemod->configureRF(m_atvDemod->getInputMessageQueue(),
|
||||||
(ATVDemod::ATVModulation) ui->modulation->currentIndex(),
|
(ATVDemod::ATVModulation) ui->modulation->currentIndex(),
|
||||||
ui->rfBW->value() * m_rfSliderDivisor * 1.0f,
|
ui->rfBW->value() * m_rfSliderDivisor * 1.0f,
|
||||||
ui->rfOppBW->value() * m_rfSliderDivisor * 1.0f,
|
ui->rfOppBW->value() * m_rfSliderDivisor * 1.0f,
|
||||||
@ -411,26 +411,26 @@ void ATVDemodGUI::setChannelMarkerBandwidth()
|
|||||||
|
|
||||||
if (ui->rfFiltering->isChecked()) // FFT filter
|
if (ui->rfFiltering->isChecked()) // FFT filter
|
||||||
{
|
{
|
||||||
m_objChannelMarker.setBandwidth(ui->rfBW->value()*m_rfSliderDivisor);
|
m_channelMarker.setBandwidth(ui->rfBW->value()*m_rfSliderDivisor);
|
||||||
m_objChannelMarker.setOppositeBandwidth(ui->rfOppBW->value()*m_rfSliderDivisor);
|
m_channelMarker.setOppositeBandwidth(ui->rfOppBW->value()*m_rfSliderDivisor);
|
||||||
|
|
||||||
if (ui->modulation->currentIndex() == (int) ATVDemod::ATV_LSB) {
|
if (ui->modulation->currentIndex() == (int) ATVDemod::ATV_LSB) {
|
||||||
m_objChannelMarker.setSidebands(ChannelMarker::vlsb);
|
m_channelMarker.setSidebands(ChannelMarker::vlsb);
|
||||||
} else if (ui->modulation->currentIndex() == (int) ATVDemod::ATV_USB) {
|
} else if (ui->modulation->currentIndex() == (int) ATVDemod::ATV_USB) {
|
||||||
m_objChannelMarker.setSidebands(ChannelMarker::vusb);
|
m_channelMarker.setSidebands(ChannelMarker::vusb);
|
||||||
} else {
|
} else {
|
||||||
m_objChannelMarker.setSidebands(ChannelMarker::vusb);
|
m_channelMarker.setSidebands(ChannelMarker::vusb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ui->decimatorEnable->isChecked()) {
|
if (ui->decimatorEnable->isChecked()) {
|
||||||
m_objChannelMarker.setBandwidth(ui->rfBW->value()*m_rfSliderDivisor);
|
m_channelMarker.setBandwidth(ui->rfBW->value()*m_rfSliderDivisor);
|
||||||
} else {
|
} else {
|
||||||
m_objChannelMarker.setBandwidth(m_objChannelizer->getInputSampleRate());
|
m_channelMarker.setBandwidth(m_channelizer->getInputSampleRate());
|
||||||
}
|
}
|
||||||
|
|
||||||
m_objChannelMarker.setSidebands(ChannelMarker::dsb);
|
m_channelMarker.setSidebands(ChannelMarker::dsb);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_blnDoApplySettings = true;
|
m_blnDoApplySettings = true;
|
||||||
@ -464,14 +464,14 @@ void ATVDemodGUI::setRFFiltersSlidersRange(int sampleRate)
|
|||||||
void ATVDemodGUI::leaveEvent(QEvent*)
|
void ATVDemodGUI::leaveEvent(QEvent*)
|
||||||
{
|
{
|
||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
m_objChannelMarker.setHighlighted(false);
|
m_channelMarker.setHighlighted(false);
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATVDemodGUI::enterEvent(QEvent*)
|
void ATVDemodGUI::enterEvent(QEvent*)
|
||||||
{
|
{
|
||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
m_objChannelMarker.setHighlighted(true);
|
m_channelMarker.setHighlighted(true);
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,13 +483,13 @@ void ATVDemodGUI::tick()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_objATVDemod)
|
if (m_atvDemod)
|
||||||
{
|
{
|
||||||
m_objMagSqAverage.feed(m_objATVDemod->getMagSq());
|
m_objMagSqAverage.feed(m_atvDemod->getMagSq());
|
||||||
double magSqDB = CalcDb::dbPower(m_objMagSqAverage.average() / (1<<30));
|
double magSqDB = CalcDb::dbPower(m_objMagSqAverage.average() / (1<<30));
|
||||||
ui->channePowerText->setText(tr("%1 dB").arg(magSqDB, 0, 'f', 1));
|
ui->channePowerText->setText(tr("%1 dB").arg(magSqDB, 0, 'f', 1));
|
||||||
|
|
||||||
if (m_objATVDemod->getBFOLocked()) {
|
if (m_atvDemod->getBFOLocked()) {
|
||||||
ui->bfoLockedLabel->setStyleSheet("QLabel { background-color : green; }");
|
ui->bfoLockedLabel->setStyleSheet("QLabel { background-color : green; }");
|
||||||
} else {
|
} else {
|
||||||
ui->bfoLockedLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }");
|
ui->bfoLockedLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }");
|
||||||
@ -574,7 +574,7 @@ void ATVDemodGUI::on_reset_clicked(bool checked __attribute__((unused)))
|
|||||||
|
|
||||||
void ATVDemodGUI::on_modulation_currentIndexChanged(int index __attribute__((unused)))
|
void ATVDemodGUI::on_modulation_currentIndexChanged(int index __attribute__((unused)))
|
||||||
{
|
{
|
||||||
setRFFiltersSlidersRange(m_objATVDemod->getEffectiveSampleRate());
|
setRFFiltersSlidersRange(m_atvDemod->getEffectiveSampleRate());
|
||||||
setChannelMarkerBandwidth();
|
setChannelMarkerBandwidth();
|
||||||
applyRFSettings();
|
applyRFSettings();
|
||||||
}
|
}
|
||||||
@ -595,7 +595,7 @@ void ATVDemodGUI::on_rfOppBW_valueChanged(int value)
|
|||||||
|
|
||||||
void ATVDemodGUI::on_rfFiltering_toggled(bool checked __attribute__((unused)))
|
void ATVDemodGUI::on_rfFiltering_toggled(bool checked __attribute__((unused)))
|
||||||
{
|
{
|
||||||
setRFFiltersSlidersRange(m_objATVDemod->getEffectiveSampleRate());
|
setRFFiltersSlidersRange(m_atvDemod->getEffectiveSampleRate());
|
||||||
setChannelMarkerBandwidth();
|
setChannelMarkerBandwidth();
|
||||||
applyRFSettings();
|
applyRFSettings();
|
||||||
}
|
}
|
||||||
@ -608,7 +608,7 @@ void ATVDemodGUI::on_decimatorEnable_toggled(bool checked __attribute__((unused)
|
|||||||
|
|
||||||
void ATVDemodGUI::on_deltaFrequency_changed(qint64 value)
|
void ATVDemodGUI::on_deltaFrequency_changed(qint64 value)
|
||||||
{
|
{
|
||||||
m_objChannelMarker.setCenterFrequency(value);
|
m_channelMarker.setCenterFrequency(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATVDemodGUI::on_bfo_valueChanged(int value)
|
void ATVDemodGUI::on_bfo_valueChanged(int value)
|
||||||
@ -633,10 +633,10 @@ void ATVDemodGUI::lineTimeUpdate()
|
|||||||
float nominalLineTime = getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex());
|
float nominalLineTime = getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex());
|
||||||
int lineTimeScaleFactor = (int) std::log10(nominalLineTime);
|
int lineTimeScaleFactor = (int) std::log10(nominalLineTime);
|
||||||
|
|
||||||
if (m_objATVDemod->getEffectiveSampleRate() == 0) {
|
if (m_atvDemod->getEffectiveSampleRate() == 0) {
|
||||||
m_fltLineTimeMultiplier = std::pow(10.0, lineTimeScaleFactor-3);
|
m_fltLineTimeMultiplier = std::pow(10.0, lineTimeScaleFactor-3);
|
||||||
} else {
|
} else {
|
||||||
m_fltLineTimeMultiplier = 1.0f / m_objATVDemod->getEffectiveSampleRate();
|
m_fltLineTimeMultiplier = 1.0f / m_atvDemod->getEffectiveSampleRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
float lineTime = nominalLineTime + m_fltLineTimeMultiplier * ui->lineTime->value();
|
float lineTime = nominalLineTime + m_fltLineTimeMultiplier * ui->lineTime->value();
|
||||||
@ -658,10 +658,10 @@ void ATVDemodGUI::topTimeUpdate()
|
|||||||
float nominalTopTime = getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f);
|
float nominalTopTime = getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f);
|
||||||
int topTimeScaleFactor = (int) std::log10(nominalTopTime);
|
int topTimeScaleFactor = (int) std::log10(nominalTopTime);
|
||||||
|
|
||||||
if (m_objATVDemod->getEffectiveSampleRate() == 0) {
|
if (m_atvDemod->getEffectiveSampleRate() == 0) {
|
||||||
m_fltTopTimeMultiplier = std::pow(10.0, topTimeScaleFactor-3);
|
m_fltTopTimeMultiplier = std::pow(10.0, topTimeScaleFactor-3);
|
||||||
} else {
|
} else {
|
||||||
m_fltTopTimeMultiplier = 1.0f / m_objATVDemod->getEffectiveSampleRate();
|
m_fltTopTimeMultiplier = 1.0f / m_atvDemod->getEffectiveSampleRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
float topTime = nominalTopTime + m_fltTopTimeMultiplier * ui->topTime->value();
|
float topTime = nominalTopTime + m_fltTopTimeMultiplier * ui->topTime->value();
|
||||||
|
@ -89,12 +89,12 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::ATVDemodGUI* ui;
|
Ui::ATVDemodGUI* ui;
|
||||||
PluginAPI* m_objPluginAPI;
|
PluginAPI* m_pluginAPI;
|
||||||
DeviceSourceAPI* m_objDeviceAPI;
|
DeviceSourceAPI* m_deviceAPI;
|
||||||
ChannelMarker m_objChannelMarker;
|
ChannelMarker m_channelMarker;
|
||||||
ThreadedBasebandSampleSink* m_objThreadedChannelizer;
|
ThreadedBasebandSampleSink* m_threadedChannelizer;
|
||||||
DownChannelizer* m_objChannelizer;
|
DownChannelizer* m_channelizer;
|
||||||
ATVDemod* m_objATVDemod;
|
ATVDemod* m_atvDemod;
|
||||||
|
|
||||||
bool m_blnBasicSettingsShown;
|
bool m_blnBasicSettingsShown;
|
||||||
bool m_blnDoApplySettings;
|
bool m_blnDoApplySettings;
|
||||||
@ -102,7 +102,7 @@ private:
|
|||||||
MovingAverage<double> m_objMagSqAverage;
|
MovingAverage<double> m_objMagSqAverage;
|
||||||
int m_intTickCount;
|
int m_intTickCount;
|
||||||
|
|
||||||
ScopeVisNG* m_objScopeVis;
|
ScopeVisNG* m_scopeVis;
|
||||||
|
|
||||||
float m_fltLineTimeMultiplier;
|
float m_fltLineTimeMultiplier;
|
||||||
float m_fltTopTimeMultiplier;
|
float m_fltTopTimeMultiplier;
|
||||||
|
Loading…
Reference in New Issue
Block a user