OSZILLATOREN [2] ALIASING

Hier soll es ausschließlich um Arbeiten zu neuen und alten Ensembles gehen.

Moderator: herw

Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: OSZILLATOREN

Beitrag von Rampensau »

herw hat geschrieben:
Rampensau hat geschrieben:[...]
Diese Beziehungen werden später bei der Generierung von nicht aliasierenden Wellenformen aus einer bandlimitierten Impulsfolge eine Bedeutung haben.
[...]
Was heißt eigentlich in diesem Zusammenhang bandlimitiert ? (oder kommt das noch)

ciao herw
Man kann ja vorweggreifen:
Im Zusammenhang mit der Fouriertransformation kann man zeigen, dass der Dirac-Impuls alle Frequenzen (w bzw. omega) also auch die unendlichen Frequenzen zur selben Zeit enthält. Seine Spektralfunktion ist dem nach mit
Transformierte.PNG
gegeben.

Den Diracstoß kann man also als abgetastetes Signal wegen Nyquist nur annähern. In erster Näherung ist es der Einheitsimpuls, welcher 1 für k = 0 ist, und 0 für k != 0. Man beachte, es handelt sich um ein abgetastetes Signal, also eine Zahlenfolge. k ist eine ganze Zahl. Das ist auch die eigentliche diskrete "Entsprechung" der Distribution, da die Ausblendeigenschaft gilt.
Korrespondenz.png
Die Bandbeschränkte Version davon ist einfach ein Impuls, der sich aus endlich vielen Frequenzanteilen zusammensetzt. Man verwendet quasi die Fouriertransformierte eines Rechteckimpulses. Vollziehen wir einfach nochmal den Grenzprozess im Zusammenhang mit den zugehörigen Korrespondenzen im Frequenzbereich:

Nun bandbeschränkt heißt, dass die Frequenzfunktion im Idealfall ab einem gewissen omega (w) nicht mehr vorhanden ist. Die Frequenzfunktion soll also möglichst wie f(t) aussehen. Die Fouriertransformierte soll also eine möglichst Rechteckimpulsförmige Hüllkurve annehmen.
Das können wir uns einfach konstruieren, wenn wir den Vertauschungssatz betrachten. Dieser besagt grob, dass man die Korrespondenzen vertauschen kann. Also die Fouriertransformierte der Fouriertransformierten einer Zeitfunktion besitzt wieder die Gestalt der Zeitfunktion.
Nun die Fouriertransformierte eines Rechtecks ist die sinc-Funktion. sinc(x) := sin(x)/x. Die können wir ja auch als Zeitfunktion auffassen.
Dessen Fouriertransformierte muss eine Rechteckige Einhüllende besitzen. Wenn wir nun an der Impulsdauer der Frequenzfunktion drehen, können wir das Band der sinc-Funktion mit einem beliebigem endlichen w(abhängig von SR) beschränken. Das können wir bewerkstelligen, indem wir sinc(wt) zeitlich skalieren. Eine grundlegende Erkenntnis ist nämlich, dass der Abstand der Nullstellen in der Frequenzfkt. bzw. der Zeitfkt. reziprok zur Impulsdauer der Zeitfkt. bzw. Frequenzfkt. ist. (Analog: kurze Periode = hohe Frequenz).
Man sieht auch was passiert, wenn man die Höhe des Rechtecks als fest wählen würde, und T gegen unendlich gehen lässt. Die Nullstellen der sinc-Funktion rücken immer weiter zusammen, die Amplitude rast über alles hinaus und die sinc-Funktion wird zum Diracstoß.
Korrespondenz2.png
Solche Impulse können aber auch bspw. der Gauß-Impuls, cos^2-Impuls, Dreieck-Impuls,... sein. Diese sind aber nicht mehr so eng mit Diracstoß verbunden, wie der sinc-Impuls.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Einheitsimpulsfolge

Beitrag von Rampensau »

