main content

rf receiver modeling for lte reception -凯发k8网页登录

this example demonstrates how to model and test an lte rf receiver using lte toolbox™ and rf blockset™.

model description

an lte waveform is generated, filtered, transmitted through a propagation channel and fed into an rf blockset receiver model. the rf model can be assembled using commercially available parts. evm measurements are performed on the rf receiver output.

this example is implemented using matlab® and simulink®, which interact at runtime. the functional partition is as follows:

the measurement testbench is implemented with a matlab script using an rf system object as the device under test (dut). lte frames are streamed between testbench and dut.

generate lte waveform

in this section we generate the lte waveform using the lte toolbox. we use the reference measurement channel (rmc) r.6 as defined in ts 36.101 [ 1 ]. this rmc specifies a 25 resource elements (res) bandwidth, equivalent to 5 mhz. a 64 qam modulation is used. all res are allocated. additionally, ocng noise is enabled in unused res.

only one frame is generated. this frame will then be repeated a number of times to perform the evm measurements.

% configuration ts 36.101 25 res (5 mhz), 64-qam, full allocation
rmc = ltermcdl('r.6');
rmc.ocngpdschenable = 'on';
% create enodeb transmission with fixed pdsch data
rng(2) % fixed random seed (arbitrary)
data = randi([0 1],sum(rmc.pdsch.trblksizes),1);
% generate 1 frame, to be repeated to simulate a total of n frames
[tx,~,info] = ltermcdltool(rmc,data); % 1 frame
% calculate the sampling period and the length of the frame
sampleperiod = 1/info.samplingrate;
framelength = length(tx);

initialize simulation components

this section initializes some of the simulation components:

  • number of frames: this is the number of times the generated frame is repeated

  • preallocate result vectors

% number of simulation frames n >= 1
n = 3;
% preallocate vectors for results for n-1 frames
% note: evm is not measured in the first frame to avoid transient effects
evmpeak = zeros(n,1);
evmrms = zeros(n,1);

design rf receiver

the initial design of the rf receiver is done using the rf budget analyzer app. the receiver consists of a lna, a direct conversion demodulator, and a final amplifier. all stages include noise and non-linearity.

load rfb.mat

type show(rfb) to display the initial design of the rf receiver in the rf budget analyzer app.

create rf model for simulation

from the rf budget object you can automatically create a model that can be used for circuit envelope simulation.

rfx = rfsystem(rfb);
rfx.sampletime = sampleperiod;
open_system(rfx)

extend the model of the rf receiver

you can modify the model created in the previous section to include additional rf impairments and components. you can modify the created rf blocket model as long as you do not change the input / output ports. this section loads a modified simulink model that performs the following functions:

  • channel model: includes free space path loss

  • rf receiver: includes direct conversion demodulator

  • adc and dc offset cancellation

you can open and inspect the modified model.

model = 'simrfv2_lte_receiver';
open_system(model)

simulate frames

this section simulates the specified number of frames. the rf system object simulates the circuit envelope model in accelerator mode to decrease run time. after processing the first frame with the simulink model, its state is preserved and automatically passed to the successive frame.

the output of the simulink model is stored in the variable rx, which is available in the workspace. any delays introduced to this signal are removed after performing synchronization. the evm is measured on the resulting waveform.

load rfs.mat
evmalg.enableplotting = 'off';
cec.pilotaverage = 'testevm';
for n = 1:n
    [i,q] = rfs(tx);
    rx = complex(i,q);
    % synchronize to received waveform
    if n == 1
        offset = ltedlframeoffset(rmc,squeeze(rx),'testevm');
    end
    % compute and display evm measurements
    evmmeas = simrfv2_lte_receiver_evm_cal(rmc,cec,squeeze(rx),evmalg);
    evmpeak(n) = evmmeas.peak;
    evmrms(n) = evmmeas.rms;
end
low edge evm, subframe 0: 2.884%
high edge evm, subframe 0: 2.885%
low edge evm, subframe 1: 2.845%
high edge evm, subframe 1: 2.838%
low edge evm, subframe 2: 2.800%
high edge evm, subframe 2: 2.804%
low edge evm, subframe 3: 2.764%
high edge evm, subframe 3: 2.764%
low edge evm, subframe 4: 2.773%
high edge evm, subframe 4: 2.765%
low edge evm, subframe 6: 2.845%
high edge evm, subframe 6: 2.838%
low edge evm, subframe 7: 2.832%
high edge evm, subframe 7: 2.837%
low edge evm, subframe 8: 2.778%
high edge evm, subframe 8: 2.772%
low edge evm, subframe 9: 2.883%
high edge evm, subframe 9: 2.868%
averaged low edge evm, frame 0: 2.822%
averaged high edge evm, frame 0: 2.818%
averaged evm frame 0: 2.822%
averaged overall evm: 2.822%
low edge evm, subframe 0: 3.026%
high edge evm, subframe 0: 3.018%
low edge evm, subframe 1: 2.944%
high edge evm, subframe 1: 2.935%
low edge evm, subframe 2: 2.772%
high edge evm, subframe 2: 2.760%
low edge evm, subframe 3: 2.795%
high edge evm, subframe 3: 2.791%
low edge evm, subframe 4: 2.907%
high edge evm, subframe 4: 2.902%
low edge evm, subframe 6: 2.833%
high edge evm, subframe 6: 2.815%
low edge evm, subframe 7: 2.792%
high edge evm, subframe 7: 2.794%
low edge evm, subframe 8: 2.786%
high edge evm, subframe 8: 2.787%
low edge evm, subframe 9: 2.806%
high edge evm, subframe 9: 2.807%
averaged low edge evm, frame 0: 2.849%
averaged high edge evm, frame 0: 2.844%
averaged evm frame 0: 2.849%
averaged overall evm: 2.849%
low edge evm, subframe 0: 2.953%
high edge evm, subframe 0: 2.961%
low edge evm, subframe 1: 2.899%
high edge evm, subframe 1: 2.898%
low edge evm, subframe 2: 2.776%
high edge evm, subframe 2: 2.780%
low edge evm, subframe 3: 2.840%
high edge evm, subframe 3: 2.858%
low edge evm, subframe 4: 2.853%
high edge evm, subframe 4: 2.859%
low edge evm, subframe 6: 2.896%
high edge evm, subframe 6: 2.878%
low edge evm, subframe 7: 2.804%
high edge evm, subframe 7: 2.801%
low edge evm, subframe 8: 2.777%
high edge evm, subframe 8: 2.778%
low edge evm, subframe 9: 2.904%
high edge evm, subframe 9: 2.896%
averaged low edge evm, frame 0: 2.855%
averaged high edge evm, frame 0: 2.856%
averaged evm frame 0: 2.856%
averaged overall evm: 2.856%

visualize measured evm

this section plots the measured peak and rms evm for each simulated frame.

figure
plot((1:n),100*evmpeak,'o-')
title('evm peak %')
xlabel('number of frames')
figure
plot((1:n),100*evmrms,'o-')
title('evm rms %')
xlabel('number of frames')

cleaning up

close the simulink model and remove the generated files.

release(rfs)
close_system(rfs,0)

appendix

this example uses the following helper function:

selected bibliography

  1. 3gpp ts 36.101 "user equipment (ue) radio transmission and reception"

see also

| | | |

related topics

    网站地图