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

The*_*Guy 6 python matlab numpy scipy

Matlab的tfestimate()是否有Python版本?我已经研究了控制工具箱,但它仅提供线性传递函数。

Bas*_*els 6

如在的的“更多关于”部分所示tfestimate的帮助,传递函数被计算或多或少Txy = Pyx / Pxx,所以通过分割之间的交叉谱密度yx通过的功率谱密度x。请注意,对于计算互谱密度,自变量的顺序很重要,因为Pyx(在适当的窗口化和归一化之后)作为fft(y) * conj(fft(x))各个窗口的平均值进行计算。类似地,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)
Run Code Online (Sandbox Code Playgroud)

  • 您确定没有交换“x”和“y”吗?因为在这种情况下,您将得到逆传递函数,因此当以 dB 为单位测量时,TF 的绝对值将为负。 (2认同)