USRP Software Radio

cancel
Showing results for 
Search instead for 
Did you mean: 

RFNoC FFT block implementation

Hi,

 

I am trying to implement the FFT block into an RFNoC image on an x410 and then use the python API to build the graph and get FFTs output

 

I have been using this video as a guide: https://www.youtube.com/watch?v=C8U4bBTO8-c

 

I have been using the UHD ver 4.7 from the conda-forge repo 

 

Firstly I was getting the error about the SPP not being smaller than the atomic unit size. I found an issue page in the UHD git that said there was a bug in the SPP calculation that should of been fixed.

However, the only way I have been able to solve this error/issue is to have the SPP of the rx_streamer 4 times larger than the FFT size. 

 

First question: does this imply that the SPP bug is still in the UHD code that conda-forge has? it looks like the last time conda-forge pulled it was after the bug fix.

 

Now that I have something running, i.e. the graph commits without error, my next question is was is the best/appropriate way of streaming out samples that represent the FFT bin values.

 

If I use the later way as shown in the above video where he is using the fft block:

output_data = np.zeros((1,FFT_Size),dtype='complex')

recv_md = uhd.types.RXMetaData()

num_recv = rx_streamer.recv(output_data, recv_md, 0.1)

 

I don't seem to be ever able to get any samples output, even if I change 0.1 to something larger, i.e. receive for longer

 

If I use the way he implemented to get samples from the DDC at the early part of the video above, i.e. something like:

num_samples = int(ddc_block.get_output_rate(0) * 3)
radio_data = np.zeros((1, num_samples), dtype="complex64")

stream_cmd = uhd.types.StreamCMD(uhd.types.StreamMode.num_done)
stream_cmd.num_samps = num_samples
stream_cmd.stream_now = True

rx_streamer.issue_stream_cmd(stream_cmd)
num_samples_received = rx_streamer.recv(radio_data, uhd.types.RXMetadata(), 15.0)
print("Nb of samples received = " + str(num_samples_received))

 

with the FFT block connected to the rx_streamer

 

I get samples, which could be an array larger than the FFT size.

 

The question is what are those samples? I they lots of FFTs in a row, do I take FFT_Length worth and that relates to the FFT, or is it just DDC IQ samples?

 

Thanks for your help in advance

 

Adam

0 Kudos
Message 1 of 1
(75 Views)