Transmit and Receive LTE using adrv9371 and ZC706

Hi,

I am trying to modify the Transmit and Receive LTE MIMO code given in the below link.

https://www.mathworks.com/help/supportpkg/xilinxzynqbasedradio/examples/transmit-and-receive-lte-mimo-using-a-single-analog-devices-ad9361-ad9364.html

This code runs perfectly on AD RF SOM.

Now, I am trying the same example to run on ADRV9371.

ad9361_LTE() ( The code that's in the Legacy folder under LTE_MATLAB) uses IIO hence, I modified this code to 9371 and it works for the dummy data which is used in trData. (I was able to see LTE spectrum on the Spectrum Analyzer). Please note that I upsampled the enodeBOutput by 8 (to match 122.88Mhz) for Transnmission.

But, when I modify it to the above image and try to Transmit, MATLAB crashes. After a bit debugging, I understood that the buffer size that I have pre-allocated,is too large and that could be the reason for my Crash. (Not sure though)

Next, I changed the IIO objects to Adi Objects and used adi.AD9371.Tx and could similarly transmit the dummy Data but, when tried to Transmit the full grid, I get an error.

This error is related to SamplesPerFrame. The Final enodeBOutput is much larger than 2^20, Hence,I always get an error. 

How, do I transmit this whole grid either using IIO objects or ADI objects?

Please suggest any work around.

Regards

sravan

Error

Error using adi.AD9371.Base/set.SamplesPerFrame (line 65)
Expected SamplesPerFrame to be a scalar with value <= 1.04858e+06.

Error in adi.AD9371.Tx/setupImpl (line 71)
obj.SamplesPerFrame = size(data,1);

Error in ad9371_LTE_adi_Tx_3 (line 216)
tx(eNodeBOutput);

Parents Reply
  • Hi Travis, the example that I'm trying to modify for 9371 is the below one.

    https://www.mathworks.com/help/supportpkg/xilinxzynqbasedradio/examples/transmit-and-receive-lte-mimo-using-a-single-analog-devices-ad9361-ad9364.html

    I'm using adi board support package for 2018b.

    Now, in this example, the image is packed into 5 frames, and the sampling rate there was 15.36 Mhz. So, now I upsampled the entire 5 frames by 8 to match the 122.88Mhz . please note the total size of my final output is 153600*5*8. 

    As you can see in my previous questions, when I tried to transmit this whole signal at once,it gave me the below error.

    Error

    Error using adi.AD9371.Base/set.SamplesPerFrame (line 65)
    Expected SamplesPerFrame to be a scalar with value <= 1.04858e+06.

    Error in adi.AD9371.Tx/setupImpl (line 71)
    obj.SamplesPerFrame = size(data,1);

    Error in ad9371_LTE_adi_Tx_3 (line 216)
    tx(eNodeBOutput);

    As per you suggestion I changed the buffer length value to 2^22 in the base.m file but even that didn't help.

    So, now I split he entire signal in chunks of 153600*5 and looped it 8 times in an infinite while loop

    like

    while 1
        for i=1:length(eNodeBOutput)/(153600*5)  %% loops for 8 frames
            tx(eNodeBOutput((i-1)*153600*5+1:i*153600*5)); %% Transmit 5 frames one burst
            pause(2)
        end
    end

    please note this transmitter code runs forever and receiver code has to be run on a different MATLAB instance.

    to enable this, just before the while loop I save all the variables which are needed for the receiver code, and load them in the receiver.

    In the receiver, I need to capture 6 frames to enable the receiver to decode the data as per the above said example. Hence the total size in receiver burtscaptures would be 153600*8x1x6.

    After capturing these many samples I arranged them accordingly into 6 frames as needed for the code below.

    I'm using the same board to transmission and reception but different matlab instances.

    The SDcard image that i'm using is the 2018 version.

    2^22 never worked for me even after I changed the value in base.m as per our earlier suggestion.

    Please let me know if i'm doing any mistake.

     

     

Children