Как добавить параметр отношения к свертке сигнала scipy в питоне? - PullRequest
0 голосов
/ 11 октября 2019

Я просыпаюсь на свертке реверберации в python, и свертка с использованием метода Свипи Convolve прекрасно работает. Но когда я пытаюсь добавить атрибут отношений для управления количеством реверберации в сигнале суммы, он не работает:

import numpy as np
from scipy import signal

def addReverb(data, ir_data, ratio=1.0):
    verb = np.multiply(ir_data, ratio)
    verbed_data = signal.convolve(data, verb, method='fft')
    return verbed_data

Я убедился, что оба сигнала (сухие данные и импульсная характеристика) имеютта же частота дискретизации. Как я могу контролировать отношение сухого сигнала к комнатному сигналу? Thnx!

1 Ответ

1 голос
/ 13 октября 2019

Вы можете получить то, что просите, добавив verb[0]+=(1.0-ratio) после умножения.

Однако реверберация работает не так. Применение вашего соотношения сделает реверберации тише, но они будут длиться так же долго. В реальном мире «меньше реверберации» означает, что реверберации исчезнут гораздо быстрее.

Возможно, вы могли бы сделать что-то лучше звучащее так:

def addReverb(data, ir_data, ratio=1.0):
    verb = np.abs(ir_data)
    verb = np.multiply(verb, 1.0/np.max(verb)) # make sure the highest value is 1
    verb = np.power(verb, 1.0/ratio) # a higher power makes the reverb die out more quickly
    verbed_data = signal.convolve(data, verb, method='fft')
    return verbed_data

Эта процедура немногоизворотливый. Он предполагает, что реверберация вызвана задержанным резким эхом, и применяет ваше отношение ко всем этим эхо.

Было бы действительно лучше вернуться к процессу, который сгенерировал ir_data, и повторить его с другими параметрами.

...