|
|
Fehlermeldung - komme nicht weiter |
|
n00b2 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 15:23
Titel: Fehlermeldung - komme nicht weiter
|
 |
|
 |
|
Hallo,
ich habe ein Experiment durchgeführt, bei dem eine Maus in einem Käfig mit Beschleunigungssensor ist. Es wurden laute Töne unterschiedlicher Intensität abgespielt. Wenn die Maus erschrocken ist, wurde der käfig ausgelenkt und man kann die Latenz vom Beginn des Tones bis zum Beginn der Auslenkung berechnen.
Die Zeiten bis zur Auslenkung unterscheiden sich für die X, Y und-Z-Richtung der Bewegung. Als Latenz möchte ich die die kürzeste Zeit verwenden. D.h. ich muss die Latenzen von X,Y und Z-Richtung vergleichen und dann den geringsten Wert nehmen.
Wenn die Maus nicht erschrocken ist, gibt es keine Latenz.
Mein Code lautet so:
Das Ganze befidnet sich in einer for-Schleife mit der Variable i. Ein anderes i bedeudet eine andere Messung mit einer anderen Intensität des Tones.
In dataX, dataY und dataZ befinden sich die Werte der Auslenkungen des Käfigs. Eine Latenz soll dann in einer Variable gespeichert werden, wenn die Auslenkungen einen Schwellenwert übersteigt.
Die Searchwindows legen fest in welchem Zeitraum nach beginn des Tones nach einer Überscheitung des Schwellenwertes gesucht werden soll.
Als Fehlermeldung kommt nun "Undefined function or variable "anasr".
Error in ==> psv12 at 455
anasr=[anasr;IsData.dbSPL];"
latX, latY und latZ sind wohl unterschiedlich lang und deshalb werden die Variablen latA, lat und anasr nicht erstellt.
Kann mir jemand weiterhelfen?
|
|
|
|
|
_Peter_ |

Moderator
|
 |
Beiträge: 537
|
 |
|
 |
Anmeldedatum: 08.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.10, 2010a
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 16:15
Titel:
|
 |
Ich würde vermuten, dass anasr einfach nicht erstellt wird.
Was passiert wenn lat(i) kleiner gleich 0 ist? dann würde anasr gar nicht erstellt werden und kann somit später auch nicht benutzt werden.
Guck dir mal die Werte von lat(i) an ob das zutrifft.
_________________
Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 16:24
Titel:
|
 |
Hallo
das liegt mehr an der TRY-CATCH-Konstruktion, wenn Fehler in TRY-Block auftritt, wird Initialisierung von anasr einfach ganz übersprungen.
Also aufpassen bitte! Wozu brauchst an dieser Stelle überhaupt TRY-CATCH?
|
|
|
n00b2 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:00
Titel:
|
 |
|
 |
|
Hallo,
Zitat: |
Was passiert wenn lat(i) kleiner gleich 0 ist? |
nee lat(i) kann nicht kleiner gleich 0 sein. Es ist wie Peter meint.
Ich muss nochmal weiter ausführen wie genau ich das meine und wofür ich try brauche:
Ich führe z.B. messungen durch mit 30, 40,50, 10 und 20 dB durch. Nehmen wir an die Maus erschrickt bei 40 und 50 dB und lenkt den Käfig stark in X-Richtung aus, dann gäbe es nur für diese Intenistäten Latenzen:
ohne try käme schon bei lat(1) eine Fehlermeldung, da die Maus bei 30dB nicht erschrocken ist, der Käfig nicht ausgelenkt wurde und es deshalb keine Latenz gibt.
In Y-Richtung wir de Käfig möglicherweise bei 40 dB wenigerstark ausgelenkt, sodass es hier nur eine Latenz für 50dB gibt:
Jetzt ist die Latenz als die kürzeste Zeit vom Beginn des Tones bis zur Auslenkung des Käfigs definiert.
Deshalb muss ich für jede Intensität schauen, in welcher Richtung (X,Y oder Z) die Zeit bis zur Auslenkung am kürzesten war. Das ist dann meine Latenz für die jeweilige Intensität. Das habe ich so probiert:
hier liegt wahrscheinlich der Fehler, weil latX, latY und latZ nicht dieselbe Länge haben und anasr wird nicht erstellt??
Und hie rkomme ich nicht weiter.. Hat jemand eine Idee?
Vielen Dank!
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:18
Titel:
|
 |
einen Fehler sehe ich zumindest
Zitat: |
ohne try käme schon bei lat(1) eine Fehlermeldung, da die Maus bei 30dB nicht erschrocken ist, der Käfig nicht ausgelenkt wurde und es deshalb keine Latenz gibt.
|
Aber ich frage mich warum oder wie, latX, latY und latZ werden doch in TRY CATCH erstellt, haben gleiche Suchfenster. Warum verwendest du hier FIND und dann MIN
Bitte den Code, wo latX, latY und latZ erstellt werden, besser erklären!
Zuletzt bearbeitet von denny am 12.01.2011, 17:22, insgesamt einmal bearbeitet
|
|
|
_Peter_ |

Moderator
|
 |
Beiträge: 537
|
 |
|
 |
Anmeldedatum: 08.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.10, 2010a
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:21
Titel:
|
 |
|
 |
|
Dann ist es so wie Denny sagt. der try Befehl ist der Verursacher.
Wenn schon bei lat(1) der Fehler auftaucht, wird dieser Fehler nicht durch try beseitigt.
Alles was im try Block steht wird, wie der Name schon sagt, versucht auszuführen. Sollte Dabei ein Fehler auftreten wird die Fehlermeldung unterdrückt und aus dem try Block rausgesprungen und der restliche Code abgearbeitet.
Und genau da liegt dein Problem. Der Fehler tritt auf bei lat(1) ob mit oder ohne try.
Der Unterschied ist einfach, dass ohne try das Programm abbricht mit einer Fehlermeldung und mit try nur der try Block abgebrochen wird und der Rest dennoch ausgeführt.
Von daher musst du den Fehler eliminieren/umgehen.
Und der Fehler wird bestimmt besagen, dass NA keine Zahl ist und somit die funkrion min() damit nicht umgehen kann.
Eine Idee wäre die NA durch eine 0 zu ersetzen vorher.
_________________
Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
n00b2 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:45
Titel:
|
 |
Hallo,
ihr seid ja richtig schnell
Zitat: |
einen Fehler sehe ich zumindest
Code:
latX(i)= min(find(dataX...
% sollte hier eigentlich nicht dataY stehen?
latY(i)= min(find(data ...
|
ne das stimmt so. data bezieht sich auf die Y-Richtung.
Zitat: |
Zitat:
Aber ich frage mich warum oder wie, latX, latY und latZ werden doch in TRY CATCH erstellt, haben gleiche Suchfenster. Warum verwendest du hier FIND und dann MIN
Bitte den Code, wo latX, latY und latZ erstellt werden, besser erklären! |
Ich verwende zuerst find, um mir die Auslenkungen anzeigen zu lassen, an welcher Position die Auslenkungen über dem Schwellenwert liegen.
Diese Position entspricht dem Messpunkt und wird später in eine Zeit umgerechnet. Weil die Latenz die kürzeste Zeit ist verwende ich dann noch den min-Befehl.
Inzwischen habe ich noch ein Bisschen rumprobiert und eine funktionierende Variante gefunden:
Vielen Dank an alle, die geholfen haben!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2025
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.
|
|