如何比较c#中两种波形的相似性?
我试图根据波形的视觉方面而不是它们的声音来比较两种波形的相似性。如何比较c#中两种波形的相似性?,c#,audio,compare,waveform,C#,Audio,Compare,Waveform,我试图根据波形的视觉方面而不是它们的声音来比较两种波形的相似性。 如果波形数据的格式是,时间=0的值可以被索引为波形[0],波的下一个“帧”可以被索引为波形[1],波的“帧”的最大值为1,波的“帧”的最小值为-1,(以“帧”为单位,两个波的长度相同),那么我认为这应该是可行的:(未经测试) //波形1为w1,波形2为w2。 堆栈温度=新堆栈(); 对于(int i=0;i1f,那么挥手 //相距大于1个单位的指数的差异超过“100%”,因此可能不会 //那样做。 浮点差=数学绝对值(w1[i]-
如果波形数据的格式是,时间=0的值可以被索引为波形[0],波的下一个“帧”可以被索引为波形[1],波的“帧”的最大值为1,波的“帧”的最小值为-1,(以“帧”为单位,两个波的长度相同),那么我认为这应该是可行的:(未经测试)
//波形1为w1,波形2为w2。
堆栈温度=新堆栈();
对于(int i=0;i1f,那么挥手
//相距大于1个单位的指数的差异超过“100%”,因此可能不会
//那样做。
浮点差=数学绝对值(w1[i]-w2[i]);
温度推力(((差异<差异系数)?差异:差异系数)*0.5f);
}
返回平均温度();
到目前为止,你尝试了什么?显示代码。这超出了问答站点(如StAccOfFuffFor)的合理答案。你认为“相似”是什么?频率?振幅?复杂度?信封?
//WaveForm 1 is w1 and WaveForm 2 is w2.
Stack<float> temp = new Stack<float>();
for(int i = 0; i < w1.Length; i++)
{
//differenceFactor is the variable that decides what difference means.
//at a value of 1, then a two waves with indexes -0.5 and 0.5 will be "100%"
//different. At a value of 0.5f then two waves with indexes -0.5 and 0.5 will be
//"50%" different. According to what I see, if differenceFactor > 1f then wave
//indexes greater than 1 unit apart are more than "100%" different, so probably don't
//do that.
float difference = Math.Abs(w1[i] - w2[i]);
temp.Push(((difference < differenceFactor) ? difference : differenceFactor) * 0.5f);
}
return temp.Average();