Diese Impulsformen kann man ja auch als Folge von Impulsen konstruieren. Genauer modelliert man das als eine Summe von und unendlichen vielen um einen festen Wert T (Periode)verschobenen Impulsen.
Aus dem Diracstoß wird dann die Kammfunktion. Enstprechend wird aus dem Einheitsimpuls die Einheitsimpulsfolge:
Einheitsimpulsfolge.PNG
Das ist ja schön und gut, wenn T ganzzahlig ist.
Ihn kann man aufgrund der zeitlichen Abtastung aber nicht bandbeschränkt konstruieren.
Wir können nicht für jede Frequenz einen gleichabständigen Impuls garantieren. Genauer kann man dies nur für ganzzahlige Teiler der Samplingfrequenz (T ist eine ganze Zahl).
Die Periodenlänge in Samples ist der Kehrwert des Inkrementwertes (i) des Phasenoszillators!
Hat jetzt eine Frequenz eine Periodenlänge die nicht ganzzahlig ist, wird die dargestellte Periode in ihrer Länge schwanken. Bei Sinusschwingungen unterhalb der Nyquist-Frequenz wirkt sich das kaum aus. Liegt aber eine Unstetigkeit (was unendlich hohe Frequenzen, also weitaus über Nyquist, bedeutet) zwischen zwei Samples, wird der Sprung erst auf dem nächsten Sample stattfinden.
Das führt zu Aliasierung. Genau so verhält sich ja auch der Phasenoszillator.
Unit-impulse-train.PNG
In Reaktor kann man diese Impulse jedoch relativ einfach konstruieren.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Rampensau am 4. März 2012, 21:26, insgesamt 4-mal geändert.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Wellenformen aus Impulsfolgen

Beitrag von Rampensau »

Das sieht ja ungefähr wie die Ableitung des Sägezahns aus (s.o.). Wenn man sich die Ableitung genauer anschaut, und zum Aufbau des Phasenoszillators zurückblickt, wird auch klar, warum das Integral wieder die Sägezahnfunktion ergeben muss.
sägezahn.png
Numerisch erhält man die Ableitung durch Subtraktion des vorherigen Samples von dem aktuellen Wert.
Den Differentiator haben wir ja kennengelernt. y[k] = x[k] - x[k - 1] (s.o.)
differenz.png
Die Ableitung der Sägezahnfunktion ist genau seine Steigung. Also der Inkrementalwert (i bzw. inc) des Sägezahns/ unseres Phasenoszillators. An der Sprungstelle beträgt die Ableitung genau den Wert, um den der Phasenzähler zurückgesetzt wurde, wenn er seinen maximalen Wert, also A(mplitude) erreicht hat. Wenn A die Ampitude des Phasenzählers ist, wird er um ca. 2*A zurückgesetzt, damit der Zähler den Sägezahn wieder von seinem Startwert (ca. -A) akkumuliert.
Wenn man nun das Integral bildet,
Integrator.png
(die Werte also wieder akkumuliert) hat man sich wieder einen Phasenoszillator gebastelt, der jedoch ohne Umklappen funktioniert, da die Ableitung der Sprungstelle schon diese Auswirkung hat.
Man sieht auch, dass die Impulsfolge vor der Integration möglichst von DC entkoppelt werden muss. Ansonsten würde die Integration jedes Maß von Gut und Böse sprengen. Dazu muss man den Mittelwert der Impulsfolge kennen..

Auf solchen Erkenntnissen beruht das Generieren von Wellenformen aus Impulsfolgen. Andere Wellenformen erhält man durch leichte Modifizierungen. Etwas in der Art habe ich hier auch schon gezeigt...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Sägezahn aus Impulsen

Beitrag von Rampensau »

Schauen wir uns zunächst den zeitkontinuierlichen Fall an:
Die Integration der Impulsfolge, ihre Amplitude sei 1 und T ihre Periode, würde bis ins unendliche wachsen:
int_a.png
Daher muss man die Impulsfolge vor der Integration von ihrem Gleichanteil entkoppeln. Der Gleichanteil ist der Mittelwert einer Periode. Die betrachtete Impulsfolge hat also einen Gleichanteil von 1/T.
DC removed.png
Wenn man nun integriert, kann man einen Sägezahn entdecken:
int_b.png
Für einen bipolaren Sägezahn ist die Impulsfolge um eine halbe Periode zu verschieben.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Rechteck und Dreieck.

Beitrag von Rampensau »

