main content

pdsch error vector magnitude (evm) measurement -凯发k8网页登录

this example measures the evm within a downlink reference measurement channel (rmc) signal and a downlink test model (e-tm) signal, according to the evm measurement requirements specified in ts 36.104, annex e [ 1 ].

introduction

this example creates an rmc signal and applies noise to the transmission to model transmitter evm. frequency offset and iq offset are also applied. the impaired signal is then processed according to the evm measurement requirements specified in ts 36.104, annex e [ 1 ]. this example measures peak and rms evm averaged across the two frames of the input signal.

the average evm is measured at two locations in time (low and high), where the low and high locations correspond to the alignment of the fft window within the start and end of the cyclic prefix. lte toolbox™ requires the low and high locations to be specified as a fraction of the cyclic prefix length.

note that for multi-antenna rmcs, the evm measurement assumes each receive signal antenna is directly connected to each transmit signal antenna, as shown in ts36.141 annex i.1.1 [ 2 ]. in accordance with the evm measurement requirements defined in ts 36.104 annex e [ 1 ], the pdsch decoding uses only zero forcing equalization. for an illustration of pdsch reception that includes complete mimo decoding, see the cell search, mib and sib1 recovery example.

finally the evm of a test model (e-tm) signal is measured, showing how to synchronize an e-tm signal that has been generated outside of matlab® or that has been played over-the-air after being generated inside matlab.

transmitter

setup the transmitter as per ts36.101 rmc [ 3 ].

% enodeb configuration
rng('default');         % set the default random number generator
rmc = ltermcdl('r.5');  % configure rmc
rmc.pdsch.rvseq = 0;    % redundancy version indicator
rmc.totsubframes = 20;  % total number of subframes to generate
% create enodeb transmission with random pdsch data
txwaveform = ltermcdltool(rmc,randi([0 1],rmc.pdsch.trblksizes(1),1));

impairment modeling

model the transmitter evm and add frequency and iq offsets.

% model evm with additive noise
ofdminfo   = lteofdminfo(rmc);
txevmpc    = 1.2;          % transmit evm in per cent
evmmodel   = txevmpc/(100*sqrt(double(ofdminfo.nfft)))* ...
    complex(randn(size(txwaveform)),randn(size(txwaveform)))/sqrt(2);
rxwaveform = txwaveform evmmodel;
% add frequency offset impairment to received waveform
foffset    = 33.0;         % frequency offset in hertz
t = (0:length(rxwaveform)-1).'/ofdminfo.samplingrate;
rxwaveform = rxwaveform.*repmat(exp(1i*2*pi*foffset*t),1,rmc.cellrefp);
% add iq offset
iqoffset   = complex(0.01,-0.005);
rxwaveform = rxwaveform iqoffset;

receiver

the receiver synchronizes with the received signal and computes and displays the measured evm.

% apply frequency estimation and correction for the purposes of performing
% timing synchronization
foffset_est = ltefrequencyoffset(rmc,rxwaveform);
rxwaveformfreqcorrected = ltefrequencycorrect(rmc,rxwaveform,foffset_est);
% synchronize to received waveform
offset = ltedlframeoffset(rmc,rxwaveformfreqcorrected,'testevm');
rxwaveform = rxwaveform(1 offset:end,:);
% use 'testevm' pilot averaging
cec.pilotaverage = 'testevm';

perform measurements

the pdsch evm is calculated by calling hpdschevm.

the average evm for a downlink rmc is displayed. first the results for low and high edge evm are calculated for each subframe within a frame and their averages are displayed at the command window. the max of these averages is the evm per frame. the final evm for the downlink rmc is the average of the evm across all frames. a number of plots are also produced:

  • evm versus ofdm symbol

  • evm versus subcarrier

  • evm versus resource block

  • evm versus ofdm symbol and subcarrier (i.e. the evm resource grid)

note that the evm measurement displayed at the command window is only calculated across allocated pdsch resource blocks, in accordance with the lte standard. the evm plots are shown across all resource blocks (allocated or unallocated), allowing the quality of the signal to be measured more generally. in unallocated resource blocks, the evm is calculated assuming that the received resource elements have an expected value of zero.

the evm of each e-utra carrier for qpsk, 16qam, 64qam and 256qam modulation schemes on pdsch should be better than the required evm of 17.5%, 12.5%, 8% and 3.5% respectively as per ts 36.104 table 6.5.2-1 [ 1 ].

