 Herzlich Willkommen zum Coding Video für die Vorlesung Signaltheorie. Es freut mich, dass Sie wieder mit mir dabei sind. Wir fangen hier direkt mal an mit einem, ich sage es mal, Willkommen zu Zuckerl. Wir haben hier unsere altbekannten Pakete NumPy, Pipeplot von Matplotlib. Und wir haben diesmal auch von der Matplotlib eine Animationsmodularität mit eingebunden und wir erzeugen uns hier eben eine Figur. Wir erzeugen uns zwei Achsen, wir erzeugen uns zwei Linienfunktionen. Wir schreiben hier eine Funktion, in der wir uns diese Linien setzen und hier lassen wir eine Animationsfunktion uns erzeugen. Das bedeutet, was am Ende dabei rauskommt, ist hier eine animierte Sinusfunktion und eine animierte Cosinusfunktion über eben diese Lauflinie hier drüber und hier unten, wenn wir die Funktion aufrufen, können wir sagen, was möchten wir denn überhaupt laufen lassen, wieviel Frames haben wir denn, in welchem Intervall und danach lassen wir uns das hier ausgeben. Sie haben sogar noch die Möglichkeit, sich das Ganze hier zu speichern. Das war jetzt vielleicht ein bisschen schnell, ich mache es nochmal etwas langsamer. Wir binden unsere Pakete ein, wir erzeugen uns eine Oberfläche, wir definieren die Achsen sowie die Linien, die für unsere Sinus und Cosinusfunktionen notwendig sind. Wir machen hier eine Initialfunktion sowie eine Animationsfunktion und danach starten wir hier die Animation und lassen die Animation hier durchlaufen. Ich hätte gesagt, ich lasse das jetzt einfach mal laufen und mache das groß und wir sehen hier für diejenigen, die sowas noch nicht in Bewegung gesehen haben wunderbar eine Sinus und eine Cosinuswelle animiert in Bewegung. Sie können natürlich auch andere Dinge animieren. Wenn sie das nötige Grafikpaket haben, kann man hier sogar eine wavelet Transformation über die Zeit animieren. Das habe ich mal versucht. Allerdings ist mein Notebook, was ich hier zur Verfügung habe für solche hochgrafische Videos nicht unbedingt geeignet und das würde viel zu lange dauern, weswegen wir uns hier mal auf eine animierte Sinus und Cosinusfunktion beschränken mögen. Ich schließe das wieder. Also das ist eigentlich alles, was dieser Code hier macht. Das ist eigentlich nur so das Willkommens-Animationchen, nenne ich das mal ganz Salopp und wir steigen jetzt nun mal direkt ein in unsere Fast Fourier Transformation, wie wir sie in der Vorlesung bereits kennengelernt haben. Dazu benötigen wir die üblichen Verdächtigen, Pandas, NumPy, Mudplotlib und SciPy. Wir bedienen uns hier im Paket SciPy dem Modul FFT. Das bedeutet, dass wir hier das Rad nicht neuer finden werden. Wir werden die Fourier Transformation nicht selbst neu definieren, sondern wir nutzen hier eben diese Paketfunktionalitäten. Deswegen beginnen wir hier auch uns selbst mal eine Funktion zu schreiben, die eben hier die Fourier Transformation durchführen kann. Das ist das, was Sie hier oben sehen. Wir setzen dann einige notwendige Parameter. Falls ich es noch nicht gesagt habe, setzen wir hier einige Parameter mehr und diese Parameter hier können Sie selbst variieren. Das heißt, hier können Sie Frequenzen und entsprechend zugehörige Amplituden selbst eintragen, damit Sie hier eine Übersicht haben, welche Amplituden mit welcher Frequenz Sie denn im Signal enthalten haben möchten. Daraus kreieren wir uns hier ein Signal und berechnen die entsprechende Fourier Transformation. Lassen uns, Sie sind es anzwischen gewöhnt, danach diese Signale und die Zerlegung entsprechend ausgeben. Das ist das, was der Code hier tut. Ich wiederhole das nochmal. Wir importieren uns die Pakete. Wir definieren uns eine Funktion, welche die Fourier Transformation eines Signals berechnet, uns die Werte zurückgibt. Dann setzen wir einige relevante Parameter dafür, an denen können Sie rumspielen. Dann erzeugen wir uns ein generisches periodisches Signal, indem wir hier eben Frequenzen und Amplituden eingeben. Sie können das hier beliebig erweitern oder manipulieren, so wie Ihnen das gefällt. Dann erzeugen wir daraus das Signal, berechnen die Fourier Transformation und lassen uns alles als Bild ausgeben. Ich lasse das jetzt einfach mal durchlaufen. Dann sehen wir hier das Signal, welches wir in der Vorlesung auch schon gesehen haben. Ich werde an dieser Stelle den Code jetzt einfach mal abbrechen und werde hier einfach mal eine Gewerte verändern. Ganz beliebig verändern, so dass Sie sehen können, dass alles, was wir hier machen beliebig veränderbar ist und dass Sie nicht die gleichen Bilder wie in der Vorlesung hier gerade auch mal sehen. Ich gebe Sie einfach mal beliebige Werte ein. Wir haben hier mal eine Zweite daraus. So, jetzt gucken wir doch mal, was wir jetzt erzeugt haben. Wir sehen, das sieht in etwa ähnlich aus, nur dass wir hier einige Überlagerungen mehr haben. Sie sehen, Sie können hier frei rumspielen. Ich schließe das mal und wie wir sehen können, sehen wir hier die ordentliche Frequenzzerlegung. Das heißt, wir sehen aus welchen Frequenzen mit welcher Amplitude besteht in unser periodisches Signal. Das können Sie sich hier anzeigen lassen und dann sind wir mit diesem Code an sich eigentlich auch schon durch und springen mal hier auf unseren nächsten Code, der uns hier das wie in der Vorlesung gezeigte Grillensignal erzeugt. Wie Sie sehen können, ist dieser Code sehr ähnlich zu dem davor. Das haben wir auch schon bei den autoregressiven stochastischen Prozessen gesehen, dass die Codes sich sehr ähnlich sind und dass wir sehr viele Teile wieder verwenden können. Die einzigen Unterschiede sind hier, dass wir so bequem sind, das Grillensignal über ein Modul einzubinden. Wir haben hier wieder unsere Funktion, die die Foyer-Transformation berechnet. Wir setzen hier einige Parameter, inklusive ein Grillensignal, wo wir hier verschiedene Frequenzen einstellen können. Ich mache mal hier beliebig mal, nehmen wir mal eine 23 und wir verändern auch mal die Zeit. Machen wir hier mal eine 27 draus. Sie können hier die Methode natürlich noch verändern. Lassen Sie mich da mal drüber havern. Da können Sie sich hier durchlesen, was Sie hier für Spezifikationen denn noch eingeben können. Machen wir mal eine quadratische Sache hier draus. Lassen Sie mich das mal eingeben. Kurz nochmal überprüfen, ob ich das richtig eingegeben habe. Quadratik, Quadratik, das scheint gut auszusehen. Dann fahren wir fort, indem wir uns hier das Grillensignal als erstes mal anzeigen lassen. Dann definieren wir uns hier wieder einige Parameter, die wir für die Foyer-Transformation benötigen. Dann berechnen wir uns die Foyer-Transformation und am Ende zeigen wir uns die Foyer-Transformation an. Ich wiederhole, dass wir immer noch mal, wir binden hier oben unsere Pakete ein. Ich habe hier noch mal das GIP-Modul implementiert. Wir haben hier unsere Funktionen, welche die Foyer-Transformation berechnet. Wir erzeugen uns hier das Grillensignal, wir plotten das Grillensignal. Wir definieren noch einige Parameter, die wir für die Foyer- Transformation benötigen. Wir berechnen die Foyer-Transformation und wir plotten die Foyer-Transformation. Und wir lassen das einfach mal durchlaufen. Ich kann Ihnen gerade auch selber nichts sagen, wie das Grillensignal am Ende aussehen wird. Wir sehen, das ist nicht ganz so gedrungen wie das, was wir in der Vorlesung gesehen haben. Das sieht ja schon fast hübsch aus, sage ich mal. Ich schließe das mal wieder und wir sehen uns hier mal die Frequenz-Zerlegung der Foyer-Transformation an. Selbst wenn dieses sich jetzt anders ansieht wie das, was in Ihrem Vorlesungskript steht, sehen wir dennoch, dass hier beim Grillensignal die Frequenz sich permanent ändert und die normale Foyer-Transformation für unsere Zwecke versagt. Wir können hier schlicht keine Aussagen mehr treffen. Das hilft uns irgendwie auch nicht mehr. Und deswegen haben wir auch andere Mittel und Wege, um eben Finanzzeit rein zu analysieren. Und bevor wir jetzt da dazu kommen, noch zwei Worte. Wir haben jetzt zweimal eine generische Funktion erzeugt. Das bedeutet, wir können hier die Frequenzen einstellen. Und wenn ich nochmal in den anderen Code rüberspringe, wissen wir hier genau vorher schon, welche Frequenzen und welche Amplituden dem Signal denn unterliegen. Deswegen haben wir schon eine große Erwartung, was dann am Ende rauskommen soll. Den datengenerierenden Prozess für Finanzzeit rein, den kennen wir nicht. Den, wenn wir kennen würden, würden wir die Unterhaltung im Privaten führen und mit einem gezückten Bitcoin wallet. Aber wir driften hier ein bisschen ab. Ich springe jetzt in das dritte Skript. Das ist jetzt etwas umfangreicher. Aber wie Sie sehen werden, nicht nicht händelbar. Wir beginnen wie immer. Wir haben hier dieselben Pakete wie vorher, nur dass wir hier unsere altbekannten Yahoo Financial Pakete importieren. Dann haben wir unsere Funktion für die Foeetransformation, unsere Lieblingsfunktion um Finanzdaten von Yahoo zu extrahieren. Danach gehen wir her und extrahieren uns unsere Finanzzeitreihe aus Yahoo mit dieser Funktion. Wir berechnen uns unsere logaritmierten Returns und verändern noch die Datenstruktur von einem Pandas Data Frame in eine Liste, damit das mit den anderen Paketen kompatibel ist. Zudem entfernen wir hier unseren Nannenwert, der eben durch die Berechnung der Returns entsteht. Wir setzen wieder einige für die Transformation notwendige Parameter. Wir berechnen die Transformation und wir lassen uns beides anzeigen. Sie merken, die Struktur in dem Code ist irgendwo immer dieselbe. Pakete einbinden, Definitionen von Funktionen vornehmen, Funktionen ausführen, Bildchen machen. Ich gehe hier nochmal langsam durch. Wir binden hier die Pakete ein, die notwendig sind. Wir erzeugen unsere Funktion für die Foyer Transformation. Wir haben unsere Lieblingsfunktion, um Finanzdaten herunterzuladen. Beachten Sie hierbei, dass Sie da eine Internetverbindung brauchen. Sonst meckert das Paatenprogramm. Das habe ich vorher auf dem Weg irgendwie auch festgestellt. Wir laden hier unsere Daten runter. Wir erzeugen logaritmierte Renditen. Wir transformieren die hier ein bisschen, setzen Parameter, berechnen die Transformation und lassen uns ein hübsches Bildchen anzeigen. Daher fühle ich das hier einfach mal aus. Wir sehen hier unsere Renditen, unsere Finanzzeitreihe. Wir versuchen jetzt, dieses Signal, diese Renditen, diese Aktienrenditen mittels der Foyer Transformation zu zerlegen. Sie können sich natürlich auch die Arbeit machen, die Preise da mal einzufügen und festzustellen, dass das wirklich so ist, dass wir da keine Frequenzinformationen daraus ziehen können. Und ich schließe das jetzt mal und wir erhalten hier in schön pink unsere Frequenzen für die Returns. Wir sehen zum einen, wir haben Frequenzinformationen innerhalb der Returns. Allerdings sind diese einer Dynamik unterlegen. Was bedeutet, dass die Frequenz sich permanent ändert, was man hier sehr schön sehen kann. Dies war auch der Grund, warum wir in der Vorlesung dazu übergegangen sind zu sagen, okay, wenn das nicht funktioniert, dann schreiten wir fort und nehmen die Kurzzeitfoyer Transformation, die es uns erlaubt, Fensterbreiten zu definieren und innerhalb dieser Fenster eine Foyer Transformation zu berechnen unter der Annahme, dass innerhalb der Fensterbreiten das Signal periodisch ist. Deswegen klicke ich hier jetzt auch mal direkt in den nächsten Code und Sie sehen, der ist erstaunlich kurz. Wir haben hier oben unsere Mudplotlib und NumPy Pakete und SciPy und hier importieren wir das Modulsignal. Wir definieren hier einige Parameter. Da können Sie mal ein bisschen gucken, dass es das, was wir benötigen, um unser Träger- und Basis-Signal zu erzeugen und unser Neues-Signal zu erzeugen. Den Neues sehen Sie hier. Sie sehen hier die Amplituden, die Anzahl, die Ursprungsfrequenzen, die Zeit und die Modulierung. Da können Sie natürlich rumspielen, anpassen, anderweitige Funktionen finden. Dann erzeugen wir hier ein Träger und ein Neues-Signal und überlagern die. Das heißt, wir in diesem Teil erzeugen wir hier unser Träger-Signal mit Rauschen. Da haben Sie die Parameter dazu, die Signalparameter und das Signal selbst. Da können Sie natürlich dran rumspielen, wie Sie möchten. Der interessante Teil findet ehrlich gesagt in dieser Zeile und in dieser Zeile statt. Das heißt, es sind eigentlich nur vier Zeilen, die diesen Code tatsächlich ausführen. Wir erzeugen hier unser Signal. Dazu brauchen wir eben diese ganzen Sachen hier oben. Wir blotten unser Signal und wir erzeugen uns hier diese Gefenster-Defoliertransformation, wo Sie hier mit den Fensterweiten natürlich rumspielen können. Ich habe Ihnen hier diese Fensterweiten mal oben hingeschrieben. Die können Sie sich hier unten reinkopieren und sich ansehen, was denn passiert, wenn Sie diese Fensterweiten größer oder kleiner machen. Sie können natürlich auch das Signal hier oben manipulieren. Und ich hätte jetzt gesagt, wir schauen uns das doch einfach mal an und führen das mal aus. Wir sehen hier wieder, wie in der Vorlesung unser Trägersignal mit einem Rauschen, was da inherent dabei ist. Das soll quasi auch eine echte Messreihe simulieren. Da haben Sie auch Rauschen dabei und das können Sie mit so einer Gefenster-Defoliertransformation natürlich wunderbar entfernen. Ich schließe das jetzt nochmal, um mir dann tatsächlich die Gefenster-Defoliertransformation anzusehen. Wir haben hier unten wieder die Zeit und wir haben hier unsere Frequenzen und Sie sehen hier, kann ich hier reinzoomen. Natürlich kann ich hier reinzoomen. Lassen Sie mich das mal größer ziehen. Hier sehen wir natürlich die Fenster. Ich zoome hier mal rein. Schauen wir mal, wie weit ich hier reinzoomen darf. Hier sehen wir natürlich die Fenster auf die Zeit. Wir sehen, dass die Fenster hier eine begrenzte Breite haben und dass innerhalb dieser kleinen Fenster hier eine Foyer-Transformation des Signales ausgeführt wird und wir natürlich dann die Frequenz innerhalb dieses Fensters sehen können. Da sind Sie mich den originalen Blickwinkel wieder herstellen. Das heißt, wir haben hier ganz viele kleine Fenster, die aufeinander gesetzt sind und wir können hier unser Träger-Signal dann wieder extrahieren. Natürlich sind wir jetzt auch daran interessiert, das Ganze nicht nur mal wieder für ein generisches Signal auszuführen, sondern für das, was uns halt tatsächlich interessiert, ein Signal aus dem echten Leben und wir möchten das natürlich auch auf Finanzzeit rein anwenden und daher klicke ich jetzt auch schon in den letzten Code für unser Video und in diesem Code möchten wir natürlich erfahren, wie wir es denn schaffen, Finanzrendite-Zeit rein hier mit einer Kurzzeit-Foyer-Transformation zu bearbeiten. Wir sehen hier oben wieder, dass wir ein paar Pakete mehr brauchen, Pandas, NumPy, Matplotlib, unsere Yahoo Finance Pakete und diesmal benötigen wir hier noch unsere SciPy-Foyer-Transformationspakete. Das heißt, die Liste der importierten Bibliotheken wird hier gerade etwas länger. Wir haben hier wieder unsere Funktionen, die uns die Foyer-Transformationen berechnet. Wir haben hier unsere Lieblingsfunktionen zum Runterladen von Finanzdaten aus Yahoo. Das fühlen wir hier auch aus. Das heißt, wir laden uns Finanzdaten aus Yahoo herunter. Wir berechnen uns unsere Lockreturns. Wir entfernen die Nannvalues und transformieren das in eine normale Liste. Wir setzen hier einige Parameter, welche wir für die Foyer-Transformation eben brauchen. Dann schauen wir uns erst einmal unsere Returns an, setzen nochmal ein paar Parameter mehr und nochmal ein paar Parameter mehr und berechnen eben hier schon mal die Foyer-Transformation. Am Ende schauen wir uns das an. Das heißt, ich habe hier nochmal eine normale Foyer-Transformation mit dabei, damit Sie diese Unterschiede auch sehen können. Hier unten berechnen wir die gefensterte Foyer-Transformation und lassen uns das Ganze wieder hübsch ausgeben, sage ich mal. Ich gehe jetzt hier nochmal ganz langsam durch. Wir importieren hier oben unsere relevanten Pakete. Wir haben eine Funktion, die für die normale Foyer-Transformation genutzt wird. Dann haben wir unsere Lieblingsfunktionen, um Finanzzeit rein herunter zu laden. Dann laden wir die Finanzzeit rein herunter, erzeugen Returns und erzeugen ein Datenformat, was für uns zu favorisieren ist. Danach setzen wir einige Parameter, die wir für die normale Foyer-Transformation benötigen. Wir lassen uns hier diese Zeitreihe anzeigen, setzen ein paar Parameter mehr und berechnen die Foyer-Transformation, sodass wir die uns hübsch ansehen können. Danach erzeugen wir hier die Kurzzeit-Foyer-Transformation, welche wir uns dann wieder grafisch anzeigen lassen. Ich hätte gesagt, wir probieren das jetzt einfach mal aus. Wir sehen als erstes unsere Return-Serie. Da können Sie natürlich auch andere Finanzzeit rein runterladen. Ich beschränke mich hier auf Aktien und Indizes. Sie können hier aber natürlich auch mal eine Optionszeitreihe reinpacken, FX-Kurse, Commodities, alles, was Ihnen so einfällt, Kryptos vielleicht und schauen, ob sich andere Ergebnisse erzielen können. Auf jeden Fall sehen wir hier unser Rendite-Signal. Ich schließe das jetzt mal und sehen einen Moment später schon unsere Foyer-Transformation dieses Signales, wo wir das gleiche Problem haben, was ich jetzt schon ein paar Mal beschrieben habe und zwar, dass wir Frequenzinformation haben, aber hier eine Dynamik unterliegen haben. Das heißt, die Frequenz verändert sich über die Zeit und das kann eine normale Foyer-Transformation eben nicht so richtig abbilden. Ich schließe das jetzt und erhalte hier in groß meine gefensterte Foyer-Transformation, wo wir je nach Fenster weiter eben auch andere Ergebnisse erhalten können. Deswegen kann ich Sie hier nur auffordern, mit dem Code einmal zu spielen und zu schauen, was passiert denn, wenn ich hier die Fenster verändere. Wir sehen hier auf jeden Fall über den Zeitablauf, dass wir Perioden haben, in denen wir ganz viel Frequenz haben und Perioden haben, in denen wir ganz wenig Frequenz haben. Ich kann Ihnen auch empfehlen, sich das mal selbst auf einem großen Monitor anzeigen zu lassen. Das hat einen sehr hohen ästhetischen Wert. Sie können natürlich auch die Color Map verändern, wie Ihnen das beliebt, wie ich es in der Vorlesung schon gesagt habe. Wir haben hier eine leicht haluzinogene Wirkung, wenn Sie hier länger drauf starren. Dazu möchte ich Sie jetzt natürlich auch nicht aufrufen, aber wir sehen hier eben hier diese gelben Streifen hier. Das sind durchgängige, hochgradig signifikante Frequenzen und wir haben hier aber auch Teile. Da passiert relativ wenig. Ich schließe das jetzt mal wieder und was sehen wir hier? Wir sehen, dass wir zwar Frequenzinformationen aus Finanzzeintragen extrahirn mögen, mit diesen aber noch nicht wirklich etwas anfangen können und daher werden wir uns auch im nächsten Video mal damit befassen, wie wir das Ganze mittels Wavelets in Angriff nehmen können. Ich hoffe, Sie hatten Freude an diesem Video und bis dahin alles Gute.