Re: Re: How to get the maximums of a curve
- To: mathgroup at smc.vnet.net
- Subject: [mg66885] Re: [mg66855] Re: How to get the maximums of a curve
- From: Clifford Martin <camartin at snet.net>
- Date: Fri, 2 Jun 2006 04:09:32 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
One of the nicest ways to smooth data (besides orthogonal polynomials) is Lanczos' fourth differences method in his Applied Analysis (Dover), page 316. A nice Mathematica program of this method is given in Mathematica in the Laboratory by Dick, et.al. This function can be nested for good smoothing of noisy data. I find it quite useful. Once you've done this Bill is right, Solve should work. Good luck.
Sorry I didn't reply to the original post. I lost it.
Bill Rowe <readnewsciv at earthlink.net> wrote: On 5/31/06 at 6:31 AM, yanshanguke at 163.com (simon yang) wrote:
>Dear everyone, I meet a trouble when try to get the maximums of an
>oscillating curve which is data get from physics experiment. There
>is a lot of noise in the curve, so cannot get the maximums by solve:
>derivative ==0, Then how should I do?
Most likely, the first thing you need to do is reduce or eliminate the noise component in the data. There are a number of possible ways to reduce/eliminate noise depending on what you know. If you know the underlying model then using FindFit to estimate parameters to the underlying model is a possibility. Once this is done, it should be possible to solve: derivative == 0 for the model with the parameters found by FindFit.
However, you indicated the curve you are expecting is oscillating. So, it may not be feasible to use FindFit, particularly if the signal to noise ratio is poor.
Another approach would be to use FFT based techniques. The assumption here is the noise component will be located primarily in the high frequency area of the signal plus noise. Essentially you do an FFT on the data, filter the result with a low pass filter then do an inverse FFT. At this point, you can construct an InterpolatingFunction and look for local maximums. Using FFTs effectively in this manner assumes more than a handful of data points and some knowledge of the maximum frequency expected to occur in the signal.
Another approach would be to use wavelet based techniques to filter the noise. These approaches need as much data as FFT based techniques to be effective. But they don't require assumptions about the maximum frequency present in the signal.
For fewer data points you might try one of the functions in the package Statistics`DataSmoothing`. MovingMedian is particularly effective if the source of the noise is random impulses.
There are other non-parametric regression techniques that can be used with just a few data points. But I am not aware of an existing Mathematica package that implements these other than one I've created for myself.
To reply via email subtract one hundred and four
Prev by Date:
Re: Defining N for a new entity
Next by Date:
Re: Using Notebooks to write packages?
Previous by thread:
Re: How to get the maximums of a curve
Next by thread:
Problem with the Sum Function -- Using a Benford Distribution