Я пытаюсь создать полосовой фильтр, используя scipy, но я продолжаю получать сингулярную матричную ошибку LinAlg. Я читал, что сингулярная матрица - это та, которая не является инвертируемой, но я не уверен, как эта ошибка подходит и что я могу сделать, чтобы исправить ее.python bandpass filter - сингулярная матричная ошибка
Код принимает сигнал ЭЭГ (который в коде ниже, я только что заменил массив int для тестирования) и отфильтровывает частоты < 8Hz и> 12Hz (альфа-диапазон)
Может ли кто-нибудь пролить свет на то, откуда происходит сингулярная матричная ошибка? Или же, если вы знаете лучший способ для фильтрации сигнала, как это я хотел бы, чтобы проверить другие варианты
from scipy import signal
from scipy.signal import filter_design as fd
import matplotlib.pylab as plt
#bandpass
Wp = [8, 12] # Cutoff frequency
Ws = [7.5, 12.5] # Stop frequency
Rp = 1 # passband maximum loss (gpass)
As = 100 # stoppand min attenuation (gstop)
b,a = fd.iirdesign(Wp,Ws,Rp,As,ftype='butter')
w,H = signal.freqz(b,a) # filter response
plt.plot(w,H)
t = np.linspace(1,256,256)
x = np.arange(256)
plt.plot(t,x)
y = signal.filtfilt(b,a,x)
plt.plot(t,y)
отслеживающий должен показать вам, какая линия является причиной проблемы. Вы можете поместить вокруг него блок try/except и распечатать/записать информацию об объекте. Вы также можете ознакомиться с [pdb] (https://docs.python.org/3/library/pdb.html) и попытаться использовать его для косвенного объекта (ов), вызывающего проблему. – wwii