DSPRelated.com
Forums

Wiener deconvolution and noise floor

Started by Todd August 11, 2012
Hello,

I am using an example from one of my favorite statistical signal processing texts (http://www.amazon.com/Statistical-Adaptive-Signal-Processing-Estimation/dp/1580536107/ref=sr_1_1?ie=UTF8&qid=1344697297&sr=8-1&keywords=kogon+adaptive+signal+processing).  I don't know the page number or example off the top of my head, but I can find it if necessary.  The problem derives the optimal FIR deconvolution filter assuming a white input signal and white noise signal.  By making these assumptions, you can get the wiener-hopf equations knowing only two parameters rather than needing the input spectrum and noise spectrum.

My application doesn't use white noise for the input, however most of the signal components I care about are well above the noise floor; I think it is an OK assumption given that I don't have the input signal.  The input signal power is assumed to be 1.0 since it ends up as just a gain factor on the derived filter in the example.  The noise variance parameter is critical.  Basically, I want to correct a handful of high SNR componenents while keeping the noise floor where it is.

I've tested this and it works extremely well.  The trouble is, I can't figure out how to set the noise parameter based on my knowledge of the noise floor.  If I understand correctly, the noise power in the frequency domain is only meaningful per unit bandwidth (noise spectral density).  So, assuming a constant noise power, if I increase the bandwidth, I drop the noise floor.  To illustrate my problem, suppose I have two sample rates, one at 1/1000 sample per second, and one at a gigasample. The change in noise spectral density (I think) is 10log10(1e12) or 120 dB.  So this might be the difference between having a noise floor at -20 dB or -140 dB.  But the wiener filter design doesn't care about sample rate; it only depends on total noise power.  So in the first case, since the noise floor is not down very far, when I run the signal through the inverse filter, it will correct the frequency components I care about, but the noise floor will be pushed up so high, it will destroy all useful information.  In the later case, the noise floor is so far down, everything should be fine.

It seems to me that the noise power parameter should be a function of sample rate - something like noiseVar/fs.  But the sample rate doesn't show up anywhere in the problem formulation, so it also makes sense that it's not in there.  It's interesting to note that the wiener deconvolution interpretation in the frequency domain (http://en.wikipedia.org/wiki/Wiener_deconvolution#Interpretation) has the behaviour I want.  If you replace n(f)/s(f) with a constant, the inverse filter in this case looks as though it would produce the desired behaviour regardless of sample rate.

I can, of course, tweak the noise variance rather than set it to the known/estimated noise power, to get the behaviour I want.  But it's always better to understand what's going on before you start fudging the numbers.