WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem mit Schleife und Laufvariabel

 

nolray
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.03.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2018, 17:21     Titel: Problem mit Schleife und Laufvariabel
  Antworten mit Zitat      
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 Smile

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

 while  diff <=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
     
 
 end


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)?


Ich bin super dankbar für jede Hilfe!

Vielen Dank,
Nolray
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.03.2018, 23:21     Titel:
  Antworten mit Zitat      
Hallo,

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);

Was die andere Frage angeht:
pause

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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
nolray
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.03.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2018, 08:39     Titel:
  Antworten mit Zitat      
Guten Morgen Harald,

vielen Dank für Deine schnelle Antwort.

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.

Vielen Dank nochmal für Deine Hilfe.

Beste Grüße,
Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.03.2018, 08:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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)
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.