如何在Python中的scipy信号卷积中添加比率参数?
How to add a ratio parameter to scipy signal convolution in Python?
我正在研究 Python 中的卷积混响和使用 scipy 的卷积
卷积方法效果很好。但是当我尝试添加一个比率属性来控制总和信号中应该有多少混响时,它不起作用:
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
我确保两个信号(干数据和脉冲响应)具有相同的采样率。如何控制干信号与房间信号的比率?
你可以在相乘后加上verb[0]+=(1.0-ratio)
得到你想要的。
但这不是混响的工作原理。应用您的比率将使混响更安静,但它们将持续同样长的时间。在现实世界中,"less reverberation" 意味着混响会更快消失。
你可能会像这样制作听起来更好的东西:
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
的过程,用不同的参数重做。
我正在研究 Python 中的卷积混响和使用 scipy 的卷积 卷积方法效果很好。但是当我尝试添加一个比率属性来控制总和信号中应该有多少混响时,它不起作用:
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
我确保两个信号(干数据和脉冲响应)具有相同的采样率。如何控制干信号与房间信号的比率?
你可以在相乘后加上verb[0]+=(1.0-ratio)
得到你想要的。
但这不是混响的工作原理。应用您的比率将使混响更安静,但它们将持续同样长的时间。在现实世界中,"less reverberation" 意味着混响会更快消失。
你可能会像这样制作听起来更好的东西:
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
的过程,用不同的参数重做。