Thursday, April 18, 2024

Re: Passing Tags or Additional Port Data to Change Parameters of Downstream Blocks

Hi, 
That's a great idea! You may take a look at several blocks that are already in GNU Radio and are configurable through messages. Signal Source comes to my mind. More "sophisticated" blocks also use messages for configuration. For instance, UHD USRP Source, or some blocks of our OOT module gr-tempest (e.g. fine sampling synchronization). 
You should take a look at those, but it should be as "simple" as adding a setter method on the block for the parameter you want to change, and call it from the function that "listens" to messages. 
Hope that helps.
best
Federico

El jue, 18 abr 2024 a las 13:40, Matt Clemons (<mattclems11@gmail.com>) escribió:
Hello,

I've been using the dtv/dvbt blocks in GnuRadio Companion to decode dvbt signal recordings. I noticed a lot of the blocks in the RX chain require the user to select the modulation parameters (Constellation, Hierarchy, Code Rate, etc.). My goal is to remove a lot of these user parameters with the use of Transmission Parameter Signals (TPS) data called out in the DVB-T spec. This would make the DVBT receiver more autonomous, and be better than brute forcing all the modulation settings until you get a recovered transport stream in the cases where you don't know the transmitter settings. This solution seems to be a worthwhile improvement to the current DVBT blocks by utilizing the TPS data called out in the spec. Implementing this in the c++ code is where I'm running into issues and where I'm looking for help/advice.

In the DVB-T spec the Transmission Parameter Signals (TPS) data can be recovered which will tell you all the modulation parameters of the main signal. As long as you know the TX mode and Guard Time, you can configure the OFDM Symbol Acquisition block and the FFT block, which are the only 2 required blocks before the Demod Reference Signals (DRS) block. The DRS code already decodes the TPS data but is only looking at 2 of the total 68 bits to determine what the frame index is, and then clears the std::deque of TPS data.

My goal is to use all of the TPS data and either pass it in a tag or pass through a new port so that all the remaining downstream blocks can get the modulation parameters from that data rather than a user. I've dug into the tags and the PMT types required to pass data, but I can't wrap my head around how I would configure the modulation parameters of the downstream blocks from the port or tag TPS data passed to it.

For example, a lot of the DRS modulation parameters are not needed for the DRS block to work, and when you recover Constellation Type, Hierarchy Type, and Tx Mode you could then pass these parameters to the DVB-T Demap block instead of having to create the block with those parameters.

If there are any examples of other blocks using tags or ports to change the functionality of another block, that would be useful. Since I am fairly new to GnuRadio and C++ these modifications seem difficult to me, hoping someone with more experience in both could point me in the right direction.

thanks!

No comments:

Post a Comment