Main Content

UMTS Downlink Waveform Generation

This example shows how to generate an HSDPA FRC H-Set using LTE Toolbox™.

Introduction

The LTE Toolbox can be used to generate standard compliant W-CDMA/HSPA/HSPA+ uplink and downlink complex baseband waveforms including pre-defined configurations for standard defined measurement channels. For the downlink this includes the Reference Measurement Channels (RMC), Fixed Reference Channel (FRC) H-Sets and Test Models (TM) defined in TS25.101 [ 1 ].

This example demonstrates how the two downlink related functions, umtsDownlinkReferenceChannels and umtsDownlinkWaveformGenerator, combine to support this feature. We show how they can generate an FRC H-Set waveform for HSDPA UE testing using one of the pre-defined configurations provided. We also present explicit MATLAB® code which lists all downlink generator parameters set up for this particular measurement channel. The FRC H-Sets are defined in TS25.101, Section A.7.1 [ 1 ]. This code also provides a useful template for full waveform customization.

The umtsDownlinkWaveformGenerator function can generate custom W-CDMA/HSPA/HSPA+ waveforms using the physical layer channels listed below. Arbitrary Coded Composite Transport Channels (CCTrCH) can be configured too. The output waveforms are loopable for continuous playback in simulation or via test equipment.

Physical channels supported:

  • Dedicated Physical Channel (DPCH)

  • Primary Common Pilot Channel (P-CPICH)

  • Secondary Common Pilot Channel (S-CPICH)

  • Primary Common Control Physical Channel (P-CCPCH)

  • Secondary Common Control Physical Channel (S-CCPCH)

  • Primary Synchronization Channel (P-SCH)

  • Secondary Synchronization Channel (S-SCH)

  • Paging Indicator Channel (PICH)

  • High Speed Physical Downlink Shared Channel (HS-PDSCH)

  • Shared Control Channel for HS-DSCH (HS-SCCH)

  • Orthogonal Channel Noise Simulator channels (OCNS)

Transport channels supported:

  • Dedicated Channel (DCH)

  • Broadcast Channel (BCH)

  • Forward Access Channel (FACH)

  • Paging Channel (PCH)

  • High Speed Downlink Shared Channel (HS-DSCH)

The physical channel processing is defined in TS25.211 and TS25.213 [ 2 ][ 4 ]. The processing for the transport channels is defined in TS25.212 [ 3 ].

The waveforms generated can be used for a number of applications:

  • Golden reference for transmitter implementations

  • Receiver testing and algorithm development

  • Testing RF hardware and software

  • Interference testing

See Waveform Generation and Transmission Using LTE Toolbox with Test and Measurement Equipment for a more detailed explanation of how to interface the waveforms with external hardware.

W-CDMA/HSPA/HSPA+ Waveform Generation and Parameterization Functions

The waveform generator function umtsDownlinkWaveformGenerator requires a single hierarchical MATLAB structure which specifies the set of all parameters for the physical and transport channels present in the output waveform.

The toolbox includes a function umtsDownlinkReferenceChannels, which can return a fully populated parameter structure for all the pre-configured Reference Measurement Channels (RMC), Fixed Reference Channel (FRC) H-Sets and Test Models (TM).

By combining the two functions these standard defined measurement waveforms can be generated easily. The pre-configured parameters returned from umtsDownlinkReferenceChannels can also be used as a starting point for parameter customization, for example changing the output filtering, channel power levels or even the reference CCTrCH configuration, prior to calling the generator function. If full waveform parameter control is required then this example includes MATLAB code below which lists all possible downlink parameters. The following diagram shows these steps.

H-Set1 (QPSK) Generation Using a Pre-configured Parameter Structure

The umtsDownlinkReferenceChannels function requires the H-Set number and modulation to be specified as shown below. Allowed H-Set values are ('H-Set1', 'H-Set2', 'H-Set3', 'H-Set4', 'H-Set5', 'H-Set6', 'H-Set7', 'H-Set8', 'H-Set10', 'H-Set12') and the choices for modulation schemes are 'QPSK', '16QAM' and '64QAM'. The output structure preconfigParams is the pre-built configuration for FRC H-Set1 and this can then be used to generate the standard defined H-Set waveform by calling the umtsDownlinkWaveformGenerator function.

