Giter Site home page Giter Site logo

baggepinnen / controlsystemidentification.jl Goto Github PK

View Code? Open in Web Editor NEW
125.0 5.0 12.0 252.51 MB

System Identification toolbox, compatible with ControlSystems.jl

Home Page: https://baggepinnen.github.io/ControlSystemIdentification.jl/dev

License: MIT License

Julia 100.00%
estimation transfer-function-estimation identification arx system-identification control-systems dynamical-systems spectral-analysis state-space-systems lti-system

controlsystemidentification.jl's Introduction

ControlSystemIdentification

CI codecov Documentation, stable Documentation, latest

System identification for ControlSystems.jl, implemented in Julia.

This package estimates linear statespace models with inputs on the form

$$\begin{aligned} x^+ &= Ax + Bu + Ke\\\ y &= Cx + Du + e \end{aligned}$$

using methods such as N4SID or the prediction-error method, transfer functions on the form

$$G(z) = \dfrac{B(z)}{A(z)} = \dfrac{b_m z^m + \dots + b_0}{z^n + a_{n-1} z^{n-1} + \dots + a_0}$$

as well as generic nonlinear graybox models

$$x^+ = f(x, u)$$

See the documentation for help.

Examples in the form of jupyter notebooks are provided here.

Quick example:

using ControlSystemIdentification, ControlSystemsBase
Ts = 0.1
G  = c2d(DemoSystems.resonant(), Ts) # A true system to generate data from
u  = randn(1,1000)                   # A random input
y  = lsim(G,u).y                     # Simulated output
y .+= 0.01 .* randn.()               # add measurement noise
d  = iddata(y, u, Ts)                # package data in iddata object
sys = subspaceid(d, :auto)           # estimate state-space model using subspace-based identification
bodeplot([G, sys.sys], lab=["True" "" "n4sid" ""])

controlsystemidentification.jl's People

Contributors

baggepinnen avatar erikqqy avatar github-actions[bot] avatar juliatagbot avatar mapi1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

controlsystemidentification.jl's Issues

TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.

If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.

If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Efficient estimation of Hammerstein Wiener systems

These are just some loose thoughts.

A HW model consists of an input nonlinearity $g_i(u)$, a linear system $G(s)$, an output nonlinearity $g_o(y)$ and possibly an observer-feedback function $K(y)$. If we model the nonlinearities with neural-networks, we could obtain an efficient algorithm by

  1. Applying $g_i(u)$ in batch to transform the entire input trajectory.
  2. Apply a possibly learned nonlinear observer in batch $K(y)$.
  3. Simulate the linear system $G$ like usual.
  4. Apply $g_o(u)$ in batch to the output of the linear system.

This algorithm would avoid the costly point-wise application of the neural networks. One complication is that the observer feedback typically operates on the error, or more generally, both the predicted and measured outputs. If we learn the observer, this might still have to be called in the loop, but a pre-transform of the measurements may still be beneficial to add modeling power without adding excessive computational overhead.


#133 estimates a HW model in the special case where the nonlinearities are known.

Feature request: linear grey box system identification

I find this package great and easy to use for estimating linear state space models of a certain model order. However, estimating parameters in a linear state space model (grey box sysid) has proven quite difficult compared to other system identification toolboxes.

For example, as an aerospace engineer, a common model we are interested in estimating is the linearized short-period aircraft dynamics of the form:

"""
Create a state space model describing the short period pitch rate dynamics of a fixed-wing 
vehicle given delta elevator angle inputs.

# Arguments:
- `Mα`: Pitch moment stability derivative w.r.t. angle of attack
- `Mq`: Pitch moment stability derivative w.r.t. pitch rate
- `Mδe`: Pitch moment stability derivative w.r.t. delta elevator angle
- `Zα`: Force Z stability derivative w.r.t. angle of attack
- `Zq`: Force Z stability derivative w.r.t. pitch rate
- `Zδe`: Force Z stability derivative w.r.t. delta elevator angle
- `V`: Trim velocity (m/s)
"""
function pitchrate_ss(Mα, Mq, Mδe, Zα, Zq, Zδe, V)
    state_labels = Symbol.(["Pitch Rate (rad/s)"; "Angle of Attack (rad)"])
    A = [
        Mq Mα
        (1+Zq / V) Zα/V
    ]
    B = [Mδe; Zδe / V]
    return ss(A, B, I, 0)
