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

UFMC_Modulator_TDtest

PURPOSE ^

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

SYNOPSIS ^

function [ s ] = UFMC_Modulator_TDtest( 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 systems only.

 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+ Para.PreambleLength)]

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [ s ] = UFMC_Modulator_TDtest( 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 systems only.
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+ Para.PreambleLength)]
0019 
0020 
0021 % This file is part of Wavecom: www.wavecom.org and is distributed under the terms of the MIT license. See accompanying LICENSE file.
0022 % Original author: François Rottenberg, May 3, 2018.
0023 % Contributors: Mathieu Van Eeckhaute, May 25, 2018.
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 data = d(Para.ActiveSubcarriers, :);
0038 if Para.N_T==1
0039     
0040     s = 0;%initialise Tx signal
0041     for iSubBand = 1:Para.NbSubBands
0042         %sub-band separation
0043         symb = data((iSubBand-1)*Para.SubBandWidth+1:iSubBand*Para.SubBandWidth,:); %Sub-band symbol
0044         %zero-padding before ifft. Done such that the correct ifft bins are loaded
0045         symbol_padded = [zeros((iSubBand-1)*Para.SubBandWidth+(Para.nSubcarriers-NsubCar)/2,Para.Ns);symb;...
0046                          zeros(Para.nSubcarriers-iSubBand*Para.SubBandWidth+(Para.nSubcarriers-NsubCar)/2,Para.Ns)];
0047         %ifft per sub-band
0048         tsymbol = ifft(symbol_padded,Para.nSubcarriers,1)*sqrt(Para.nSubcarriers);
0049         %filtering and parallel to serial
0050         s_subcar_temp = zeros(Para.nSubcarriers+Para.filt_L-1,Para.Ns);
0051         for kBlock = 1:Para.Ns
0052             input_filt = tsymbol(:,kBlock);
0053             s_subcar_temp(:,kBlock) = conv(input_filt, modulated_filters(iSubBand,:));
0054         end
0055         s_subcar = s_subcar_temp(:);
0056         s = s + s_subcar.';
0057         
0058     end
0059     % power normalization
0060     Si=diag(symbol_padded(1:Para.nSubcarriers,1)~=0);
0061     G_i= toeplitz([modulated_filters(iSubBand,:) zeros(1,Para.nSubcarriers-1)],[modulated_filters(iSubBand,1) zeros(1,Para.nSubcarriers-1)]) ;
0062     %         temp=abs(trace(G_i*F'*Si*F*G_i'));
0063     B=1/sqrt(Para.nSubcarriers).*fft(G_i');
0064     norm_fact=sum(diag(Si).*diag(B*B'));
0065     s = s.*sqrt(Para.SubBandWidth*Para.Es/norm_fact);
0066     
0067 else
0068     error('MIMO not implemented')
0069 end
0070 
0071 end
0072

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