Как свернуть аудио с импульсной характеристикой?

#python-3.x #numpy #scipy #convolution

#python-3.x #numpy #scipy #свертка

Вопрос:

Я хочу свернуть речевые файлы с импульсной характеристикой.

Допустим, в среднем речевые файлы имеют продолжительность десять секунд. Я пытаюсь выполнить свертку, используя numpy scipy библиотеки or.

Когда я пытаюсь, я получаю ошибку памяти! Мне жаль, что я не могу предоставить здесь речевой файл и импульсную характеристику. Пожалуйста, используйте любые аудиофайлы, чтобы проверить это.

 import numpy as np
convolved_speech_data = np.convolve(speech_data, impulse_response)
  

Я получаю следующую ошибку.

 return multiarray.correlate(a, v[::-1], mode)
MemoryError

Process finished with exit code 1
  

Я не знаю, почему это выдает ошибку, нужно ли мне нормализовать звук перед сверткой или мне нужно использовать оконную обработку?

Комментарии:

1. Какова форма вашего speech_data и impulse_response ? Т.е. вывод speech_data.shape и impulse_response.shape .

2. @blubberdiblub Спасибо, ваша подсказка избавила от вышеупомянутой ошибки. Но после свертки звук обрезается. Вы знаете, как я могу избавиться от этого?

3. Хм, я не знал, что я дал подсказку 🙂 Я, честно говоря, просто попросил дополнительную информацию. Зависит от того, что вы подразумеваете под обрезанным. Вы имеете в виду, что чего-то не хватает в начале или в конце? Или вы имеете в виду «отсечение», когда слышны искажения или потрескивания?

4. Проблема заключалась в том, что импульсная характеристика была сохранена как двойное моно, поэтому было несоответствие с формой. Под отсечением я подразумевал, что свернутый звук имеет гораздо большую амплитуду, чем исходный! Похоже, что весь звук просто усиливается на определенный целевой уровень! Но слышимых искажений нет.

5. На самом деле, это, скорее всего, деление на impulse_response.sum() вместо более ранней формулы. Это работает, когда я пытаюсь использовать синусоидальный исходный сигнал и фактические значения IR, в отличие от случайных значений, которые я использовал ранее. Простое деление на сумму также согласуется с тем, что я видел в свертках фильтрации изображений.