end

The function about creates a linear state space model of the short-period aircraft dynamics. Often we want to estimate the parameters Mα, Mq, Mδe, Zα, Zq, Zδe from data.

The nonlinear_pem seems to be the suggested approach in the documentation to solve this problem. However, the results do not seem accurate and the function takes > 20 mins to run (I was using default parameters). Compare this to the MATLAB solution of the problem which takes the form:

p0 = [-170.0, -13.0, -195.0, -430.0, -20.5, 125.0];
aux = {};
T = 0;
m = idgrey('shortperiod',p0,'c',aux,T);
d = iddata(output, input, dt);

tic
m_est = greyest(d, m);
toc

The parameter estimates using the MATLAB solution above are very accurate and takes ~1.3 seconds to run.

I'm not a system identification expert, so I don't know what magic is happening within MATLABs idgrey and greyest functions, but they are simple to use and always seem to provide accurate parameter estimates.

Adding something similar to ControlSystemIdentification.jl would be great in my opinion as these sort of problems are very common in the aerospace field (where we already have a linear model structure, but the parameters are unknown). I understand this already may be possible with this toolbox, and I just haven't used the correct function or keyword arguments, however, adding an easier interface to solve grey box parameter estimation problems or adding a specific example in the documentation would be very useful I believe.

Unable to compile module

ERROR: LoadError: LoadError: UndefVarError: Poly not defined
Stacktrace:
 [1] top-level scope at /Users/rusty/.julia/packages/ControlSystems/pipUm/src/types/SisoTfTypes/polyprint.jl:8
 [2] include(::Function, ::Module, ::String) at ./Base.jl:380
 [3] include at ./Base.jl:368 [inlined]
 [4] include(::String) at /Users/rusty/.julia/packages/ControlSystems/pipUm/src/ControlSystems.jl:1
 [5] top-level scope at /Users/rusty/.julia/packages/ControlSystems/pipUm/src/ControlSystems.jl:97
 [6] include(::Function, ::Module, ::String) at ./Base.jl:380
 [7] include(::Module, ::String) at ./Base.jl:368
 [8] top-level scope at none:2
 [9] eval at ./boot.jl:331 [inlined]
 [10] eval(::Expr) at ./client.jl:467
 [11] top-level scope at ./none:3
in expression starting at /Users/rusty/.julia/packages/ControlSystems/pipUm/src/types/SisoTfTypes/polyprint.jl:8
in expression starting at /Users/rusty/.julia/packages/ControlSystems/pipUm/src/ControlSystems.jl:97
ERROR: LoadError: Failed to precompile ControlSystems [a6e380b2-a6ca-5380-bf3e-84a91bcd477e] to /Users/rusty/.julia/compiled/v1.5/ControlSystems/WTvAN_BHKFJ.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1290
 [3] _require(::Base.PkgId) at ./loading.jl:1030
 [4] require(::Base.PkgId) at ./loading.jl:928
 [5] require(::Module, ::Symbol) at ./loading.jl:923
 [6] include(::Function, ::Module, ::String) at ./Base.jl:380
 [7] include(::Module, ::String) at ./Base.jl:368
 [8] top-level scope at none:2
 [9] eval at ./boot.jl:331 [inlined]
 [10] eval(::Expr) at ./client.jl:467
 [11] top-level scope at ./none:3
in expression starting at /Users/rusty/.julia/packages/ControlSystemIdentification/dAILZ/src/ControlSystemIdentification.jl:3
ERROR: Failed to precompile ControlSystemIdentification [3abffc1c-5106-53b7-b354-a47bfc086282] to /Users/rusty/.julia/compiled/v1.5/ControlSystemIdentification/FH1SZ_BHKFJ.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1290
 [3] _require(::Base.PkgId) at ./loading.jl:1030
 [4] require(::Base.PkgId) at ./loading.jl:928
 [5] require(::Module, ::Symbol) at ./loading.jl:923
 [6] include_string(::Function, ::Module, ::String, ::String) at ./loading.jl:1088

