Spreading.

This commit is contained in:
John Greb 2015-01-11 12:27:11 +00:00
parent ebc90ea5b2
commit ad1c436a7e
2 changed files with 10 additions and 8 deletions

View File

@ -30,10 +30,10 @@ LoRaDemod::LoRaDemod(SampleSink* sampleSink) :
m_sampleRate = 96000;
m_frequency = 0;
m_nco.setFreq(m_frequency, m_sampleRate);
m_interpolator.create(16, m_sampleRate, m_Bandwidth/2.0);
m_interpolator.create(16, m_sampleRate, m_Bandwidth/1.9);
m_sampleDistanceRemain = (Real)m_sampleRate / m_Bandwidth;
m_freq = 0;
m_chirp = 0;
m_angle = 0;
}
@ -57,9 +57,9 @@ void LoRaDemod::feed(SampleVector::const_iterator begin, SampleVector::const_ite
c *= m_nco.nextIQ();
if(m_interpolator.interpolate(&m_sampleDistanceRemain, c, &ci)) {
m_freq = (m_freq + 1) & 255;
m_angle = (m_angle + m_freq) & 255;
Complex cangle(cos(M_PI*m_angle/128),-sin(M_PI*m_angle/128));
m_chirp = (m_chirp + 1) & (SPREADFACTOR - 1);
m_angle = (m_angle + m_chirp) & (SPREADFACTOR - 1);
Complex cangle(cos(M_PI*2*m_angle/SPREADFACTOR),-sin(M_PI*2*m_angle/SPREADFACTOR));
ci *= cangle;
m_sampleBuffer.push_back(Sample(ci.real() * 32000, ci.imag() * 32000));
m_sampleDistanceRemain += (Real)m_sampleRate / m_Bandwidth;
@ -83,14 +83,14 @@ bool LoRaDemod::handleMessage(Message* cmd)
DSPSignalNotification* signal = (DSPSignalNotification*)cmd;
m_sampleRate = signal->getSampleRate();
m_nco.setFreq(-signal->getFrequencyOffset(), m_sampleRate);
m_interpolator.create(16, m_sampleRate, m_Bandwidth/2.0);
m_interpolator.create(16, m_sampleRate, m_Bandwidth/1.9);
m_sampleDistanceRemain = m_sampleRate / m_Bandwidth;
cmd->completed();
return true;
} else if(MsgConfigureLoRaDemod::match(cmd)) {
MsgConfigureLoRaDemod* cfg = (MsgConfigureLoRaDemod*)cmd;
m_Bandwidth = cfg->getBandwidth();
m_interpolator.create(16, m_sampleRate, m_Bandwidth/2.0);
m_interpolator.create(16, m_sampleRate, m_Bandwidth/1.9);
cmd->completed();
return true;
} else {

View File

@ -24,6 +24,8 @@
#include "dsp/interpolator.h"
#include "util/message.h"
#define SPREADFACTOR (1<<8)
class LoRaDemod : public SampleSink {
public:
LoRaDemod(SampleSink* sampleSink);
@ -61,7 +63,7 @@ private:
Real m_Bandwidth;
int m_sampleRate;
int m_frequency;
int m_freq;
int m_chirp;
int m_angle;
NCO m_nco;