F_OFDM_Modulator modulates data symbols using the f-OFDM modulation [1,2]. function [ s ] = F_OFDM_Modulator( 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+CP_L)*(Para.Ns)+Para.L-1]
0001 function [ s ] = F_OFDM_Modulator( d, Para ) 0002 % F_OFDM_Modulator modulates data symbols using the f-OFDM modulation [1,2]. 0003 % 0004 % function [ s ] = F_OFDM_Modulator( 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+CP_L)*(Para.Ns)+Para.L-1] 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: Mathieu Van Eeckhaute, September 26, 2018. 0023 % Contributors: 0024 % Change log: 0025 0026 %References: 0027 % [1] 3GPP R1-165425 'f-OFDM scheme and filter design' 0028 % [2] 3GPP R1-166999 'Detailed configuration of f-OFDM and W-OFDM for LLS evaluation' 0029 0030 %generate prototype filter 0031 proto_filt = F_OFDM_protofilter_design(Para); 0032 %modulate prototype filter around centre frequency of each subband; 0033 modulated_filters = F_OFDM_modulate_proto_filt(proto_filt, Para); 0034 0035 CP_L = Para.CP*Para.nSubcarriers; 0036 data = d(Para.ActiveSubcarriers, :); 0037 if Para.N_T==1 0038 s = 0;%initialise Tx signal 0039 for iSubBand = 1:Para.NsubBands 0040 %sub-band separation 0041 subBandSymbs = data((iSubBand-1)*Para.SubBandWidth+1:iSubBand*Para.SubBandWidth,:); %Sub-band symbol 0042 IFT_in = zeros(Para.nSubcarriers, Para.Ns); 0043 IFT_in(Para.SubBandSCset(:, iSubBand), :) = subBandSymbs; 0044 IFT = Para.nSubcarriers/sqrt(Para.nSubcarriers+CP_L)*ifft(IFT_in, Para.nSubcarriers, 1); 0045 IFT_CP = [IFT(end-CP_L+1:end, :); IFT];%CP addition 0046 filt_in = IFT_CP(:); %P/S 0047 filt_sig = conv(filt_in, modulated_filters(:, iSubBand)); 0048 s = s + filt_sig.'; 0049 0050 end 0051 0052 else 0053 error('MIMO not implemented') 0054 end 0055 0056 end 0057