PDA

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


Scavi
06.01.2006, 16:43
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

DarkTom
06.01.2006, 19:28
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

gargyle
06.01.2006, 21:15
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
07.01.2006, 16:17
@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

DarkTom
08.01.2006, 07:56
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...

Pukys
08.01.2006, 11:03
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

Jidder
08.01.2006, 13:16
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

Pukys
08.01.2006, 22:42
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)