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 Vektorlänge beim Ableiten + Darstellen

 

Richard
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 13:10     Titel: Problem Vektorlänge beim Ableiten + Darstellen
  Antworten mit Zitat      
Hallo zusammen,

ich bin der totale Neuling mit Matlab und bleibe bei eigentlich total einfachen Dingen hängen.

Ich habe ein Geschwindigkeitssignal v und möchte dies über die diff() funktion ableiten und dann die Beschleunigung darstellen.

Code:

Zeitabstand=0.00002;                % Zeit in Sekunden zwischen Werte
a = diff(v)/Zeitabstand;            % delta v / delta t
plot(t,a)
grid on, title('a')
 


Nun sagt der mir leider

Code:
Error using plot
Vectors must be the same length.

Error in csvladenundplotten (line 25)
plot(t,a)


Macht ja auch Sinn da ich bei der Geschwindigkeit z.B. 10000 Werte habe und bei dem Ableiten aber nur noch 9999 Beschleunigungswerte.

Ich möchte aber nun beides gegen die Zeit darstellen, die bei mir t ist. Das ist für die Geschwindigkeit auch kein Problem, da sie die selbe Vektorlänge besitzen (wurden zusammen aufgenommen), aber ich weiß nicht wie ich die Beschleunigung über die Zeit auftragen kann? Klar ich könnte irgendwie händisch einen Wert rauslöschen, aber das soll möglichst in ein Skript rein, da ich es fortan immer wieder machen muss.

Ich hoffe mein Problem ist verständlich und ihr könnt mir helfen.


danke und viele Grüße
Richard
Private Nachricht senden Benutzer-Profile anzeigen


Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 13:18     Titel:
  Antworten mit Zitat      
ich bins nochmal. Also ich müsste dann ja ein Programm haben, was mir z.B. einen neuen Zeitvektor erstellt sowas wie t_neu=t_alt(-1). und dann entweder ganz vorne oder ganz hinten beim zeitvektor einen Wert wegnimmt, damit es die selbe Länge hat wie der Beschleunigungsvektor.

Ob das vorne oder hinten im Vektor ist ist egal bei über 10000 Messwerten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 14:34     Titel:
  Antworten mit Zitat      
Hallo nochmal, ich habe es jetzt selbstständig durch den folgenden Code gelöst:

Code:
%%% "normales" Differenzieren und plotten von v und a;
t_neu=t(1:end-1);                   % reduziert Zeitvektor um einen Wert
v_neu=v(1:end-1);                   % reduziert v-Vektor um einen Wert
Zeitabstand=0.00002;                % Zeit in Sekunden zwischen Werte
a = diff(v)/Zeitabstand;            % delta v / delta t
figure(2),                          % erstellt neues Figure
subplot(2,1,1),plot(t_neu,v_neu)
grid on, title('v'), xlabel('Zeit in s'),ylabel('v in mm/s')
subplot(2,1,2),plot(t_neu,a)
grid on, title('a'), xlabel('Zeit in s'),ylabel('a in mm/s^2')


Falls jmd eine bessere Variante kennt, bin ich trotzdem noch sehr interessiert.

Nun habe ich aber ein weiteres, größeres Problem: Mein Geschwindigkeitssignal unterliegt Störungen oder einem Rauschen, sodass das daraus enstandene Beschleunigungssignal nicht zu gebrauchen ist.



Welche Möglichkeit habe ich nun das Geschwindigkeitssignal zu glätten? Wie ginge das am einfachsten?
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: 19.01.2016, 15:06     Titel: Re: Problem Vektorlänge beim Ableiten + Darstellen
  Antworten mit Zitat      
Hallo Richard,

gradient ist numerisch stabiler als der einseitige Differenzen-Quotient und es verändert nicht die Anzahl der Elemente.

Wenn Du bei diff bleiben möchtest:
Code:
t_neu = t(1:end-1);
% Oder
t_neu = t(2:end);

Wie man mit den Indices in Matlab umgeht, wird umfassend in den "Getting Started"-Kapiteln der Dokumentation erklärt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 15:19     Titel:
  Antworten mit Zitat      
okay danke. das problem mit der vektorlänge habe ich jetzt auch schon durch den feineren code:

Code:


gelöst.

Könntest du bitte noch auf meine zuletzt gestellte Frage antworten? Geht auch allgemeiner. Mir ist bewusst, dass ich mich dann erstmal in die Details selber rein lesen muss, aber eine grobe Orientierung wäre echt hilfreich.

Ist eine gradient funktion in matlab auch leicht umzusetzen? Wie sähe da ein Code aus? habe wie gesagt einfach nur 2 Vektor reihen, keine Funktion oder ähnliches.
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2016, 16:49     Titel:
  Antworten mit Zitat      
könntest du bitte kurz den unterschied zwischen gradient und diff erklären?

sonst würde ich jetzt alle meine versuchsauswertungen mit diff machen, da das vernünftig aussieht. aber solange ich den unterschied nicht kenne.... wer weiß?
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: 24.01.2016, 01:38     Titel:
  Antworten mit Zitat      
Hallo Richard,

Die Unterschiede werden in der Dokumentation ausführlich erklärt:
Code:

DIFF ist eine einfache Differenz aufeinanderfolgender Elemente. GRADIENT ist der zweiseitige Differenzen-Quotient und damit als Steigung genauer.

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.