hset = 'H-Set1';     % H-Set number
modulation = 'QPSK'; % Modulation scheme
preconfigParams = umtsDownlinkReferenceChannels(hset,modulation); % Get H-Set parameters
frcWaveform = umtsDownlinkWaveformGenerator(preconfigParams);     % Generate H-Set waveform

H-Set1 (QPSK) Generation Using Full Parameter List

In this section, we will build the H-Set1 (QPSK) configuration structure from scratch and show that this is identical to the structure defined using the umtsDownlinkReferenceChannels function as shown above. The downlinkParams structure defined below has the full list of the parameters supported by the umtsDownlinkWaveformGenerator function and so also can be used as a template to create custom waveforms when a large set of parameter values need to be changed from the structure output by umtsDownlinkReferenceChannels.

% H-Set parameter structure definition from scratch
% General settings
downlinkParams.TotFrames = 1;                      % Number of 10ms frames to be generated
downlinkParams.PrimaryScramblingCode = 0;          % Primary scrambling code
downlinkParams.FilterType = 'RRC';                 % Enable the RRC filter
downlinkParams.OversamplingRatio = 4;              % Oversampling set to 4
downlinkParams.NormalizedPower = 'Off';            % Power normalization disabled

% Define Downlink Dedicated Physical Channel  (DPCH)
downlinkParams.DPCH.Enable = 'On';                 % Enable DPCH
downlinkParams.DPCH.SlotFormat = 11;               % DPCH slot format
downlinkParams.DPCH.SpreadingCode = 6;             % DPCH spreading code
downlinkParams.DPCH.NMulticodes = 1;               % Number of DPCH
downlinkParams.DPCH.SecondaryScramblingCode = 1;   % Secondary scrambling code
downlinkParams.DPCH.TimingOffset = 0;              % Timing Offset
downlinkParams.DPCH.Power = 0;                     % Power in dB
downlinkParams.DPCH.TPCData = 0;                   % TPC value
downlinkParams.DPCH.TFCI = 0;                      % TFCI value
downlinkParams.DPCH.DataSource = 'CCTrCH';         % DPCH data source is CCTrCH
% DPCH carries the Coded Composite Transport Channel (CCTrCH) containing
% one or more transport channels. Since DPCH source is specified as CCTrCH,
% define the CCTrCH containing DTCH and DCCH transport channels
% Build DTCH definition
TrCH(1).Name = 'DTCH';                             % Name of the transport channel
TrCH(1).CRC = '16';                                % CRC type
TrCH(1).TTI = 20;                                  % TTI in ms
TrCH(1).CodingType = 'conv3';                      % The coding type and rate
TrCH(1).RMA = 256;                                 % Rate matching attribute
TrCH(1).DataSource = 'PN9-ITU';                    % Tr channel data source
TrCH(1).ActiveDynamicPart = 1;                     % Index to active dynamic part
TrCH(1).DynamicPart(1) = struct('BlockSize',244,'BlockSetSize',244); % 1x244 blocks
% Build DCCH definition
TrCH(2).Name = 'DCCH';                             % Name of the transport channel
TrCH(2).CRC = '12';                                % CRC type
TrCH(2).TTI = 40;                                  % TTI in ms
TrCH(2).CodingType = 'conv3';                      % The coding type and rate
TrCH(2).RMA = 256;                                 % Rate matching attribute
TrCH(2).DataSource = 'PN9-ITU';                    % Tr channel data source
TrCH(2).ActiveDynamicPart = 1;                     % Index to active dynamic part
TrCH(2).DynamicPart(1) = struct('BlockSize',100,'BlockSetSize',100);   % 1x100 blocks
% Finalize CCTrCH structure array using the TrCH structures defined above
downlinkParams.DPCH.CCTrCH.Name = 'DCH';           % Name of the CCTrCH
downlinkParams.DPCH.CCTrCH.DTXPosition = 'fixed';  % DTX position
downlinkParams.DPCH.CCTrCH.TrCH = TrCH;            % Assign DTCH/DCCH to CCTrCH

