mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-11-11 00:30:26 -05:00
LoRa demod: cleanup unused sliding FFT
This commit is contained in:
parent
733edb2cb2
commit
09a980de70
@ -34,7 +34,6 @@ LoRaDemodSink::LoRaDemodSink() :
|
|||||||
m_spectrumBuffer(nullptr),
|
m_spectrumBuffer(nullptr),
|
||||||
m_downChirps(nullptr),
|
m_downChirps(nullptr),
|
||||||
m_upChirps(nullptr),
|
m_upChirps(nullptr),
|
||||||
m_fftBuffer(nullptr),
|
|
||||||
m_spectrumLine(nullptr)
|
m_spectrumLine(nullptr)
|
||||||
{
|
{
|
||||||
m_demodActive = false;
|
m_demodActive = false;
|
||||||
@ -74,9 +73,6 @@ void LoRaDemodSink::initSF(unsigned int sf, unsigned int deBits)
|
|||||||
if (m_upChirps) {
|
if (m_upChirps) {
|
||||||
delete[] m_upChirps;
|
delete[] m_upChirps;
|
||||||
}
|
}
|
||||||
if (m_fftBuffer) {
|
|
||||||
delete[] m_fftBuffer;
|
|
||||||
}
|
|
||||||
if (m_spectrumBuffer) {
|
if (m_spectrumBuffer) {
|
||||||
delete[] m_spectrumBuffer;
|
delete[] m_spectrumBuffer;
|
||||||
}
|
}
|
||||||
@ -95,7 +91,6 @@ void LoRaDemodSink::initSF(unsigned int sf, unsigned int deBits)
|
|||||||
m_fftWindow.setKaiserAlpha(M_PI);
|
m_fftWindow.setKaiserAlpha(M_PI);
|
||||||
m_downChirps = new Complex[2*m_nbSymbols]; // Each table is 2 chirps long to allow processing from arbitrary offsets.
|
m_downChirps = new Complex[2*m_nbSymbols]; // Each table is 2 chirps long to allow processing from arbitrary offsets.
|
||||||
m_upChirps = new Complex[2*m_nbSymbols];
|
m_upChirps = new Complex[2*m_nbSymbols];
|
||||||
m_fftBuffer = new Complex[m_fftInterpolation*m_fftLength];
|
|
||||||
m_spectrumBuffer = new Complex[m_nbSymbols];
|
m_spectrumBuffer = new Complex[m_nbSymbols];
|
||||||
m_spectrumLine = new Complex[m_nbSymbols];
|
m_spectrumLine = new Complex[m_nbSymbols];
|
||||||
std::fill(m_spectrumLine, m_spectrumLine+m_nbSymbols, Complex(std::polar(1e-6*SDR_RX_SCALED, 0.0)));
|
std::fill(m_spectrumLine, m_spectrumLine+m_nbSymbols, Complex(std::polar(1e-6*SDR_RX_SCALED, 0.0)));
|
||||||
@ -228,8 +223,6 @@ void LoRaDemodSink::processSample(const Complex& ci)
|
|||||||
|
|
||||||
if (m_fftCounter == m_fftLength)
|
if (m_fftCounter == m_fftLength)
|
||||||
{
|
{
|
||||||
std::copy(m_fftSFD->in(), m_fftSFD->in() + m_fftLength, m_fftBuffer); // save for later
|
|
||||||
|
|
||||||
m_fftWindow.apply(m_fft->in());
|
m_fftWindow.apply(m_fft->in());
|
||||||
std::fill(m_fft->in()+m_fftLength, m_fft->in()+m_fftInterpolation*m_fftLength, Complex{0.0, 0.0});
|
std::fill(m_fft->in()+m_fftLength, m_fft->in()+m_fftInterpolation*m_fftLength, Complex{0.0, 0.0});
|
||||||
m_fft->transform();
|
m_fft->transform();
|
||||||
@ -292,7 +285,6 @@ void LoRaDemodSink::processSample(const Complex& ci)
|
|||||||
m_sfdSkipCounter = 0;
|
m_sfdSkipCounter = 0;
|
||||||
m_fftCounter = m_fftLength - m_sfdSkip + zadj;
|
m_fftCounter = m_fftLength - m_sfdSkip + zadj;
|
||||||
m_chirp += zadj;
|
m_chirp += zadj;
|
||||||
//std::copy(m_fftBuffer+m_sfdSkip, m_fftBuffer+(m_fftLength-m_sfdSkip), m_fftBuffer); // prepare sliding fft
|
|
||||||
m_state = LoRaStateSkipSFD; //LoRaStateSlideSFD;
|
m_state = LoRaStateSkipSFD; //LoRaStateSlideSFD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,51 +326,6 @@ void LoRaDemodSink::processSample(const Complex& ci)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_state == LoRaStateSlideSFD) // perform sliding FFTs over the rest of the SFD period
|
|
||||||
{
|
|
||||||
m_fftBuffer[m_fftCounter] = ci * m_upChirps[m_chirp]; // de-chirp the down ramp
|
|
||||||
m_fftCounter++;
|
|
||||||
|
|
||||||
if (m_fftCounter == m_fftLength)
|
|
||||||
{
|
|
||||||
std::copy(m_fftBuffer, m_fftBuffer + m_fftLength, m_fftSFD->in());
|
|
||||||
std::fill(m_fftSFD->in()+m_fftLength, m_fftSFD->in()+m_fftInterpolation*m_fftLength, Complex{0.0, 0.0});
|
|
||||||
m_fftSFD->transform();
|
|
||||||
std::copy(m_fftBuffer+m_sfdSkip, m_fftBuffer+(m_fftLength-m_sfdSkip), m_fftBuffer); // prepare next sliding fft
|
|
||||||
m_fftCounter = m_fftLength - m_sfdSkip;
|
|
||||||
m_sfdSkipCounter++;
|
|
||||||
|
|
||||||
double magsqSFD;
|
|
||||||
|
|
||||||
unsigned int imaxSFD = argmax(
|
|
||||||
m_fftSFD->out(),
|
|
||||||
m_fftInterpolation,
|
|
||||||
m_fftLength,
|
|
||||||
magsqSFD,
|
|
||||||
m_spectrumBuffer,
|
|
||||||
m_fftInterpolation
|
|
||||||
) / m_fftInterpolation;
|
|
||||||
|
|
||||||
if (m_spectrumSink) {
|
|
||||||
m_spectrumSink->feed(m_spectrumBuffer, m_nbSymbols);
|
|
||||||
}
|
|
||||||
|
|
||||||
qDebug("LoRaDemodSink::processSample: SFD slide %u %4u|%11.6f", m_sfdSkipCounter, imaxSFD, magsqSFD);
|
|
||||||
|
|
||||||
if (m_sfdSkipCounter == m_sfdFourths) // 1.25 SFD chips length
|
|
||||||
{
|
|
||||||
qDebug("LoRaDemodSink::processSample: SFD done");
|
|
||||||
m_chirp = m_chirp0;
|
|
||||||
m_fftCounter = 0;
|
|
||||||
m_chirpCount = 0;
|
|
||||||
int correction = 0;
|
|
||||||
m_magsqMax = 0.0;
|
|
||||||
m_decodeMsg = LoRaDemodMsg::MsgDecodeSymbols::create();
|
|
||||||
m_decodeMsg->setSyncWord(m_syncWord);
|
|
||||||
m_state = LoRaStateReadPayload; //LoRaStateReadPayload;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_state == LoRaStateReadPayload)
|
else if (m_state == LoRaStateReadPayload)
|
||||||
{
|
{
|
||||||
m_fft->in()[m_fftCounter] = ci * m_downChirps[m_chirp]; // de-chirp the up ramp
|
m_fft->in()[m_fftCounter] = ci * m_downChirps[m_chirp]; // de-chirp the up ramp
|
||||||
|
|||||||
@ -58,7 +58,6 @@ private:
|
|||||||
LoRaStatePreambleResyc, //!< Synchronize with what is left of preamble chirp
|
LoRaStatePreambleResyc, //!< Synchronize with what is left of preamble chirp
|
||||||
LoRaStatePreamble, //!< Preamble is found and look for SFD start
|
LoRaStatePreamble, //!< Preamble is found and look for SFD start
|
||||||
LoRaStateSkipSFD, //!< Skip SFD
|
LoRaStateSkipSFD, //!< Skip SFD
|
||||||
LoRaStateSlideSFD, //!< Sliding FFTs while going through SFD (not the skip option)
|
|
||||||
LoRaStateReadPayload,
|
LoRaStateReadPayload,
|
||||||
LoRaStateTest
|
LoRaStateTest
|
||||||
};
|
};
|
||||||
@ -84,7 +83,6 @@ private:
|
|||||||
FFTWindow m_fftWindow;
|
FFTWindow m_fftWindow;
|
||||||
Complex *m_downChirps;
|
Complex *m_downChirps;
|
||||||
Complex *m_upChirps;
|
Complex *m_upChirps;
|
||||||
Complex *m_fftBuffer;
|
|
||||||
Complex *m_spectrumLine;
|
Complex *m_spectrumLine;
|
||||||
unsigned int m_fftCounter;
|
unsigned int m_fftCounter;
|
||||||
unsigned int m_argMaxHistory[m_requiredPreambleChirps];
|
unsigned int m_argMaxHistory[m_requiredPreambleChirps];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user