- Receiver use C++ NCO

- Transmitter use C++ NCO and upsampler


git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@111 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2014-12-22 17:41:43 +00:00
parent 552f20fcd3
commit 90055961e8
4 changed files with 50 additions and 93 deletions
+21 -14
View File
@@ -3,13 +3,18 @@
#include <cstdint>
#include <radio/symbol.h>
#include <radio/nco.h>
#include <radio/interpolation.h>
#include <radio/Frame.hpp>
#include "JuceHeader.h"
#include "LogComponent.h"
#include <radio/Vector.hpp>
#include <radio/Nco.hpp>
#include <radio/Interpolation.hpp>
using namespace Radio;
#define TRANSMITTER_RCF_OVERSAMPLING ((uint32_t)32)
#define TRANSMITTER_RCF_ROLLOFF ((radio_float_t)0.35)
@@ -48,7 +53,7 @@ public:
resize(0, 0);
}
void write(float *pData, uint32_t len)
void write(RVec const &data, uint32_t len)
{
uint32_t i;
@@ -61,7 +66,7 @@ public:
}
for (i=0; i < len; i++)
{
m_ppBuffer[m_w][i] = pData[i];
m_ppBuffer[m_w][i] = data[i];
}
m_w++;
if (m_w >= m_numBuffers)
@@ -149,21 +154,23 @@ private:
Symbolizer m_symbolizer;
Formatter m_formatter;
sym_map_t m_symbolMapper;
fir_cpx_multirate_t m_firUpRcf;
Interpolation::UpSampler m_firUp;
uint32_t m_bufferSize;
float *m_bufferRF;
cpx_t *m_bufferSymRcf;
cpx_t *m_bufferSym;
RVec m_bufferRF;
CVec m_bufferSym;
CVec m_bufferSymRcf;
float m_samplerate;
float m_ddcFrequency;
float m_symbolrate;
uint32_t m_numBitPerSymbol;
radio_float_t *m_CoeffRCF;
radio_float_t *m_pCoeffRCF;
radio_float_t m_kRcf;
radio_float_t m_carrierFreq;
nco_t m_duc;
Nco m_duc;
TxBuffer m_txBuf;
uint32_t m_symCount;
uint32_t m_upsampleFactor;
// Thread
void run() override
@@ -184,12 +191,12 @@ private:
uint32_t symCountRcf;
const ScopedLock sl (m_lock);
m_bufferSym[m_symCount++] = SymMapMap(&m_symbolMapper, symbol);
m_bufferSym[m_symCount++] = toComplexScalar(SymMapMap(&m_symbolMapper, symbol));
if (m_symCount >= m_bufferSize/m_firUpRcf.L)
if (m_symCount >= m_bufferSize/m_upsampleFactor)
{
symCountRcf = FirCpxUpProcess(&m_firUpRcf, m_bufferSym, m_bufferSymRcf, m_symCount);
NCO_MixComplexRealV(&m_duc, m_bufferRF, m_bufferSymRcf, Cpx(m_kRcf/4, m_kRcf/4), symCountRcf);
symCountRcf = m_firUp.process(m_bufferSymRcf, m_bufferSym, m_symCount);
m_duc.mixComplexRealV(m_bufferRF, m_bufferSymRcf, ComplexScalar(m_kRcf/4, m_kRcf/4), symCountRcf);
m_txBuf.write(m_bufferRF, symCountRcf);
m_symCount = 0;
}
@@ -217,7 +224,7 @@ private:
{
const ScopedLock sl (m_lock);
m_carrierFreq = frequency_hz;
NCO_Reinit(&m_duc, m_carrierFreq/m_samplerate, 0);
m_duc.init(m_carrierFreq/m_samplerate, 0);
}
void setSymbolRate(float symbolrate_bit_per_sec) override
{