Consider a stationary discrete-time random process $x[k]$ which undergoes low pass filtering by a filter with impulse response $h[k]$ and is subject to additive, temporally uncorrelated noise $n[k]$ of time-varying power $\sigma^2_n[k]$:

$$ y[k] = \sum^\infty_{m=0} h[m] x[k-m] + n[k].\qquad $$

The time-variation in noise power is described by: $$ E[n^2[k]]=\sigma^2_n[k]= Ae^{k/B} \qquad B>>1 $$ such that the noise power increases (slowly) with time.

Specification of length $L$ FIR filter coefficients of a Wiener deconvolver seeking to estimate $x[k]$ from $y[k]$ is straight-forward for stationary noise.

Things are more complicated for non-stationary noise. Strictly speaking non-stationary noise requires a different filter for every sample instant $k$ which is prohibitively complex. In my case, the noise changes slowly enough for it to be modeled as locally stationary over significantly more than $L$ samples. I could always just update the filter coefficients every $NL$ samples to reflect a new noise power assumption, but I'm concerned about abrupt transient responses due to the sudden jump in deconvolver coefficients. Something more frequent but more gradual sounds better.

Is anyone aware of a smart recursive form of the Wiener filter for cases like this (especially where the noise power itself follows a recursion: $\sigma^2_n[k]=e^{1/B}\sigma^2_n[k-1]$)?


The Wiener Filter can written as a Least Squares problem (See How Is the Formula for the Wiener Deconvolution Derived?).
In you case, Since noise is basically with different STD per sample you may use the simple extension of Weighted Least Squares on top of the terms for the Wiener Filter.

Once you do that you'll have the optimal solution.


First of all, you are absolutely right about the easy case. There are a couple of ways to do that.

Your case of instationary noise is actually pretty common. Consider a noise reduction for a hands-free communication system in a car: The noise is dependent on the driving speed and a lot of other factors (ignoring the necessary echo canceller here).

I would calculate all the stuff in the frequency domain and estimate the noise spectrum using minima-tracking. There are a lot of ways to estimate the spectrum, which are highly dependent on your use case. Minima-tracking is especially useful in speech applications, because you can exploit the speech pauses. In the pauses you get a good estimate for the noise spectrum.

Personally, I don't know about a way to exploit the noise recursion. At least, no optimal way.

Maybe you find some help in this book (about noise reduction in general). Also it's a great read:
S. Haykin: Adaptive Filter Theory – Chapter 2 (Wiener Filters)


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.