我希望使用AForge 2.2.5计算2个声音样本的相关系数。
我从这里阅读了计算交叉相关的公式。
并且,我从这里阅读了计算相关系数的公式。
这是我目前拥有的:
在调用CrossCorrelation()之前,已经执行了FFT。
在调用CrossCorrelation()之前,已经执行了FFT。
static Complex[] CrossCorrelation(Complex[] ffta, Complex[] fftb)
{
var conj = ffta.Select(i => new Complex(i.Re, -i.Im)).ToArray();
for (int a = 0; a < conj.Length; a++)
conj[a] = Complex.Multiply(conj[a], fftb[a]);
FourierTransform.FFT(conj, FourierTransform.Direction.Backward);
return conj;
}
static double CorrelationCoefficient(Complex[] ffta, Complex[] fftb)
{
var correlation = CrossCorrelation(ffta, fftb);
var a = CrossCorrelation(ffta, ffta);
var b = CrossCorrelation(fftb, fftb);
// Not sure if this part is correct..
var numerator = correlation.Select(i => i.SquaredMagnitude).Max();
var denominatora = a.Select(i => i.Magnitude).Max();
var denominatorb = b.Select(i => i.Magnitude).Max();
return numerator / (denominatora * denominatorb);
}
我不确定这是否是正确的实现函数(或处理数据)的方式,因为我对DSP非常陌生。如果有人能指引我走向正确的方向,我将非常感激。