## 3 Time-Varying Carrier Frequency Offset Estimation
A smaller fitness value indicated that the estimated value of the CFO was closer to the real value. Because the TVCFO was considered, it was necessary to take the overall performance of the CFO values on all the symbol blocks within an OFDM frame into account. Hence, the mean value of the reconstruction differences was employed as the fitness value:  
\[f(\hat{\epsilon})=\text{mean}(J(\hat{\epsilon})), \tag{12}\]  
where \(\hat{\epsilon}\) denotes the vector of the estimated CFO values on each block. _(3)_ _Initialize the population_The initial population, \(\mathbf{P}^{0}\), consists of \(Np\) original individuals, which are randomly generated in the decision space constrained by the upper and lower bounds of each dimension:  
\[ \begin{split}\varepsilon_{\min}&=[\varepsilon_{\min,1 },\ \varepsilon_{\min,2},\ \ldots,\ \varepsilon_{\min,N}]^{T}\\ \varepsilon_{\max}&=[\varepsilon_{\max,1},\ \varepsilon_{ \max,2},\ \ldots,\ \varepsilon_{\max,N}]^{T}.\end{split}  \tag{13}\]  
Thus \(\mathbf{P}^{0}\) can be expressed as follows:  
\[\mathbf{P}^{0}=\left\{\varepsilon_{i}^{0}=\left(\varepsilon_{i,1}^{0}, \varepsilon_{i,2}^{0},\ldots,\varepsilon_{i,N}^{0}\right)\right\} \tag{14}\]  
for \(i=1,\ 2,\ \ldots,\ Np\). In addition, the fitness value of the population can be obtained by substituting the initial population into the fitness function (12). _(4) Perform genetic operations:_  
Populations are sorted based on the fitness values in the typical method before performing genetic operations. The sorting operation is used to facilitate the mutation operator to make full use of promising individuals with high quality because a solution with higher quality is the individual that carries more useful information. In other words, these individuals can accelerate the convergence and guide the population to find the optimal solution faster. After completing the sorting operation, the mutation operation is performed. This operation can be expressed by the following formula:  
\[\mathbf{\xi}_{i}^{g}=\varepsilon_{i}^{g}+f_{0}\cdot\left(\varepsilon_{pbest}^{g}- \varepsilon_{i}^{g}\right)+f_{0}\cdot\left(\varepsilon_{r1}^{g}-\varepsilon_ {r2}^{g}\right) \tag{15}\]  
where \(\mathbf{\xi}_{i}\) is the mutation vector corresponding to the \(i\)-th target vector, \(\varepsilon_{i}\). \(\mathbf{\xi}_{i}\) is a promising individual selected from the top \(p\%\) of the current population. Individual \(\varepsilon_{r1}\) is randomly selected from the current population, while individual \(\varepsilon_{r2}\) comes from the union of the current population and these obsolete individuals, which can increase the diversity and prevent mutation vector \(\mathbf{\xi}_{i}\) from falling into the local optima. These vectors differ from each other. Mutation factor \(f_{0}\), which usually lies in the range of [0, 1], is used to scale the difference vector. Here, \(g\) represents the \(g\)-th generation of genetic operations. Following the mutation, an exponential crossover operation is performed on mutation vector \(\mathbf{\xi}_{i}\) and objective vector \(\varepsilon_{i}\) to further increase the diversity of the current population. Specifically, integer \(r\) is randomly selected from [1, \(N\)]. This integer acts as the starting point of the offspring vector, from which it is exchanged with the components of the mutation vector. Another integer \(L\) limited by [1, \(N\)] is used to determine the dimension proportion of the offspring inherited from the mutation vector. \(L\) can be determined using the following pseudocode:  
\[ \begin{split} L&=0;\\ \text{do}\ \{\\ & L=L+1;\\ \}\text{While}\ \left((\text{rand}\ [0,1)<Cr)\ \&\ (L\leq N)\right).\end{split}  \tag{16}\]  
Crossover rate \(Cr\) is a parameter that controls the value of \(L\). After parameters \(r\) and \(L\) are determined, the offspring vector can be obtained as follows:  
\[\xi_{i,j}^{g}=\left\{ \begin{array}{ll}\xi_{i,j}^{g}&\text{if }j=\langle r,\ldots,r+L-1\rangle_{N},\\ \xi_{i,j}^{g}&\text{otherwise}\end{array}