是否存在Python版本的Matlab的tfestimate()?我查看了控件工具箱,但它只提供了线性传递函数。
答案 0 :(得分:5)
如'更多关于' help of tfestimate的一部分,传递函数或多或少地计算为Txy = Pyx / Pxx
,因此将y
和x
之间的交叉谱密度除以功率谱 - 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)