2016-03-07 23 views
4

是否有任何内置的numpy函数来检查信号(数组)的哪个索引不会留下特定的错误带?从哪个索引数组值位于特定错误带内?


与数字滤波器的工作,我需要确定在scipy.signal.filtfilt使用的脉冲响应的长度。 有限冲击响应(FIR)滤波器,但有一种不可能与无限脉冲响应(IIR)滤波器。
但是,它会做计算的地步,从脉冲响应不留有一定的误差带:

impulse response of a Chebyshev-2 IIR filter

现在我使用的是一个快速和肮脏的解决方法,检查逆转手动阵列的误差带外的第一个值:

def ringing_time(sig, th): 
    return len(sig) - np.argmax(np.abs(sig[::-1]) > th) 

是否有任何快速的内置numpy方法对吗?

+0

我会称你的“快速和肮脏的解决方法”一个美丽而优雅的解决方案! – Jaime

+1

'(sig> th)| (sig <-th)似乎比计算abs(sig)> th更快,即使它在一个额外时间内循环了信号。还有'numpy.isclose',它需要少一圈,但似乎比原来慢。 – 2016-03-07 12:46:19

回答

0

一般来说,没有。你正在利用一些并不普遍适用的信号特定知识(信封随时间衰减)。如果你想用数字来做,你的解决方案是一个很好的解决方案。

你可以像冲动响应方程那样做,象征性地用sympy区分它并应用牛顿方法,但是你必须处理在正确的位置开始它,所以它不会落入其中一个当地最低标准。总的来说,我认为你处于一个不错的位置。

相关问题