如何在StateFlow中处理矢量输入

时间:2016-05-30 02:49:52

标签: matlab simulink stateflow

我是StateFlow的新手,一直在关注StateFlow教程,但还没有看到过处理矢量的教程。

我的simulink模型生成音频数据的向量,我想用状态机处理它。例如,如果音频数据超过某个值,则输入state1,如果它低于另一个值,则输入state2。

如果我使用unbuffer块将数据发送到StateFlow块,系统运行速度非常慢。

那么,我怎样才能让StateFlow通过向量输入运行,处理向量中的每个元素?

编辑:我附上了我的图表的图片。这里我试图访问输入的第i个元素,但我不知道如何声明变量i以及如何增加它以处理矢量。

enter image description here

1 个答案:

答案 0 :(得分:2)

只是澄清一下,当你说你有音频数据作为向量时,这个答案假定你的意思是它们是帧。矢量可以并且始终能够直接输入到图表中。另一方面,框架没有。

但是,此功能在最近的版本中已更改。例如,R2014b中的Stateflow 允许输入帧,但在R2015b中 允许输入帧。 (我无法访问R2015a以确切了解功能何时发生变化。)

在以前的版本中,解决方法是在Stateflow阻止之前立即放置Reshape块。这会将帧转换为(单列)向量,该向量可以由Stateflow处理,因此在图表内的代码中循环。

进入图表后,数据就像在任何一段代码中一样被操纵。例如,如果您已将输入变量定义为data并且您有一个计数器变量i,那么data(i)将为您提供data的第i个元素。