查看单个帖子
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 一维多峰检测?

我目前正在尝试在AS3中实现基本的语音识别。我需要完全成为客户端,这样我才能访问功能强大的服务器端语音识别工具。我当时的想法是检测单词中的音节,然后用它来确定说出的单词。我知道这会限制识别的能力,但是我只需要识别几个关键词,就可以确保它们都有不同数量的音节。

我目前能够为一个口头单词生成一维语音水平数组,并且我可以清楚地看到,如果我以某种方式画出它,则在大多数情况下音节都有明显的峰值。但是,我完全不知道如何找到这些高峰。我只需要计数,但是我想这是找到它们的过程。起初,我想获取一些最大值并将它们与平均值进行比较,但我忘记了那个比其他峰大的峰,因此,我所有的“峰值”都位于一个实际峰上。

我偶然发现了一些Matlab代码这些代码看起来太短了以至于无法实现,但是由于无法将其转换为我所知道的任何语言,我无法做到这一点。我尝试了AS3和C#。因此,我想知道你们是否可以在正确的道路上启动我,或者使用任何伪代码进行峰值检测?



回答:

Matlab代码非常简单。我将尝试将其翻译为更多伪代码。

转换为ActionScript / C#应该很容易,如果您遇到困难,应该尝试一下并在代码中发布后续问题,这样您将获得最佳的学习效果。

Param: delta (defines kind of a tolerance and depends on your data, try out different values) min = Inf (or some very high value) max = -Inf (or some very low value) lookformax = 1 for every datapoint d [0..maxdata] in array arr do this = arr[d] if this > max max = this maxpos = d endif if this < min min = this minpos = d endif if lookformax == 1 if this < max-delta there's a maximum at position maxpos min = this minpos = d lookformax = 0 endif else if this > min+delta there's a minimum at position minpos max = this maxpos = d lookformax = 1 endif endif

更多&回答...
poster 当前离线   回复时引用此帖