Eine Rechteckwelle können wir nun generieren, indem wir analog zu den früher besprochenen "Shaping"-Oszis eine weitere phasenverschobene und invertierte Impulsfolge zu der ursprünglichen addieren. Die Integration von der entstehenden bipolaren Impulsfolge ergibt ein Rechteck. Durch Verschiebung einer der Impulsfolgen lässt sich die Pulsweite einstellen. Hier brauch man den DC-Anteil nicht berücksichtigen, da die bipolare Impulsfolge DC-frei ist.
int_c.png
Eine weitere Integration ergibt eine Dreieckwelle. Diese muss man noch in Abhängigkeit der Periodendauer skalieren. In Reaktor lohnt eine solche Umsetzung der Oszillatoren kaum. Aber durch Ersatz des trivialen Einheits-Impulses durch einen bandbeschränken, wobei die Breite des Bandes definiert werden kann, gibt vielleicht interessantere Ergebnisse.
Imp-Oscs.PNG
Bei der Integration der Rechteckwelle entsteht unweigerlich ein Offset. Den hab durch eine kleinen "HP-Filter" aus der Integration entkoppelt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Sinc-Impuls

Beitrag von Rampensau »

http://de.wikipedia.org/wiki/Sinc-Funktion
Der Sinc-Impuls hat nun den Vorteil, dass man dessen spektrale Ausdehnung relativ genau durch "Verlagerung der Nullstellen" also Skalierung auf der Zeitachse steuern kann.
Da das Spektrum eines Rechteckimpulses eine Sinc-Funktion ist, bei der der Abstand der Nullstellen (der sinc-Fkt. im Frequenzbereich) reziprok zur Dauer des Rechteckimpulses (im Zeitbereich)ist,
rect_zeit.png
muss das Spektrum der Sinc-Funktion ein "Rechteckimpuls" sein. Wobei die "Impulsdauer" nicht mehr zeitlich ist, sondern vielmehr einen bestimmten Bandbereich beschreibt.
rect_frequenz.png
D.h. Die spektrale Verteilung ist bis zu einer bestimmten Frequenz (w_T) stabil (im Beispiel 1) und ab dann idealerweise nicht mehr vorhanden. Die Rechteck-Funktion ist daher die Übertragungsfunktion eines idealen Tiefpass.

Beispiel: Sinc-Impuls aus 10 Haupt-Teilwellen
sinc.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Rampensau am 13. März 2012, 01:31, insgesamt 2-mal geändert.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Sinc-Impuls in Reaktor

Beitrag von Rampensau »

Die Sinc-Funktion ist relativ leicht konstruiert. Zum Aufbau des Impulsoszillators legen wir wieder den Phasenoszillator zu Grunde. Die Amplitude des vereinfachten Phasenoszillators ist 0.5
Entsprechend muss die Sinus-Funktion und damit die Sinc-Funktion definiert werden. Damit die Umrechnung der Phase in einer ganzen Periode resultiert, muss die Phase vor der Umrechnung entsprechend skaliert werden, oder die Taylorapproximation direkt mit sin(2*pi*t) realisiert. Um eine sinc-Funktion zu erhalten, wird die sinus-Funktion durch 2*pi*t, also durch die (skalierte) Phase geteilt.
Um den 0 durch 0- Fall abzufangen, wird der Ausgangswert durch ne boolsche Fallunterscheidung mit dem entsprechenden Grenzwert ersetzt. Dieser ist 1, wie sich diesmal durch die Krankenhausregel zeigen ließe.
Um die Breite des Sinc-Impulses, also den Abstand der Nullstellen, einstellen zu können, muss die Phase mit einem Faktor N multipliziert werden. Damit die sinus-Approximation dann noch funktioniert, müssen die Eingangswerte auf den zulässigen Bereich umgeklappt werden. Dieser Faktor mit dem multipliziert wird, ist genau unser Steuerparameter des Obertongehalts der Sincfunktion.
sinc(Nt).PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Rampensau am 13. März 2012, 03:27, insgesamt 1-mal geändert.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: OSZILLATOREN

Beitrag von Rampensau »

N kann man also als Anzahl der Teilwellen auffassen, welche im Allgemeinen ganzzahlig ist. Für ganze Zahlen - 0.5 ist der Abfall nach der N. Teilwelle aber günstiger.
Die Anzahl der darstellbaren Harmonischen ist ja abhängig von der Tonhöhe und der Samplingrate. Es stellt sich heraus, dass diese Anzahl genau reziprok zum doppelten Inkrement des Phasenoszillators ist.
Wenn n_T die Anzahl der Teilwellen, und f_g die Grundfrequenz ist:
Teilwellen.PNG
So haben wir schon mal einen spielbaren Sinc-Impuls, der ab der Grundfrequenz die volle Bandbreite abdeckt. Zwar noch etwas mehr, aber unter Beachtung der Rundung ist der Fehler auch bei höheren Grundfrequenzen annehmbar klein.
si_osc.PNG
Das Spektrum ohne und mit Rundung und Subtraktion von 0.5 bei einer Grundfrequenz von ca. 2kHz
si_spec.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Sägezahn aus BLIT

