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

Sinusfunktion

 

EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 13:18     Titel: Re: Sinussignal
  Antworten mit Zitat      
Im Prinzip muss ich unter Deinem Code nur die Zeilen
Code:

phi=1;
esignal=A.*sin(zeitschritt*t+phi)+9.50);
 

schreiben. Oder? Shocked
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 13:29     Titel:
  Antworten mit Zitat      
Am besten wäre es, Du verstehst, was passiert. Dann beantwortet sich die Frage auch von selbst ;) (Falls nicht: die Antwort ist "nein, die Sinusfunktion ist abhängig vom Zeitvektor und nicht von einer beliebig gewählten Konstanten, die beschreibt, wie lange eine der zufälligen Amplituden verwendet werden soll").

Ich habe über die Zeilen auch nicht so sonderlich viel nachgedacht. Kann sein, dass da noch kleinere Fehler drin sind, so dass die Vektor-Dimensionen nicht passen. Also am besten nachvollziehen, was dort genau passiert und ggf. korrigieren.

Am meisten hilft es immernoch, es einfach auszuprobieren. So lange das Ergebnis nicht dem entspricht, wie man es sich vorgestellt hat, sind dort noch Fehler im Code.
Private Nachricht senden Benutzer-Profile anzeigen
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 14:10     Titel: Re: Sinussignal
  Antworten mit Zitat      
Vielen, Vielen Dank für Deine Hilfestellungen Laughing Laughing .

Ich habe mein Glück versucht...

Code:

zeitschritt=0.01;
t=0:zeitschritt:1000;
Anzahl_der_Werte_in_zwei_Sekunden=2/zeitschritt;
schrittweite=Anzahl_der_Werte_in_zwei_Sekunden;
for iCount=1:50
zufallszahl=rand(1)*9;
A(iCount*schrittweite:(iCount+1)*schrittweite)=zufallszahl;
esignal=A*sin(zeitschritt*t+1)+9.50;
end
 


Ich schreibe doch theoretisch 50 Werte in A, habe doch 50 verschiedene Amplitudenwerte. Es müsste doch so funktionieren? Oder? Question
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 16:34     Titel: Re: Sinussignal
  Antworten mit Zitat      
Ich habe meine m-File hier gepostet. Ich bekomme irgendwie nicht unterschiedliche Amplitudewerte. Jede Amplitude soll einen anderen zufälligen Wert zwischen 0..20 haben. Jetzt haben die Amplituden alle den gleichen zufälligen Wert.
Weiß jemand Rat?Question
Danke schonmal.... LaughingLaughing

eingangssignal.m
 Beschreibung:

Download
 Dateiname:  eingangssignal.m
 Dateigröße:  1.19 KB
 Heruntergeladen:  548 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 11.05.2009, 18:18     Titel:
  Antworten mit Zitat      
Ich schlage vor das Ganze als Überlagerung (hier Multiplikation) von 2 Signalen zu realisieren.

Signal 1 mit fester Freuqenz und Amplitude 1
Signal 2 mit über den Zeitraum einer Schwingung konstanten Amplitude, aber für jede Schwingung aus einem Zufallswert bestehend, also z. B. bei einer Schwingun über 4 Samples: 4.2 4.2 4.2 4.2 1.8 1.8 1.8 1.8 15 15 15 15 usw.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 18:38     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
Wie meinten Sie das mit dem zweiten Signal?

Das erste Signal sieht ja folglich so aus...

Code:

t=0:0.01:1000;
omega=0.1;
phi=1;
offset=9.5;
A=1;
esignal1=A*sin(omega*t+phi)+offset;
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2009, 19:42     Titel:
  Antworten mit Zitat      
Ich vermute, Andreas und ich meinen das gleiche. Siehe anhängendes Bild.

variabler_sinus.png
 Beschreibung:

Download
 Dateiname:  variabler_sinus.png
 Dateigröße:  8.46 KB
 Heruntergeladen:  514 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 05:55     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
