问题描述
我正在尝试在Python中为传递函数建模,并认为我可以通过简单地绘制许多频率处的传递函数来做到这一点。这似乎适用于二阶LPF。参见下图。
一些示例代码如下:
s = np.arange(10 * 2 * np.pi,1000 * 2 * np.pi,10) # Creates vector of frequencies in rad/s
lpf = np.zeros(len(s)) # Initializes lowpass filter vector
for k in range(len(s)):
lpf[k] = lpfilt_func(s[k]) # Calls LPF function with TF = cutoff_freq ** 2 / (s + cutoff_freq) ** 2
要获得频率响应,我没有使用s
作为实数,而是使用内置函数s
将complex(0,s)
更改为复数并计算了幅度和相位如下:
for k in range(len(s)):
lpf[k] = lpfilt_func(complex(0,s[k]))
gain_lpf[k] = np.absolute(lpfilt_func(complex(0,s[k])))
phase_lpf[k] = np.angle(lpfilt_func(complex(0,s[k]))) * 180 / np.pi # Phase in deg
我认为这本质上类似于设置s = jw,然后将幅度计算为| LPF |。 = \ sqrt {A ^ 2 + B ^ 2},相位响应为\ angle {LPF} = \ angle {(B / A)}。
这是计算传递函数频率响应的有效方法吗? s
从实数到复数的转换有效吗?
我知道有一些软件包和库,例如scipy.signal,可以轻松地对SISO系统执行此操作。但是,我上面的方法可以用于MIMO系统吗?还是本质上相当复杂的系统?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)