Beitrag von Rampensau »

Um nun eine bandbeschränkte Impulsfolge im Sinne der Ableitung des Sägezahns zu erhalten muss ja noch der Gleichanteil subtrahiert werden. Welcher genau 1 / T ist, also unser Inkrement i. Da auf die Anzahl der Teilwellen gerundet wurde, nehmen wir den halben Kehrwert von N, also 0,5/N als Gleichanteil an. Durch ein einfaches Integrierglied entsteht dann ein Sägezahn.
BLITsaw.PNG
BLITsawOszi.PNG
Wir oben schon angesprochen, muss auch hier der Impuls um eine halbe Periode verschoben werden. Damit ein Sägezahn "ohne" Gleichanteil entsteht.
BLITsaw_ohneDC.PNG
Was sich auch anders lösen lässt, wenn man die Initialwerte des Oszillators und des Integrators entsprechend setzt. Eine andere Schwachstelle ist der Fehler, der durch die Teilwellen höher als N entsteht. Bei höheren Grundfrequenzen stimmt der Gleichanteil nicht mehr mit 0,5/N überein und der Sägezahn wandert durch die Integration ins Bodenlose. Eine Lösung ist, dem Integrator etwas Hochpass-Charakter zu verleihen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

BLIT Sägezahn

Beitrag von Rampensau »

Den Integrator kann man durch Gewichtung der Summanden mit einem Faktor kleiner 1 einen Hochpasscharakter einhauchen.
Leaky Integrator.PNG
Ich mache das gerne in Abhängigkeit von i. Man kann aber auch eine feste Grenzfrequenz wählen.
In einem ziemlich trivialen Aufbau setze ich den Oszillator und den Integrator bei Änderungen von i zurück. D.h. sie werden zurückgesetzt, wenn sich die Tonhöhe ändert.
Was einen Reset durch Gate entsprechen soll. Da eine Modulation der Tonhöhe nicht vorgesehen ist, nehme ich das gern als Alternative zum Gate.

Der Oszillator soll dann bei -0.5 und der Integrator bei 0 beginnen zu zählen.
BLITsaw_done.PNG
Der Sägezahn ist nun stabil und spielbar. Leider sind Modulationen nur bedingt bis kaum möglich und daher erst gar nicht vorgesehen..
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Rechteck

Beitrag von Rampensau »

Die Rechteckwellenform erhalten wir wieder durch Subtraktion des phasenverschobenen Impulses von dem ursprünglichem Impuls. Aus dem bipolarem BLIT wird durch Integration eine bandlimitierte Rechteckwelle.
Eine Pulsweitenmodulation ist aufgrund der Integration des BLITs aber nicht ohne Störungen möglich. Der Hochpass verhindert zwar schlimmeres, eine Pulsweitenmodulation ist aber dennoch sehr unschön.
Außerdem muss der Integrator andere Initwerte erhalten, die abhängig von der Pulsweite sind.
BLIT_Pulse.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: BLIT Sägezahn

Beitrag von herw »

Hmmm, keine Modulation vorgesehen - gibt's da noch eine Lösung oder muss man das hinnehmen?

Ciao herw
PS wenn ich mir die upload-Zeiten ansehe, dann scheinst du ja ein ausgesprochener Nachtmensch zu sein. ::kaffee::
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: OSZILLATOREN

Beitrag von Rampensau »

herw hat geschrieben:Hmmm, keine Modulation vorgesehen - gibt's da noch eine Lösung oder muss man das hinnehmen?

Ciao herw
PS wenn ich mir die upload-Zeiten ansehe, dann scheinst du ja ein ausgesprochener Nachtmensch zu sein. ::kaffee::
:mrgreen: hihi... Kann man wohl sagen. Das kommt aber von den Semesterferien. Und dass ich tagsüber lerne..

