FFTDERIV(1)

NAME
fftderiv - derivative of a vector using FFT

SYNOPSIS
[Dy, DY] = fftderiv(y, [n , sigma, in, out])
[Dy, DY] = fftderiv(y, <named_params>)

INPUT PARAMETERS

y   vector containing a periodic window of a function to be differentiated.

n   the order of the derivative. It is 1 for 1st derivative, 2 for 2nd derivative, and so on.

sigma
    the standard deviation of the gaussian kernel used to smooth the input. If sigma is zero, fftderiv will not smooth the input. (Defaults to 5)

in  indicates if the input, x, is a function of time (no FFT has been applied) or frequency (FFT has already been applied). Can be 'time' or 'frequency'. (Defaults to 'time')

out indicates if the output, xsm, is a function of time (inverse FFT will be applied) or frequency (inverse FFT will not be applied). Can be 'time' or 'frequency'. (Defaults to 'time')

<named_args>
    This is a sequence of statements key1=value1, key2=value2,... where key1, key2,... can be any of the optional arguments above (n, sigma, in, out), in any order.

OUTPUT PARAMETERS

Dy  the derivative vector in "time" or "frequency" domain.

FDy the derivative vector in "frequency" domain.

DESCRIPTION
Function fftderiv performs the n-th derivative of a periodic function, stored in a vector, using FFT. The optional arguments in and out enables the user to reuse previously done FFTs. Here are some possible uses of gsm:

Dy = fftderiv(y)
    n defaults to 1, sigma defaults to 5, in and out both defaults to 'time'.

Dy = fftderiv(y,2,3)
    n equals 2, sigma equals 3, in and out both defaults to 'time'.

Dy = fftderiv(y,sigma=3, in='frequency',out='frequency')
    n dafaults to 1, y in frequency domain (fft has already been done). Dy in frequency domain (inverse fft is NOT done by gsm)

In all above examples, FDy is in the frequency domain. It is the second output parameter, and thus it was discarded in the above examples.

EXAMPLE
step = 2*%pi/100;
y = sin(step:step:2*%pi);  // from 2pi/100 to 2pi
xbasc()
plot(y);
// 1st derivative, no smoothing
d = fftderiv(y,1,0);
xbasc()
plot(d)  // a cosine period

REMARKS
For a derivative without noises, the vector y must be an exact period of a continuous periodic function, i.e., its repetition has to be continuous. A direct way for checking this is to plot z = [y y] and look close in the middle. If there is not a minimal discontinuity, then fftderiv will certainly work.

Another important point is that y should be smoothed before using fftderiv, so the derivative is less sensitive.

REFERENCES
"Shape Analysis and Classification", L. da F. Costa and R. M Cesar Jr., CRC Press, pp. 335-347.

AUTHORS
Ricardo Fabbri <rfabbri@if.sc.usp.br>

AVAILABILITY
The latest version of the Scilab Image Processing toolbox can be found at

    http://cyvision.if.sc.usp.br/~rfabbri/sip/

SEE ALSO
follow, gsm, fftshift, curvature