W-OFDM modulates data symbols using the WOLA-OFDM modulation [1,2]. function [ s ] = W_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.win_L)*(Para.Ns)+Para.win_L]
0001 function [ s ] = W_OFDM_Modulator( d, Para ) 0002 % W-OFDM modulates data symbols using the WOLA-OFDM modulation [1,2]. 0003 % 0004 % function [ s ] = W_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.win_L)*(Para.Ns)+Para.win_L] 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] R. Zayani, Y. Medjahdi, H. Shaiek and D. Roviras, "WOLA-OFDM: A Potential Candidate for Asynchronous 5G," 2016 IEEE Globecom Workshops (GC Wkshps), Washington, DC, 2016, pp. 1-5. 0028 % [2] 3GPP R1-166999, 'Detailed configuration of f-OFDM and W-OFDM for LLS evaluation' 0029 0030 %generate prototype filter 0031 Fw = W_OFDM_TX_window_design(Para); 0032 0033 CP_L = Para.CP*Para.nSubcarriers; 0034 if Para.N_T==1 0035 s = 0;%initialise Tx signal 0036 IFT = sqrt(Para.nSubcarriers)*ifft(d, Para.nSubcarriers, 1);% 0037 IFT = [IFT(end-(Para.win_L+CP_L)+1:end, :); IFT; IFT(1:Para.win_L, :)];%Cyclic prefix and postfix before windowing 0038 IFT_win = IFT.*Fw; 0039 %overlap and add 0040 for kBlock = 1:Para.Ns 0041 pad_in = zeros((Para.nSubcarriers+CP_L+Para.win_L)*(kBlock-1), 1); 0042 pad_out = zeros((Para.nSubcarriers+CP_L+Para.win_L)*(Para.Ns-1) - length(pad_in), 1); 0043 s = s + [pad_in; IFT_win(:, kBlock); pad_out].'; 0044 end 0045 0046 else 0047 error('MIMO not implemented') 0048 end 0049 0050 end 0051