0001 function [ s ] = UFMC_Modulator_TD( d, Para )
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 proto_filt = protofilter_design(Para);
0033
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;
0040 for iSubBand = 1:Para.NbSubBands
0041
0042 symb = data((iSubBand-1)*Para.SubBandWidth+1:iSubBand*Para.SubBandWidth,:);
0043
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
0047 tsymbol = ifft(symbol_padded,Para.nSubcarriers,1)*sqrt(Para.nSubcarriers);
0048
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
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;
0066 for iSubBand = 1:Para.NbSubBands
0067
0068 symb = data((iSubBand-1)*Para.SubBandWidth+1:iSubBand*Para.SubBandWidth,:);
0069
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
0073 tsymbol = ifft(symbol_padded,Para.nSubcarriers,1)*sqrt(Para.nSubcarriers);
0074
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
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