Hello,

Thanks for all the ideas and suggestions I have received.

Finally I have found a simple way to work around this issue. I had the idea to configure my CSMA logic in GNU Radio in such a way that when there are back-to-back packets in the transmit path (in technical terms, whenever the CSMA block work() function sees multiple packets in a given call), then the CSMA block allows the transmit path to continue transmitting the remaining packets, ignoring the carrier sense status.

This achieves the intended behavior, regardless of whether the carrier sense also detects the packets transmitted by this radio. The only case where this approach doesn't work exactly as I intended is when a packet arrives to the transmit path shortly after the end of the previous packet is being transmitted. In this case the carrier sense is triggered by the packet that the radio is transmitting, and the second packet will be forced to wait until the carrier sense goes down, which happens some milliseconds after the end of the packet is transmitted, due to the RX-TX latency seen by GNU Radio. This situation happens rarely, so it is acceptable to me.

If anyone is curious about the details of this approach, the code is here: https://github.com/daniestevez/gr-satellites/pull/766

Best,
Daniel.

On 29/09/2025 12:15, Daniel Estévez wrote:
Hello,

I am implementing a half-duplex modem with GNU Radio and a USRP B2xx that uses CSMA to control medium access. I have a GNU Radio flowgraph with a USRP Source and USRP Sink blocks both set to use the TX/RX antenna. The USRP Sink block uses burst transmission. When a burst is sent, the B2xx automatically switches the receive to the RX2 port.

The issue is that there is enough leakage through the RX2 port that the system is able to receive its own transmit packets with good SNR. This is a problem for the CSMA system because it makes the system detect that the channel is busy while it is transmitting its own packet. Due to the latency between the RX and TX streams in GNU Radio, this prevents the modem from transmitting back-to-back packets (which is allowed and expected by this CSMA scheme), because when the second packet is about to be sent, the modem receiver is still seeing the end of the previous packet and determines that the channel is still busy.

To solve this issue, I would like the USRP Source to receive either zeros, no samples at all, or something that at least does not have so much leakage of its own TX signal.

Is it possible to do this either by appropriate configuration in GNU Radio or UHD?

I've been studying the sources of UHD and GNU Radio to see how this could be done. The only thing I have found is that this would be possible with a small change to the FPGA image. For instance, this line

https://github.com/EttusResearch/uhd/blob/master/fpga/usrp3/lib/ radio_200/radio_legacy.v#L446

could be modified to replace the RX samples by zeros whenever run_rx is asserted.

However I would prefer not to build a modified FPGA image for this system, so I was wondering if other solutions exist.

Best,
Daniel.


_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to