- Processor::Blocks were assigned in/out buffers from outside

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@1024 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-17 11:23:46 +00:00
parent 8b8ac38727
commit 9de592a8c9
3 changed files with 23 additions and 26 deletions
+4 -12
View File
@@ -5,7 +5,6 @@
#include <cpp/radio/Vector.hpp> #include <cpp/radio/Vector.hpp>
#include <cpp/radio/FirComplex.hpp> #include <cpp/radio/FirComplex.hpp>
#include <cpp/radio/processor/src/Buffer.hpp>
#include <cpp/radio/processor/src/Block.hpp> #include <cpp/radio/processor/src/Block.hpp>
#include <cpp/radio/interpolation/TimingGenerator.hpp> #include <cpp/radio/interpolation/TimingGenerator.hpp>
@@ -43,7 +42,6 @@ public:
, m_coeff(N, M) , m_coeff(N, M)
, m_b(M) , m_b(M)
, m_h(M) , m_h(M)
, m_buf_in(8*1024)
{ {
init(M, N); init(M, N);
} }
@@ -61,12 +59,12 @@ public:
m_coeff.resize(N, M); m_coeff.resize(N, M);
m_b.resize(M); m_b.resize(M);
m_h.resize(M); m_h.resize(M);
// m_buf_in.fill(ComplexScalar(0,0));
} }
void process() void process()
{ {
// Get output buffer // Get buffers
auto m_buf_in = dynamic_cast<Processor::Buffer<ComplexScalar>*>(buffer_in());
auto buf_out = dynamic_cast<Processor::Buffer<ComplexScalar>*>(buffer_out()); auto buf_out = dynamic_cast<Processor::Buffer<ComplexScalar>*>(buffer_out());
// Process input // Process input
@@ -75,14 +73,14 @@ public:
size_t adv = m_timingGenerator.getAdv(); size_t adv = m_timingGenerator.getAdv();
radio_float_t mu = m_timingGenerator.getMu(); radio_float_t mu = m_timingGenerator.getMu();
if (m_buf_in.len() < adv) if (m_buf_in->len() < adv)
{ {
break; break;
} }
if (adv != 0) if (adv != 0)
{ {
m_fir.feed(m_buf_in, adv); m_fir.feed(*m_buf_in, adv);
// Partial filter responses // Partial filter responses
for (int i=0; i < m_M; i++) for (int i=0; i < m_M; i++)
@@ -142,11 +140,6 @@ public:
} }
Processor::IBuffer* buffer_in(size_t index=0) override
{
return &m_buf_in;
}
private: private:
TimingGenerator &m_timingGenerator; TimingGenerator &m_timingGenerator;
FirComplex m_fir; FirComplex m_fir;
@@ -157,7 +150,6 @@ private:
RMat m_coeff; RMat m_coeff;
CVec m_b; CVec m_b;
CVec m_h; CVec m_h;
Processor::Buffer<ComplexScalar> m_buf_in;
ComplexScalar horner(RealScalar mu) ComplexScalar horner(RealScalar mu)
{ {
+4 -11
View File
@@ -25,7 +25,6 @@ public:
PolyPhase(TimingGenerator &timingGenerator) PolyPhase(TimingGenerator &timingGenerator)
: Processor::Block(1, 1) : Processor::Block(1, 1)
, m_timingGenerator(timingGenerator) , m_timingGenerator(timingGenerator)
, m_buf_in(8*1024)
{ {
} }
@@ -45,7 +44,6 @@ public:
m_M = M; m_M = M;
m_N = N; m_N = N;
m_coeff.resize(N, M); m_coeff.resize(N, M);
// m_buf_in.resize(N);
pCoeff = (fir_float_t*)malloc((N+1)*M*sizeof(fir_float_t)); pCoeff = (fir_float_t*)malloc((N+1)*M*sizeof(fir_float_t));
memset(pCoeff, 0, (N+1)*M*sizeof(fir_float_t)); memset(pCoeff, 0, (N+1)*M*sizeof(fir_float_t));
@@ -65,7 +63,8 @@ public:
void process() void process()
{ {
// Get output buffer // Get buffers
auto m_buf_in = dynamic_cast<Processor::Buffer<ComplexScalar>*>(buffer_in());
auto buf_out = dynamic_cast<Processor::Buffer<ComplexScalar>*>(buffer_out()); auto buf_out = dynamic_cast<Processor::Buffer<ComplexScalar>*>(buffer_out());
// Process input // Process input
@@ -74,14 +73,14 @@ public:
size_t adv = m_timingGenerator.getAdv(); size_t adv = m_timingGenerator.getAdv();
radio_float_t mu = m_timingGenerator.getMu(); radio_float_t mu = m_timingGenerator.getMu();
if (m_buf_in.len() < adv) if (m_buf_in->len() < adv)
{ {
break; break;
} }
if (adv != 0) if (adv != 0)
{ {
m_fir.feed(m_buf_in, adv); m_fir.feed(*m_buf_in, adv);
} }
// Polyphase filtering // Polyphase filtering
@@ -94,14 +93,8 @@ public:
} }
} }
Processor::IBuffer* buffer_in(size_t index=0) override
{
return &m_buf_in;
}
private: private:
TimingGenerator &m_timingGenerator; TimingGenerator &m_timingGenerator;
Processor::Buffer<ComplexScalar> m_buf_in;
FirComplex m_fir; FirComplex m_fir;
uint32_t m_M; uint32_t m_M;
uint32_t m_N; uint32_t m_N;
+15 -3
View File
@@ -14,6 +14,7 @@ class Block
Block(size_t num_in, size_t num_out) Block(size_t num_in, size_t num_out)
: m_num_in(num_in) : m_num_in(num_in)
, m_num_out(num_out) , m_num_out(num_out)
, m_buf_in(nullptr)
, m_buf_out(nullptr) , m_buf_out(nullptr)
, m_isBypass(false) , m_isBypass(false)
{ {
@@ -22,7 +23,12 @@ class Block
virtual ~Block() = default; virtual ~Block() = default;
virtual void process() = 0; virtual void process() = 0;
virtual IBuffer* buffer_in(size_t index=0) = 0;
IBuffer* buffer_in(size_t index=0)
{
return m_buf_in;
}
IBuffer* buffer_out(size_t index=0) IBuffer* buffer_out(size_t index=0)
{ {
return m_buf_out; return m_buf_out;
@@ -38,14 +44,20 @@ class Block
return m_num_out; return m_num_out;
} }
void buffer_out_add(IBuffer *out) void buffer_in_add(IBuffer *buf)
{ {
m_buf_out = out; m_buf_in = buf;
}
void buffer_out_add(IBuffer *buf)
{
m_buf_out = buf;
} }
protected: protected:
size_t m_num_in; size_t m_num_in;
size_t m_num_out; size_t m_num_out;
IBuffer* m_buf_in;
IBuffer* m_buf_out; IBuffer* m_buf_out;
bool m_isBypass; bool m_isBypass;