SNR estimation from single vector

I'm interested in estimating the SNR of a signal with a wandering mean and no defined "signal" and "noise" vector. I have the following data, call it x:
My initial thought was to run it through a high-pass filter with a really low cutoff to get a steady, zero-mean signal. Then I would take the amplitude of the signal over the variance of the entire signal:
SNR = min(x)^2/var(x)
However, I have a feeling this is overly complicated and not a very good estimation. Thoughts?

4 Comments

Image Analyst
Image Analyst on 26 Jan 2016
Edited: Image Analyst on 26 Jan 2016
Are the giant oscillations part of the noise - all noise - or do they have signal in them? If you had to draw the true signal, what would it look like? If we know what you want it to look like, we can perhaps design a filter to produce that, then you can call that your true signal and then subtract it from the original signal to get only the noise.
Also, can you attach the data file so we can play with it ourselves?
Great questions - the giant oscillations are the signal. The true signal would hopefully look like a flat line with one large downward spike, then three upward spikes. I'm playing with my signal collection to try and maximize these spikes, so I'm looking for a way to quantify how well I'm doing. I've attached the data file.
Thanks so much for your help!
The data file did not get attached.
Sounds to me as if you want a low-pass filter.
Not sure why it didn't... I'll try again. You're suggesting an LPF to regain just my signal, then calculating based on that?

Sign in to comment.

 Accepted Answer

Image Analyst
Image Analyst on 26 Jan 2016
Maybe try a Savitzky-Golay filter. Experiment around with different orders and window widths until you achieve the "look" you want. I attach a demo.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!