summaryrefslogtreecommitdiff
path: root/macros/periodogram.sci
blob: ca8995e8968b4ce899be01cd8e825d49f7efd086 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function [d,n]=periodogram(a,b,c,d,e)
//Return the periodogram (Power Spectral Density) of X
//Calling Sequence
// [PXX, W] = periodogram (X)
// [PXX, W] = periodogram (X, WIN)
// [PXX, W] = periodogram (X, WIN, NFFT)
// [PXX, W] = periodogram (X, WIN, NFFT, FS)
// [PXX, W] = periodogram (..., "RANGE")
//Parameters 
// X:data vector.  If X is real-valued a one-sided spectrum is estimated. If X is complex-valued, or "RANGE" specifies "twosided", the full spectrum is estimated.
//WIN: window weight data.  If window is empty or unspecified a default rectangular window is used.  Otherwise, the window is applied to the signal ('X .* WIN') before computing th periodogram.  The window data must be a vector of the same length as X.
//NFFT:number of frequency bins.  The default is 256 or the next higher power of 2 greater than the length of X ('max (256,2.^nextpow2 (length (x)))').  If NFFT is greater than the length of the input then X will be zero-padded to the length of NFFT.
//FS:sampling rate.  The default is 1.
//RANGE:range of spectrum.  "onesided" computes spectrum from [0..nfft/2+1]."twosided" computes spectrum from [0..nfft-1].
//Description
//The optional second output W are the normalized angular frequencies.  For a one-sided calculation W is in the range [0, pi]. If NFFT is even and [0, pi) if NFFT is odd.  Similarly, for a two-sided calculation W is in the range [0, 2*pi] or [0, 2*pi)depending on NFFT.
//
//If a sampling frequency is specified, FS, then the output frequencies F will be in the range [0, FS/2] or [0, FS/2) for one-sided calculations. For two-sided calculations the range will be [0, FS).
//
//When called with no outputs the periodogram is immediately plotted in the current figure window.
    funcprot(0);
    lhs= argn(1);
    rhs= argn(2);
    if(rhs<1 | rhs>5)
        error("Wrong number of input arguments");
    end
    if(lhs>2 | lhs< 2)
        error("Wrong number of output arguments");
    end
    select(rhs)
    case 1 then
            [d,n]= callOctave('periodogram',a);
    case 2 then
            [d,n]= callOctave('periodogram',a,b);

    case 3 then
            [d,n]= callOctave('periodogram',a,b,c);

    case 4 then
            [d,n]= callOctave('periodogram',a,b,c,d);
  
    case 5 then
            [d,n]= callOctave('periodogram',a,b,c,d,e);
    end
endfunction