Verfasst am: 15.03.2018, 17:21
Titel: Problem mit Schleife und Laufvariabel
Hallo Leute,
ich bin leider noch sehr unerfahren in Matlab und steige nicht so ganz durch, wo im folgenden Code der Fehler liegt.
Falls es das nicht in das Forum gehört seid bitte nachsichtig
Was soll der Code machen?
Es soll mittels while Schleife das Übertragungsverhalten eines Gerätes überprüft werden. Dazu wird ein Signal abgespielt und aufgenommen. Anschließend wird das aufgenommene Signal noch gefiltert und der Schalldruckpegel bestimmt. Solange ein Wert kleiner gleich 5dB rauskommt, soll das Programm nochmal messen.
Mein "Problem ist allerdings, dass jeder Durchlauf gespeichert werden soll, da ich die Werte im Anschluss für die Auswertung brauche.
Ich weiß allerdings nicht, wie lange er dauert, bis das Abbruchkriterium eintritt.
Nun mein Problem:
Ich bekomme folgende Fehlermeldung: Error: ()-indexing must appear last in an index expression.
Hier der Code:
Code:
m=1
whilediff <=5
messung(:,m)=Audio('playrecord',pinknoise,50);
[ fm, yrms ] = fracOctFilt( m(:,2), 3, fs ); %filtert das Zeitsignal und berechnet die Terzen und Mittenfrequenzen
m_dB(:,m)= 20*log10(yrms/20e-6);
m_dB(:,m) = m_dB(:,m)(1,14:21);%greift auf die Terzbänder von 1000 - 5000Hz zu
m_dB(:,m) = round(m_dB(:,m));
diff(:,m)=m_dB(:,m)-zero_gain_setting_reference
m=m+1
Ich hätte noch eine zweite Frage:
Gibt es einen Befehl, durch den die Schleife pausiert und sie erst fortgeführt wird, wenn ich die Enter-Taste drücke (sodass ich mein Gerät justieren kann)?
bitte immer angeben, in welcher Zeile der Fehler auftritt. Meine Vermutung wäre
m_dB(:,m)(1,14:21);
Dann ist die Frage, welchen Datentyp m_dB hat und was da extrahiert werden soll. Sinnvoll wäre so eine Indizierung nur bei Cell Arrays, dann aber
m_dB{:,m}(1,14:21);
Die Abfrage "diff < 5" finde ich doppelt fragwürdig:
1. diff ist ein Befehl, sollte also nicht als Variablenname verwendet werden
2. diff ist bei dir anscheinend eine Matrix. Wann ist eine Matrix denn für dich < 5?
Der Fehler scheint wirklich in der von Dir angebenen Zeile aufzutreten. Leider sagt Matlab mir nicht, wo genau der Fehler auftritt. Ich bekomme eben nur die Fehlermeldung, welche ich gepostet habe.
m_dB ist ein Vektor Es sollen bestimmte Werte aus yrms extrahiert werden. Genauer gesagt sind das Schalldruckpegelwerte, die zu bestimmten Terzen gehören. Ich weiß leider nicht genau, wie ich aus dem ganzen ein Cell Array mache. Der Datentyp wäre auch deutlich besser für mein Vorhaben, da ich dort (soweit ich das überblicken kann), in der ersten Zeile z.B "Messung 1" schreiben könnte.
Das "diff" ein Matlab Befehl ist, habe ich dann auch bemerkt und die Variabel mittlerweile umgenannt.
Durch das Programm werden dB-Werte voneinander abgezogen. Falls ein Wert <5 ist, soll das Programm abbrechen und meine Messung ist vorbei. Da ich aber nicht weiß wann dieser Fall eintritt, habe ich mich für die while-Schleife entschieden.
Leider sagt Matlab mir nicht, wo genau der Fehler auftritt. Ich bekomme eben nur die Fehlermeldung, welche ich gepostet habe.
Wenn du das Skript vom Command Window aus ausführst, dann solltest du die Zeile angegeben bekommen.
Zitat:
m_dB ist ein Vektor
Dann ist die geschachtelte Abfrage aber nicht sinnvoll, weil die m-te Spalte ja nur ein Wert ist?
Zitat:
Es sollen bestimmte Werte aus yrms extrahiert werden. Genauer gesagt sind das Schalldruckpegelwerte, die zu bestimmten Terzen gehören.
Die Information ist für mich wenig hilfreich. Um welche Zeilen / Spalten geht es dir? Wie gesagt, bei einem Vektor scheint mir die geschachtelte Indizierung nicht sinnvoll.
Zitat:
Falls ein Wert <5 ist
Dann sollte die Abfrage aber so lauten (mit anzupassendem Variablennamen)
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.