sineFit is a function to detect the parameters of a noisy sine curve, even less than one period long.
It requires only x and y values and no additional parameters as input.
No toolbox required
It is tested with R2016a and R2020a.
The mean calculation time is on my PC 13 ms with a maximum of 2400 ms.
Syntax:
[SineParams]=sineFit(x,y,optional)
optional: plot graphics if ommited. Do not plot if 0
Input:
x and y values, y = offs + amp * sin(2pi * f * x + phi) + noise
x and y may be row or column vectors
x may be not equidistant
Output:
SineParams(1):offset (offs)
SineParams(2): amplitude (amp)
SineParams(3): frequency (f)
SineParams(4): phaseshift (phi)
SineParams(5): MSE , if negative then SineParams are from FFT
Method:
This is a brief and not exact description of the program flow.
- Resample x, y if samples are not equidistant
- Estimate the offset by the mean of all y values.
- Build the FFT with heavy zero padding.
- Take the frequency, amplitude and phase of the largest FFT peak.If the frequency is at the Nyquist limit or the period is less than one, add extra frequencies for evaluation. Add also frequencies that have a peak value larger than 0.8 of the max. peak.
- Take those values as initial values for the regressions.
- Exclude results above Nyquist frequency.
- Take the resulting MSE as rating.
- Depending on the number of samples and the MSE, set a limit for accepted amplitude in relation to the FFT amplitude.
- If the amplitude from regression is higher than the accepted amplitude, take the FFT parameters.
A demonstration GUI is included.
Suplement:
A second version, sinFit2, that has the confidence intervals as output, is included. This version requires the 'curve fitting toolbox'. The results are in nearly all cases the same as with the regular sinFit. But the process time is 10 times higher.
For more information read the enclosed pdf.
인용 양식
Peter Seibold (2024). Sine fitting (https://www.mathworks.com/matlabcentral/fileexchange/66793-sine-fitting), MATLAB Central File Exchange. 검색 날짜: .
MATLAB 릴리스 호환 정보
개발 환경:
R2016a
R2020a 이상 릴리스와 호환
플랫폼 호환성
Windows macOS Linux카테고리
- Control Systems > Control System Toolbox > Linear Analysis > Time and Frequency Domain Analysis > Frequency-Domain Analysis >
Help Center 및 MATLAB Answers에서 Frequency-Domain Analysis에 대해 자세히 알아보기
태그
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!SinFit2WithConfidenceInterval
버전 | 게시됨 | 릴리스 정보 | |
---|---|---|---|
3.2.1 | Fixed a bug in the demonstration GUI |
||
3.2.0 | A version with output of confidence intervals, sinFit2 is included. Requires a toolbox. |
||
3.1.0 | Works also with non equidistant samples |
||
3.0.2 | Some changes in sineFitDemo in respect to 'run xy.mat' |
||
3.0.1 | Minor changes |
||
3.0.0 | No toolbox required anymore |
||
2.1 | Simplified code, faster processing, improved to work down to 0.1 periods, some more correct detections. |
||
2.0.0.1 | Image changed |
||
2.0.0 | Totally new approach with Fourier transformation results as initial parameters for fitting function. |
||
1.0.0.1 | Description corrected |
||
1.0.0.0 | spelling |