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

Nullstelle eines signals bestimmen

 

Fery
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2014, 12:48     Titel: Nullstelle eines signals bestimmen
  Antworten mit Zitat      
Hallo zusammen Smile,

ich habe folgendes Problem und hoffe , dass mir jemand helfen kann.
Ich möchte die Nullstellen eines sinusförmigen Signals in einem gegebenen Intervall von Sampels bestimmen. Dafür habe ich folgende Funktion geschrieben:
Code:

function [nullpunkte_intervall] = nullpunkte(y,s1,s2,fa)
% Die Funktion detektiert, ob es sich nullpunkte in einem Sampelintervall
%befinden. Wenn ja, dann gibt sie einen Vektor mit den Werten der vier
%sampels, die den Nullpunkt enthalten.
% t = Zeitvektor
% y = Funktionswert y(t)
% fa = abtastfrequenz
% s1 = startsampel
% s2 = delta_sampel
ta = 1/fa;
x = length(y);
t = (0:ta:x);
s1 = s1*ta;
s2 = s2*ta;
s3 = s1+s2;
%sampel_intervall wird bestimmt
s_intervall = s1 <= t & t <= s3;
% speichert Messwerte in einem Vektor
werte = y(s_intervall);
n = length(werte);
i = 1;
%schleife zur Bestimmung der Nullpunkten
while ( i <= n )
    if (werte(i) > 0 && werte(i+1) > 0)
        i = i+1;
        nullpunkte_intervall = [0 0 0 0];
        elseif (werte(i) < 0 && werte(i+1) < 0)
        i = i+1;
        nullpunkte_intervall = [0 0 0 0];
       elseif(werte(i) < 0 && werte(i+1) > 0)
        nullpunkte_intervall = [werte(i-1),werte(i),werte(i+1),werte(i+2)];
        i = n+1;
       elseif(werte(i) > 0 && werte(i+1) < 0)
        nullpunkte_intervall = [werte(i-1),werte(i),werte(i+1),werte(i+2)];
        i = n+1;
    end
end
   
end


 


aber wenn ich funktion ausführe kriege ich folgende Fehlermeldung:
??? Attempted to access werte(22); index out of bounds because numel(werte)=21.

Error in ==> nullpunkte at 16
if (werte(i) > 0 && werte(i+1) > 0)

und ich weiß nicht , wie ich das problem beheben kann.

Ich bedanke mich im voraus für eure Hilfe Surprised
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 26.11.2014, 13:04     Titel:
  Antworten mit Zitat      
Deine Abbruchbedingung der Schleife i<=n ist nicht korrekt. Der Index i darf bis maximal n gehen, aber du versuchst mit i+1 und i+2 auf einen Bereich in Werte zuzugreifen, der nicht existiert. Wenn i=1 ist werte(i-1) aber auch unzulässig, da der Index immer mit 1 beginnt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fery
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2014, 13:19     Titel:
  Antworten mit Zitat      
wie sollte ich dann deiner Meinung nach die Abbruchbedingung definieren?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 26.11.2014, 13:28     Titel:
  Antworten mit Zitat      
Code:
while ( i < n-1 )
    if (werte(i) > 0 && werte(i+1) > 0)
        i = i+1;
        nullpunkte_intervall = [0 0 0 0];
    elseif (werte(i) < 0 && werte(i+1) < 0)
        i = i+1;
        nullpunkte_intervall = [0 0 0 0];
    elseif(werte(i) < 0 && werte(i+1) > 0 && i > 1)
        nullpunkte_intervall = [werte(i-1),werte(i),werte(i+1),werte(i+2)];
        i = n+1;
    elseif(werte(i) > 0 && werte(i+1) < 0 && i > 1)
        nullpunkte_intervall = [werte(i-1),werte(i),werte(i+1),werte(i+2)];
        i = n+1;
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Fery
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2014, 14:43     Titel:
  Antworten mit Zitat      
es funktioniert!!!! Very Happy Very Happy Very Happy

vielen dank für deine Hilfe.
Du hast echt ein Bierchen verdient Laughing Laughing
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.