mirror of https://github.com/f4exb/sdrangel.git
DATV: external LDPC tool implementation (1)
This commit is contained in:
parent
dc8f3ee9d9
commit
078e7fab37
|
@ -75,4 +75,10 @@ target_link_libraries(demoddatv
|
|||
${SWRESAMPLE_LIBRARIES}
|
||||
)
|
||||
|
||||
add_executable(ldpctool
|
||||
ldpctool/ldpc_tool.cpp
|
||||
ldpctool/tables_handler.cpp
|
||||
)
|
||||
|
||||
install(TARGETS demoddatv DESTINATION ${INSTALL_PLUGINS_DIR})
|
||||
install(TARGETS ldpctool DESTINATION ${INSTALL_BIN_DIR})
|
||||
|
|
|
@ -369,8 +369,12 @@ void DATVDemodSink::CleanUpDATVFramework(bool blnRelease)
|
|||
}
|
||||
|
||||
// INPUT
|
||||
//if(p_rawiq!=nullptr) delete p_rawiq;
|
||||
//if(p_rawiq_writer!=nullptr) delete p_rawiq_writer;
|
||||
if (p_rawiq != nullptr) {
|
||||
delete p_rawiq;
|
||||
}
|
||||
if (p_rawiq_writer != nullptr) {
|
||||
delete p_rawiq_writer;
|
||||
}
|
||||
//if(p_preprocessed!=nullptr) delete p_preprocessed;
|
||||
|
||||
//DVB-S2
|
||||
|
@ -1137,6 +1141,7 @@ void DATVDemodSink::InitDATVS2Framework()
|
|||
|
||||
if (m_settings.m_softLDPC)
|
||||
{
|
||||
#if 0
|
||||
// External LDPC decoder mode.
|
||||
// Deinterleave into soft bits.
|
||||
p_fecframes = new leansdr::pipebuf<leansdr::fecframe<leansdr::llr_sb> >(m_objScheduler, "FEC frames", BUF_FRAMES);
|
||||
|
@ -1153,6 +1158,30 @@ void DATVDemodSink::InitDATVS2Framework()
|
|||
p_vbitcount,
|
||||
p_verrcount
|
||||
);
|
||||
#else
|
||||
// External LDPC decoder mode.
|
||||
// Deinterleave into soft bits.
|
||||
// TBD Latency
|
||||
p_fecframes = new leansdr::pipebuf<leansdr::fecframe<leansdr::llr_sb> >(m_objScheduler, "FEC frames", BUF_FRAMES);
|
||||
p_s2_deinterleaver = new leansdr::s2_deinterleaver<leansdr::llr_ss, leansdr::llr_sb>(
|
||||
m_objScheduler,
|
||||
*(leansdr::pipebuf< leansdr::plslot<leansdr::llr_ss> > *) p_slots_dvbs2,
|
||||
*(leansdr::pipebuf< leansdr::fecframe<leansdr::llr_sb> > *) p_fecframes
|
||||
);
|
||||
// Decode FEC-protected frames into plain BB frames.
|
||||
leansdr::s2_fecdec_helper<leansdr::llr_t, leansdr::llr_sb> *r_fecdec =
|
||||
new leansdr::s2_fecdec_helper<leansdr::llr_t, leansdr::llr_sb>(
|
||||
m_objScheduler,
|
||||
*(leansdr::pipebuf< leansdr::fecframe<leansdr::llr_sb> > *) p_fecframes,
|
||||
*(leansdr::pipebuf<leansdr::bbframe> *) p_bbframes,
|
||||
"/opt/install/sdrangel/bin/ldpctool",
|
||||
p_vbitcount,
|
||||
p_verrcount)
|
||||
;
|
||||
const int nhelpers = 6;
|
||||
r_fecdec->nhelpers = nhelpers;
|
||||
r_fecdec->must_buffer = false;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1290,8 +1319,8 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
|
|||
m_objScheduler->step();
|
||||
|
||||
m_lngReadIQ=0;
|
||||
//delete p_rawiq_writer;
|
||||
//p_rawiq_writer = new leansdr::pipewriter<leansdr::cf32>(*p_rawiq);
|
||||
delete p_rawiq_writer;
|
||||
p_rawiq_writer = new leansdr::pipewriter<leansdr::cf32>(*p_rawiq);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ Copyright 2019 <pabr@pabr.org>
|
|||
#include <functional>
|
||||
#include "testbench.h"
|
||||
#include "algorithms.h"
|
||||
#include "ldpc.h"
|
||||
|
||||
#if 0
|
||||
#include "flooding_decoder.h"
|
||||
|
@ -28,7 +29,7 @@ static const int DEFAULT_TRIALS = 50;
|
|||
static const int DEFAULT_TRIALS = 25;
|
||||
#endif
|
||||
|
||||
ldpctool::LDPCInterface *create_ldpc(char *standard, char prefix, int number);
|
||||
//ldpctool::LDPCInterface *create_ldpc(char *standard, char prefix, int number);
|
||||
|
||||
void fail(const char *msg)
|
||||
{
|
||||
|
@ -109,7 +110,7 @@ int main(int argc, char **argv)
|
|||
if (!tabname)
|
||||
fail("unsupported modcod");
|
||||
|
||||
ldpctool::LDPCInterface *ldpc = create_ldpc((char *)"S2", tabname[0], atoi(tabname + 1));
|
||||
ldpctool::LDPCInterface *ldpc = ldpctool::create_ldpc((char *)"S2", tabname[0], atoi(tabname + 1));
|
||||
|
||||
if (!ldpc)
|
||||
{
|
||||
|
|
|
@ -2419,7 +2419,7 @@ struct s2_fecdec_helper : runnable
|
|||
for (int i = 0; i < p->nprocs; ++i)
|
||||
{
|
||||
helper_instance *h = &p->procs[i];
|
||||
size_t iosize = (pin->pls.framebits() / 8) * sizeof(SOFTBYTE);
|
||||
int iosize = (pin->pls.framebits() / 8) * sizeof(SOFTBYTE);
|
||||
// fprintf(stderr, "Writing %lu to fd %d\n", iosize, h->fd_tx);
|
||||
int nw = write(h->fd_tx, pin->bytes, iosize);
|
||||
if (nw < 0 && errno == EWOULDBLOCK)
|
||||
|
@ -2494,7 +2494,7 @@ struct s2_fecdec_helper : runnable
|
|||
char mc_arg[16];
|
||||
sprintf(mc_arg, "%d", pls->modcod);
|
||||
const char *sf_arg = pls->sf ? "--shortframes" : NULL;
|
||||
const char *argv[] = {command, "--modcod", mc_arg, sf_arg, NULL};
|
||||
const char *argv[] = {command, "--trials", "10", "--modcod", mc_arg, sf_arg, NULL};
|
||||
execve(command, (char *const *)argv, NULL);
|
||||
fatal(command);
|
||||
}
|
||||
|
@ -2514,7 +2514,7 @@ struct s2_fecdec_helper : runnable
|
|||
{
|
||||
// Read corrected frame from helper
|
||||
const s2_pls *pls = &job->pls;
|
||||
size_t iosize = (pls->framebits() / 8) * sizeof(ldpc_buf[0]);
|
||||
int iosize = (pls->framebits() / 8) * sizeof(ldpc_buf[0]);
|
||||
int nr = read(job->h->fd_rx, ldpc_buf, iosize);
|
||||
if (nr < 0)
|
||||
fatal("read(LDPC helper)");
|
||||
|
@ -2526,8 +2526,8 @@ struct s2_fecdec_helper : runnable
|
|||
const fec_info *fi = &fec_infos[job->pls.sf][mcinfo->rate];
|
||||
uint8_t *hardbytes = softbytes_harden(ldpc_buf, fi->kldpc / 8, bch_buf);
|
||||
size_t cwbytes = fi->kldpc / 8;
|
||||
size_t msgbytes = fi->Kbch / 8;
|
||||
size_t chkbytes = cwbytes - msgbytes;
|
||||
//size_t msgbytes = fi->Kbch / 8;
|
||||
//size_t chkbytes = cwbytes - msgbytes;
|
||||
bch_interface *bch = s2bch.bchs[job->pls.sf][mcinfo->rate];
|
||||
int ncorr = bch->decode(hardbytes, cwbytes);
|
||||
if (sch->debug2)
|
||||
|
|
Loading…
Reference in New Issue