Python 版本的 Matlab Signal Toolbox 的 tfestimate()?

Python version of Matlab Signal Toolbox's tfestimate()?

是否有 Python 版本的 Matlab 的 tfestimate()?我查看了控制工具箱,但它只提供线性传递函数。

help of tfestimate 的 'more about' 部分所示,传递函数的计算结果大致为 Txy = Pyx / Pxx,因此通过将交叉谱密度除以 yx 通过 x 的功率谱密度。请注意,为了计算交叉光谱密度,参数的顺序很重要,因为 Pyx 被计算(在适当的窗口化和归一化之后)作为 fft(y) * conj(fft(x)) 在个体 windows 上的平均值.同样,PSD Pxx 计算为平均 fft(x) * conj(fft(x))。我忘记了具体原因,但是有充分的理由将其计算为这两个平均值之间的比率,而不是直接取平均值 fft(y) / fft(x).

cpsd 和 psd 都在 matplotlib.mlab 中可用,因此您可以大致像这样计算传递函数(未测试):

from matplotlib.mlab import psd, csd

def tfe(x, y, *args, **kwargs):
   """estimate transfer function from x to y, see csd for calling convention"""
   return csd(y, x, *args, **kwargs) / psd(x, *args, **kwargs)