Karsten schrieb:
> Denkfehler weiß aber gerade nicht wie ich den Sinus da jetzt korrekt
> unterbringe???
Das allgemeine Schema hab ich dir ja schon aufgezeigt.
> Aber die Berechnungen mit dem Cosinus sind doch soweit erstmal richtig
> oder?
Das kann ich nicht sagen, weil die noch unverständlicher sind.
> Ich beschäftige mich noch nicht so lange mit dem Thema.
> Wie würde man das denn normalerweise machen?
>
>
> Ich komm gerad irgendwie nicht drauf???
Dann solltest du darüber mal nachdenken.
WEnn du eine Tabelle haben willst, die 100 Einträge hat und in der eine
komplette Sinusschwingung 1 mal darin enthalten ist, wie machst du das?
Du rechnest dir aus, um wieviel der Winkel (von dem du den Sinus nehmen
wirst) von einem Schritt zum nächsten zunehmen muss, sodass der Winkel
in 100 Schritten einen Vollkreis (=360 Grad) überstreicht.
Das Winkelinkrement ist daher 2*PI / 100
Eine Schleife
winkel = 0.0;
inkrement = 2*PI / 100;
for( i = 0; i < 100; ++i ) {
tabelle[i] = sin( winkel );
winkel += inkrement;
}
erzeugt daher eine Tabelle mit 100 Werten, wobei das die Werte 1
Sinusschwingung sind.
Sollen in denselben 100 Werten 2 komplette Schwingungen untergebracht
werden, dann muss der gedankliche Winkel nicht von 0 bis 360 Grad
verändert werden, sondern von 0 bis 720 Grad. Denn 720 Grad sind 2
Umdrehungen.
winkel = 0.0;
inkrement = 2 * 2*PI / 100;
for( i = 0; i < 100; ++i ) {
tabelle[i] = sin( winkel );
winkel += inkrement;
}
Bei der berechnung des Inkrements wird also die Anzahl der zu
erzeugenden Schwingungen eingehen.
Das andere was variiert werden kann ist natürlich die Tabellenlänge.
Wenn die Tabelle nicht 100 Einträge sondern 500 umfassen soll, dann wird
sich das
* bei der Berechnung des Inkrements
* in der Steuerung der for-Schleife bemerkbar machen
Inkrement ist auch klar. Wenn ich 500 Meter zurücklegen soll und dafür
300 Schritte machen darf, dann kann ich kleinere Schritte machen als
jemand der dieselbe Strecke mit nur 100 Schritten zurücklegen soll.
Vielleicht solltest du auch erst mal mit ein paar Testprogrammen
anfangen und dir die erzeugten Werte erst mal auf dem Monitor per printf
ausgeben lassen. Müssen ja nicht gleich 1100 Herz und eine Tabellenlänge
von 8000 Samples sein. Mit kleineren Werten sieht man das auch schon
sehr gut und man erkennt auch gleich viel besser wie die mathematischen
Zusammenhänge sind.
Was gerade bei Schwingungen immer sehr gut kommt, ist wenn man sich die
Werte dergestalt ausgibt, dass der Wert in eine Anzahl Leerzeichen
übersetzt wird und dahinter dann ein *.
Dann sieht man nämlich auch auf dem Monitor sehr schön, wie sich der
Sinus in den Daten abbildet ohne dass man lange auf Zahlen starren muss
*
*
*
*
*
*
*
*
*
*
*
*
*
Das wäre 1 Sinusschwingung, umgesetzt in einer Tabelle mit 13 Einträgen
(Macht man heutzutage eigentlich keine Experimente mehr? Als
Programmierneuling haben wir Stunden damit verbracht, solche Kurven zu
generieren. Verschiedene Kurvenformen, Achsen, Achsbeschriftungen ....
alles nur mit printf und zeilenweiser Ausgabe)