# Low-Complexity Recursive Least-Squares Adaptive Algorithm Based on Tensorial Forms
## 3 Tensor-Based RLS Algorithms
### Tensor-Based Recursive Least-Squares Dichotomous Coordinate Descent Algorithm (RLS-DCD-T)
The solution for this apparent issue is to use (33) and (34), then \(\mathbf{p}_{0,i}\), in  
\[\mathbf{r}_{i}(n)=\mathbf{p}_{i}(n)-\mathbf{R}_{i}(n)\widehat{\mathbf{h}}_{i} (n), \tag{40}\]  
which leads to the conclusion that  
\[\Delta\mathbf{R}_{i}(n) =\mathbf{R}_{i}(n)-\mathbf{R}_{i}(n-1), \tag{32}\]0  
The form in (41) fits well with the solutions that must be determined for (38) because most of the DCD versions presented in corresponding literature [19; 20] can compute with a reduced arithmetic workload (and using the same entities) both the target estimates \(\Delta\widehat{\mathbf{h}}_{i}(n)\), respectively the residual vectors \(\mathbf{r}_{i}(n)\). Finally, in order to replace the classical RLS methods employed in the tensorial structure with the previously described approach, a convenient way of computing \(\mathbf{p}_{0,i}(n)\) is also necessary. When the cost functions in (20) are considered, the corresponding exponentially weighted version of the RLS algorithm uses (23), respectively (25), to update the  
At step 6, the DCD iterations are used for each channel independently to determine the increment vectors \(\Delta\hat{\mathbf{h}}_{i}(n)\) and to update the values comprising the corresponding residual vectors \(\mathbf{r}_{i}(n)\). The method exploits the positive-definite nature of \(\mathbf{R}_{i}(n)\) and performs a maximum number of allowed \(N_{u,j}\) numerical updates on \(\Delta\hat{\mathbf{h}}_{i}(n)\), which is initialized at every time index with the zero valued column vector \(\mathbf{0}_{L_{i}\times 1}\). The DCD variant we propose to use (mostly known as the DCD with a _leading element_) is presented in Algorithm 3. For \(N_{u,i}\) times (or less--see the conditions for the _while_ loop in Algorithm 3), it applies a _greedy_ approach by selecting the maximum absolute value of \(\mathbf{p}_{0,i}(n)\), and it decides on performing (or not) an update on the corresponding position (or coordinate) in \(\Delta\mathbf{h}_{i}(n)\). A comparison is made between the selected value in \(\mathbf{p}_{0,i}(n)\) and the value situated on the same position from the main diagonal of \(\mathbf{R}_{i}(n)\)[19]. The coefficient update and its corresponding decision are also influenced by the so-called step-size (denoted by \(\alpha\)), which is changed by halving it and is initialized considering the values of \(\Delta\mathbf{h}_{i}(n)\)--they are expected to be situated in the interval \([-H;H]\). By choosing for H a power of 2, all the multiplications performed with the step size \(\alpha\) can be replaced by bit-shifts. A short analysis of step 5 in Algorithm 3 reveals that the updates made for the values of \(\Delta\mathbf{h}_{i}(n)\) actually represent bits set to 1 in the corresponding binary representations. A natural choice of \(H=1\) determines that the values of the step size are always negative powers of 2 and implicitly influence which bit is to be updated on the chosen position of \(\Delta\mathbf{h}_{i}(n)\) (in case of a _successful_ iteration). The values of \(m_{i}\) are upper limited by the number of bits chosen to represent the magnitudes in the solution vectors, denoted by \(M_{b}\) (the same value applies for all coefficients from all filters). Consequently, the DCD stops when the maximum number of allowed updates \(N_{u,j}\) is reached or any more changes to the solution values would be made for \(m_{i}>M_{b}\). In other words, the latter situation is equivalent to saying that the step-size is too small with respect to the number of bits chosen to represent the values comprising \(\Delta\mathbf{h}_{i}(n)\), and implicitly \(\hat{\mathbf{h}}_{i}(n)\). Finally, it can be noticed in Algorithm 3 that a successful iteration does not only perform a change on the solution vector--it additionally updates the associated residual vector \(\mathbf{r}_{i}(n)\), which is initialized with zeros at time index \(n\), and it will be used at the next filter iteration.