- 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:
+19
-60
@@ -7,20 +7,17 @@ Transmitter::Transmitter(void)
|
||||
, m_formatter(&m_symbolizer)
|
||||
, m_symbolMapper()
|
||||
, m_bufferSize(0)
|
||||
, m_bufferRF(0)
|
||||
, m_bufferSymRcf(0)
|
||||
, m_bufferSym(0)
|
||||
, m_samplerate(192000)
|
||||
, m_symbolrate(48000)
|
||||
, m_numBitPerSymbol(2)
|
||||
, m_carrierFreq(48000)
|
||||
, m_txBuf(0, 2)
|
||||
, m_symCount(0)
|
||||
, m_CoeffRCF(0)
|
||||
, m_pCoeffRCF(0)
|
||||
, m_upsampleFactor(1)
|
||||
{
|
||||
SymMapInit(&m_symbolMapper, m_numBitPerSymbol, MAP_MODE_QAM);
|
||||
FirCpxMultirateUpInit(&m_firUpRcf, NULL, 0, 1);
|
||||
NCO_Init(&m_duc, m_carrierFreq/m_samplerate, 0);
|
||||
m_duc.init(m_carrierFreq/m_samplerate, 0);
|
||||
|
||||
paramChanged();
|
||||
|
||||
@@ -31,30 +28,16 @@ Transmitter::~Transmitter(void)
|
||||
{
|
||||
stopThread(1000);
|
||||
|
||||
if (m_bufferRF)
|
||||
delete m_bufferRF;
|
||||
if (m_pCoeffRCF)
|
||||
delete m_pCoeffRCF;
|
||||
|
||||
if (m_bufferSymRcf)
|
||||
delete m_bufferSymRcf;
|
||||
m_pCoeffRCF = nullptr;
|
||||
|
||||
if (m_bufferSym)
|
||||
delete m_bufferSym;
|
||||
|
||||
if (m_CoeffRCF)
|
||||
delete m_CoeffRCF;
|
||||
|
||||
m_bufferRF = nullptr;
|
||||
m_bufferSymRcf = nullptr;
|
||||
m_bufferSym = nullptr;
|
||||
m_CoeffRCF = nullptr;
|
||||
|
||||
FirCpxMultirateFree(&m_firUpRcf);
|
||||
SymMapFree(&m_symbolMapper);
|
||||
}
|
||||
|
||||
void Transmitter::paramChanged()
|
||||
{
|
||||
uint32_t M_up;
|
||||
uint32_t n_mf;
|
||||
|
||||
const ScopedLock sl (m_lock);
|
||||
@@ -62,54 +45,30 @@ void Transmitter::paramChanged()
|
||||
m_symbolizer.setNumBitsPerSymbol(m_numBitPerSymbol);
|
||||
SymMapReinit(&m_symbolMapper, m_numBitPerSymbol, MAP_MODE_QAM);
|
||||
|
||||
M_up = (uint32_t)(m_samplerate/m_symbolrate + 0.5);
|
||||
n_mf = (uint32_t)(TRANSMITTER_RCF_OVERSAMPLING*M_up) + 1;
|
||||
m_upsampleFactor = (uint32_t)(m_samplerate/m_symbolrate + 0.5);
|
||||
n_mf = (uint32_t)(TRANSMITTER_RCF_OVERSAMPLING*m_upsampleFactor) + 1;
|
||||
|
||||
if (m_CoeffRCF)
|
||||
delete m_CoeffRCF;
|
||||
if (m_pCoeffRCF)
|
||||
delete m_pCoeffRCF;
|
||||
|
||||
m_CoeffRCF = new radio_float_t[n_mf];
|
||||
m_kRcf = CalcFirSRRC(m_CoeffRCF, (radio_float_t)m_samplerate, (radio_float_t)2.0/m_symbolrate, TRANSMITTER_RCF_ROLLOFF, n_mf);
|
||||
|
||||
FirCpxMultirateUpReinit(&m_firUpRcf, m_CoeffRCF, n_mf, M_up);
|
||||
|
||||
NCO_Reinit(&m_duc, m_carrierFreq/m_samplerate, 0);
|
||||
m_pCoeffRCF = new radio_float_t[n_mf];
|
||||
m_kRcf = CalcFirSRRC(m_pCoeffRCF, (radio_float_t)m_samplerate, (radio_float_t)2.0/m_symbolrate, TRANSMITTER_RCF_ROLLOFF, n_mf);
|
||||
|
||||
m_firUp.init(m_upsampleFactor, m_pCoeffRCF, n_mf);
|
||||
m_duc.init(m_carrierFreq/m_samplerate, 0);
|
||||
}
|
||||
|
||||
void Transmitter::bufferResize(uint32_t size)
|
||||
{
|
||||
stopThread(10000);
|
||||
|
||||
m_txBuf.resize(size, 8);
|
||||
|
||||
if (size != m_bufferSize)
|
||||
{
|
||||
if (m_bufferRF)
|
||||
{
|
||||
delete m_bufferRF;
|
||||
m_bufferRF = nullptr;
|
||||
}
|
||||
if (m_bufferSymRcf)
|
||||
{
|
||||
delete m_bufferSymRcf;
|
||||
m_bufferSymRcf = nullptr;
|
||||
}
|
||||
if (m_bufferSym)
|
||||
{
|
||||
delete m_bufferSym;
|
||||
m_bufferSym = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
m_bufferSize = size;
|
||||
|
||||
if (!size)
|
||||
return;
|
||||
|
||||
m_bufferRF = new float[m_bufferSize];
|
||||
m_bufferSymRcf = new cpx_t[m_bufferSize];
|
||||
m_bufferSym = new cpx_t[m_bufferSize];
|
||||
m_txBuf.resize(size, 8);
|
||||
m_bufferRF.resize(size);
|
||||
m_bufferSym.resize(size);
|
||||
m_bufferSymRcf.resize(size);
|
||||
|
||||
m_symCount = 0;
|
||||
startThread(0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user