arx() estimator issues

Apparent issues with several of the arx() estimators used in your identification_arx.ipynb example with slightly modified AR and ARMA transfer functions with the following solvers: (I assume they all should handle the MA part also given nb is specified? I did not find an armax version)

Gls      = arx(d,na,nb)                      # Regular least-squares estimation
Gtls     = arx(d,na,nb, estimator=tls)       # Total least-squares estimation
Gwtls    = arx(d,na,nb, estimator=wtls_estimator(y,na,nb)) # Weighted Total least-squares estimation
Gplr, Gn = plr(d,na,nb,nc, initial_order=20) # Pseudo-linear regression
Gn4sid = tf(n4sid(d, :auto; verbose=false).sys) #
  1. Tested pure AR with two imaginary poles on
     0.8
-------------
1.0z^2 + 0.25

A small error is added to simulated data

y  = sim(G,u)

eps = 0.000001
yn = y + eps * randn(size(y));

Testing various specifications of system order (denominator and numerator). I am a bit uncertain if n is the number of coefficients here or the order?

With na=2,nb=2,nc=1 (?) they all gave reasonably similar and ok results..

Gwtls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
     -1.830761022395132e-8z + 0.8000000364406703
-----------------------------------------------------
1.0z^2 + 1.1336180899546022e-7z + 0.24999999923772648

Gn4sid = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
1.0482460250016439e-7z^2 - 2.4016742360023076e-8z + 0.8000000313485508
----------------------------------------------------------------------
          1.0z^2 + 7.743629093504012e-8z + 0.250000013686116

With na=2, nb=1 (should suffice for the numerator) the arx versions start failing bad, while n4sid still does well

Gls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
              -0.008425068831949092
-------------------------------------------------
1.0z^2 - 0.0149157451820707z + 0.2485242562797274


Gtls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
               -0.14710343635360346
--------------------------------------------------
1.0z^2 - 0.10034853554694595z + 1.0435201347058614


Gplr = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
               -0.00843907141354728
---------------------------------------------------
1.0z^2 - 0.01502858249704049z + 0.25577236172028245


Gwtls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
               -0.06823555574414619
--------------------------------------------------
1.0z^2 - 0.09093792215356927z + 0.9887132202347376


Gn4sid = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
-7.035087559097725e-8z^2 + 1.8586494326913326e-8z + 0.7999999720915703
----------------------------------------------------------------------
         1.0z^2 - 4.118840077338426e-8z + 0.2500000350249592

With na=nb=4 (too high?) , the arx and plr also goes bad (large errs in both numerator and denom) Again n4sid good.

Gls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
     4.498197651604916e-8z^3 + 0.7999999908664831z^2 + 0.003570318828339773z - 0.11531636330533376     
-------------------------------------------------------------------------------------------------------
1.0z^4 + 0.0044629928399430585z^3 + 0.10585461073330074z^2 + 0.001115779335659886z - 0.0360363583918387

Gtls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
    2.7838920503841905e-8z^3 + 0.8000000588632808z^2 + 0.891535197737989z + 0.6889073529493018
--------------------------------------------------------------------------------------------------     
1.0z^4 + 1.1144190526902322z^3 + 1.111134362289782z^2 + 0.27860493890406324z + 0.21528368611087234     

Gplr = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
      4.420389876275559e-8z^3 + 0.8000000013003751z^2 - 0.003497016602469035z - 0.1134473493326818
---------------------------------------------------------------------------------------------------------
1.0z^4 - 0.0043711788328240336z^3 + 0.10819087189424594z^2 - 0.0010927728758850003z - 0.03545228883099305

Gwtls = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
  1.5679542424341932e-8z^3 + 0.8000000093945829z^2 + 0.038695551344337255z + 0.45693930399129623
--------------------------------------------------------------------------------------------------
1.0z^4 + 0.04836949844579501z^3 + 0.821174204714606z^2 + 0.01209246301841781z + 0.1427935848734602

