mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-11-15 12:43:18 -05:00
Interferometer: implemented FFT star time correlation
This commit is contained in:
parent
95fccf290c
commit
d925781d9a
@ -92,6 +92,13 @@ Sample invfft2s2(const std::complex<float>& a) { //!< Complex float to Sample fo
|
||||
return s;
|
||||
}
|
||||
|
||||
Sample invfft2star(const std::complex<float>& a) { //!< Complex float to Sample for 1 side time correlation
|
||||
Sample s;
|
||||
s.setReal(a.real()/2.82842712475f); // 2*sqrt(2)
|
||||
s.setImag(a.imag()/2.82842712475f);
|
||||
return s;
|
||||
}
|
||||
|
||||
InterferometerCorrelator::InterferometerCorrelator(int fftSize) :
|
||||
m_corrType(InterferometerSettings::CorrelationAdd),
|
||||
m_fftSize(fftSize)
|
||||
@ -165,6 +172,9 @@ bool InterferometerCorrelator::performCorr(
|
||||
case InterferometerSettings::CorrelationFFT2:
|
||||
results = performFFT2Corr(data0, size0, data1, size1);
|
||||
break;
|
||||
case InterferometerSettings::CorrelationFFTStar:
|
||||
results = performFFTCorr(data0, size0, data1, size1, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -191,6 +201,9 @@ bool InterferometerCorrelator::performCorr(
|
||||
case InterferometerSettings::CorrelationFFT2:
|
||||
results = performFFT2Corr(data0, size0, m_data1p, size1);
|
||||
break;
|
||||
case InterferometerSettings::CorrelationFFTStar:
|
||||
results = performFFTCorr(data0, size0, m_data1p, size1, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -237,6 +250,9 @@ bool InterferometerCorrelator::performCorr(
|
||||
case InterferometerSettings::CorrelationFFT2:
|
||||
results = performFFT2Corr(data0, size0, m_data1p, size1);
|
||||
break;
|
||||
case InterferometerSettings::CorrelationFFTStar:
|
||||
results = performFFTCorr(data0, size0, m_data1p, size1, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -274,7 +290,8 @@ bool InterferometerCorrelator::performFFTCorr(
|
||||
const SampleVector& data0,
|
||||
int size0,
|
||||
const SampleVector& data1,
|
||||
int size1
|
||||
int size1,
|
||||
bool star
|
||||
)
|
||||
{
|
||||
unsigned int size = std::min(size0, size1);
|
||||
@ -348,12 +365,27 @@ bool InterferometerCorrelator::performFFTCorr(
|
||||
|
||||
// do the inverse FFT to get time correlation
|
||||
m_invFFT->transform();
|
||||
std::transform(
|
||||
m_invFFT->out(),
|
||||
m_invFFT->out() + m_fftSize,
|
||||
m_tcorr.begin() + nfft*m_fftSize,
|
||||
invfft2s
|
||||
);
|
||||
|
||||
if (star)
|
||||
{
|
||||
*m_tcorr.begin() = invfft2star(m_invFFT->out()[0]); // t = 0
|
||||
SampleVector::iterator it = m_tcorr.begin() + 1;
|
||||
|
||||
for (int i = 1; i < m_fftSize; i++)
|
||||
{
|
||||
*it = invfft2star(m_invFFT->out()[i] + m_invFFT->out()[2*m_fftSize-i]);
|
||||
++it;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::transform(
|
||||
m_invFFT->out(),
|
||||
m_invFFT->out() + m_fftSize,
|
||||
m_tcorr.begin() + nfft*m_fftSize,
|
||||
invfft2s
|
||||
);
|
||||
}
|
||||
|
||||
size -= m_fftSize;
|
||||
begin0 += m_fftSize;
|
||||
|
||||
@ -66,7 +66,8 @@ private:
|
||||
const SampleVector& data0,
|
||||
int size0,
|
||||
const SampleVector& data1,
|
||||
int size1
|
||||
int size1,
|
||||
bool star = false
|
||||
);
|
||||
bool performFFT2Corr( //!< Returns true if results were produced
|
||||
const SampleVector& data0,
|
||||
|
||||
@ -199,6 +199,11 @@
|
||||
<string>FFT2</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>FFT*</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
@ -32,7 +32,8 @@ struct InterferometerSettings
|
||||
CorrelationAdd,
|
||||
CorrelationMultiply,
|
||||
CorrelationFFT,
|
||||
CorrelationFFT2
|
||||
CorrelationFFT2,
|
||||
CorrelationFFTStar
|
||||
};
|
||||
|
||||
CorrelationType m_correlationType;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user