Hallo, für die DSP Programmierung benötige ich den Sinus.
Die Berechnung der Werte mit einer Sinus Funktion ist für den DSP zu
rechenintensiv.
Darum hab ich erfahren, dass man mit einem Phaseninkrement diese Sinus
Werte damit berechnene kann. Dies soll deutlich schneller sein.
Kann mir einer das Prinzip des Phaseninkrementes erklären?
deltaPHI = w*t=2*pi*fo*t
Mir ist unklar wie man die Werte berehcnen kann.
Jens wrote:
> Kann mir einer das Prinzip des Phaseninkrementes erklären?>
ja.
Beispiel: nimm die komplexe Zahl (1+i*0) . Die hat den Betrag eins und
den Winkel 0°. Jetzt nimm ne komplexe Zahl (1+i*1)/sqrt(2), die hat den
Betrag 1 und den Winkel 45°. Beide Zahlen miteinander multipliziert
liefert Dir die Zahl (1+i*1)/sqrt(2), also die Zahl 1+i*0 um das
Phaseninkrement 45° gedreht. Das achtmal gemacht und Du bist einmal um
den Kreis rum. Das geht mit beliebigen 'Phaseninkrementen'. Die erste
Komponente der komplexen Zahl, die Du drehst, ist Dein Cosinus, die
zweite Dein Sinus. Das kostet eine komplexe Multiplikation und heißt
Cordic.
gute Nacht
Detlef
Phaseninkrement klingt eher nach DDS, die Zahl die jedesmal dazuaddiert
wird, kann man so bezeichnen. Der Cordic funktioniert ja iterativ
nähernd, nicht nur in einem Schritt.
deltaPHI N fo N
k = -------------- = --------
2*pi fa
Von einer Vorlesung habe ich diese Formel mal aufgeschrieben. Weiss
nicht mehr was diese bedeutet. Was soll da k darstellen?
http://catb.org/~esr/faqs/smart-questions.html>>Hallo, für die DSP Programmierung benötige ich den Sinus.
jau, 'den Sinus'. Abtastfrequenz? Frequenz? Amplitude?
float/Integerrechnung .......
Jens, was willse denn nu?
Cheers
Detlef
Ja die Frage ist etwas unpräzise gestellt.
Zur digitalen Sinuserzeugung gibt es nicht so viele Möglichkeiten, wie
schon genannt:
* Sinustabelle auslesen, entweder mit fester Schrittweite oder feiner
gestuft mit Jitter nach dem DDS-Prinzip.
*Dann die Berechnung, ohne Tabelle, dazu bietet sich der Cordic
Algorithmus an.
*Und schließlich die Filterung, aus einer Rechteckschwingung wird durch
Tiefpassfilter auch ein Sinus. Digital bieten sich dazu Digitalfilter
wie FIR oder IIR an.
Ist es nicht so, dass man zuerst die Sinuswerte von 0 bis pi/2 errechnen
muss.Dieser Werte müsste man doch dann in ein Array ablegen.
Im weiteren Programmanlauf, muss dann die Anzahl N der erwünschten
Impulse festgelegt werden. Die Abtastfrequenz bleibt eigentlich konstant
oder?
k = (deltaPHI*N)/(2*pi) = (fo*N)/fa
Vielen Dank für die Infos. Was mir eigentlich fehlt, ist so ein Beispiel
mit Zahlenwerte, wo die Abtastfrequenz, die Anzahl N der Impulse und die
Signalfrequenz vorkommen. Gibt es irgendwo ein Skript wo dies expliziet
erklärt?
Mir scheint hier das Thema Phasenincrement ein wenig untergegangen.
1. Es wird eine Drehmatrix A gebildet mit z.B einem Winkel von 5 Grad,
sozusagen das Phasenincrement
2. Wir nemen ein Signal s(n), wobeil s(0) = 1
3. Das Signal wird mit der Drehmatrix schrittweise gedreht s(n+1)=A*s(n)
4. Das Sinussignal ist Real(s(n))
Kleines Problem bei der rekursiven Rechnung: wachsende Rundungsfehler
durch beschränkte Genauigkeit
Lösungsmöglichkeit: Signal hin und wieder normieren
ich hab da auch mal eine frage zu :
wenn ich einen sinus in einer tabelle ablege (habe es mir einfach
gemacht und einen kompletten sinus-zug abgelegt) und diese tabelle
mittels dds auslese und an einen audio-dac gebe habe ich zwar einen
sinus, aber der ist natürlich nicht so genau (aufgelöst), da ich ja nur
eine endliche (begrenzte) anzahl an sinus-werten (sütztstellen wenn man
so will) habe. diese ungenauigkeit ist messbar (und auch hörbar, je
nach frequenz).
meine frage ist nun ob es eine faustformel gibt mit der sich anhand der
anzahl der werte der sinustabelle und der samplerate die qualität des
signals (in form von thd) berechnen lässt. gerade bei sinus fallen
harmonische am ehesten auf.
hintergrund ist der das ich (mal wieder das audio-projekt) eine
wavetable eingebaut habe um mehr als nur 2 wellenformen (sägezahn,
rechteck) zur verfügung zu haben.
habe also ein ram, und dieses ram hat 1024 worte (16-bit). ich überlege
nun ob ich 1, 2 oder 4 verschiedene wellenformen ablegen kann. je
weniger wellenformen, desto "genauer" wird die wiedergabe.
allerdings kostet es halt auch speicher (und der ist leider sehr
begrenzt) und für einen synthesizer sollten meiner meinung nach schon so
zw. 4-6 wellenformen auswählbar sein.
bei wellenformen die ohnehin schon einige harmonische haben ist das
nicht ganz so kritisch, wenn ich aber an einen sinus-bass denke dürfte
dieser nicht so toll klingen bei nur 256 sinus werten.
gibt es sowas wie eine fausformel für so einen fall (bezogen auf thd) ?
gruß
rene
wenn sich die Formen wiederholen musst du nicht die ganzen Werte
ablegen, z.B. beim Sinus reichen die Werte bis zur hälfte der 1.
Halbwelle. Die restlichen werte kann man durch spiegeln erzeugen. Wenn
du noch den Cosinus brauchst, kannst du dir den auch aus der gleichen
Tabelle erzeugen.
LG
Horst