## 3 Traditional KRLS Algorithm
### Traditional KRLS Algorithm
In the traditional KRLS algorithm, in each time slot, when a new sample comes, the size dictionary increases, and this leads to an increase in computation and memory requirements. To solve this problem, we used a sliding-window approach to keep the size of the kernel dictionary within a fixed budget. Our criterion for discarding old samples was based on the correlation between existing samples in the kernel dictionary and the new sample. Moreover, we introduced a forgetting factor to exponentially weigh older data by scaling them, so as to track the dynamic characteristics of the channel. In our proposed SSW-KRLS algorithm, we solved the following least-squares cost function:

\[\min_{w}\sum_{j=1}^{i}\beta^{i-j}\Big{(}y_{j}-w^{T}\varphi_{j}\Big{)}^{2}+ \lambda B(i)w^{T}w, \tag{9}\]

where \(\beta\) is the forgetting factor, and \(i\) is the iteration number, \(y_{i}=(y_{1},\dots,y_{i})^{T}\) is the output vector, \(w\) is the weight vector, \(B(i)=diag(\beta^{L-1},\beta^{L-2},\dots,1)\) is the forgetting matrix, \(\varphi_{j}=\varphi(u_{j})\) is the transformation of \(u_{j}\), and \(\lambda\) is the regularization parameter. The optimal \(w^{*}\) is solved:

\[w^{*}=\Big{(}\lambda B(i)+\Phi_{i}B(i)\Phi_{i}^{T}\Big{)}^{-1}\Phi_{i}B(i)y_{ i}. \tag{10}\]

We reformulate the equation:

\[w^{*}=\Phi_{i}[\lambda B(i)+B(i)K_{i}]^{-1}\bar{y}_{i}, \tag{11}\]

where \(\bar{y}_{i}=B(i)y_{i}\) is the exponentially weighted input signal. The solutions for \(Q(i)=\left[\lambda B(i)+B(i)K_{i}\right]^{-1}\) are different under two cases in the \(i\)-th iteration: one case is that the size of the dictionary increased, and the other is that the size of the dictionary remained unchanged. Cases I and II are discussed in Sections 4.2 and 4.3, respectively. In Section 4.1, we introduce how to update our dictionary when a new sample comes. Our methods are different depending on whether the size of the dictionary reaches the fixed sample budget, which is denoted by \(M\). In particular, when the dictionary was not full, we discarded an old sample on the basis of the correlation analysis between the new and existing samples in the dictionary in order to slow down the increase in dictionary size. In the case when the size of the dictionary was full, we set a candidate discard set which contains the samples highly correlated with the new sample, and determine which sample to discard on the basis of their corresponding output. The whole process of our proposed algorithm is shown in Figure 4.

### How to Optimally Discard an Old Sample

The cosine value is usually adopted for judging the correlation of two vectors. In the KRLS algorithm, on the other hand, the cosine value is calculated in the kernel Hilbert

Figure 4: An illustration of the channel prediction algorithm steps. spaces. Suppose \(u_{i}\) is a new sample, and \(u_{j}\) is an existing sample in the dictionary. Let \(k(u_{j})\) denote the kernel vector of \(u_{j}\in D\). \(k(u_{j})=\{k_{\mu}\}_{n\
eq i,j}\), where \(k_{jn}=\kappa\big{(}u_{j},u_{n}\big{)}\). To measure the correlation between the existing and new samples, we calculated the cosine value of \(k(u_{i})\) and \(k\big{(}u_{j}\big{)}\) for \(\forall u_{j}\in D\), as \(\cos\langle k(u_{i}),k(u_{j})\rangle=\frac{k(u_{i})k(u_{j})^{T}}{\|k(u_{i})\| \{k(u_{j})\}\|}\). When the size of the dictionary did not reach the budget, we found a sample with highest correlation with the new sample. Existing sample \(u_{j}\) that had the highest cosine value was the most probable to be discarded, where \(j=\arg\max\cos\langle k(u_{i}),k(u_{j})\rangle\). We set a threshold \(\tau\) and discarded sample \(u_{j}\) if \(\cos\langle k(u_{i}),k(u_{j})\rangle\geq\tau\). The updated dictionary is:

\[D(i)\!=\!\! \begin{cases}\left[D(i-1)\backslash u_{j},\ u_{i}\right],if\max_{ j}\cos\langle k(u_{i}),k(u_{j})\rangle\geq\tau\\ \left[D(i-1)\,u_{i}\right],\qquad if\max_{j}\cos\langle k(u_{i}),k(u_{j}) \rangle<\tau\end{cases}