Generates an FBMC-OQAM preamble. function [ d_preamble ] = FBMC_OQAM_GeneratePreamble(d_TR, Para) The function works for SISO and some MIMO systems. Input arguments: d_TR: vector [Para.nSubcarriers, 1] of pilot symbols. Para: structure containing the modulation parameters. preamble_type: optional, type of preamble, 'synchro' or 'channel_estimation' (by default). Outputs arguments: d_preamble: preamble symbols. Size: matrix [Para.nSubcarriers, 2*Para.PreambleLength] if Para.N_T == 1 and multidimensional array [Para.N_T, Para.nSubcarriers, 2*Para.PreambleLength] otherwise
0001 function [ d_preamble ] = FBMC_OQAM_GeneratePreamble(d_TR, Para, preamble_type) 0002 % Generates an FBMC-OQAM preamble. 0003 % 0004 % function [ d_preamble ] = FBMC_OQAM_GeneratePreamble(d_TR, Para) 0005 % 0006 % The function works for SISO and some MIMO systems. 0007 % 0008 % Input arguments: 0009 % 0010 % d_TR: vector [Para.nSubcarriers, 1] of pilot symbols. 0011 % 0012 % Para: structure containing the modulation parameters. 0013 % 0014 % preamble_type: optional, type of preamble, 'synchro' or 0015 % 'channel_estimation' (by default). 0016 % 0017 % Outputs arguments: 0018 % 0019 % d_preamble: preamble symbols. Size: matrix [Para.nSubcarriers, 0020 % 2*Para.PreambleLength] if Para.N_T == 1 and multidimensional array 0021 % [Para.N_T, Para.nSubcarriers, 2*Para.PreambleLength] otherwise 0022 % 0023 0024 0025 % This file is part of WaveComBox: www.wavecombox.com and is distributed under the terms of the MIT license. See accompanying LICENSE file. 0026 % Original author: François Rottenberg, June 29, 2018. 0027 % Contributors: 0028 % Change log: 0029 % François Rottenberg, November 1, 2018. 0030 % Addition of the 'synchro' option for MIMO preamble 0031 0032 M=Para.nSubcarriers/2; 0033 0034 d_preamble=zeros(Para.N_T,2*M,2*Para.PreambleLength); 0035 F_pilot=1/sqrt(Para.N_T)*exp(-1j*2*pi/Para.N_T*(0:Para.N_T-1)'*(0:Para.N_T-1) ); 0036 0037 if exist('preamble_type','var')==0 0038 preamble_type='channel_estimation'; 0039 end 0040 0041 switch preamble_type 0042 case 'synchro' 0043 for m=Para.PreamblePilotSubcarriers 0044 d_preamble(:,m,1)=F_pilot(:,1)*d_TR(m); 0045 end 0046 for m=Para.PreamblePilotSubcarriers 0047 d_preamble(:,m,2+1:2:2+2*Para.N_T)=d_TR(m)*F_pilot; 0048 end 0049 0050 case 'channel_estimation' 0051 for m=Para.PreamblePilotSubcarriers 0052 d_preamble(:,m,1:2:2*Para.N_T)=d_TR(m)*F_pilot; 0053 end 0054 otherwise 0055 error('Preamble type not defined') 0056 end 0057 0058 if Para.N_T==1 0059 d_preamble=squeeze(d_preamble); 0060 end 0061 0062 end 0063