Gn4sid = TransferFunction{Discrete{Float64}, ControlSystems.SisoRational{Float64}}
1.8043888767223154e-8z^2 + 6.290335821529143e-8z + 0.8000000000517333
---------------------------------------------------------------------
        1.0z^2 + 7.375779662033288e-8z + 0.25000005919139123

As can be seen the n4sid has typical coefficient errors in the e-8 range, while the others are up to e-1
Per Ove Husøy

Custom (nonlinear) regressors for ARX

First, big thank you. This package reads like a 1:1 implementation of ML ident TB, absolutely awesome.

However, I wonder if it's possible to customize the regressors for the ARX models to get some fancy models :) e.g. I've had some good success with polynomial regressor Sets with cross terms via nlarx in ml.

If not, what would you need to get it implemented?

Thanks!

Regarding ar()

I was just preparing some tests for the generalized least squares method, when I found that the by ar() returned tf is, as far as I can see it, incorrect. For example when na = 1 it has the structure 1 / (z - a1), but shouldn't it be z / (z - a1)? The origin is probably missing zeros in params2poly, but correct me if I am mistaken on this one.

Error on first example from README

Running the first example from the README, when executing the PEM-identification on line

sysh,x0h,opt = pem(y, u, nx=nx, focus=:prediction) # Estimate model

I get the following error:

getproperty(::StateSpaceNoise{Float64,Array{Float64,2}}, ::Symbol) at types.jl:36
show(::IOContext{Base.GenericIOBuffer{Array{UInt8,1}}}, ::StateSpaceNoise{Float64,Array{Float64,2}}) at StateSpace.jl:324
show_delim_array(::IOContext{Base.GenericIOBuffer{Array{UInt8,1}}}, ::Tuple{StateSpaceNoise{Float64,Array{Float64,2}},Array{Float64,1},Optim.MultivariateOptimizationResults{Optim.BFGS{LineSearches.InitialStatic{Float64},LineSearches.HagerZhang{Float64,Base.RefValue{Bool}},Nothing,Nothing,Optim.Flat},Float64,Array{Float64,1},Float64,Float64,Array{Optim.OptimizationState{Float64,Optim.BFGS{LineSearches.InitialStatic{Float64},LineSearches.HagerZhang{Float64,Base.RefValue{Bool}},Nothing,Nothing,Optim.Flat}},1},Bool}}, ::Char, ::Char, ::Char, ::Bool, ::Int64, ::Int64) at show.jl:695
show_delim_array at show.jl:680 [inlined]
show at show.jl:714 [inlined]
show at sysimg.jl:194 [inlined]
(::getfield(Atom, Symbol("##34#35")){Tuple{StateSpaceNoise{Float64,Array{Float64,2}},Array{Float64,1},Optim.MultivariateOptimizationResults{Optim.BFGS{LineSearches.InitialStatic{Float64},LineSearches.HagerZhang{Float64,Base.RefValue{Bool}},Nothing,Nothing,Optim.Flat},Float64,Array{Float64,1},Float64,Float64,Array{Optim.OptimizationState{Float64,Optim.BFGS{LineSearches.InitialStatic{Float64},LineSearches.HagerZhang{Float64,Base.RefValue{Bool}},Nothing,Nothing,Optim.Flat}},1},Bool}}})(::Base.GenericIOBuffer{Array{UInt8,1}}) at display.jl:17
#sprint#340(::Nothing, ::Int64, ::Function, ::Function) at io.jl:101
sprint at io.jl:97 [inlined]
render at display.jl:16 [inlined]
Type at types.jl:39 [inlined]
Type at types.jl:40 [inlined]
render at display.jl:19 [inlined]

I'm on Julia 1.1.0.

Identification from frequency response

I have a dataset, which contains the data of a bodeplot of some system. So I have a bunch of frequencies, along with the corresponding amplitudes and phases. I want to use this package to estimate it's transfer function. I do however only see functions in this package, and in the examples, for estimating transfer functions (or StateSpace models, which should be same-same as they are easily converted) for time-signals. Is there functionality for estimation based on frequency responses? Or do anyone have suggestions for other ways to estimate a system for my data?

