这几天我也在弄MLC,在做我那个项目过程中,也是重新认识了一遍这个MLC,对你的问题谈谈我目前的认识~
1、在之前我发的帖子里介绍的那个训练采集方式有些问题,这几天通过大量测试发现,在采集数据时,需要在一个数据集中重复执行这个动作,执行动作的周期便是之后要设置的窗口宽度参数。官方说明中的动作起始要求也是在窗口参数这里出现的问题。窗口参数其实就是个剪切块,对采集数据进行分割,然后求出统计值进行学习分类,所以最好是要去掉动作前和动作后的空白噪声区域,这样扫描窗口内就都是你动作的区间了。去掉的这个过程其实可以用我之前写的那个小工具。
2、采集次数这块,不需要很多次。我尝试过每个动作采集20+次,导入MLC中在获得训练文件时,Unico就卡死退出了。后来,我尝试一个采集周期内,采集多个重复动作,便能够正常得到训练文件和后面的结果了。
3、特征值这块,我测试时发现会存在选择数量上限,所以在有限个特征值数量中,选择动作差异比较明显的那些,其实多多益善,weka会对每种特征值进行分类求权,并且根据最明显的特征生成决策树。
4、这里你需要分析下不同敲击声音间会存在那些差异了,比如你不同声音的响度不同,那么在加速度上来看就是峰峰值存在差异,或者音色不同,那么就是频率上会有差异,体现在加速度上可能能量、均值就会高,根据这些特征差异,是可以通过MLC来区分的,不过声音长度要高于MLC的检测频率。
FSM这个问题,比如你在向左滑动时,-X会先大于某值,然后停止时,+X会大于某阈值;向右滑动,反过来。
那么直接用阈值比较的条件语句,比如 判断-X会先大于某值,然后延时几个周期,如果中途断掉则返回;没断掉就继续判断 +X会大于某阈值,也是延时几个周期,如果中途断掉则返回,没断掉则跳转到FSM中断,然后根据设置路由输出INT1\INT2.
但是你说的想要用INT1显示向左滑、INT2向右滑,可能无法实现。从FSM的说明手册中可以看到,INT是路由的FSM的中断,同时会更改相应输出OUT寄存器的值,命令集中没有直接操作INT的指令,因此要实现分辨动作,可以通过读取OUT寄存器的值。
|