I’m working on a structural dynamics identification topic involving the identification of a model coefficients for frequency response functions (or transfer function if your prefer).
The model is the following H(\omega) = \sum_{m = 1}^{n_m} \left(\frac{R_m}{\mathrm{i}\omega-\lambda_m}+\frac{\bar R_m}{\mathrm{i}\omega-\bar\lambda_m}\right) - \frac{R_\mathrm{L}}{\omega^2} + R_\mathrm{U}
where H(\omega) \in \mathbb{C}^{n_o\times n_i} contains the values of all input-output pairs at one frequency, R_m \in \mathbb{C}^{n_o\times n_i} are the so-called residuals.
Standard (for structural system identification) strategies exist to tackle this kind of problem, but I was wondering how I could use julia’s qualities especially in terms of the ML ecosystem to identify such a model.
@goerch@zdenek_hurak , I too saw that @baggepinnen is working on closely related topics. Unfortunately the tfest functionnality in ControlSystemIdentification does not seem to support Multiple Input - Multiple Output (MIMO) systems.
Then I suggest trying subspaceid where you package your data in a frequency-response data object FRD. This functionality is fairly new, and there is not yet a fully worked example in the documentation. The link above leads to the docstring that (if you scroll down a bit) contains the method that works on frequency-domain data. If the documentation is insufficient, I’d be happy to hear what trips you up and I’ll try to improve it. You may also look on how it’s used in the tests
The model you proposed appears linear in the parameters and I see no reason to use anything complicated to estimate it. In general, frequency-domain methods are significantly less attractive for nonlinear systems since the simple frequency response is then no longer a complete characterization of the system, the frequency response for nonlinear systems will in general depend on both amplitude and history.
The parametrization you use is not linear in the parameters, but it represents a linear system for which there are efficient estimation methods. Those methods, (like subpsaceid) estimate the model on another, equivalent form, and you can calculate the parameters in your model from the model that was identified. It requires you to calculate the residues of a rational function, Polynomials.jl contains a function for that.
You can use subspace methods in the frequency domain as well, there are several papers investigating this, e.g., by the above reference author Tomas McKelvey