summaryrefslogtreecommitdiff
path: root/frd.sci
blob: c3838b4334aeab8d81349ae06cfe43ef7db41f4f (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
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
function varargout = frd(varargin)
    [lhs,rhs] = argn(0)
    if rhs < 2 || rhs > 4 then
        errmsg = msprintf(gettext("%s: Wrong numbers of input arguments."), "frd");
        error(errmsg)
    end
    frequency = varargin(2)
    freqUnit = 'rad/TimeUnit'
    if ~iscolumn(frequency) then
        errmsg = msprintf(gettext("%s: frequency must be a finite row vector."), "frd");
        error(errmsg)
    end
    respData = varargin(1)
//    pause
    if size(frequency,'r') <> size(respData,'r') then
        errmsg = msprintf(gettext("%s: input output matrix dimension must be equal."), "frd");
        error(errmsg)
    end
    if rhs == 2 then
        Ts = 0
    elseif rhs >2 then
        Ts = varargin(3)
    end
    if Ts < 0 || size(Ts,'*') <> 1 || typeof(Ts) <> 'constant' then
        errmsg = msprintf(gettext("%s: Sampling time must be a scalar non negative real number."), "frd");
        error(errmsg)
    end
    // saving the spectrum value
    if rhs == 4 then
        spect = varargin(4)
    else
        spect = []
    end
    /// matching its dimensions
    if ~size(spect) then
    elseif size(frequency,'r') <> size(spect,'r') then
        errmsg = msprintf(gettext("%s: Numbers of power spectra must be equal to the numbers of frequency."), "frd");
        error(errmsg)
    end
    TUnit = 'seconds'
    t = tlist(['frd','Frequency','FrequencyUnit','ResponseData','Ts','TimeUnit','Spect'],frequency,freqUnit,respData,Ts,TUnit,spect)
    varargout(1) = t
endfunction

//overloading
function %frd_p(varargin)
    myTlist = varargin(1)
    f = fieldnames(myTlist)
    freqData = myTlist.Frequency
    tempRespData= myTlist.ResponseData
    for jj = 1:size(tempRespData,'c')
        respData = tempRespData(:,jj)
        mprintf("\t -------------------------")
        mprintf("\n")
        mprintf("\t Frequency \t  Response")
        mprintf("\n")
        mprintf("\t -------------------------")
        mprintf("\n")
        for ii = 1:length(myTlist.Frequency)
            temp = ''
            if real(respData(ii))>=0 then
                temp = temp + ' '
            end
            temp = temp + string(real(respData(ii)))
    //        temp = string(real(respData(ii)))
            if imag(respData(ii)) > 0 then
                temp = temp +"+"
            end
            if ~imag(respData(ii)) then
            else
                temp = temp + string(imag(respData(ii))) +"i"
            end
    //        temp = temp + string(imag(respData(ii))) + " i"
            mprintf("\n\t %f \t %s",freqData(ii),temp)//real(respData(ii)),imag(respData(ii)))
        end
        mprintf("\n\n")
    end
    if ~myTlist.Ts then
        mprintf("\n  Continuous Domain frequency response.")
    else
        mprintf("\n  Sampling Time = "+string(myTlist.Ts)+" "+myTlist.TimeUnit)
        mprintf("\n  Discrete Domain frequency response.")
    end
endfunction