1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-11-16 05:03:17 -05:00

Interferometer: implemented FFT star time correlation

This commit is contained in:
f4exb 2019-10-08 08:38:12 +02:00
parent 95fccf290c
commit d925781d9a
4 changed files with 48 additions and 9 deletions

View File

@ -92,6 +92,13 @@ Sample invfft2s2(const std::complex<float>& a) { //!< Complex float to Sample fo
return s; 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) : InterferometerCorrelator::InterferometerCorrelator(int fftSize) :
m_corrType(InterferometerSettings::CorrelationAdd), m_corrType(InterferometerSettings::CorrelationAdd),
m_fftSize(fftSize) m_fftSize(fftSize)
@ -165,6 +172,9 @@ bool InterferometerCorrelator::performCorr(
case InterferometerSettings::CorrelationFFT2: case InterferometerSettings::CorrelationFFT2:
results = performFFT2Corr(data0, size0, data1, size1); results = performFFT2Corr(data0, size0, data1, size1);
break; break;
case InterferometerSettings::CorrelationFFTStar:
results = performFFTCorr(data0, size0, data1, size1, true);
break;
default: default:
break; break;
} }
@ -191,6 +201,9 @@ bool InterferometerCorrelator::performCorr(
case InterferometerSettings::CorrelationFFT2: case InterferometerSettings::CorrelationFFT2:
results = performFFT2Corr(data0, size0, m_data1p, size1); results = performFFT2Corr(data0, size0, m_data1p, size1);
break; break;
case InterferometerSettings::CorrelationFFTStar:
results = performFFTCorr(data0, size0, m_data1p, size1, true);
break;
default: default:
break; break;
} }
@ -237,6 +250,9 @@ bool InterferometerCorrelator::performCorr(
case InterferometerSettings::CorrelationFFT2: case InterferometerSettings::CorrelationFFT2:
results = performFFT2Corr(data0, size0, m_data1p, size1); results = performFFT2Corr(data0, size0, m_data1p, size1);
break; break;
case InterferometerSettings::CorrelationFFTStar:
results = performFFTCorr(data0, size0, m_data1p, size1, true);
break;
default: default:
break; break;
} }
@ -274,7 +290,8 @@ bool InterferometerCorrelator::performFFTCorr(
const SampleVector& data0, const SampleVector& data0,
int size0, int size0,
const SampleVector& data1, const SampleVector& data1,
int size1 int size1,
bool star
) )
{ {
unsigned int size = std::min(size0, size1); unsigned int size = std::min(size0, size1);
@ -348,12 +365,27 @@ bool InterferometerCorrelator::performFFTCorr(
// do the inverse FFT to get time correlation // do the inverse FFT to get time correlation
m_invFFT->transform(); m_invFFT->transform();
std::transform(
m_invFFT->out(), if (star)
m_invFFT->out() + m_fftSize, {
m_tcorr.begin() + nfft*m_fftSize, *m_tcorr.begin() = invfft2star(m_invFFT->out()[0]); // t = 0
invfft2s 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; size -= m_fftSize;
begin0 += m_fftSize; begin0 += m_fftSize;

View File

@ -66,7 +66,8 @@ private:
const SampleVector& data0, const SampleVector& data0,
int size0, int size0,
const SampleVector& data1, const SampleVector& data1,
int size1 int size1,
bool star = false
); );
bool performFFT2Corr( //!< Returns true if results were produced bool performFFT2Corr( //!< Returns true if results were produced
const SampleVector& data0, const SampleVector& data0,

View File

@ -199,6 +199,11 @@
<string>FFT2</string> <string>FFT2</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>FFT*</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -32,7 +32,8 @@ struct InterferometerSettings
CorrelationAdd, CorrelationAdd,
CorrelationMultiply, CorrelationMultiply,
CorrelationFFT, CorrelationFFT,
CorrelationFFT2 CorrelationFFT2,
CorrelationFFTStar
}; };
CorrelationType m_correlationType; CorrelationType m_correlationType;