2016-05-30 14 views
1

Ich bin neu in StateFlow und habe mir StateFlow-Tutorials angeschaut, aber noch keine, die Vektoren verarbeiten.Wie verarbeitet man die Vektoreingabe in StateFlow?

Mein Simulink-Modell erzeugt Vektoren von Audiodaten, die ich mit einer Zustandsmaschine verarbeiten möchte. Wenn zum Beispiel die Audiodaten einen bestimmten Wert überschreiten, muss state1 eingegeben werden, und wenn ein anderer Wert unterschritten wird, muss state2 eingegeben werden.

Wenn ich den Unbuffer-Block verwenden, um die Daten an den StateFlow-Block zu senden, wird das System sehr langsam ausgeführt.

Also, wie kann ich StateFlow durch eine Vektoreingabe laufen lassen, jedes Element im Vektor verarbeiten?

Edit: Ich habe ein Bild von meinem Diagramm beigefügt. Hier versuche ich auf das i-te Element der Eingabe zuzugreifen, aber ich weiß nicht, wie ich die Variable i deklariere und wie ich sie inkrementiere, um den Vektor zu verarbeiten.

enter image description here

Antwort

2

Nur um zu klären, wenn Sie sagen, Sie Audiodaten als Vektoren haben, diese Antwort geht davon aus, dass Sie bedeuten, dass sie als Rahmen sind. Vektoren können und konnten immer direkt in ein Diagramm eingegeben werden. Frames auf der anderen Seite haben nicht.

Diese Funktionalität hat sich jedoch in den letzten Versionen geändert. Zum Beispiel Stateflow in R2014b nicht erlauben Frames eingegeben werden, aber in R2015b ermöglicht ermöglichen Frames eingegeben werden. (Ich habe keinen Zugriff auf R2015a, um genau zu sehen, wann sich die Funktionalität geändert hat.)

In früheren Versionen besteht die Problemumgehung darin, einen Block Reshape unmittelbar vor dem Stateflow-Block zu platzieren. Dadurch wird der Frame in einen (einspaltigen) Vektor konvertiert, der von Stateflow verarbeitet und somit im Code innerhalb des Diagramms durchlaufen werden kann.

Sobald im Diagramm, werden die Daten wie in jedem Stück Code manipuliert. Wenn Sie beispielsweise die Eingabevariable auf data festgelegt haben und eine Zählervariable i haben, erhalten Sie mitdas i-te Element data.

+0

OK, danke für die Hinweise. Stellt sich heraus, ich sende die Daten als Vektor, Größe 64 Zeilen pro 1 Spalte. Aber Sie geben an, dass ich eine Zählervariable einrichten muss, aber das ist es, was ich in StateFlow nicht kann. Wo wird diese Zählervariable deklariert und wie wird sie erhöht? Ich habe ein Bild der Tabelle in der op angehängt. –

+0

Angenommen, Sie verwenden die MATLAB Action Language (die Standardeinstellung) für das Diagramm, dann müssen Sie nur jede Instanz von a (i) in Ihrem Diagramm durch 'any (a)' ersetzen. Das heißt, für das, was Sie gezeigt haben, müssen Sie sich nicht darum kümmern, einen Zähler zu definieren oder über jedes Element zu schreiben. –