kurse:efcomputergrafik:kw44

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
kurse:efcomputergrafik:kw44 [2019/10/29 08:30] Marcel Metzlerkurse:efcomputergrafik:kw44 [2019/10/29 14:17] (current) Marcel Metzler
Line 1: Line 1:
 +====KW44:CSV File lesen und schreiben, Fourier Koeffizienten berechnen====
  
 +Eine CSV (comma-separated-values) Datei braucht noch eine Kopfzeile, die als Identifikator der Spalteninhalte dient. Diese Kopfzeile müssen wir noch ergänzen. Da unsere Daten die x- und y-Koordinaten von Punkten in der Ebene sind, müssen wir nur den String 'x,y' als Kopfzeile einfügen.
 +<code python Daten_erfassen.py>
 +from gpanel import *
 +import math
 +import cmath
 +import time
 +
 +def onMousePressed(x, y):
 +    move(x,y)
 +
 +def onMouseDragged(x, y):
 +    draw(x,y)
 +    Koordinaten.append([x,y])
 +    f.write(str(x) + "," + str(y) + "\n")
 +
 +makeGPanel(0,100,0,100,
 +           mousePressed = onMousePressed, 
 +           mouseDragged = onMouseDragged)
 +
 +nameD=time.strftime("Daten_%Y_%m_%d_%H_%M_%S.txt")
 +nameF=time.strftime("Fourier_%Y_%m_%d_%H_%M_%S.txt")
 +Koordinaten=[]
 +f=open(nameD,"w")
 +fopen=1;
 +
 +f.write("x,y"+ "\n")
 +
 +while fopen==1:
 +    key = getKeyCodeWait()
 +    if key==27:
 +       f.close()
 +       fopen=0
 +print("Daten erfasst")
 +</code>
 +
 +===CSV Datei lesen===
 +Wenn wir die Daten als CSV Datei abgespeichert haben, dann können wir sie aus einem anderen Programm lesen und weiterverarbeiten. Als erstes wollen wir die Daten wieder lesen und anzeigen.
 +
 +<code python csv_datei_lesen.py>
 +from gpanel import *
 +import math
 +import cmath
 +import csv
 +
 +#-----------------------------------------
 +# Einlesen der Daten
 +#-----------------------------------------
 +Koordinaten=[]
 +print('Daten lesen Start')
 +with open('Daten_ksbg.txt') as csvfile:
 +    reader=csv.DictReader(csvfile)
 +    for row in reader:
 +        Koordinaten.append([float(row['x']),float(row['y'])])
 +print('Daten lesen Ende')
 +</code>
 +
 +Hier die entsprechende Datei {{ :kurse:efcomputergrafik:daten_ksbg.txt |}}.
 +
 +**Aufgabe 1**
 +  * Analysiere das obige Programm
 +  * Ergänze das obige Programm, so dass die eingelesenen Daten in einem GPanel angezeigt werden.
 +
 +===Berechnung der Fourier Koeffizienten===
 +Wir approximieren $f(t)$ ($t\in[0,\;1]$) mit einer endlichen komplexen Fourier Reihe.
 +$$f(t)=\sum_{k=-\infty}^{\infty}c_k \cdot e^{2 \pi ikt}  \approx \sum_{k=-n}^{n}c_k \cdot e^{2\pi ikt}$$
 +Mit den dazugehörigen komplexen Fourier Koeffizienten.
 +$$c_k=\int_0^1 f(t)\cdot e^{-2 \pi ikt}dt \approx \sum_{j=0}^{n-1}f(j\cdot \Delta t)\cdot e^{-2 \pi ikj\cdot \Delta t}\cdot \Delta t$$
 +
 +**Aufgabe 2**
 +  * Ergänze das obige Programm mit der Berechnung der Fourier Koeffizienten $c_k$ mit $-n\leq k \leq n$ (Fourier-Analyse).
 +  * Rekonstruiere $f(t)$ mit den Fourier Koeffizienten und zeichnen die Rekonstruktion in einer anderen Farbe ins gleiche Bild wie die Datenpunkte. (Fourier-Synthese).