Я пытаюсь рассчитать импульсную характеристику сигнала.Вот код:
def impulse_response(self):
# Inverse filter:
T = self.recorded_data.shape[0] / self.samplerate
t = np.arange(0, T*self.samplerate - 1) / self.samplerate
R = np.log(20/20000)
k = np.exp(t*R/T).astype(np.float32)
f = self.recorded_data[::-1] / k # Gives an MemoryError
# Impulse response:
return sig.fftconvolve(self.recorded_data, f, mode="same")
Деление при расчете фильтра f дает MemoryError.self.recorded_data
- это синусоидальная развертка 15 с, частота дискретизации 44100 Гц и 2822400 байт.k
имеет размер 2822396 байт (оба массива имеют 32-разрядные числа с плавающей запятой).Я не думал, что эти массивы будут проблемой для разделения, поскольку они не такие большие.Есть ли проблема с тем, как деление?Может быть, есть более эффективный способ сделать это?Или я должен использовать другой тип данных?
Размеры массивов, которые я нашел с помощью https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.ndarray.nbytes.html
Я получаю ту же ошибку при делении массивов NumPY в моей функции transfer_function()
, поэтому я предполагаю, что этота же проблема.
Я получил код от https://dsp.stackexchange.com/questions/41696/calculating-the-inverse-filter-for-the-exponential-sine-sweep-method
Кстати, мой компьютер имеет 8 ГБ ОЗУ.
Спасибо за любые ответы!