此处欢迎所有建议和相关信息的链接。这是场景:
让我们说我有一个人的.wav文件(因此所有样本都与之相关)。
我想对一系列样本运行算法,以检测事件何时发生,即信封的开始和结束。然后我将使用此起点和终点来提取要在别处使用的数据。
解决这个问题的最佳方法是什么?任何伪代码?示例代码?源代码?
我最终会在C中写这个。
谢谢!
编辑1
解析wav文件不是问题。但是一些用于包络检测的伪代码会很好! :)
答案 0 :(得分:7)
通常的方法是:
答案 1 :(得分:3)
您可以使用与旧式模拟仪表相同的方法。校正样本矢量,通过低通滤波器(FIR,IIR,移动平均等)传递绝对值结果,而不是与某个阈值进行比较。要获得更准确的事件时间,您必须减去低通滤波器的群延迟时间。
补充:您可能还需要预先移除DC(例如使用高通滤波器或其他相当于电容耦合的DC阻断器)。
答案 2 :(得分:1)
简单包络检测器的源代码可以在Music-DSP Source Code Archive中找到。
答案 3 :(得分:1)
我用Java编写了一个活动检测器类。它是我的开源Java DSP collection的一部分。
答案 4 :(得分:0)
一阶低通滤波器C#代码:
double old_y = 0;
double R1Filter(double x, double rct)
{
if (rct == 0.0)
return 0;
if (x > old_y)
old_y = old_y-(old_y - x)*rct/256;
else
old_y = old_y + (x - old_y) * rct/256;
return old_y;
}
信号=(ucm + ucm * ma * Cos(big_omega * x))*(Cos(small_omega1 * x)+ Cos(small_omega2 * x)) 其中ucm = 3,big_omega = 200,small_omega1 = 4,small_omega2 = 12和ma = 0.8
请注意,滤波器可能会改变基带信号的相位。