summaryrefslogtreecommitdiff
path: root/macros/shanwavf.sci
blob: e088f60ad9bf812147d860477dc866e55940e687 (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
/*Description
    Compute the Complex Shannon wavelet.
    The complex Shannon wavelet is defined by a bandwidth parameter fb, a wavelet center frequency fc, and the expression
    psi(x) = f * b^{1/2}sinc(fb . x) e^{2 pi i f c x}
    on an n-point regular grid in the interval of lb to ub.
Calling Sequence
    [psi, x]= shanwavf(lb, ub, n, fb, fc)
Input  Parameters
    lb, ub (Real valued scalers) : Interval endpoints lb ≤ ub, specified as a pair of real-valued scalars.
    n (Real valued integer strictly positive)` : Number of regularly spaced points in the interval [lb,ub], specified as a positive integer.
    fb	: Time-decay parameter of the wavelet (bandwidth in the frequency domain). Must be a positive scalar.
    fc	: Center frequency of the complex Shannon wavelet, specified as a positive scalar.
Output Parameters
     psi : Complex Shannon wavelet evaluated on the n point regular grid x in the interval [lb,ub], returned as a 1-by-n vector.
     x   : Grid where the complex Shannon wavelet is evaluated, returned as a 1-by-n vector. The sample points are evenly distributed between lb and ub.
Examples
      1.[a,b]=shanwavf (2,8,3,1,6)
           a =   [-3.8982e-17 + 1.1457e-31i   3.8982e-17 - 8.4040e-31i  -3.8982e-17 + 4.5829e-31i]
           b =   [2   5   8]   */
function [psi,x]=shanwavf(lb,ub,n,fb,fc)
    funcprot(0);
    rhs=argn(2);
    if (rhs~=5) then
        error ("Wrong number of input arguments.")
    else 
        if (n <= 0 || floor(n) ~= n)
            error("n must be an integer strictly positive");
        elseif (fc <= 0 || fb <= 0)
            error("fc and fb must be strictly positive");
        end
        x = linspace(lb,ub,n);
        sincx=x;
        for i=1:n
            sincx(i)=sin(fb*x(i)*%pi)/(fb*x(i)*%pi);
        end    
        psi = (fb.^0.5).*(sincx.*exp(2.*%i.*%pi.*fc.*x));
    end
endfunction