Ja, ja, sieht sehr gut aus.Razz
Das ist doch genau das, was ich möchte. Eine Funktion, die sinusförmig ist und unterschiedliche (zufällige) Amplituden hat.
Die erste Funktion ist nicht schwierig zu programmieren, siehe meinen letzten Post. Aber die zweite......
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 08:02     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
Entschuldigung, aber irgendwie habe ich doch meine Probleme, die Kurve mit konstanter Amplitude auf der oben gepostetten Graphik zu erzeugen.

Code:

A=1;%Amplitude ist 1
t=0:0.01:10;%Zeitvariable
omega=1;%Frequenz ist 1, da Periodendauer auch 1
phi=1;%Kurve fängt bei 1 auf der x-Achse an
esignal=A*sin(omega*t+phi)+offset;
 


Eigentlich müsste ich doch so auf die o. g. Kurve kommen, oder etwa nicht?

Tut mir Leid, aber ich bin wirklich ein absoluter Anfänger in Matlab und muss nun für meine Bachelorarbeit mich in Matlab einarbeiten und diese damit ausarbeiten. Ich versuche wirklich immer mein Bestes Eure Tipps auszuprobieren und weiter zu entwickeln (und natürlich auch eigene Ideen zu versuchen).
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 09:35     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
EteZabel hat Folgendes geschrieben:
Entschuldigung, aber irgendwie habe ich doch meine Probleme, die Kurve mit konstanter Amplitude auf der oben gepostetten Graphik zu erzeugen.

Alles ganz einfach ;)


Code:

A=1;%Amplitude ist 1
t=0:0.01:10;%Zeitvariable
omega=1;%Frequenz ist 1, da Periodendauer auch 1
phi=1;%Kurve fängt bei 1 auf der x-Achse an
esignal=A*sin(omega*t+phi)+offset;
 


omega = 1 heißt, dass die Frequenz 1rad/s ist. Laut omega = 2*pi*f sind das nur 0,16Hz. Die Periodendauer ist also 6,3 Sekunden = 628 Samples (Zeitschritte).

Phi kannst Du der einfachheit halber am besten erstmal zu null annehmen, das macht das alles nur unnötig kompliziert.

Zitat:
Eigentlich müsste ich doch so auf die o. g. Kurve kommen, oder etwa nicht?

Die oben gemalte Kurve ist mit omega=2*pi (f=1Hz) und phi=0 berechnet worden.

Das Geheimnis der Treppenfunktion ist folgendes: Matlab weiß nichts davon, dass wir hier über Sekunden reden. Matlab sieht nur einzelne Schritte zwischen zwei Punkten. Der t-Vektor ordnet jedem Schritt eine Zeit zu und der sinus- bzw. der Treppenvektor ordnet jedem Schritt einen Wert zu.
Das heißt, wenn man eine neue Funktion (Treppenfunktion) basteln will, darf man nicht in Sekunden denken, sondern muss sich an die Schritte halten. Das ist aber ganz einfach, wenn man sich den Zusammenhang zwischen der Zeit und den Schritten überlegt. Dazu muss man die Schrittweite in Sekunden einführen.
Code:

schrittweite = 0.001; %Schrittweite in Sekunden
schritt_nummer = zeit/schrittweite;
zeit = schritt_nummer * schrittweite;
 

Zum Beispiel:
Code:

schrittweite = 0.001; %schrittweite: 1ms
dauer = 10; %So lange soll alles dauern
t=0:schrittweite:dauer; %Zeitvektor
anzahl_der_schritte = dauer / schrittweite; %umrechnung von einer Zeitdauer in eine Schrittzahl (wichtig!)
 


Mit dem code der letzten Zeile kannst Du also ausrechnen, an welcher Stelle Du einen Werte-Vektor (Treppen-Funktions-Vektor) mit einem Wert beschreiben musst, wenn Du nur eine Zeit vorgegeben hast.
Private Nachricht senden Benutzer-Profile anzeigen
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 10:40     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
Also habe ich für Dein Beispiel 10.000 Schritte.

