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 s = spline(0:p:N+1 , 0:x(p):0 , 1:N);

 

poseidon
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2017, 09:13     Titel: Fehlermeldung s = spline(0:p:N+1 , 0:x(p):0 , 1:N);
  Antworten mit Zitat      
Hallo Leute,

ich bin ein Matlab Anfänger und versuche die EMD- Empirical Mode Decomposition Methode auf ein Biosignal zu legen, um den Baseline Wander Anteil raus zu 'löschen' . Ich habe seit ein Paar Tagen ein Problem mit der untenstehenden Fehlermeldung. Zwar habe ich im Forum gelesen, dass es sich darauf bezieht, wenn ein Wert gleich Null ist, aber ich verstehe dennoch nicht genau, wo der Wert gleich Null sein könnte. Den Code habe ich aus dem Internet.

Vielen Dank

Code:
% Das ist der Code
function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Func : findpeaks

x = transpose(x(:));
imf = [];

while ~ismonotonic(x)
   x1 = x;
   sd = Inf;
   while (sd > 0.1) | ~isimf(x1)
      s1 = getspline(x1);
      s2 = -getspline(-x1);
      x2 = x1-(s1+s2)/2;
     
      sd = sum((x1-x2).^2)/sum(x1.^2);
      x1 = x2;
   end
   
   imf{end+1} = x1;
   x = x - x1;
   
end
imf{end+1} = x;

% FUNCTIONS

function u = ismonotonic(x)

u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0, u = 0;
else,      u = 1; end

function u = isimf(x)

N  = length(x);
u1 = sum(x(1:N-1).*x(2:N) < 0);
u2 = length(findpeaks(x))+length(findpeaks(-x));
if abs(u1-u2) > 1, u = 0;
else,              u = 1; end

function s = getspline(x)

N = length(x);
p = findpeaks(x);
s = spline(0:p:N+1 , 0:x(p):0 , 1:N);
 


DAS IST DIE FEHLERMELDUNG:

Subscript indices must either be real positive integers or logicals.

Error in emd>getspline (line 47)
s = spline(0:p:N+1 , 0:x(p):0 , 1:N);

Error in emd (line 13)
s1 = getspline(x1);

Error in kp (line 3)
emd(x);
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.07.2017, 18:58     Titel: Re: Fehlermeldung s = spline(0:p:N+1 , 0:x(p):0 , 1:N);
  Antworten mit Zitat      
Hallo poseidon,

Zitat:
... aber ich verstehe dennoch nicht genau, wo der Wert gleich Null sein könnte.

Das musst Du zum Glück nicht erahnen, sondern Du hast ja Matlab, das genau weiß welche Werte 0 sind. Verwende als den Debugger. Tippe dies ins CommandWindow:
Code:

Dann lasse den Code nochmal laufen. Matlab stoppt bei der Fehlermeldung. Dann untersuche im CommandWindow die Werte:
Code:
% s = spline(0:p:N+1 , 0:x(p):0 , 1:N);
p
N
x(p)
1:N
0:x(p):0
which spline -all


Nebenbei ist "0:x(p):0" sehr seltsam. Möglicherweise ist der "Code aus dem Internet" defekt. Hast Du schon mal den Autor gefragt?

Unter welcher Lizenz wurde der Code veröffentlicht? Darfst Du ihn einfach auszugsweise posten? Viele Internet-Benutzer kümmern sich erstaunlich wenig um das CopyRight und bedenken nicht, dass das Veröffentlichen fremder Codes rechtlich eingeschränkt sein kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
poseidon
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2017, 19:54     Titel:
  Antworten mit Zitat      
Hallo Jan

vielen Dank für die zügige Antwort.
Ich hab mal wie du gesagt hast den Debugger gestartet, im Command Window dann die Werte für:
x(p) , 1:N , 0:x(p):0
erfragt und es stand bei allen Dreien genau die folgende Fehlermeldung:
'Subscript indices must either be real positive integers or logicals. '
Heisst es der Code ist Tod?
Vielen dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.07.2017, 13:40     Titel:
  Antworten mit Zitat      
Hallo poseidon,

Zitat:
es stand bei allen Dreien genau die folgende Fehlermeldung:
'Subscript indices must either be real positive integers or logicals. '

Wirklich? Bist Du ganz sicher, dass "1:N" die gleiche Fehlermeldung produziert, obwohl darin gar kein Index verwendet wird? Seltsam.

Zitat:
x(p) , 1:N , 0:x(p):0
'Subscript indices must either be real positive integers or logicals. '

Aha. So ein Debugger ist doch etwas schönes. Was sagt Dir diese Meldung nun? Welcher Index ist nicht valide? p. Offenbar ist p kleiner gleich 0 oder nicht ganzzahlig. Möglicherweise liegt das Problem aber auch wo anders, und das könnte ich abschätzen, wenn Du wie angeraten dies prüfst:
Code:
p
N
x(p)
1:N
0:x(p):0
which spline -all

Die Ergebnisse davon zu kennen, würde mir erlauben Dir weiter zu helfen. Solchen Ratschlägen nachzukommen ist im Forum immer eine gute Idee.

Der Code ist zumindest merkwürdig. "0:x(p):0" halte ich für Unfug. Die fehlenden Kommentare sorgen dafür, dass man nicht weiß, was der Autor beabsichtigt hat. Ob ein Ergebnis dann den Absichten entspricht oder ein Bug ist, lässt sich so nicht abschätzen.
Ich würde solchen Code nicht für ernste wissenschafliche Arbeiten verwenden - auch nicht, wenn mir auf Anhieb das erwartete Ergebnis geliefert würde, oder es zumindest so aussieht als ob.

Gruß, Jan
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 - 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.