I can think of the possibility of doing an inverse Fourier transform to get my data over to a time-signal, but that seems like more work than what should be necessary. Maybe, if this functionality is not implemented, this would be a way to add the it?

Generate a model from a known impulse/step response

The examples on how to identify a system from data are pretty clear. However, I found nothing on creating a transfer function/state space representation given an impulse/step response.

I understand that it's almost too simple, but certain models are primarily expressed in those terms, and playing with them in this (great) ecosystem requires a way to input them.

Is there a clean way to do it? I looked also quite a lot into ControlSystems.jl, without success either.

Thank you !

Missing docstring

Missing docstring for ControlSystemIdentification.impulseestplot. Check Documenter's build log for details.

Not usable/installable on Julia 1.4., Windows 10: missing Poly

hi,

(@v1.4) pkg> add ControlSystemIdentification
   Updating registry at `C:\Users\datse\.julia\registries\General`
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
  Resolving package versions...
  Installed TotalLeastSquares ─────────── v0.1.2
  Installed ControlSystemIdentification ─ v0.1.5
  Installed GenericLinearAlgebra ──────── v0.2.3
  Installed ControlSystems ────────────── v0.5.3
  Installed MonteCarloMeasurements ────── v0.8.12
   Updating `C:\Users\datse\.julia\environments\v1.4\Project.toml`
  [3abffc1c] + ControlSystemIdentification v0.1.5
   Updating `C:\Users\datse\.julia\environments\v1.4\Manifest.toml`
  [3abffc1c] + ControlSystemIdentification v0.1.5
  [a6e380b2] + ControlSystems v0.5.3
  [14197337] + GenericLinearAlgebra v0.2.3
  [0987c9cc] + MonteCarloMeasurements v0.8.12
  [028f657a] + TotalLeastSquares v0.1.2

julia> using ControlSystemIdentification
[ Info: Precompiling ControlSystemIdentification [3abffc1c-5106-53b7-b354-a47bfc086282]
ERROR: LoadError: LoadError: UndefVarError: Poly not defined
Stacktrace:
 [1] top-level scope at C:\Users\datse\.julia\packages\ControlSystems\pipUm\src\types\SisoTfTypes\polyprint.jl:6
 [2] include(::Module, ::String) at .\Base.jl:377
 [3] include(::String) at C:\Users\datse\.julia\packages\ControlSystems\pipUm\src\ControlSystems.jl:1
 [4] top-level scope at C:\Users\datse\.julia\packages\ControlSystems\pipUm\src\ControlSystems.jl:97
 [5] include(::Module, ::String) at .\Base.jl:377
 [6] top-level scope at none:2
 [7] eval at .\boot.jl:331 [inlined]
 [8] eval(::Expr) at .\client.jl:449
 [9] top-level scope at .\none:3
in expression starting at C:\Users\datse\.julia\packages\ControlSystems\pipUm\src\types\SisoTfTypes\polyprint.jl:6
in expression starting at C:\Users\datse\.julia\packages\ControlSystems\pipUm\src\ControlSystems.jl:97
ERROR: LoadError: Failed to precompile ControlSystems [a6e380b2-a6ca-5380-bf3e-84a91bcd477e] to C:\Users\datse\.julia\compiled\v1.4\ControlSystems\WTvAN_4SPIJ.ji.
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1272
 [3] _require(::Base.PkgId) at .\loading.jl:1029
 [4] require(::Base.PkgId) at .\loading.jl:927
 [5] require(::Module, ::Symbol) at .\loading.jl:922
 [6] include(::Module, ::String) at .\Base.jl:377
 [7] top-level scope at none:2
 [8] eval at .\boot.jl:331 [inlined]
 [9] eval(::Expr) at .\client.jl:449
 [10] top-level scope at .\none:3
in expression starting at C:\Users\datse\.julia\packages\ControlSystemIdentification\dAILZ\src\ControlSystemIdentification.jl:3
ERROR: Failed to precompile ControlSystemIdentification [3abffc1c-5106-53b7-b354-a47bfc086282] to C:\Users\datse\.julia\compiled\v1.4\ControlSystemIdentification\FH1SZ_4SPIJ.ji.
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1272
 [3] _require(::Base.PkgId) at .\loading.jl:1029
 [4] require(::Base.PkgId) at .\loading.jl:927
 [5] require(::Module, ::Symbol) at .\loading.jl:922

Wrong TransferFunction from arx() if nb > na

I was trying to fit some all zero tfs using arx() and the first obstacle I came across was the restriction na >= 1, which does not seem necessary as getARXregressor() seems to handle the case na = 0 well.
I did some further experimenting and found, that for the case na < nb a wrong tf gets returned. A minimal example would be sth. like:

N = 512
G =  tf([1, -2, 3], [1, -0.5, 0,0], 1)
u = randn(N)
y = lsim(G, u, 1:N)[1][:]
d = iddata(y, u, 1)
Gest = arx(d, 1, 3)

Here the parameters are correctly identified, but the order of z is off. The error, as far as I can tell, comes from params2poly(), where some zeros should be padded to a, so the correct tf is recovered. I would like to do a PR fixing this, but I wanted to get to you first making sure this is not an error on my side misusing the package/function. I also remember that some versions ago the restrictions were even stricter, only allowing all(nb .<= na), maybe that was the reason.

Beside that let me say thank you for the great package you created here, which I really heavily utilize for my work and which has served me really well so far!

Announce package on discourse

I suggest to announce this package on discourse in the category "Modelling and Simulation".
I tried to get an own category "Control" on discourse, but this was not yet granted. We need more posts on the subject control before that can happen. There is a tag "control", though.

https://discourse.julialang.org/c/domain/models

It is important that the control packages are visible on discourse to attract more control system students and engineers to use Julia.

Tag release and register this package

This is already a very good and well documented package. It would be nice if it could be installed by
] add ControlSystemIdentification
Thank you!

