Home > WaveComBox > Toolbox > UFMC > Modulation > UFMC_Modulator_TD.m

UFMC_Modulator_TD

PURPOSE ^

UFMC modulates data symbols using a Time Domain implementation of the modulator [1,2].

SYNOPSIS ^

function [ s ] = UFMC_Modulator_TD( d, Para )

DESCRIPTION ^

 UFMC modulates data symbols using a Time Domain implementation of the modulator [1,2].

 function [ s ] = UFMC_Modulator_TD( d, Para )

 The function works for SISO and MIMO systems.

 Input arguments:

   d: data symbols (possibly pre-equalized). Size: matrix [Para.nSubcarriers, Ns] if Para.N_T == 1,
   multidimensional array [para.N_T, Para.nSubcarriers, Ns] if Para.N_T > 1.  

   Para: structure containing the modulation parameters.

 Outputs arguments:

   s: transmitted signal. Size: matrix [Para.N_T,
   (Para.nSubcarriers+Para.filt_L-1)*Para.Ns]

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [ s ] = UFMC_Modulator_TD( d, Para )
0002 % UFMC modulates data symbols using a Time Domain implementation of the modulator [1,2].
0003 %
0004 % function [ s ] = UFMC_Modulator_TD( d, Para )
0005 %
0006 % The function works for SISO and MIMO systems.
0007 %
0008 % Input arguments:
0009 %
0010 %   d: data symbols (possibly pre-equalized). Size: matrix [Para.nSubcarriers, Ns] if Para.N_T == 1,
0011 %   multidimensional array [para.N_T, Para.nSubcarriers, Ns] if Para.N_T > 1.
0012 %
0013 %   Para: structure containing the modulation parameters.
0014 %
0015 % Outputs arguments:
0016 %
0017 %   s: transmitted signal. Size: matrix [Para.N_T,
0018 %   (Para.nSubcarriers+Para.filt_L-1)*Para.Ns]
0019 
0020 
0021 % This file is part of WaveComBox: www.wavecombox.com and is distributed under the terms of the MIT license. See accompanying LICENSE file.
0022 % Original author: Mathieu Van Eeckhaute, May 25, 2018.
0023 % Contributors: François Rottenberg
0024 % Change log:
0025 
0026 % References:
0027 % [1] 5GNow Deliverable 3.2 pp 29-35
0028 % [2] F. Schaich, T. Wild and Y. Chen, "Waveform Contenders for 5G - Suitability for Short Packet and Low Latency Transmissions,"
0029 %     2014 IEEE 79th Vehicular Technology Conference (VTC Spring), Seoul, 2014, pp. 1-5
0030 
0031 %generate prototype filter
0032 proto_filt = protofilter_design(Para);
0033 %modulate prototype filter around centre frequency of each subband;
0034 modulated_filters = modulate_proto_filt(proto_filt, Para);
0035 NsubCar = Para.SubBandWidth*Para.NbSubBands;
0036 
0037 if Para.N_T==1
0038     data = d(Para.ActiveSubcarriers, :);
0039     s = 0;%initialise Tx signal
0040     for iSubBand = 1:Para.NbSubBands
0041         %sub-band separation
0042         symb = data((iSubBand-1)*Para.SubBandWidth+1:iSubBand*Para.SubBandWidth,:); %Sub-band symbol
0043         %zero-padding before ifft. Done such that the correct ifft bins are loaded
0044         symbol_padded = [zeros((iSubBand-1)*Para.SubBandWidth+(Para.nSubcarriers-NsubCar)/2,Para.Ns);symb;...
0045                          zeros(Para.nSubcarriers-iSubBand*Para.SubBandWidth+(Para.nSubcarriers-NsubCar)/2,Para.Ns)];
0046         %ifft per sub-band
0047         tsymbol = ifft(symbol_padded,Para.nSubcarriers,1)*sqrt(Para.nSubcarriers);
0048         %filtering and parallel to serial
0049         s_subcar_temp = zeros(Para.nSubcarriers+Para.filt_L-1,Para.Ns);
0050         for kBlock = 1:Para.Ns
0051             input_filt = tsymbol(:,kBlock);
0052             s_subcar_temp(:,kBlock) = conv(input_filt, modulated_filters(iSubBand,:));
0053         end
0054         s_subcar = s_subcar_temp(:);
0055         s = s + s_subcar.';        
0056     end
0057     % power normalization
0058     norm_fact=ComputeNormFact(Para);
0059     s = s.*norm_fact;
0060     
0061 else
0062     s=zeros(Para.N_T,(Para.nSubcarriers+Para.filt_L-1)*Para.Ns);
0063     for index_N_T=1:Para.N_T
0064         data = squeeze(d(index_N_T,Para.ActiveSubcarriers, :));
0065         s_temp = 0;%initialise Tx signal
0066         for iSubBand = 1:Para.NbSubBands
0067             %sub-band separation
0068             symb = data((iSubBand-1)*Para.SubBandWidth+1:iSubBand*Para.SubBandWidth,:); %Sub-band symbol
0069             %zero-padding before ifft. Done such that the correct ifft bins are loaded
0070             symbol_padded = [zeros((iSubBand-1)*Para.SubBandWidth+(Para.nSubcarriers-NsubCar)/2,Para.Ns);symb;...
0071                 zeros(Para.nSubcarriers-iSubBand*Para.SubBandWidth+(Para.nSubcarriers-NsubCar)/2,Para.Ns)];
0072             %ifft per sub-band
0073             tsymbol = ifft(symbol_padded,Para.nSubcarriers,1)*sqrt(Para.nSubcarriers);
0074             %filtering and parallel to serial
0075             s_subcar_temp = zeros(Para.nSubcarriers+Para.filt_L-1,Para.Ns);
0076             for kBlock = 1:Para.Ns
0077                 input_filt = tsymbol(:,kBlock);
0078                 s_subcar_temp(:,kBlock) = conv(input_filt, modulated_filters(iSubBand,:));
0079             end
0080             s_subcar = s_subcar_temp(:);
0081             s_temp = s_temp + s_subcar.';
0082         end
0083         % power normalization
0084         norm_fact=ComputeNormFact(Para);
0085         s_temp = s_temp.*norm_fact;
0086         
0087         s(index_N_T,:)=s_temp;
0088     end
0089 end
0090 end
0091

Generated on Mon 14-Oct-2019 13:48:34 by m2html © 2005