% Define P-CCPCH
downlinkParams.PCCPCH.Enable = 'On';               % Enable P-CCPCH
downlinkParams.PCCPCH.Power = 0;                   % Set power to be 0dB
downlinkParams.PCCPCH.DataSource = 'CCTrCH';       % P-CCPCH data source is CCTrCH
% P-CCPCH CCTrCH carries the BCH transport channel. Since P-CCPCH source is
% CCTrCH, define CCTrCH containing BCH
clear TrCH;
TrCH(1).Name = 'BCH';                              % Name of the Tr channel
TrCH(1).CRC = '16';                                % CRC type
TrCH(1).TTI = 20;                                  % TTI in ms
TrCH(1).CodingType = 'conv2';                      % The coding type and rate
TrCH(1).RMA = 256;                                 % Rate matching attribute
TrCH(1).DataSource = 'PN9-ITU';                    % Tr channel data source
TrCH(1).ActiveDynamicPart = 1;                     % Index to active dynamic part
TrCH(1).DynamicPart(1) = struct('BlockSize',246,'BlockSetSize',246); % 1x246 block
% Finalize CCTrCH structure array using the TrCH structure defined above
downlinkParams.PCCPCH.CCTrCH.Name = 'BCH';         % Name of the CCTrCH
downlinkParams.PCCPCH.CCTrCH.DTXPosition = 'fixed';% DTX position
downlinkParams.PCCPCH.CCTrCH.TrCH = TrCH;          % Assign BCH to CCTrCH

% Define S-CCPCH, but this channel is not required for H-Set1 generation
downlinkParams.SCCPCH.Enable = 'Off';              % Disable S-CCPCH
downlinkParams.SCCPCH.SlotFormat = 7;              % Slot format number
downlinkParams.SCCPCH.SpreadingCode = 3;           % S-CCPCH spreading code
downlinkParams.SCCPCH.SecondaryScramblingCode = 3; % Secondary scrambling code
downlinkParams.SCCPCH.TimingOffset = 0;            % Timing Offset
downlinkParams.SCCPCH.Power = 0;                   % Power in dB
downlinkParams.SCCPCH.TFCI = 0;                    % TFCI value
downlinkParams.SCCPCH.DataSource = 'CCTrCH';       % S-CCPCH data source is CCTrCH
% S-CCPCH CCTrCH can carry PCH and FACH transport channels. Since S-CCPCH
% source is CCTrCH, define CCTrCH containing PCH and FACH
% Build PCH definition
TrCH(1).Name = 'PCH';                              % Name of the Tr channel
TrCH(1).CRC = '16';                                % CRC type
TrCH(1).TTI = 10;                                  % TTI in ms
TrCH(1).CodingType = 'conv2';                      % The coding type
TrCH(1).RMA = 256;                                 % Rate matching attribute
TrCH(1).DataSource = 'PN9-ITU';                    % Tr channel data source
TrCH(1).ActiveDynamicPart = 1;                     % Index to active dynamic part
TrCH(1).DynamicPart(1) = struct('BlockSize',64,'BlockSetSize',64);   % 1x64 block
% Build FACH definition
TrCH(2).Name = 'FACH';                             % Name of the Tr channel
TrCH(2).CRC = '16';                                % CRC type
TrCH(2).TTI = 10;                                  % TTI in ms
TrCH(2).CodingType = 'turbo';                      % The coding type
TrCH(2).RMA = 256;                                 % Rate matching attribute
TrCH(2).DataSource = 'PN9-ITU';                    % Tr channel data source
TrCH(2).ActiveDynamicPart = 1;                     % Index to active dynamic part
TrCH(2).DynamicPart(1) = struct('BlockSize',360,'BlockSetSize',360);   % 1x360 block
% Finalize CCTrCH using the above
downlinkParams.SCCPCH.CCTrCH.Name = '';            % Name of the CCTrCH
downlinkParams.SCCPCH.CCTrCH.DTXPosition = 'fixed';% DTX position
downlinkParams.SCCPCH.CCTrCH.TrCH = TrCH;          % Assign PCH/FACH to CCTrCH

% Define P-CPICH
downlinkParams.PCPICH.Enable = 'On';               % Enable P-CPICH
downlinkParams.PCPICH.Power = 0;                   % Power in dB

% Define S-CPICH
downlinkParams.SCPICH.Enable = 'Off';              % Disable S-CPICH
downlinkParams.SCPICH.SpreadingCode = 4;           % S-CPICH spreading code
downlinkParams.SCPICH.SecondaryScramblingCode = 4; % Secondary scrambling code
downlinkParams.SCPICH.Power = 0;                   % Power in dB

% Define P-SCH
downlinkParams.PSCH.Enable = 'On';                 % Enable P-SCH
downlinkParams.PSCH.Power = 0;                     % Power in dB

