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

Fehlermeldung - komme nicht weiter

 

n00b2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 15:23     Titel: Fehlermeldung - komme nicht weiter
  Antworten mit Zitat      
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:
Code:

try
   latX(i)= min(find(dataX(i,searchwindow2(1):searchwindow2(2))>m(i)+4*stdnoise(i)))/ExpInfo.FreqRP2*1000;
   latY(i)= min(find(data(i,searchwindow2(1):searchwindow2(2))>m(i)+4*stdnoise(i)))/ExpInfo.FreqRP2*1000;       % Latenz bis zur Überschreitung des Schwellenwertes = MW aus vorherigen Amplituden + 4 Standardabweichung
   latZ(i)= min(find(dataZ(i,searchwindow2(1):searchwindow2(2))>m(i)+4*stdnoise(i)))/ExpInfo.FreqRP2*1000;
   
   latA(i)=[latX(i);latY(i);latZ(i)];
   lat(i)=min(latA(i))  
 
   if lat(i)>0
      anasr(i)=1
   else
      anasr(i)=0
   end
   
end


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

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 12.01.2011, 16:15     Titel:
  Antworten mit Zitat      
Ich würde vermuten, dass anasr einfach nicht erstellt wird.

Code:

   if lat(i)>0
      anasr(i)=1
   else
      anasr(i)=0
   end
 

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.01.2011, 16:24     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
n00b2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 17:00     Titel:
  Antworten mit Zitat      
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:
Code:

latX=         NA   10   7     NA   NA
Intesität=  30   40   50   10    20
 


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:

Code:
latY=         NA  NA  15     NA   NA
Intesität=  30   40   50   10    20

analog für latZ zB:

latY=         NA  NA  NA     NA   NA
Intesität=  30   40   50   10    20
%(keine starken Auslenkungen und keine Latenzen)
 


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:

Code:

latA(i)=[latX(i);latY(i);latZ(i)];
   lat(i)=min(latA(i))
 


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

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.01.2011, 17:18     Titel:
  Antworten mit Zitat      
einen Fehler sehe ich zumindest
Code:

latX(i)= min(find(dataX...

% sollte hier eigentlich nicht dataY stehen?
latY(i)= min(find(data ...
latZ(i)= min(find(dataZ...
 


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
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 12.01.2011, 17:21     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
n00b2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 17:45     Titel:
  Antworten mit Zitat      
Hallo,

ihr seid ja richtig schnell Smile


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:


Code:
  try
               latX(i)= min(find(dataX(i,searchwindow2(1):searchwindow2(2))>m(i)+4*stdnoise(i)))/ExpInfo.FreqRP2*1000    
               latY(i)= min(find(data(i,searchwindow2(1):searchwindow2(2))>m(i)+4*stdnoise(i)))/ExpInfo.FreqRP2*1000       % Latenz bis zur Überschreitung des Schwellenwertes = MW aus vorherigen Amplituden + 4 Standardabweichung
               latZ(i)= min(find(dataZ(i,searchwindow2(1):searchwindow2(2))>m(i)+4*stdnoise(i)))/ExpInfo.FreqRP2*1000
             
               latA(:,i)=[latX(i);latY(i);latZ(i)]
% hier lag mein Fehler. Ich habe den Doppelpunkt vergessen.


               lat(i)=min(latA(:,i))
         
               
                 if lat(i)>0
               anasr(i)=1
               else
                   anasr(i)=0
               end
               end

 



Vielen Dank an alle, die geholfen haben!
 
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 - 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.