mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -05: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