Home > WaveComBox > Toolbox > Transmitter > PreEqualizer.m

PreEqualizer

PURPOSE ^

Pre-equalizes data symbols d.

SYNOPSIS ^

function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, pre_equalizer_type, ParaPreEqualizer )

DESCRIPTION ^

 Pre-equalizes data symbols d.

 function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, modulation )
 function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, modulation, pre_equalizer_type )
 function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, modulation, pre_equalizer_type, ParaEqualizer )

 The function works for MIMO and SISO systems depending on the type of
 equalizer being used. See the help related to the specific equalizer
 function called by the present parent function.

 Input arguments:

   d: data symbols to pre-equalize. Size: matrix [2*Para.M, ~] if Para.S
   == 1, multidimensional array [para.S, 2*Para.M, ~] if Para.S > 1.

   C: channel impulse response. Multidimensional array [Para.N_R, Para.N_T, ~].

   ParaModulation: structure containing the modulation parameters.

   pre_equalizer_type: optional (by default 'SingleTap') determines the
   type of equalizer to compute and use. Currently, only one option is
   available:

       'SingleTap': conventional single-tap equalization.

   ParaPreEqualizer: structure containing parameters of the equalizer.
   Depending on the equalizer type, the structure may contain optional
   arguments (set to default values) and/or mandatory arguments:

       ParaPreEqualizer.criterion: specific version of the equalizer,
       optional, default value: 'ZF'.

 Ouput arguments:

   d_tilde: pre-equalized data symbols. Size: matrix [2*Para.M, ~] if
   Para.N_T == 1, multidimensional array [para.N_T, 2*Para.M, ~] if
   Para.N_T > 1.

   A: used pre-equalizing matrices at each subcarrier. Size: vector [2*Para.M, 1]
   if Para.N_T == Para.N_R == 1 and multidimensional array
   [Para.T,Para.S,2*Para.M] otherwise

   B: required equalizing matrices at each subcarrier. Size: vector [2*Para.M, 1]
   if Para.N_T == Para.N_R == 1 and multidimensional array [Para.S,Para.N_R,2*Para.M] otherwise

 See also OFDM_PREEQUALIZERSINGLETAP, FBMC_OQAM_PREEQUALIZERSINGLETAP.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, pre_equalizer_type, ParaPreEqualizer )
0002 % Pre-equalizes data symbols d.
0003 %
0004 % function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, modulation )
0005 % function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, modulation, pre_equalizer_type )
0006 % function [ d_tilde, A, B ] = PreEqualizer( d, C, ParaModulation, modulation, pre_equalizer_type, ParaEqualizer )
0007 %
0008 % The function works for MIMO and SISO systems depending on the type of
0009 % equalizer being used. See the help related to the specific equalizer
0010 % function called by the present parent function.
0011 %
0012 % Input arguments:
0013 %
0014 %   d: data symbols to pre-equalize. Size: matrix [2*Para.M, ~] if Para.S
0015 %   == 1, multidimensional array [para.S, 2*Para.M, ~] if Para.S > 1.
0016 %
0017 %   C: channel impulse response. Multidimensional array [Para.N_R, Para.N_T, ~].
0018 %
0019 %   ParaModulation: structure containing the modulation parameters.
0020 %
0021 %   pre_equalizer_type: optional (by default 'SingleTap') determines the
0022 %   type of equalizer to compute and use. Currently, only one option is
0023 %   available:
0024 %
0025 %       'SingleTap': conventional single-tap equalization.
0026 %
0027 %   ParaPreEqualizer: structure containing parameters of the equalizer.
0028 %   Depending on the equalizer type, the structure may contain optional
0029 %   arguments (set to default values) and/or mandatory arguments:
0030 %
0031 %       ParaPreEqualizer.criterion: specific version of the equalizer,
0032 %       optional, default value: 'ZF'.
0033 %
0034 % Ouput arguments:
0035 %
0036 %   d_tilde: pre-equalized data symbols. Size: matrix [2*Para.M, ~] if
0037 %   Para.N_T == 1, multidimensional array [para.N_T, 2*Para.M, ~] if
0038 %   Para.N_T > 1.
0039 %
0040 %   A: used pre-equalizing matrices at each subcarrier. Size: vector [2*Para.M, 1]
0041 %   if Para.N_T == Para.N_R == 1 and multidimensional array
0042 %   [Para.T,Para.S,2*Para.M] otherwise
0043 %
0044 %   B: required equalizing matrices at each subcarrier. Size: vector [2*Para.M, 1]
0045 %   if Para.N_T == Para.N_R == 1 and multidimensional array [Para.S,Para.N_R,2*Para.M] otherwise
0046 %
0047 % See also OFDM_PREEQUALIZERSINGLETAP, FBMC_OQAM_PREEQUALIZERSINGLETAP.
0048 
0049 % This file is part of WaveComBox: www.wavecombox.com and is distributed under
0050 % the terms of the MIT license. See accompanying LICENSE file.
0051 % Original author: François Rottenberg, May 8, 2018.
0052 % Contributors:
0053 % Change log:
0054 
0055 if isfield(ParaPreEqualizer,'criterion') ==0
0056     ParaPreEqualizer.criterion='ZF';
0057 end
0058 if exist ('pre_equalizer_type','var')
0059    pre_equalizer_type='SingleTap'; 
0060 end
0061 
0062 switch ParaModulation.Modulation
0063     case 'CP-OFDM'
0064         switch pre_equalizer_type
0065             case 'SingleTap'
0066                 [d_tilde, A, B ]=OFDM_PreEqualizerSingleTap( d, C, ParaPreEqualizer.criterion, ParaModulation );
0067             otherwise
0068                 error('Equalizer type not defined for CP-OFDM modulation')
0069         end
0070     case 'FBMC-OQAM'
0071         switch pre_equalizer_type
0072             case 'SingleTap'
0073                 [d_tilde, A, B ]=FBMC_OQAM_PreEqualizerSingleTap( d, C, ParaPreEqualizer.criterion, ParaModulation );
0074             otherwise
0075                 error('Equalizer type not defined for FBMC-OQAM modulation')
0076         end
0077     otherwise
0078         error('Modulation not implemented')
0079 end
0080 
0081 
0082 end
0083

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