Eine Lösung habe ich schon.. Es ist mehr ein Kompromiss. Die Ursache ist auf jeden Fall die Phasenmodulation vor der Integration. Ich glaube, irgendwie muss es gehen, das irgendwie rechnerisch zu lösen. Mir ist bis auf einen "Trick", aber nichts eingefallen. Der Trick ist einfach, den unipolaren Impuls wie beim Sägezahn zu integrieren und einen phasenverschobenen Sägezahn durch ein Delay zu erzeugen. Die Klangqualität ist dann von der Interpolation der Tables abhängig. Ein einfaches Delay verzerrt schon ganz schön. Das leuchtet ein, weil die Sampleanzahl einer Periode im Allgemeinen nicht ganzzahlig ist. Außerdem ist die Variante instabiler bei Tastenanschlag und es entstehen Clicks, welche im worst case eine Periode lang sind.

Spektren ohne Delay, mit einfachem Delay und mit Delay mit 4-Punkt-Interpolation
pwm_delay.JPG
Die Pulsdauer ist dann die Delayzeit. Die ja in Sekunden angegeben will. Wir wollen die Zeit aber in Samples angeben. Um die Sekunden in Samples umzurechnen wird einfach durch die Samplerate geteilt. Oder in dem Delay die Multiplikation mit der Samplerate entfernt. Dann kann man die Dauer direkt in Samples angeben. Nun ist die abhängig von der Tonhöhe. Wir wollen maximal um eine ganze Periode verschieben. Die Länge einer Periode ist genau der Kehrwert des Inkrements .
Die Pulsdauer W geben wir nun von 0 bis 1 an, multiplizieren den Wert W mit der Anzahl der Samples und erhalten die gewünschte Verzögerungszeit. Will man die Pulseweite mit -1 bis 1 angeben, ist entsprechend zu skalieren.
Wie hier im Beispiel:
pwm_delay_struct.JPG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Rampensau am 14. März 2012, 02:19, insgesamt 1-mal geändert.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: OSZILLATOREN

Beitrag von Rampensau »

Der Oszillator ohne Delay ist schon modulierbar. Jedoch nur mit LFO. Etwas schnellere Quellen kann man nehmen, wenn man die Modulation quasi synct. Also den Ausschlag der Modulation nur bei jedem Nulldurchgang der Phase zu aktualisieren. Die Pulsweite lässt sich dann auch per Hand ohne größere Störungen einstellen.
Dabei ist dann die höchste sinnvolle Modulationsfrequenz nach Nyquist die halbe Tonhöhe.
pwm_abtast.JPG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

AA: Conclusion

Beitrag von Rampensau »

Nun, da der BLIT-Algorithmus ziemlich instabil gegenüber zeitlichen Änderungen der Impulsfolge reagiert, muss man diesen für entsprechende Modulationen anpassen. Damit steigt dann auch die Rechenzeit.
Jedoch ist das Spektrum nahezu frei von Störungen. Wenn man den Impuls anpasst, lassen sich komplett störfreie Spektren erzeugen. Da sind wir dann bei der digitalen Sinc-Funktion. Dessen Formulierung ist etwas anders als der obige si-Impuls.
Es gibt Ansätze und Dokus im Netz, die beschreiben die Verwendung von Gauss-Impulsen so, dass FM möglich ist. Andere Ansätze erzeugen Impulsformen zur Generierung synchronisierter Wellenformen...
Auch hier wächst der Aufwand mit den Anforderungen.

Die DPW-Oszillatoren sind ohne Mehraufwand FM-bar und der Algorithmus dazu ist schlank. Schwächeln tut der Algorithmus bei zeitlichen Verschiebungen und Synchronisationen.

Worauf sollte man achten:
"Gedämpfte" Sprungstellen, die oft durch Antialiasierung enstehen, erzeugen gewisse Nebeneffekte, wenn sie Modulatoren sind. Die Sprungstelle wird zu einer "Rampe", die bspw. bei einem Waveshaper die Carrierwave rückwärts ausliest. Das
Resultat am Ausgangssignal ist meist ein kleiner rauschartiger Impuls an der Sprungstelle.

Da draußen gibts noch viel mehr Ansätze zur Entstörung, an dieser Stelle setze ich aber ein anderes Thema an.

Bis demnächst..

PS: DPW und BLIT lässt sich auch auf das Dreieck anwenden. Stay tuned...
Antworten