Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechteck/Sägezahn Funktion mit sinus und cosinus
Immobilienhai
06.01.2006, 15:46
Hi,
ich sitze seit einiger Zeit an einer Hausarbeit für Informatik.
Es geht darum in C++ mit Hilfe der Allegro Bibliothek sich einige Mathematische Funktionen anzeigen lassen zu können.
Ich krieg auch alles hin, bis auf die blöde Rechteck Funktion und die Sägezahn Funktion.
Hier mal meine Funktion rechteck():
http://www.lerchesbergring100.de/code.jpg
Und das kommt dabei raus:
http://www.lerchesbergring100.de/rechteck.jpg
Kann mir da jemand helfen?
MfG
Thomas
Mir ist ehrlich gesagt Schleierhaft, wie man solche Funktionen mit sin und cos hinbekommen willl. Dafür brauchst du kein sin und cos!
Edit: Ich hab dir mal eine Beschreibung herausgesucht: http://wwwex.physik.uni-ulm.de/lehre/PhysikalischeElektronik/Phys_Elektr/node17.html
Naja, Rechteckfunktion z.B, als f(x) = sin x / |sin x|
Oder so ähnlich wie du es machst (wobei ich mir deinen unformatierten Code nicht wirklich antun wollte):
http://www.math4u2.de/downloadIssue.php?href=xml/Saegezahn_kurz.xml
http://www.math4u2.de/downloadIssue.php?href=xml/Rechteck.xml
Für dich heist das Zauberwort Furiersche Reihe.
Immobilienhai
07.01.2006, 00:03
@DarkTom
sorry, ich hab den Code mühsam mit der Space Taste eingerückt, aber das blöde board hat das nicht übernommen :mad:
Habe jetzt ein Screenshot eingefügt
Das nach der If-Anweisung ist die Graphische Ausgabe pixel für pixel
Die Links die du gepostet hast kenn ich, ich kann es leider nicht umsetzen.
In meinem Code, spiegelt die Innere Zählschleife das Summenzeichen wieder würde ich mal sagen.
Ich hab gehofft, jemand hätte zufällig ein Struktogramm o.ä.
@Scavi
das muss per sin/cos gemacht werden. Was auf "deiner" Seite steht verstehe ich nicht - bin doch nur an ner FH :D
Für dich heist das Zauberwort Furiersche Reihe. Aha Ja Genau...:rolleyes:
@DarkTom
sorry, ich hab den Code mühsam mit der Space Taste eingerückt, aber das blöde board hat das nicht übernommen :mad:Hätte es aber, wenn du code-tags verwendet hättest.
Die Links die du gepostet hast kenn ich, ich kann es leider nicht umsetzen.Warum?
Immobilienhai
07.01.2006, 23:34
ah so geht das...:p
http://www.lerchesbergring100.de/fx.jpg
Also die Zählschleife steht für das Summenzeichen...
Den Rest der Formel addiere ich dann immer wieder miteinandern.
Aber als Ergebnis erhalten ich dann sowas:
http://www.lerchesbergring100.de/graph2.jpg
Es sollte aber vielmehr so aussehen:
http://www.lerchesbergring100.de/graph3.jpg
Nicht viel ähnlichkeit finde ich...
MfG
Thomas
Also, erstens solltest du mit der Schleife bei 1 anfangen.
Und noch wichtiger ist es, wenn du schon über j summierst, auch j in der Formel zu verwenden und nicht i...
Mir ist ehrlich gesagt Schleierhaft, wie man solche Funktionen mit sin und cos hinbekommen willl. Dafür brauchst du kein sin und cos!
Edit: Ich hab dir mal eine Beschreibung herausgesucht: http://wwwex.physik.uni-ulm.de/lehre/PhysikalischeElektronik/Phys_Elektr/node17.html
Sicher... Nach den shannon'schen Theoremen lassen sich alle Signalformen durch eine Summe aus harmonischen Sinusschwingungen nachbilden.
Grob gesagt ist eine Rechteckfunktion nicht anders beschrieben als:
f(t) =
1: t < T/2
0: t >= T/2
Zur Zusammensetzung aus Sini ist anzumerken, daß die Frequenz der Grundharmonischen der des Ausgabesignals entsprechen sollte. Dann ist die Modulierung der Koeffizienten der Harmonischen kein großer Akt mehr. Grob gesagt, entsprechen bei der Modulierung die Koeffizienten a(m) einer Exponentialfunktion e^(-m*k). Die Koeffizienten a(m) entsprechen dabei denen einer Forurierreihe, also ist die vollständige Beschreibung einer einfachen Sinusreihe:
f(x) = sum(m=0;inf) a(m) * sin(m*x/T)
mit
a(m) = e^(-m*k)
(k ist der sog. Falloff, eine Konstante). In jedem physikalischen System ist der Nachrichtenkanal nicht linear, d.h. k ist *nicht* konstant, sondern eine Funktion des Übertragungskanals. Für hohe m (also hohe Frequenzen) konvergiert k üblicherweise gegen 0. Dies entspricht der üblichen Dämpfung der Signale auf dem Medium, und diese ist frequenzabhängig.
Immobilienhai
08.01.2006, 12:19
@DarkTom
Oh man wie peinlich...in der Formel wird i verwendet und ich hab's einfach übernommen.
Die Formel tipp ich nicht zum ersten mal ein, aber ich glaube den Fehler habe ich bis jetzt immer gemacht :mauer:
Naja nachdem ich den Fehler behoben habe, zeigt er mir gar nichts mehr an, aber nachdem ich den Startwert auf 1 gesetzt habe:
tada :D
http://www.lerchesbergring100.de/graph4.jpg
Danke! Der Sonntag ist gerettet :D
Ich glaube da wäre ich ohne dich nie drauf gekommen...:rolleyes:
Aber ich versteh aber auch nicht, warum es am Startwert gelegen hat?
Jetzt hab ich allerdings bei der Rechteckfunktion ein Problem: *edit* Problem gelöst!
http://www.lerchesbergring100.de/fx2.jpg
http://www.lerchesbergring100.de/graph5.jpg
Ich habe den Startwert der Zählschleife jetzt mal zum Spaß auf Null gesetzte und jetzt stimmt die Kurve:
http://www.lerchesbergring100.de/graph6.jpg
Aber wieso und warum?
MfG
Thomas
Aber wieso und warum?
Ganz einfach: Weils in der Formel auch so steht. (Unter dem Summenzeichen ist ein i = 0)
Und bei dem Zickzackding ist unter dem Summenzeichen ein i = 1, deswegen musst du bei 1 anfangen.
Immobilienhai
08.01.2006, 14:03
Ja ok stimmt so hätte ich es eigentlich merken müssen.
Aber das steht da, da man ja nicht durch null teilen darf <- bin ich gerade selber drauf gekommen :cool: :D
http://www.lerchesbergring100.de/fx2.jpg
[Bild gesnippt]
Ich habe den Startwert der Zählschleife jetzt mal zum Spaß auf Null gesetzte und jetzt stimmt die Kurve:
[noch ein Bild gesnippt]
Aber wieso und warum?
MfG
Thomas
Wenn du dir die beiden Kurven anschaust, siehst du, daß die obere Kurve ziemlich "verbeult" ist... Die Koeffizienten sind so vordefiniert, daß die Grundschwingung fehlt.
Je nach Auslegung der Reihe ist der Koeffizient 0 entweder die Grundschwingung, oder es ist der DC-Anteil. Das ergibt sich aber aus der Formel. (Durch den additiven Term +1 im Nenner ist ersichtlich, daß es sich hierbei um die Grundschwingung handelt)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.