Tracks and corrects phase noise function [ x, B ] = PhaseTracker( z, ParaModulation, TrackerType ) function [ x, B ] = PhaseTracker( z, ParaModulation, TrackerType, ParaTracker ) The function works for SISO systems. See the help related to the specific tracker functions called by the present parent function. Input arguments: z: demodulated OFDM symbols. Size: matrix [2*Para.M, ~] ParaModulation: structure containing the modulation parameters. TrackerType: mandatory, determines the type of Tracker to use. to compute and use. Several options are possible, depending on the modulation. 'ML': maximum likelihood (only for FBMC-OQAM). 'MAP': maximum a posteriori (only for FBMC-OQAM). 'AML': adaptive maximum likelihood (only for FBMC-OQAM). 'M-BPS': modified blind phase search (only for FBMC-OQAM). ParaTracker: structure containing parameters of the tracker. Depending on the tracker type, the structure may contain optional arguments (set to default values) and/or mandatory arguments: ParaTracker.linewidth: optional (by default set to zero), combined linewidth of transmit and receive lasers, useful for 'MAP' tracker. ParaTracker.B: optional (by default set to 24), number of phase tests for the MBPS algorithm. ParaTracker.PhaseAmbiguityCompensation: optional (by default set to 1), phase ambiguity compensation for the MBPS algorithm. Ouput arguments: x: equalized symbols. Size: matrix [2*Para.M, 2*Para.Ns]. phi: estimated phase. Size: vector [2*Para.Ns, 1]. See also FBMC_OQAM_PhaseTrackerMLMAP, FBMC_OQAM_PhaseTrackerAML, FBMC_OQAM_PhaseTrackerMBPS.
0001 function [ x, phi ] = PhaseTracker( z, ParaModulation, TrackerType, ParaTracker ) 0002 % Tracks and corrects phase noise 0003 % 0004 % function [ x, B ] = PhaseTracker( z, ParaModulation, TrackerType ) 0005 % function [ x, B ] = PhaseTracker( z, ParaModulation, TrackerType, ParaTracker ) 0006 % 0007 % The function works for SISO systems. See the help related to the specific 0008 % tracker functions called by the present parent function. 0009 % 0010 % Input arguments: 0011 % 0012 % z: demodulated OFDM symbols. Size: matrix [2*Para.M, ~] 0013 % 0014 % ParaModulation: structure containing the modulation parameters. 0015 % 0016 % TrackerType: mandatory, determines the type of Tracker to use. to 0017 % compute and use. Several options are possible, depending on the 0018 % modulation. 0019 % 0020 % 'ML': maximum likelihood (only for FBMC-OQAM). 0021 % 0022 % 'MAP': maximum a posteriori (only for FBMC-OQAM). 0023 % 0024 % 'AML': adaptive maximum likelihood (only for FBMC-OQAM). 0025 % 0026 % 'M-BPS': modified blind phase search (only for FBMC-OQAM). 0027 % 0028 % ParaTracker: structure containing parameters of the tracker. 0029 % Depending on the tracker type, the structure may contain optional 0030 % arguments (set to default values) and/or mandatory arguments: 0031 % 0032 % ParaTracker.linewidth: optional (by default set to zero), combined 0033 % linewidth of transmit and receive lasers, useful for 'MAP' tracker. 0034 % 0035 % ParaTracker.B: optional (by default set to 24), number of phase 0036 % tests for the MBPS algorithm. 0037 % 0038 % ParaTracker.PhaseAmbiguityCompensation: optional (by default set to 0039 % 1), phase ambiguity compensation for the MBPS algorithm. 0040 % 0041 % Ouput arguments: 0042 % 0043 % x: equalized symbols. Size: matrix [2*Para.M, 2*Para.Ns]. 0044 % 0045 % phi: estimated phase. Size: vector [2*Para.Ns, 1]. 0046 % 0047 % See also FBMC_OQAM_PhaseTrackerMLMAP, FBMC_OQAM_PhaseTrackerAML, 0048 % FBMC_OQAM_PhaseTrackerMBPS. 0049 0050 % This file is part of WaveComBox: www.wavecombox.com and is distributed under 0051 % the terms of the MIT license. See accompanying LICENSE file. 0052 % Original author: François Rottenberg, June 19, 2018. 0053 % Contributors: T.-H. Nguyen, May 22th, 2018. 0054 % Change log: 0055 0056 ParaTracker.a=[]; 0057 if exist ('TrackerType','var')==0 0058 TrackerType='ML'; 0059 end 0060 0061 switch ParaModulation.Modulation 0062 case 'FBMC-OQAM' 0063 switch TrackerType 0064 case 'ML' 0065 [x, phi]=FBMC_OQAM_PhaseTrackerMLMAP( z, 0, 'ML', ParaModulation ); 0066 case 'MAP' 0067 if isfield(ParaTracker,'linewidth')==0 0068 ParaTracker.linewidth=0; 0069 end 0070 [x, phi]=FBMC_OQAM_PhaseTrackerMLMAP( z, ParaTracker.linewidth, 'MAP', ParaModulation ); 0071 case 'AML' 0072 [x, phi]=FBMC_OQAM_PhaseTrackerAML( z, ParaModulation ); 0073 case 'MBPS' 0074 if isfield(ParaTracker,'B')==0 0075 ParaTracker.B=24; 0076 end 0077 if isfield(ParaTracker,'PhaseAmbiguityCompensation')==0 0078 ParaTracker.PhaseAmbiguityCompensation=1; 0079 end 0080 [x, phi]=FBMC_OQAM_PhaseTrackerMBPS( z, ParaModulation, ParaTracker.B, ParaTracker.PhaseAmbiguityCompensation ); 0081 otherwise 0082 error('Equalizer type not defined for FBMC-OQAM modulation') 0083 end 0084 otherwise 0085 error('Tracker not implemented for this modulation') 0086 end 0087 0088 0089 end 0090