SciPy «lfilter» возвращает только NaN

Все -

Я пытаюсь использовать функцию SciPy signal.lfilter для фильтрации вектора выборок - к сожалению, все, что возвращается является вектором NaN .

Я построил частотную характеристику фильтра, и коэффициенты фильтра выглядят правильно; Я почти уверен, что проблема в самом вызове lfilter .

Это высокочастотный фильтр Чебышева I, который я создаю с помощью:

b,a = signal.iirdesign(wp = 0.11, ws= 0.1, gstop= 60, gpass=1, ftype='cheby1')

Затем я фильтрую данные с помощью:

filtered_data = signal.lfilter(b, a, data)

Ниже я печатаю выборку из 20 выборок из предварительно отфильтрованных данных, и затем отфильтрованные данные. Вы можете ясно увидеть проблему:

### Printing a small selection of the data before it is filtered:

((-0.003070347011089325+0.0073614344000816345j), (-0.003162827342748642+0.007342938333749771j), (-0.003310795873403549+0.0073614344000816345j), (-0.0031813234090805054+0.007342938333749771j), (-0.003255307674407959+0.007398426532745361j), (-0.003162827342748642+0.007287450134754181j), (-0.003125835210084915+0.007509402930736542j), (-0.003162827342748642+0.007342938333749771j), (-0.0031073391437530518+0.007287450134754181j), (-0.0032368116080760956+0.007398426532745361j), (-0.0030888430774211884+0.007342938333749771j))


### Printing a small selection of the filtered data:

[ nan nanj  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj
  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj
  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj  nan nanj]

Как я уже сказал, коэффициенты фильтра выглядят хорошо. Это:

b = [  4.06886235e-02  -7.73083846e-01   6.95775461e+00  -3.94272761e+01
   1.57709105e+02  -4.73127314e+02   1.10396373e+03  -2.05021836e+03
   3.07532754e+03  -3.75873366e+03   3.75873366e+03  -3.07532754e+03
   2.05021836e+03  -1.10396373e+03   4.73127314e+02  -1.57709105e+02
   3.94272761e+01  -6.95775461e+00   7.73083846e-01  -4.06886235e-02]
a = [  1.00000000e+00  -1.27730099e+01   7.81201390e+01  -3.03738394e+02
   8.40827723e+02  -1.75902089e+03   2.88045462e+03  -3.77173152e+03
   3.99609428e+03  -3.43732844e+03   2.38415171e+03  -1.30118368e+03
   5.21654119e+02  -1.18026566e+02  -1.85597824e+01   3.24205235e+01
  -1.65545917e+01   5.02665439e+00  -9.09697811e-01   7.68172820e-02]

Итак, почему lfilter возвращает только NaN? Как я неправильно использую эту функцию?

Заранее благодарим за помощь!

Edit:

Хорошо, я решил это.

Для тех, кто столкнется с этим в будущем:

По какой-то причине, хотя возвращенные коэффициенты для фильтра выглядели хорошо, когда я затем использовал эти коэффициенты в функции SciPy lfilter , отфильтрованные значения были безграничны. Простое изменение границы полосы пропускания на ЛЮБОЕ число, кроме 0,11 , решило проблему.Даже это работает:

b,a = signal.iirdesign(wp = 0.119, ws= 0.1, gstop= 60, gpass=1, ftype='cheby1')

Кроме ручного перебора полюсов и нулей фильтра, я не уверен, как вы обнаружите нестабильность фильтра. Странно.

5
задан bhilburn 10 January 2012 в 23:07
поделиться