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)]
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