Фильтр Matlab с объектом Python lfilter ValueError слишком малой глубины - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу отфильтровать сигнал в Python, вдохновленный кодом Matlab.Matlab имеет функцию filter, которая должна быть похожа на scipy.signal.lfilter (из вопроса: Matlab filter () с SciPy lfilter () ).Тем не менее, я все еще получаю ValueError: object of too small depth for desired array.

код Matlab (выполняется в октаве):

% Matlab
x = [1.0485e-04  -2.4193e-04  -3.0078e-04  1.5750e-03  -1.9698e-03  1.3902e-04  2.7568e-03  -3.8059e-03  2.0123e-03  3.3257e-03]
xfilt = filter(1, [1 -0.992217938], x);
disp(xfilt);

% output
1.0485e-04  -1.3790e-04  -4.3760e-04   1.1408e-03  -8.3788e-04  -6.9233e-04   2.0699e-03  -1.7522e-03   2.7378e-04   3.5974e-03

Python:

# Python
from scipy.signal import lfilter

x = np.array([1.0485e-04, -2.4193e-04, -3.0078e-04, 1.5750e-03, -1.9698e-03, 1.3902e-04, 2.7568e-03, -3.8059e-03, 2.0123e-03, 3.3257e-03])
lfilter(1, np.array([1, -0.992217938]), x, axis=0)

, что приводит кошибка:

ValueError                                Traceback (most recent call last)
<ipython-input-87-d5c23d362b45> in <module>
      1 x = np.array([1.0485e-04, -2.4193e-04, -3.0078e-04, 1.5750e-03, -1.9698e-03, 1.3902e-04, 2.7568e-03, -3.8059e-03, 2.0123e-03, 3.3257e-03])
----> 2 print(lfilter(1, np.array([1, -0.992217938]), x, axis=0))

~/anaconda3/envs/*env*/lib/python3.6/site-packages/scipy/signal/signaltools.py in lfilter(b, a, x, axis, zi)
   1378     else:
   1379         if zi is None:
-> 1380             return sigtools._linear_filter(b, a, x, axis)
   1381         else:
   1382             return sigtools._linear_filter(b, a, x, axis, zi)

ValueError: object of too small depth for desired array

Система

  • Python: 3.6.8
  • Scipy: 1.2.0

Пробовал

На основании вопроса " Фильтр Matlab не совместим с Python lfilter " Я пытался добавить axis=0 к lfilter, но все равно получил ошибку ValueError.

Вопрос

Как сделать код Matlab в Python?

1 Ответ

0 голосов
/ 25 февраля 2019

SciPy lfilter ожидает, что аргумент b будет массивом 1-го ряда (или "подобным массиву", например списком), а не скаляром.Например,

lfilter([1], np.array([1, -0.992217938]), x, axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...