Let's say a transducer's desired signal is p(t), and the transducer's frequency of interest is 100Hz. And let's assume we dont know the total signal x(t) which is the desired signal plus the noise and interference.

Sample the signal with a proper anti aliasing filter and call it x(t). So we only have x(t) as sampled data at first. Here is what I think:

Now to set the transducer voltage p(t) to a DC value, fix the transducer physically as for an offset measurement.

Now sample the the signal and see the FFT of x(t). If there is 50Hz in the spectrum call it m(t). And for the random/white noise call it n(t).

So we can define the total signal as:

x(t) = p(t) + m(t) + n(t)

*So now I take the average of the x(t) and call it p(t), because m(t) and n(t) averages are zero(?).

Now from the FFT find the power of m(t) call it Pm. Similarly power for x(t), p(t) and n(t) are Px, Pp and Pn.

So for SNR can we write?:

SNR = 10*log10[Pp/(Pm+Pn)]

1-) Do we need to do any windowing here to calculate Pm?

2-) How can Pm be calculated form the FFT of x(t)?


1 Answer 1


First decide on the definition you want for your SNR. One would rms signal to rms noise power, another would be peak signal to rms noise power.

When you set your signal p(t), you'd set it for at least the +ve and the -ve peak values that the transducer is usable over, or that you're going to use it over, to get the right scaling for p(t).

Use an FFT 'appropriately' to make power measurements. That means a suitable window if your sampling is asynchronous to your signals, in this case m(t) optional if it's synchronous.

Calibrate your FFT. Understand whether you want power or energy, and absolutely or per filter bandwidth or per Hz. It is possible to work out the scaling from the known parameters of the FFT, but frankly I cheat. I run a known calibration signal through it, and use the measurement of that as a scaling for what I subsequently measure.

When you measure m(t)+n(t), you will want to assign the measurements around f(m) to m(t), effectively removing them from n(t). So take as few as possible, just f(m) and the few either side that are part of the window spread. Note that m(t) has a line spectrum, that is, a total amount of energy independent of resolution bandwidth.

n(t) is a wide spectrum, so the energy per bin is a function of filter bandwidth, and you will need to sum the energy between limits to arrive at a total energy. Do this for two different resolutions to make sure you get the same answer. The limits you choose will affect the SNR result you get. The high frequency limit is well behaved, not a conceptual problem, but think carefully about what the low frequency limit means, it can tie your brain in knots. Good luck.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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