File Exchange

## Four-Parameter Sinefit

version 2.0.0.0 (6.58 KB) by Marko Neitola

### Marko Neitola (view profile)

Least squares sinusoid fit.

Updated 04 Jan 2019

IEEE Standard for Digitizing Waveform Recorders (IEEE Std 1057): Algorithm for least squares fit to sinewave data using matrix operations:
- three-parameter (known frequency, non-iterative) and
- four-parameter (general use, find frequency iteratively).

- Complex sinusoid fit enabled.
- Alternative 4-parameter fit by using the function fminbnd.

### Cite As

Marko Neitola (2020). Four-Parameter Sinefit (https://www.mathworks.com/matlabcentral/fileexchange/23214-four-parameter-sinefit), MATLAB Central File Exchange. Retrieved .

Andrew Sun

### Andrew Sun (view profile)

The original code does a cosine fit. If the time vector is t output parameters are [offset, amp, frq, phi], then the estimated results should be offset+amp.*cos(2*pi*frq.*t+phi).

Chih-Hung Lee

Eric

Marko Neitola

### Marko Neitola (view profile)

For clarification:

Using the three-parameter fit disables the iterative frequency search. To enable this, use searchflag = 0.

For instance, if you want function messages (verbose), graphics (plotflag) and no iterative search, use

verbose = 1;
plotflag = 1;
searchflag = 0;

[params,yest]=sinefit(yin,t,f,verbose,plotflag,searchflag);

Jeroen

Chih-Wei

Daniel Wei

### Daniel Wei (view profile)

This is actually a cosine fit, I think.

K E

### K E (view profile)

Here is an example with a regular sinusoid, which may be helpful:
t = 0:0.1:1000 ; % Time must be in seconds, not Matlab time
T = 10 ; % Period (s)
f = 1/T ; % Signal frequency (not sampling frequency!)
y = 2*sin(2*pi*t./T) ; % Sinusoid
[params, yest, yres, rmserr] = sinefit(y, t, f, 1, 1, 1) ;

Edwin

### Edwin (view profile)

The program worked fine for me it was exactly what I was looking for. I use it for the estimation of the SINAD and subsequent ENOB value. The method tends to shift more signal to the residual when the signal that is used gets longer.