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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
// ...................................................Using"callOctave" method...................................................................................
//function w = tukeywin (m, r)
//This function returns the filter coefficients of a Tukey window.
//Calling Sequence
//w = tukeywin (m)
//w = tukeywin (m, r)
//Parameters
//m: positive integer
//r: positive real number, between 0 and 1
//Description
//This is an Octave function.
//This function returns the filter coefficients of a Tukey window of length m supplied as input, to the output vector w.
//The second parameter r defines the ratio between the constant and cosine section and its value has to be between 0 and 1, with default value 0.5.
//Examples
//tukeywin(5, 2)
//ans =
// 0.
// 0.5
// 1.
// 0.5
// 0.
//funcprot(0);
//rhs = argn(2)
//if(rhs<1 | rhs>2)
//error("Wrong number of input arguments.")
//end
// select(rhs)
// case 1 then
// w = callOctave("tukeywin",m)
// case 2 then
// w = callOctave("tukeywin",m,r)
// end
//endfunction
//...................................................................................................................................................................................
// .....................................................Using pure "Scilab".............................................................................................
//...................................................................................................................................................................................
function w = tukeywin (m, varargin)
funcprot(0);
[nargout,nargin]=argn();
if (nargin < 1 | nargin > 2)
error("Wrong Number of input arguments");
elseif (~ (isscalar (m) & (m == fix (m)) & (m > 0)))
error ("tukeywin: M must be a positive integer");
elseif (nargin == 2)
// check that 0 < r < 1
r=varargin(1);
if r > 1
r = 1;
elseif r < 0
r = 0;
end
else
r=0.5;
end
//generate window
select(r)
case 0,
//full box
w = ones (m, 1);
case 1,
// Hanning window
w = hanning (m);
else
// cosine-tapered window
t = linspace(0,1,m);
t = t(1:$/2)';
w = (1 + cos(%pi*(2*t/r-1)))/2;
w(floor(r*(m-1)/2)+2:$) = 1;
w = [w; ones(modulo(m,2)); w($:-1:1,:)];
end
endfunction
|