在我正在处理的当前问题中,我有两个信号:一个包含音频(语音)的“原始”信号。第二个信号是相同的音频文件,但使用频率均衡器进行了编辑,例如使之间的所有频率更响亮。
我现在想要实现的是“教”一个 SCIPY 过滤器来模仿这种行为。因此,我创建了一个带有两个巴特沃斯过滤器的函数,并尝试curve_fit将数据转换为数据。直觉是,像这样系统学习最佳频率间隔来模仿均衡器。显然它没有按预期工作(大多数时候没有曲线拟合。如果我实现曲线拟合并将过滤器应用于原始数据,它根本没有改变)。有什么建议么?
import numpy as np
from scipy.optimize import curve_fit
from scipy import signal
xdata = voice_1
ydata = voice_2
# Function to optimize, supposed that two bandpass filters are enough
def func(x, p1,p2,p3,p4):
b, a = signal.butter(2,[p1,p2],btype="band")
x = signal.lfilter(b,a,x)
b, a = signal.butter(2,[p3,p4],btype="band")
x = signal.lfilter(b,a,x)
return x
# Optimize function to achieve a curve-fit and therefore get the right frequency response in p1,p2,p3,p4
popt, pcov = curve_fit(func, xdata, ydata,p0=(0.5,0.5,0.5,0.5))
我还尝试过创建一个xsignal包含白噪声的内容,创建一个ysignal我更改了一些频率级别的位置,并将传递函数计算H为FFT(ysignal)/FFT(xsignal). 一旦我将此函数应用于白噪声以外的其他数据,结果似乎也是错误的。
