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

Kurvenaddition

 

Meins321
Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 25.11.15
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 19.09.2017, 13:47     Titel: Kurvenaddition
  Antworten mit Zitat      
Hallo ich wollte mal fragen wie ich Abschnittsweise Kurven addieren kann?
Ich möchte eine Art Sensorsignal selber nachbauen, um dieses später abzutasten.

Es besteht aus einem Rechteck/Trapez, dazu ein Sinus addiert (System "schwingt").

Jetzt würde ich den Überschwinger gerne selber "modellieren" als e^-t/tau,

Wie kann ich nur einen Teil der Variable x3 addieren?

Gibt es vielleicht eine Funktion in Matlab die ein ähnliches Verhalten schon mitbringt?

Code:

clc
close all
clear all
fs = 10000;         %Abtastrate
t1 =  0:1/fs:1;
t_futr = 16e-3;     %Zeitverschiebung nach rechts
h2 =        20;     %Sprunghöhe
w_rec=   20e-3;     %Laenge/Dauer des Rechtecks
x1rectangle =   rectpuls(t1-t_futr,w_rec)*h2;
%Sinus
h1          =   0.5;%Amplitude
f_sine      =   400;%Frequenz Sinus
x2sine      =   h1*sin(2*pi*f_sine*t1);
x2     =   x2sine+x1rectangle;
%e function
tau =   0.001;
x3 =   exp(-(t1-(t_futr)/2)/tau);  %
%Gesamt
x4 =   (x3)+x2;
plot(t1,x3,'b'); hold on;
plot(t1,x4,'r');
axis([0 0.04 -0.5 30])
xlabel('Time (sec)')
ylabel('Amplitude')
title('Pulse')
 


SensorGedanke.m
 Beschreibung:
Sensorsignal Bastelspass

Download
 Dateiname:  SensorGedanke.m
 Dateigröße:  626 Bytes
 Heruntergeladen:  256 mal
Pulse.fig
 Beschreibung:
Plot in Matlab

Download
 Dateiname:  Pulse.fig
 Dateigröße:  408.64 KB
 Heruntergeladen:  299 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.09.2017, 13:58     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wie kann ich nur einen Teil der Variable x3 addieren?

Z.B. indem du den verbleibenden Teil auf 0 (somit neutral setzt) und dann die ganze Variable addierst.

Code:
x3( notInRange ) = 0;


Wenn innerhalb des Intervalls t \in [a, b] addiert werden soll, dann
Code:
notInRange = t1 < a | t1 > b


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Meins321
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 25.11.15
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 21.09.2017, 14:28     Titel:
  Antworten mit Zitat      
Danke Harald für deine Antwort!

Ich hätte da noch eine frage bezüglich der "exp()" Funktion.

wenn ich meine Exponentialfunktion verschieben will, auf den Zeitpunkt wo mein Rechteck beginnt, dann benötige ich einen Vector vom Typ Double der mit Nullen gefüllt ist.

An diesen hängt man dann nur die Euler Funktion an.
Sprich man verschiebt indem man exp() erst ab dem Abtastpunkt erstellt wo das Rechteck oben ist...


Eine Verschiebung nach rechts auf der X-Achse ist nur möglich, wenn man das Signal erst ab dort erstellt..

Nur wie erstellt man einen Vektor mit Nullen, hängt hinten dann eine Kurve an?

versucht hatte ich
Code:

t2=t_futur:(((w_rec-t_futr)/1)*fs):w_rec;

dann
x3 =   exp(-(t2/tau);
 


Signal_1_Woops.jpg
 Beschreibung:
e Funktion platt machen und multiplizieren... Werte vorher sind problematisch.

Download
 Dateiname:  Signal_1_Woops.jpg
 Dateigröße:  40.43 KB
 Heruntergeladen:  267 mal
Signal_Gedanken.jpg
 Beschreibung:
Signalverlauf aus 3 Kurven zusammensetzen

Download
 Dateiname:  Signal_Gedanken.jpg
 Dateigröße:  1.14 MB
 Heruntergeladen:  309 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.09.2017, 15:39     Titel:
  Antworten mit Zitat      
Hallo,

inwiefern ist das nicht durch die Antwort abgedeckt?
Das einfachste ist doch, die exp-Funktion auf dem ganzen Intervall zu berechnen und dann an den nicht gewünschten Stellen mit Nullen zu überschreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Meins321
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 25.11.15
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 21.09.2017, 15:52     Titel:
  Antworten mit Zitat      
Das stimmt nur die euler Funktion beschreibt in diesem Fall eine Dämpfung, und die liegt erst an nachdem ein Signal angelegt wurde.

Ich wollte die Kurven später nacheinander Plotten um zu Zeigen wie das Signal sich zusammensetzt.

Nullvektoren erstellen geht mit:
Code:

t2=linspace(0,0,10);
 


damit sollte ich mir den ersten Teil herstellen können, zusammensetzen fehlt dann halt noch.
Sonst kann man später nicht Multiplizieren (Dimensionsfehler).

daher werde ich mir die so irgendwie zusammenhängen:
t3=[t2,x_funtktion,t4]; wobei t3 dann genau so lang ist wie x1 :-p
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.