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
|