# Active noise cancellation using kalman filter

I am doing signal processing on audio data sampled at 8Ksps in matlab but it is corrupted with random noise. Therefore, I decided to use LMS and RLS ANC algorithms to remove overlapped frequency noises and I have found RLS performance was better than LMS and NLMS. But now I want to use kalman filter so that I can achieve better result. I know kalman filter and have used in many basic applications but don't know how to use it for ANC. I would be grateful if anyone give me some idea 💡.

## 1 Answer

I guess you use the LMS and RLS filters because they are adaptive, and you can do the same thing with the Kalman filter, if you augment the state-vector with the parameters of the model. You then get a non-linear system, and you can solve that using any number of non-linear Kalman-filter implementations, the most common being the extended Kalman filter (EKF), then second most common the unscented Kalman filter (UKF), and then there are a fair few more exotic variants, such as the second order Kalman filter. The convergence properties of any of these filters have not been proved, but they seem to work really well in practice. The UKF is typically regarded as better than the older EKF, since it does not require the inversion of the Jacobian, and it behaves as a higher order approximation -- 3rd order for Gaussian noise I seem to remember (compared to first order for the EKF).

The EKF is perhaps a bit more straight forward to get started with. You use the EKF for parameter adaptation by modeling unknown parameters as Wiener processes. Consider the linear system \begin{align*} \dot{x} &= A(\theta) x + B(\theta) u + w \\ y &= C(\theta) x + v \end{align*} with unknown parameters $\theta \in \mathcal{R}^{p}$. By augmenting the state vector to include the unknown parameters, $\chi^{\text{T}} = [x^{\text{T}}, \theta^{\text{T}}]$, we obtain the non-linear system $\dot{\chi} = f(\chi,u) + w$, $y = h(\chi) + v$, where \begin{align*} f(\chi,u) &= \left[ \begin{array}{c} A(\theta) x + B(\theta) u \\ 0 \end{array} \right] \\ h(\chi) &= C(\theta) x . \end{align*} The Jacobians $F$ and $H$ for this system are found as \begin{align*} F &= \left[ \begin{array}{cc} A(\theta) & \frac{\partial}{\partial \theta}[A(\theta) x + B(\theta) u] \\ 0 & 0 \end{array} \right]_{\hat{x}, \hat{\theta}} , \\ H &= \left[ \begin{array}{cc} C(\theta) & \frac{\partial}{\partial \theta}[C(\theta) x] \end{array} \right]_{\hat{x}, \hat{\theta}} . \end{align*}

The general implementation of the EKF and UKF, as well as for parameter adaption, can be found in several publication. I personally like "Optimal State Estimation: Kalman, H$_{\infty}$, and Nonlinear Approaches" by Dan Simon, 2006 (ISBN: 978-0-471-70858-2).

• Thank you so much. I did not get every thing at first but let me try. Would you like to link matlab code example? – Rheatey Bash May 21 '16 at 16:23
• I don't have any easily reusable MATLAB code at hand, but you can look at this paper comparing RLS and EKF, it should be more complete than this short answer: researchgate.net/publication/… – Arnfinn May 22 '16 at 1:21
• If I have the time, I might be able to put together a simple example in MATLAB... – Arnfinn May 22 '16 at 1:21