/FrecMetricsCalc

简单控制系统的频域指标计算器。本科自动化算系统参数时可以提供较大的帮助。

Primary LanguagePythonMIT LicenseMIT

FrecMetricsCalc

简单控制系统的频域指标计算器。本科自动化算系统参数时可以提供较大的帮助。

简介

在做作业写系统校正时,愈发感觉到受自动化荼毒之深(bushi),于是为了简化计算,写了这么个玩意儿。仅供写作业用,不要扔生产环境里哈哈、、

我会时不时根据写作业时遇到的情况更新程序,大家注意看一下类的文档,使用新的用法。

环境要求

只需要Python 3.6或更高,其他都不需要~~

用法

这个程序最好在Python命令行里用,毕竟还得算其他值嘛。(Python是最爽的计算器!)

只需在fuxk.py目录内运行一个Python终端,然后

>>> from fuxk import *

就能用辣!

来个实例:(创建系统对象,输出指标,二级校正,输出逐级校正后的指标和对数幅频计算式)

>>> from fuxk import *
算TM的系统校正!
>>> g0 = G(30, [], [0.1,0.2])
>>> g0.showinfo()

           30
------------------------
s*(0.2*s + 1)(0.1*s + 1)

开环指标精确值们:
        Wc      = 9.771 rad/s
        Wg      = 7.071 rad/s
        Gamma   = -17.23673506765857°
        Kg      = 0.49999041002043737
开环指标对数简化运算得到的值:
        Wc      = 11.447 rad/s
        Wg      = 7.071 rad/s
        Gamma   = -25.264321992402216°
        20lg Kg = -9.542591691354176 dB
闭环频域近似指标:
        Wb      = 13.428 rad/s
        相角裕度过小,无法计算谐振
闭环时域指标(经验公式、近似指标):
        ts      = 6.840676521240146 s
        相角裕度超出范围,超调量无法用经验公式计算

>>> gc1 = g.correct4(4)
返回了一个校正系统嗷,你可以将它与原系统相乘~~
校正过程参数:beta=7.499999999999997, tau=1.75
返回的系统有点高级哦,没法自动算指标嗷:(
>>> gg = gc1*g
>>> gg.showinfo()

           30*(1.75*s + 1)
--------------------------------------
s*(13.125*s + 1)(0.2*s + 1)(0.1*s + 1)

开环指标精确值们:
        Wc      = 3.241 rad/s
        Wg      = 6.525 rad/s
        Gamma   = 30.4386719638901°
        Kg      = 3.19035317161703
开环指标对数简化运算得到的值:
        Wc      = 4.0 rad/s
        Wg      = 6.525 rad/s
        Gamma   = 22.499896130664695°
        20lg Kg = 6.562620727133117 dB
闭环频域近似指标:
        Wb      = 5.605 rad/s
        Mr      = 261.31373665075137 %
闭环时域指标(经验公式、近似指标):
        ts      = 8.580660648653305 s
        相角裕度超出范围,超调量无法用经验公式计算

>>> gg.showlogexp()
20lg A(w) =
 20( lg 30 -lg w ) , 0 < w < 0.076
 20( lg 30 -lg w -lg 13.125w ) , 0.076 < w < 0.571
 20( lg 30 -lg w -lg 13.125w +lg 1.75w ) , 0.571 < w < 5.0
 20( lg 30 -lg w -lg 13.125w +lg 1.75w -lg 0.2w ) , 5.0 < w < 10.0
 20( lg 30 -lg w -lg 13.125w +lg 1.75w -lg 0.2w -lg 0.1w ) , w > 10.0
>>> gc2 = gg.correct1(67)
返回了一个校正系统嗷,你可以将它与原系统相乘~~
校正过程参数:alpha=24.15876864008868, T=0.020521716706041908
返回的系统有点高级哦,没法自动算指标嗷:(
>>> ggg = gc2*gg
>>> ggg.showinfo()

           30*(1.75*s + 1)(0.496*s + 1)
---------------------------------------------------
s*(13.125*s + 1)(0.2*s + 1)(0.1*s + 1)(0.021*s + 1)

开环指标精确值们:
        Wc      = 6.845 rad/s
        Wg      = 25.106 rad/s
        Gamma   = 63.20584529821694°
        Kg      = 7.82121508841985
开环指标对数简化运算得到的值:
        Wc      = 9.917 rad/s
        Wg      = 25.106 rad/s
        Gamma   = 46.13769423125129°
        20lg Kg = 16.064731410168605 dB
闭环频域近似指标:
        Wb      = 12.021 rad/s
        Mr      = 138.69488234028546 %
闭环时域指标(经验公式、近似指标):
        ts      = 0.9360301071758413 s
        sigma_p = 31.477952936114185 %

>>> ggg.showlogexp()
20lg A(w) =
 20( lg 30 -lg w ) , 0 < w < 0.076
 20( lg 30 -lg w -lg 13.125w ) , 0.076 < w < 0.571
 20( lg 30 -lg w -lg 13.125w +lg 1.75w ) , 0.571 < w < 2.017
 20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w ) , 2.017 < w < 5.0
 20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w -lg 0.2w ) , 5.0 < w < 10.0
 20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w -lg 0.2w -lg 0.1w ) , 10.0 < w < 48.729
 20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w -lg 0.2w -lg 0.1w -lg 0.021w ) , w > 48.729        
>>>

更详细的可以看注释,或者print(G.__doc__)看文档。

嫌输出太吵闹的话,可以shutup = True让程序闭嘴。

由于精度问题,所以注意验算!此外二分法解方程时默认函数单调,如果系统比较复杂,推荐手算,否则程序有可能卡死。