Unable to add package

In trying to reinstall this package, I encountered the following error when trying to install it again:

ERROR: Unsatisfiable requirements detected for package ZMQ [c2297ded]:
 ZMQ [c2297ded] log:
 ├─ZMQ [c2297ded] has no known versions!
 └─found to have no compatible versions left with IJulia [7073ff75]
   └─IJulia [7073ff75] log:
     ├─possible versions are: [1.9.0-1.9.3, 1.10.0, 1.11.0-1.11.1, 1.12.0, 1.13.0, 1.14.0-1.14.1, 1.15.0-1.15.2, 1.16.0, 1.17.0, 1.18.0-1.18.1, 1.19.0, 1.20.0-1.20.2, 1.21.0-1.21.4, 1.22.0] or uninstalled
     └─restricted to versions * by an explicit requirement, leaving only versions [1.9.0-1.9.3, 1.10.0, 1.11.0-1.11.1, 1.12.0, 1.13.0, 1.14.0-1.14.1, 1.15.0-1.15.2, 1.16.0, 1.17.0, 1.18.0-1.18.1, 1.19.0, 1.20.0-1.20.2, 1.21.0-1.21.4, 1.22.0]

The error is the same when I add the package with the github URL.

In case it is relevant I have pasted below the return from versioninfo()

julia> versioninfo()
Julia Version 1.5.2
Commit 539f3ce943 (2020-09-23 23:17 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, skylake)

In conclusion I am currently unable to install the package.

iddata not defined

Hello
when I try to run the usage example with julia 1.5.3 I have the following error message:

ERROR: LoadError: UndefVarError: iddata not defined
Maybe I'm missing some library
Any suggestion is welcome
Thank you

System idenfitifaction of data in the frequency domain

I have a dataset, which contains the data of a bodeplot of some system. So I have a bunch of frequencies, along with the corresponding amplitudes and phases. I want to use this package to estimate it's transfer function. I do however only see functions in this package, and in the examples, for estimating transfer functions (or StateSpace models, which should be same-same as they are easily converted) for time-signals. Is there functionality for estimation based on frequency responses? Or do anyone have suggestions for other ways to estimate a system for my data?

I can think of the possibility of doing an inverse Fourier transform to get my data over to a time-signal, but that seems like more work than what should be necessary. Maybe, if this functionality is not implemented, this would be a way to add the it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.