Hello,

the recommended way to control latency due to buffers both in software
and hardware is to synchronize the TX and RX streams, namely to have a
mechanism that emits samples only when samples are received, minus a
maximum latency.

My naive solution to implement that is this:

class synchronize(gr.hier_block2):
    def __init__(self, fs, delay):
        gr.hier_block2.__init__(self, self.__class__.__name__,
            gr.io_signature(2, 2, gr.sizeof_gr_complex),
            gr.io_signature(1, 1, gr.sizeof_gr_complex))

        delay = blocks.delay(gr.sizeof_gr_complex, int(fs * delay))
        multiply = blocks.multiply_const_cc(0)
        add = blocks.add_cc()
        self.connect((self, 0), (add, 0))
        self.connect((self, 1), delay, multiply, (add, 1))
        self.connect(add, self)

Which is simple enough, but also probably not the most efficient or
elegant way. There is a better way of doing it, other than writing a new
block, probably based on the delay block?

Cheers,
Daniele

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to