Discrete-Time Transfer Functions Expansion: Almost There!

    1 minute read    

Hello everyone, I’m in my second week of GSoC and I’ve almost finished writing the transfer function classes #28115(Open).

I proceeded as explained in my last update.

The design I used preserves retrocompatibility, practically no previous tests had to be changed.

I paid close attention to the compatibility of operations, series, parallel and feedback of systems. To handle this, I wrote the _check_compatibility function and its decorator, _compatibility_decorator. These are responsible for checking if a list of systems are compatible (i.e., if they are all either continuous-time or discrete-time and if they share the same sampling time). These functions have been particularly useful for the methods in the Series, Parallel and Feedback classes, as they frequently operate on multiple systems.

This design should also work fine with the DTStateSpace class, which I plan to add in the coming weeks.

I also added the discretization methods present in the module to the DTTransferFunction class. These methods convert continuous-time transfer functions to the discrete-time counterparts. I plan to add more of them in the future, such as the Padè approximation for models with delays, as suggested by my mentor @moorepants.

In order to complete the “discretization” of transfer functions, I will need to write some tests to check compatibility, ensuring that every case is covered and to make minor changes to MIMO systems to ensure they work correctly with discrete-time systems.

What will remain is to write the discrete-time counterpart of the stability functions (is_stable, get_asymptotical_stability_conditions). However, I will do this at the end of the “discretization” process for all classes because it will require a significant amount of effort and I prefer to finish my exams first. I can spoil that I will probably use the Jury stability criterion, but more research is needed.