## 2 Methodology
### Introduction to the DE Algorithm  
This subsection briefly outlines the principles for optimizing a problem using heuristic algorithms, along with the mechanism of the DE algorithm. In general, an unconstrained single-objective optimization problem with \(n\) decision variables can be described as follows:  
Figure 1: A flowchart that describes the process of the CFO estimation presented in Section 2.1. \[\left\{ \begin{array}{l}\textbf{minimize: }y=f(\textbf{x})\in\textbf{Y}\\ \textbf{x}=\left[x_{1},x_{2},\ldots,x_{n}\right]^{T}\in\textbf{X}\\ l_{j}\leq x_{j}\leq u_{j},\end{array} \right. \tag{10}\]  
where \(x\) is the vector of variables to be optimized, \(y\) is the function value corresponding to \(x\), \(Y\) is the objective space, \(X\) is a search space consisting of the boundaries of the variables in all dimensions, and \(u_{j}\) and \(l_{j}\) are the upper and lower bounds of the \(j\)-th optimization variable, respectively. The DE algorithm is a population-based stochastic search algorithm. It encodes the population using \(Np\)\(d\)--dimensional vectors, where a single \(d\)--dimensional vector is called an individual whose elements are the variables to be optimized. The individual mentioned above is actually the solution to the optimization problem. The population initialization operation is followed by three genetic operations: mutation, crossover, and selection. The genetic operation is repeatedly executed until the stop condition is met. When the iterative process stops, the optimal solution is output. The mutation operation is a representative genetic operator of DE, and the algorithm is named after it. The mutation employs a scaled difference vector of terminal solutions to perturb a base vector [40]. The terminal and base vectors are randomly selected from the current population during the DE. There is a multitude of mutation strategies that differ from each other mainly by the number of differential vectors and construction of the base vector. The goal when using the crossover operation in DE is to increase the population diversity [40]. Specifically, the crossover is used to generate trial vectors whose elements come from either the objective vector or mutation vector. There are two commonly used crossover operations in DE, namely, binomial crossover and exponential crossover. The type of crossover determines the number and contiguousness of variables, which are inherited from their parents [41]. Binomial crossover is performed by comparing a random number and preset crossover factor \(Cr\) for each variable to select the source of inheritance. Therefore, it is effective in solving distributed problems where there is no relationship among variables. Exponential crossover is used to randomly designate a starting point. Then, a random number and \(Cr\) are compared one by one from the starting point until the relationship is not satisfied. Thus, the ending point is determined. The variables from the starting point to the ending point are inherited from the mutation vector, and the rest are from the parent vector. Therefore, the dependencies between variables and their neighbors persist, except for the start and end points. Thus, it is more suitable for solving adjacent problems where there is a dependency relationship between adjacent variables. In this study, an exponential crossover was used to track the CFO variation between adjacent symbols. The selection operation was employed to select the promising vectors from the trial population and objective population, which became members of the objective population in the next generation. To be concrete, the trial vector was compared with the corresponding objective vector of the whole population in sequence. A vector with a smaller fitness value appeared in the next generation if the optimization problem was the minimization problem. Therefore, these vectors formed the population, which became the objective population in the next generation.