Question

I'm trying to track and analyze changes to a received signal due to changes in the channel using GNU Radio (also using Ettus USRPs). I would like to write a program using GNU Radio to be able to keep track of changes in the received signal.

The things I would like to track include (but are not limited to):

  • changes in center frequency
  • changes in received power
  • changes in bandwidth
  • power spikes

Ultimately, I would love to track very small changes (even the smallest of changes).

Does anybody know if this is possible? If so, how I can get started, and where I can find information on this? Also, would this type of information be available in the base C++ layer or can I get it via the upper python layer?

Thanks.

Was it helpful?

Solution

If you want to do the analysis within gnuradio then you'll need to do it by putting signal processing blocks together. A list of the available blocks is given in http://gnuradio.org/doc/doxygen/modules.html.

For the simple case of received power there is a rms_cf block which looks like it converts a stream of complex numbers into a stream of floats representing the rms power. You then could sum them up with an integrate_ff block and then output to a file.

e.g.

from gnuradio import gr

incoming_signal = ???
alpha = ???
signal_to_power = gr.rms_cf(alpha) # I have no idea what alpha means here :(.
sumup = gr.integrate_ff(10000) # Decimate by factor of 10000
dst = gr.file_sink_f(gr.sizeof_float, "the_file_name")
tb = gr.top_block()
tb.connect(incoming_signal, signal_to_power, sumup, dst)
tb.run()

For the center frequency and bandwidth, maybe you could put together a bunch of bandpass filters and look at the power contained in various sections of the frequency range of interest and then back out the information you want. Have a look at the list of available blocks.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top