|
EteZabel |

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 08:45
Titel: Sinusfunktion
|
 |
Hallo,
im Rahmen meiner Bachelorarbeit benötige ich ein sinusförmiges Eingangssignal mit zufälligen Amplitudenwerte von 0..20. Ich habe mir bereits ein solches Signal programmiert.
Jedoch das Signal nur über Werte von Pi. Wie kann ich das Signal einfach für z. B. 1000s erzeugen???
Besten Dank schon mal für Eure Hilfe.
|
|
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 09:04
Titel: Re: Sinusfunktion
|
 |
|
 |
|
Gibt es einen tieferen Sinn dahinter? Du weist der Variablen zufall so etwa 181 verschiede Werte zu und überschreibst dabei immer den alten Wert. Behalten wird dabei nur der letzte Wert, also rand(181), was wiederum eine 181x181-Matrix ist. Im prinzip kannst Du die Schleife auch weglassen.
Die allgemeine Form (kein matlab-code) eines Sinus-Signals ist jene:
A ist dabei die Amplitude, omega ist die Frequenz (in rad/s), t die Zeitvariable und phi (in rad) die Phasenverschiebung. In Matlab sieht das so aus:
Da musst Du jetzt nur noch deine Zufallsamplituden mit einbringen. Wobei mir da nicht ganz klar ist, ob Du 20 Signale mit verschiedenen Amplituden willst oder ein Signal, das über den gesamten Verlauf 20 Amplituden annimmt.
Wenn Du 20 Signale mit verschiedenen Amplituden willst, dann kannst Du das so machen:
Im anderen Fall (ein Signal, das die Amplitude wechselt) gibt es diverse Möglichkeiten - kommt sehr darauf an, was Du dann genau haben willst.
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 09:12
Titel: Re: Re: Sinusfunktion
|
 |
Danke nochmal.
Also, ich möchte EIN Signal mit unterschiedlichen, zufälligen Amplitudenwerten, die zwischen 0 und 20 variieren.
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 09:43
Titel:
|
 |
Und in welcher Form soll der Übergang zwischen den Amplituden stattfinden? Sprunghaft? Dann bekommst Du ein unstetiges oder ein nicht differenzierbares Signal. Problem?
Und jede Amplitude für eine bestimmte Zeit? Oder soll die Zeit zwischen den Amplitudenwechseln auch zufällig sein?
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 09:50
Titel: Re: Sinussignal
|
 |
Die Zeit zwischen den Amplituden kann durchaus auch zufällig sein. Es muss nicht an bestimmten Zeiten ein bestimmter Amplitudenwert erreicht werden.
Ein sprunghaftänderndes Signal ist erst einmal, denke ich jetzt, kein Problem.
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 09:55
Titel:
|
 |
Der Trick wird sein, dass A ein Zeilenvektor sein wird, der genau so viele Elemente hat, wie y bzw. t. Diesen A-Vektor multiplizierst Du dann elementweise mit deinem Sinus-Signal:
Dann musst Du nur noch irgendwie den A-Vektor richtig basteln (im Beispiel ist er falsch). Der A-Vektor besteht dann aus 20 zur x-achse parallelen Geraden-Stückchen.
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 10:14
Titel: Re: Sinusfunktion
|
 |
Was meinst Du mit der lengh(t)-Funktion? Was verbirgt sich dahinter?
Ich habe die Sinusfunktion schon mal zurecht gebastelt, nur ohne zufällige Amplitudenwerte. Die Amplitude ist jetzt konstant bei 20, sie müsste nur noch zwischen 0..20 variieren.
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 10:21
Titel: Re: Sinussignal
|
 |
mal noch eine allgemeine Frage...
Wie kann man eigentlich die Sinus-Funktion auf der y-Achse verschieben?
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 10:23
Titel:
|
 |
