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.
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