Nun erzeuge ich mir doch noch die Zufallszahlen und schreibe diese für die Schritte in die Treppenfunktion. Oder?

Code:

for i=1:anzahl_der_schritte%10.000 Schritte
zufallszahlen=rand(1)*9;%Zufallszahlen von 0..9
esignal2=stairs(t2,zufallszahlen(i));%Treppenfunktion über die  ausgerechnete Zeit mit den Zufallszahlen erzeugen
end
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 11:05     Titel: Re: Sinussignal
  Antworten mit Zitat      
Die Sinusfunktion mit konstanter Amplitude ist nun kein Problem mehr.

Code:

A1=1;
t1=1:0.01:10;
omega1=2*pi;
phi1=1;
offset1=0;
esignal1=A1*sin(omega1*t1+phi1)+offset1;
 


...das eine wäre also geschafft...LaughingLaughing
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 12:22     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
...die Amplitudenfunktion...

... Question Question Question
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EteZabel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2009, 15:36     Titel: Re: Sinusfunktion
  Antworten mit Zitat      
So, dies ist mein aktueller Stand. Die Sinusfunktion mit konstanter Amplitude funktioniert, die Amplitudenfunktion leider nicht.QuestionQuestionQuestion

Code:

%1.) Sinusfunktion (mit konstanter Amplitude)
A1=1;
t1=1:0.01:10;%Zeitvektor
omega1=2*pi;%Frequenz (in rad/s)
phi1=0;%Verschiebung auf der x-Achse
offset1=0;%Verschiebung auf der y-Achse
esignal1=A1*sin(omega1*t1+phi1)+offset1;
%2.) (definierte) Amplitudenfunktion (als Treppenfunktion)
schrittweite=0.01;%Schrittweite in Sekunden (10ms)
schritt_nummer=0;
schritt_nummer=(schritt_nummer*schrittweite)/schrittweite;
dauer=10;%so lange soll alles dauern
t2=0:schrittweite:dauer;%Zeitvektor
anzahl_der_schritte=dauer/schrittweite;%Umrechnung von einer Zeitdauer
                                       %in eine Schrittzahl (hier 1000
                                       %Schritte)
for i=1:(anzahl_der_schritte+1)
    zufallszahlen(i)=rand(1)*10;%Werte-Vektor
end
esignal2=zufallszahlen;
%1. Plot
hold off
esignal1_a=plot(t1,esignal1,'b');
set(esignal1_a,'LineStyle','-');
set(esignal1_a,'LineWidth',2.25);
grid on
grid MINOR
title('1.) Sinusfunktion (mit konstanter Amplitude)','FontSize',14,'FontWeight','Bold');
xlabel('Zeit in [sec] \rightarrow');
legend('Sinusfunktion (mit konstanter Amplitude)','location','SouthEast');
figure();
%2. Plot
hold off
esignal2_a=stairs(t2,esignal2,'g');
set(esignal2_a,'LineStyle','-');
set(esignal2_a,'LineWidth',2.25);
grid on
grid MINOR
title('2.) (definierte) Amplitudenfunktion','FontSize',14,'FontWeight','Bold');
xlabel('Zeit in [sec] \rightarrow');
legend('(definierte) Amplitudenfunktion','location','SouthEast');
 


Bitte helft einem wirklichen Matlab-Anfänger...Sad
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.05.2009, 16:32     Titel:
  Antworten mit Zitat      
Ich habe ab Zeile 20 folgende Code eingeführt:

Code:

Werte_pro_Schwingung=round((omega1/(schrittweite*pi)))
Schwingungen=round(dauer*pi/omega1)
sig2=[];
for k=1:Schwingungen
   sig2=[sig2 repmat(rand(1),1,Werte_pro_Schwingung)];
end
plot(sig2)
 


Das ist das "zweite Signal" welches mit dem ersten multipliziert werden muss. Es ist nur wichtig die Werte_pro_Schwingung und Schwingungen so korrekt zu setzen, dass Rundungseffekte irrelevant werden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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.