gpt4 book ai didi

speech-recognition - 发出实现能量阈值算法以进行语音事件检测的问题

转载 作者:行者123 更新时间:2023-12-02 04:09:15 28 4
gpt4 key购买 nike

我正在尝试实现用于语音 Activity 检测的能量阈值算法,而对于大小为wL的帧,没有获得有意义的能量值。

wL = 1784 // about 40 ms (
const double decay_constant = 0.90 // some optimal value between 0 and 1
double prevrms = 1.0 // avoid DivideByZero
double threshold = some optimal value after some experimentation

for (int i = 0; i < noSamples ; i += wL)
{
for (int j = 0; j < wL; j++)
{
// Exponential decay
total = total * decay_constant;
total += (audioSample[j] * audioSample[j]); // sum of squares
}

double mean = total / wL;
double rms = Math.Round(Math.Sqrt(mean),2); // root mean sqare
double prevrms = 1.0;

if(rms/prevrms > threshold)
{
// voice detected
}

prevrms = rms;
rms = 0.0;
}

上述实现有什么问题?每一帧的 rms计算为0.19。

另一个问题是速度,因为执行上述操作大约需要30分钟。当前的实现是O(n2)。我正在使用离线数据,因此并没有什么大不了的-准确性是主要目标-但任何提高效率的建议都将受到赞赏。

另外,我应该使用自相关和过零率等其他因素,还是仅凭能量就足够了?

以下是我正在使用的WAV文件的摘要(仅考虑干净的 session 语音):
// WAV file information
Sampling Frequency: 44100 Bits Per Sample: 16
Channels: 2 nBlockAlign: 4 wavdata size: 557941248 bytes
Duration: 3162.932 sec Samples: 139485312 Time between samples: 0.0227 ms
Byte position at start of samples: 44 bytes (0x2C)

Chosen first sample to display: 1 (0.000 ms)
Chosen end sample to display: 1784 (40.431 ms)

16 bit max possible value is: 32767 (0x7FFF)
16 bit min possible value is: -32768 (0x8000)

最佳答案

我发现了问题。我的第二个for循环未正确设置。基本上,第二个for循环应如下所示:

for(j = i; j <= i + wL ;j++)

代替:
for(j = 0; j < wL; j++)

一次又一次地遍历相同的样本值。

关于speech-recognition - 发出实现能量阈值算法以进行语音事件检测的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com