Ah, sie soll zwischen 0 und 20 Variieren, nicht in 20 Schritten, 20 verschiedene, konstante Werte annehmen?
length gibt die Länge eines Vektors zurück. Der Amplituden-Vektor muss ja genau so lang sein, wie dein Signal-Vektor:
Signal_mit_wechselnder_Amplitude = Amplitude_zu_jedem_Zeitpunkt .* Signal_mit_konstanter_amplitude
Wenn Dein Sinus-Signal 1000 Werte hat, dann muss zu jedem dieser 1000 Werte auch eine Amplitudeninformation vorliegen. Du könntest einfach 1000 random-Werte ausgeben lassen, aber dann bekommst Du ein (fast) Zufallssignal raus. Also musst Du dir noch was cleveres einfallen lassen, wie dein Amplituden-Signal aussieht, damit man hinterher noch einen Sinus erkennen kann. Das musst aber Du wissen, was Du dir da wünschst.
Die Verschiebung auf der x-achse bewirkst Du mit der Phase phi. Auf der y-Achse verschiebst Du einfach per Addition eines Wertes (offset):
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 11:02
Titel: Re: Sinussignal
|
 |
Besten Dank für Deine Hilfe.
Nun habe ich die Sinuskurve so verschoben, dass ich bei maximaler Amplitude nur positive Werte erhalte.
Wie meintest Du die Sache mit dem random von 1000 Werten? Amplitudenwerte dürfen nun bis max. 9.0 reichen, da ich die Kurve in den positiven Bereich verschoben habe.
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 11:08
Titel: Re: Sinussignal
|
 |
|
 |
|
EteZabel hat Folgendes geschrieben: |
Wie meintest Du die Sache mit dem random von 1000 Werten? Amplitudenwerte dürfen nun bis max. 9.0 reichen, da ich die Kurve in den positiven Bereich verschoben habe. |
Naja, aktuell ist deine Amplitude ja konstant 9. Wenn ich das richtig verstehe, willst Du aber nicht immer die gleiche, sondern eine variable Amplitude.
Wenn Du das machst, ist A aber kein Skalar (einfache Zahl) mehr, sondern ein Vektor, in dem für jeden Zeitpunkt eine Amplitude vermerkt ist.
Die Kunst ist es jetzt, diesen Vektor sinnvoll zu erzeugen. Wenn Du ihn mit rand() erzeugst, hast Du für jeden Zeitschritt eine andere Amplitude. Das würde ziemlich wild und vermutlich überhaupt nicht mehr nach Sinus aussehen. Also musst Du dir was anderes ausdenken, wo die Amplitude etwas langsamer verändert wird. Zum Beispiel könntest Du immer 2 Sekunden lang den gleichen Zufallswert als Amplitude verwenden. Kommt eben darauf an, was Du willst. Aber das kann Dir hier niemand verraten - das musst Du schon selbst wissen/rausfinden.
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 11:16
Titel: Re: Sinussignal
|
 |
Ok, dann werde ich mal etwas tüfteln......
Vielen Dank für Deine zahlreiche Hilfe. Danke.
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 11:23
Titel: Re: Sinussignal
|
 |
Wenn die Funktion den Amplitudenwert für eine bestimmte Zeit halten soll, gibt es eine wait-Funktion?
|
|
|
EteZabel |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 46
|
 |
|
 |
Anmeldedatum: 06.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 11:29
Titel: Re: Sinussignal
|
 |
Ok, es gibt eine Pause-Funktion.
Meintest Du es so mit den 1000 Werten?
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2009, 11:30
Titel:
|
 |
Es gibt die Funktion wait aber die tut was völlig anderes...
Du musst die 2 Sekunden zunächst in dein Zeitraster umsetzen, damit Du weißt, wieviele Werte das in deinem Signal-Vektor sind:
Mit dieser Information kannst Du den Vektor jetzt befüllen:
Das ganze könntest Du in einer Schleife verpacken, in der Du nach und nach den Amplitudenvektor auffüllst.
Die Pause-Funktion gibt es wirklich, hat aber auch nichts mit deinem Problem zu tun, sondern hält einfach die Ausführung deines Programms für 2 Sekunden an...
PS: Du addierst da 9,5 statt 9.5
|
|
|
|
Gehe zu Seite 1, 2, 3 Weiter
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|