% compute and display evm measurements
[evmmeas, plots] = hpdschevm(rmc,cec,rxwaveform);
low edge evm, subframe 0: 1.287%
high edge evm, subframe 0: 1.289%
low edge evm, subframe 1: 1.395%
high edge evm, subframe 1: 1.390%
low edge evm, subframe 2: 1.330%
high edge evm, subframe 2: 1.324%
low edge evm, subframe 3: 1.234%
high edge evm, subframe 3: 1.239%
low edge evm, subframe 4: 1.235%
high edge evm, subframe 4: 1.229%
low edge evm, subframe 6: 1.296%
high edge evm, subframe 6: 1.294%
low edge evm, subframe 7: 1.350%
high edge evm, subframe 7: 1.344%
low edge evm, subframe 8: 1.338%
high edge evm, subframe 8: 1.336%
low edge evm, subframe 9: 1.331%
high edge evm, subframe 9: 1.319%
averaged low edge evm, frame 0: 1.312%
averaged high edge evm, frame 0: 1.308%
averaged evm frame 0: 1.312%
low edge evm, subframe 0: 1.241%
high edge evm, subframe 0: 1.243%
low edge evm, subframe 1: 1.230%
high edge evm, subframe 1: 1.229%
low edge evm, subframe 2: 1.219%
high edge evm, subframe 2: 1.220%
low edge evm, subframe 3: 1.216%
high edge evm, subframe 3: 1.220%
low edge evm, subframe 4: 1.239%
high edge evm, subframe 4: 1.239%
low edge evm, subframe 6: 1.219%
high edge evm, subframe 6: 1.207%
low edge evm, subframe 7: 1.247%
high edge evm, subframe 7: 1.246%
low edge evm, subframe 8: 1.257%
high edge evm, subframe 8: 1.252%
low edge evm, subframe 9: 1.249%
high edge evm, subframe 9: 1.246%
averaged low edge evm, frame 1: 1.235%
averaged high edge evm, frame 1: 1.234%
averaged evm frame 1: 1.235%
averaged overall evm: 1.274%

evm measurement on a test model signal

finally the evm of a test model (e-tm) signal is measured, showing how to synchronize an e-tm signal that has been generated outside of matlab or that has been played over-the-air after being generated inside matlab. the following steps are performed:

  • load captured waveform: a waveform is generated inside hgettestmodelwaveform to simulate an over-the-air e-tm waveform captured at the returned sample rate. for more details on over-the-air transmission and analysis of test model waveforms, refer to the following example: .

  • create local test model configuration: next a configuration structure representing the e-tm waveform content is created using the function ltetestmodel. in order to create the configuration, the test model number and bandwidth must be known.

  • resample to expected sampling rate: the function lteofdminfo is called to get some information about the ofdm modulation/demodulation used within lte toolbox for the test model configuration tmconfig. the most important information here is ofdminfo.samplingrate which gives the sampling rate expected for ofdm demodulation of the waveform. the resample function is used to resample the captured waveform to this sampling rate.

  • perform synchronization: frequency offset estimation and correction and timing synchronization are performed using the same steps as shown earlier in this example.

  • measure evm: the evm is measured by calling hpdschevm. for e-tms, the generated waveform contains one or more pdschs. the hpdschevm function determines which pdsch to analyze based on ts 36.141, section 6.1.1 [ 2 ].

% load the captured test model waveform
[tmsignal,sr] = hgettestmodelwaveform();
% create a local test model configuration, corresponding to the known e-tm
% number and bandwidth
tmconfig = ltetestmodel('1.1','5mhz');
ofdminfo = lteofdminfo(tmconfig);
% resample the captured waveform to match the expected sampling rate used
% by lte toolbox for the test model bandwidth
tmsignal = resample(tmsignal,ofdminfo.samplingrate,sr);
% apply frequency estimation and correction for the purposes of performing
% timing synchronization
foffset_est = ltefrequencyoffset(tmconfig,tmsignal);
tmsignalfreqcorrected = ltefrequencycorrect(tmconfig,tmsignal,foffset_est);
% synchronize the captured waveform
offset = ltedlframeoffset(tmconfig,tmsignalfreqcorrected,'testevm');
tmsignal = tmsignal(1 offset:end,:);
% compute evm measurements, with plotting disabled
cec.pilotaverage = 'testevm';
alg.enableplotting = 'off';
evm_tm = hpdschevm(tmconfig,cec,tmsignal,alg);
low edge evm, subframe 0: 2.166%
high edge evm, subframe 0: 1.922%
low edge evm, subframe 1: 2.010%
high edge evm, subframe 1: 1.904%
low edge evm, subframe 2: 2.060%
high edge evm, subframe 2: 1.915%
low edge evm, subframe 3: 1.988%
high edge evm, subframe 3: 1.910%
low edge evm, subframe 4: 2.074%
high edge evm, subframe 4: 1.920%
low edge evm, subframe 5: 2.010%
high edge evm, subframe 5: 1.913%
low edge evm, subframe 6: 2.082%
high edge evm, subframe 6: 1.912%
low edge evm, subframe 7: 2.047%
high edge evm, subframe 7: 1.920%
low edge evm, subframe 8: 1.989%
high edge evm, subframe 8: 1.905%
low edge evm, subframe 9: 2.022%
high edge evm, subframe 9: 1.905%
averaged low edge evm, frame 0: 2.044%
averaged high edge evm, frame 0: 1.912%
averaged evm frame 0: 2.044%
averaged overall evm: 2.044%

appendix

this example uses the following helper functions:

selected bibliography

  1. 3gpp ts 36.104 "base station (bs) radio transmission and reception"

  2. 3gpp ts 36.141 "base station (bs) conformance testing"

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

网站地图