2016-03-07 1 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', который требует меньше одного цикла, но, кажется, медленнее оригинала. –

ответ

0

В общем, нет. Вы используете некоторые специфические для сигнала знания, которые не универсальны (факт, что огибающая распадается со временем). Ваше решение хорошее, я думаю, если вы хотите сделать это численно.

Вы можете сделать что-то вроде принятия уравнения импульсного отклика, символически дифференцировать его с помощью sympy и применить метод Ньютона, но вам придется иметь дело с его запуском в нужном месте, чтобы он не попадал в один из локальные минимумы. В целом я думаю, что вы в хорошем месте.

 Смежные вопросы

  • Нет связанных вопросов^_^