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:
parent
95fccf290c
commit
d925781d9a
@ -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();
|
||||||
|
|
||||||
|
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(
|
std::transform(
|
||||||
m_invFFT->out(),
|
m_invFFT->out(),
|
||||||
m_invFFT->out() + m_fftSize,
|
m_invFFT->out() + m_fftSize,
|
||||||
m_tcorr.begin() + nfft*m_fftSize,
|
m_tcorr.begin() + nfft*m_fftSize,
|
||||||
invfft2s
|
invfft2s
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
size -= m_fftSize;
|
size -= m_fftSize;
|
||||||
begin0 += m_fftSize;
|
begin0 += m_fftSize;
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -32,7 +32,8 @@ struct InterferometerSettings
|
|||||||
CorrelationAdd,
|
CorrelationAdd,
|
||||||
CorrelationMultiply,
|
CorrelationMultiply,
|
||||||
CorrelationFFT,
|
CorrelationFFT,
|
||||||
CorrelationFFT2
|
CorrelationFFT2,
|
||||||
|
CorrelationFFTStar
|
||||||
};
|
};
|
||||||
|
|
||||||
CorrelationType m_correlationType;
|
CorrelationType m_correlationType;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user