Home > WaveComBox > Toolbox > CP_OFDM > Modulation > OFDM_Modulator.m

OFDM_Modulator

PURPOSE ^

OFDM modulates data symbols (possibly pre-equalized).

SYNOPSIS ^

function [ s ] = OFDM_Modulator( d, Para )

DESCRIPTION ^

 OFDM modulates data symbols (possibly pre-equalized).

 function [ s ] = OFDM_Modulator( d, Para )

 The function works for SISO and MIMO systems.

 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*(1+Para.CP)*(Para.Ns+Para.PreambleLength)]

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [ s ] = OFDM_Modulator( d, Para )
0002 % OFDM modulates data symbols (possibly pre-equalized).
0003 %
0004 % function [ s ] = OFDM_Modulator( d, Para )
0005 %
0006 % The function works for SISO and MIMO systems.
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*(1+Para.CP)*(Para.Ns+Para.PreambleLength)]
0019 
0020 
0021 % This file is part of WaveComBox: www.wavecombox.com 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:
0024 % Change log:
0025 
0026 
0027 L_CP=Para.nSubcarriers*Para.CP;
0028 
0029 if Para.N_T==1
0030     temp=1/sqrt(Para.nSubcarriers+L_CP)*Para.nSubcarriers*ifft(d);
0031     X=[temp(Para.nSubcarriers-L_CP+1:end,:); temp];
0032     s=reshape(X,1,(Para.nSubcarriers+L_CP)*(Para.Ns+Para.PreambleLength));
0033 else
0034     s=zeros(Para.N_T,(Para.Ns+Para.PreambleLength)*(Para.nSubcarriers+L_CP));
0035     for index_N_T=1:Para.N_T
0036         temp=1/sqrt(Para.nSubcarriers+L_CP)*(Para.nSubcarriers)*ifft(squeeze(d(index_N_T,:,:)));
0037         X=[temp(Para.nSubcarriers-L_CP+1:end,:); temp];
0038         s(index_N_T,:)=reshape(X,1,(Para.nSubcarriers+L_CP)*(Para.Ns+Para.PreambleLength));
0039     end
0040 end
0041 
0042 
0043 end
0044

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