- use Processor::Buffer for AGC

- switched to Farrow interpolator

git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@1030 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-17 12:50:28 +00:00
parent 1d7689aa82
commit 752a2a5268
2 changed files with 16 additions and 18 deletions
+11 -16
View File
@@ -103,7 +103,8 @@ void Receiver::setBufSize(uint32 size)
}
m_bufsize = size;
init();
m_bb_buffer.resize(size);
m_buffer_agc.resize(size);
m_buffer_bb.resize(size);
}
uint32 Receiver::getNumSoftSym()
@@ -209,9 +210,12 @@ void Receiver::init()
// Gardner Symbol Timing Recovery
initSTR();
// Interpolation
m_polyPhase.buffer_out_add(&m_bb_buffer);
m_farrow.buffer_out_add(&m_bb_buffer);
// Processor buffer wiring
m_polyPhase.buffer_in_add(&m_buffer_agc);
m_farrow.buffer_in_add(&m_buffer_agc);
m_polyPhase.buffer_out_add(&m_buffer_bb);
m_farrow.buffer_out_add(&m_buffer_bb);
// Symbol demapper
initSymbolMapper();
@@ -463,20 +467,11 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len)
// Blind AGC gain adjustment
// @2 x symbolrate
Processor::Buffer<ComplexScalar> *next_buf_in = nullptr;
if (RCF_TYPE == RCF_TYPE_POLYPHASE_FARROW)
{
next_buf_in = dynamic_cast<Processor::Buffer<ComplexScalar>*>(m_farrow.buffer_in());
}
if (RCF_TYPE == RCF_TYPE_POLYPHASE_DISCRETE)
{
next_buf_in = dynamic_cast<Processor::Buffer<ComplexScalar>*>(m_polyPhase.buffer_in());
}
for (n = 0; n < len; n++)
{
// AGC Blind gain adjustments
ComplexScalar iq_agc = toComplexScalar(CpxScaleRealS(toCpx(iq[n]), AGC_GetWeight(&agcBlind)));
next_buf_in->write(&iq_agc, 1);
m_buffer_agc.write(&iq_agc, 1);
}
// Matched filtering and symbol timing recovery
@@ -494,9 +489,9 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len)
// Further BB processing
// @2 x symbolrate
while(m_bb_buffer.len())
while(m_buffer_bb.len())
{
ComplexScalar iq_mf = m_bb_buffer.readAt(0);
ComplexScalar iq_mf = m_buffer_bb.readAt(0);
// -----------------------------------------------------
// Carrier Derotator
+5 -2
View File
@@ -39,7 +39,7 @@ using namespace Radio;
#define EQ_ENABLE 1
#define MODULATION_TYPE MAP_MODE_QAM
#define RCF_TYPE RCF_TYPE_POLYPHASE_DISCRETE
#define RCF_TYPE RCF_TYPE_POLYPHASE_FARROW
#define MAX_NUMBITS_PERSYM 16
// ---------------------------------------------------
enum eq_mode
@@ -398,7 +398,10 @@ private:
FrameReceiver m_frameReceiver;
params_t m_params;
Processor::Buffer<ComplexScalar> m_bb_buffer;
// Processor Buffers
Processor::Buffer<ComplexScalar> m_buffer_agc;
Processor::Buffer<ComplexScalar> m_buffer_bb;
void timerCallback();
void processBaseband(CVec const &iq, uint32_t len);