Home > WaveComBox > Toolbox > FBMC_OQAM > PhaseTracking > FBMC_OQAM_PhaseTrackerMBPS.m

FBMC_OQAM_PhaseTrackerMBPS

PURPOSE ^

Tracks and corrects phase noise following algorithm described in [1].

SYNOPSIS ^

function [x, phi]=FBMC_OQAM_PhaseTrackerMBPS( z, Para, B, PhaseAmbiguityCompensation )

DESCRIPTION ^

 Tracks and corrects phase noise following algorithm described in [1].

 function [x, phi]=FBMC_OQAM_PhaseTrackerMBPS( z, Para, B, PhaseAmbiguityCompensation )

 The function works for SISO systems.

 Input arguments:

   z: demodulated FBMC-OQAM symbols. Size: matrix [2*Para.M,2*Para.Ns]

   Para: structure containing the modulation parameters.

 Ouput arguments:

   x: equalized symbols. Size: matrix [2*Para.M, 2*Para.Ns].   

   phi: estimated phase. Size: vector [2*Para.Ns, 1].
   
 References: [1] T.-H. Nguyen, J. Louveaux, S.-P. Gorza and F. Horlin, 
   "Simple Feedforward Carrier Phase Estimation for Optical FBMC/OQAM 
   Systems," IEEE Photon. Technol. Lett., vol. 28, no. 24, pp. 2823-2826, 
   Dec. 2016.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [x, phi]=FBMC_OQAM_PhaseTrackerMBPS( z, Para, B, PhaseAmbiguityCompensation )
0002 % Tracks and corrects phase noise following algorithm described in [1].
0003 %
0004 % function [x, phi]=FBMC_OQAM_PhaseTrackerMBPS( z, Para, B, PhaseAmbiguityCompensation )
0005 %
0006 % The function works for SISO systems.
0007 %
0008 % Input arguments:
0009 %
0010 %   z: demodulated FBMC-OQAM symbols. Size: matrix [2*Para.M,2*Para.Ns]
0011 %
0012 %   Para: structure containing the modulation parameters.
0013 %
0014 % Ouput arguments:
0015 %
0016 %   x: equalized symbols. Size: matrix [2*Para.M, 2*Para.Ns].
0017 %
0018 %   phi: estimated phase. Size: vector [2*Para.Ns, 1].
0019 %
0020 % References: [1] T.-H. Nguyen, J. Louveaux, S.-P. Gorza and F. Horlin,
0021 %   "Simple Feedforward Carrier Phase Estimation for Optical FBMC/OQAM
0022 %   Systems," IEEE Photon. Technol. Lett., vol. 28, no. 24, pp. 2823-2826,
0023 %   Dec. 2016.
0024 %
0025 
0026 % This file is part of WaveComBox: www.wavecombox.com and is distributed under the terms of the MIT license. See accompanying LICENSE file.
0027 % Original author: T.-H. Nguyen, May 22, 2018.
0028 % Contributors: François Rottenberg, June 19, 2018
0029 % Change log:
0030 
0031 M=Para.nSubcarriers/2;
0032 Ns=Para.Ns;
0033 M_PAM=Para.M_PAM;
0034 mod_norm=sqrt(Para.Es/2/(1./Para.M_PAM.*sum(abs(pammod([0:Para.M_PAM-1],Para.M_PAM)).^2)));
0035 
0036 
0037 phi=zeros(2*Ns,1);
0038 if Para.N_R==1 && Para.N_T==1    
0039     x=zeros(2*M,2*Ns);
0040     for l=1:2*Ns
0041         z_bps(1,:) = z(:,l);
0042         
0043         phi_bps = linspace(-pi/2, pi/2, B);
0044         rx_temp = zeros(B,length(z_bps));
0045         rx_dec  = zeros(B,length(z_bps));
0046         dis     = zeros(1,B);
0047         for k = 1 : B
0048             rx_temp(k,:) = z_bps.*exp(1i*phi_bps(k));
0049             rx_dec(k, :) = pammod(pamdemod(rx_temp(k, :)/mod_norm,M_PAM),M_PAM).*mod_norm;
0050             dis(k)       = sum(abs(real(rx_temp(k,:)) - rx_dec(k,:)));
0051         end
0052         [~, ind]   = min(dis);
0053         phi(l)     = -phi_bps(ind);
0054         x(:,l)=exp(-1j*phi(l)).*z(:,l);
0055     end
0056     if PhaseAmbiguityCompensation
0057         x=zeros(2*M,2*Ns);
0058         epsilon1 = 0.05;
0059         epsilon2 = 1.3;
0060         phi_cor  = PhaAmbiguityBPS(phi, epsilon1, epsilon2);
0061         for l = 1:2*Ns
0062             x(:,l)=exp(-1j*phi_cor(l)).*z(:,l);
0063         end    
0064     end
0065 else
0066     error('Function not implemented for N_T>1, N_R>1')
0067 end
0068 
0069 end
0070

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