% Define S-SCH
downlinkParams.SSCH.Enable = 'On';                 % Enable S-SCH
downlinkParams.SSCH.Power = 0;                     % Power in dB

% Define PICH
downlinkParams.PICH.Enable = 'On';                 % Enable PICH
downlinkParams.PICH.SpreadingCode = 16;            % PICH spreading code
downlinkParams.PICH.TimingOffset = 0;              % Timing offset
downlinkParams.PICH.Power = 0;                     % Power in dB
downlinkParams.PICH.DataSource = 'PagingData';     % PICH data source
downlinkParams.PICH.Np = 144;                      % Number of paging indicators

% Define HSDPA
downlinkParams.HSDPA.Enable = 'On';                % Enable HSDPA channels
downlinkParams.HSDPA.CodeGroup = 5;                % Number of HS-PDSCHs
downlinkParams.HSDPA.CodeOffset = 1;               % Code offset to first HS-PDSCH
downlinkParams.HSDPA.Modulation = 'QPSK';          % Modulation scheme
downlinkParams.HSDPA.VirtualBufferCapacity = 9600; % Buffer capacity
downlinkParams.HSDPA.InterTTIDistance = 3;         % Inter TTI interval
downlinkParams.HSDPA.NHARQProcesses = 2;           % Number of HARQ processes
downlinkParams.HSDPA.XrvSequence = [0 2 5 6];      % The XRV sequence
downlinkParams.HSDPA.UEId = 0;                     % UE Identity
downlinkParams.HSDPA.TransportBlockSizeId = 41;    % The transport block size id
downlinkParams.HSDPA.HSSCCHSpreadingCode = 9;      % Shared channel spreading code
downlinkParams.HSDPA.SecondaryScramblingCode = 6;  % Secondary scrambling code
downlinkParams.HSDPA.HSPDSCHPower = 0;             % HS-PDSCH power in dB
downlinkParams.HSDPA.HSSCCHPower = 0;              % HS-SCCH power in dB
downlinkParams.HSDPA.DataSource = 'HSDSCH';        % Data source is HS-DSCH
% HS-DSCH transport channel definition
downlinkParams.HSDPA.HSDSCH.BlockSize = 3202;      % The transport block size
downlinkParams.HSDPA.HSDSCH.DataSource = 'PN9-ITU';% HS-DSCH data source

% Define OCNS channels as defined in TS25.101 Table C.13
downlinkParams.OCNS.Enable = 'On';                 % Enable OCNS channels
downlinkParams.OCNS.Power = 0;                     % OCNS power scaling in dB
downlinkParams.OCNS.OCNSType = 'H-Set_6DPCH';      % OCNS definition

% The structure defined above can be used to generate the waveform:
frcWaveform2 = umtsDownlinkWaveformGenerator(downlinkParams);

% For completeness we can see that the H-Set definition structures obtained
% by the above two parameterization approaches are identical
if(isequal(preconfigParams,downlinkParams))
    disp(['H-Set1 configuration structures generated with and without using' ...
    ' umtsDownlinkReferenceChannels function are the same.']);
end

Waveform Comparison

Compare the waveforms generated using both approaches described above and see that the generated waveforms are identical

if(isequal(frcWaveform,frcWaveform2))
    disp(['H-Set1 waveforms generated with and without using' ...
    ' umtsDownlinkReferenceChannels function are the same.']);
end

Plot Spectrum

Plot the spectrum of the time domain signal frcWaveform.

chiprate = 3.84e6;   % Chip rate of the baseband waveform
spectrumPlot = spectrumAnalyzer(SampleRate=chiprate*downlinkParams.OversamplingRatio);
spectrumPlot.Title = sprintf('Spectrum of Fixed Reference Channel (FRC) %s (%s) waveform', hset, modulation);
spectrumPlot(frcWaveform);

Conclusion

This example shows how to generate standard defined and custom W-CDMA/HSPA/HSPA+ waveforms using LTE Toolbox functions. The example also provides a full parameter template for full user customization of the pre-defined waveform configurations.

Selected Bibliography

  1. 3GPP TS 25.101 "User Equipment (UE) radio transmission and reception (FDD)"

  2. 3GPP TS 25.211 "Physical channels and mapping of transport channels onto physical channels (FDD)"

  3. 3GPP TS 25.212 "Multiplexing and channel coding (FDD)"

  4. 3GPP TS 25.213 "Spreading and modulation (FDD)"