Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
kurse:efcomputergrafik:kw45 [2019/11/05 11:59] Marcel Metzler |
kurse:efcomputergrafik:kw45 [2019/11/06 07:55] (current) Ivo Blöchliger ↷ Page name changed from kurse:efcomputergrafik:kw45m to kurse:efcomputergrafik:kw45 |
||
---|---|---|---|
Line 24: | Line 24: | ||
Wenn $k_{max}=n-1$ ist, dann würden wir (2n-1) Fourierkoeffizienten berechnen, da unsere $c_k$ von $-(n-1)\leq k \leq (n-1)$ durchlaufen. Dies sind zuviele Fourierkoeffzienten. Es gilt die Regel, dass aus $n$ Datenpunkten höchsten $n$ Fourierkoeffizienten berechnet werden können. Somit liegt der maximale Index $k_{max}$ bei $$k_{max} = \lfloor \frac{n-1}{2} \rfloor$$. Das sind i.d.R. immer noch zu viele Fourierkoeffizienten. | Wenn $k_{max}=n-1$ ist, dann würden wir (2n-1) Fourierkoeffizienten berechnen, da unsere $c_k$ von $-(n-1)\leq k \leq (n-1)$ durchlaufen. Dies sind zuviele Fourierkoeffzienten. Es gilt die Regel, dass aus $n$ Datenpunkten höchsten $n$ Fourierkoeffizienten berechnet werden können. Somit liegt der maximale Index $k_{max}$ bei $$k_{max} = \lfloor \frac{n-1}{2} \rfloor$$. Das sind i.d.R. immer noch zu viele Fourierkoeffizienten. | ||
- | **Aufgabe** | + | **Aufgabe |
- | | + | |
+ | | ||
+ | |||
+ | < | ||
+ | <code python Fourier_Rek.py> | ||
+ | from gpanel import * | ||
+ | import math | ||
+ | import cmath | ||
+ | import csv | ||
+ | |||
+ | # | ||
+ | # Einlesen der Daten | ||
+ | # | ||
+ | Koordinaten=[] | ||
+ | print(' | ||
+ | with open(' | ||
+ | reader=csv.DictReader(csvfile) | ||
+ | for row in reader: | ||
+ | Koordinaten.append([float(row[' | ||
+ | print(' | ||
+ | # | ||
+ | # Bild zeichnen | ||
+ | # | ||
+ | makeGPanel(0, | ||
+ | move(Koordinaten[0][0], | ||
+ | for ko in Koordinaten: | ||
+ | draw(ko[0], | ||
+ | delay(1000) | ||
+ | clear() | ||
+ | # | ||
+ | # Berechnen der Fourierkoeffizienten | ||
+ | # Teil 1: Init. | ||
+ | # | ||
+ | anzP=len(Koordinaten) | ||
+ | dt=1/ | ||
+ | kMax=int(math.floor(anzP/ | ||
+ | print(str(anzP)+' | ||
+ | print(str(2*kMax+1)+" | ||
+ | c=[] | ||
+ | for k in range(2*kMax+1): | ||
+ | c.append(complex(0, | ||
+ | f=open(' | ||
+ | # | ||
+ | # Berechnen der Fourierkoeffizienten | ||
+ | # Teil 2: c_k von -kmax <= k <= kmax | ||
+ | # | ||
+ | for k in range(-kMax, | ||
+ | for i in range(anzP): | ||
+ | kshift=k+kMax | ||
+ | c[kshift]=c[kshift]+complex(Koordinaten[i][0], | ||
+ | c[kshift]=complex(round(c[kshift].real, | ||
+ | f.write(str(c[kshift]) + ' | ||
+ | f.close() | ||
+ | print(' | ||
+ | # | ||
+ | # Rekonstruktion des Bildes | ||
+ | # | ||
+ | setColor(' | ||
+ | t=[] | ||
+ | t.append(0) | ||
+ | for i in range(anzP-1): | ||
+ | t.append(t[i]+dt) | ||
+ | # | ||
+ | # Startpunkt berechnen und Corsor | ||
+ | # dort abstellen | ||
+ | # | ||
+ | f=0 | ||
+ | for k in range(-kMax, | ||
+ | kshift=k+kMax | ||
+ | f=f+c[kshift]*cmath.exp(2*math.pi*k*t[0]*1j) | ||
+ | move(f.real, | ||
+ | f=0 | ||
+ | # | ||
+ | # Rest zeichnen | ||
+ | # | ||
+ | for i in range(anzP): | ||
+ | for k in range(-kMax, | ||
+ | kshift=k+kMax | ||
+ | f=f+c[kshift]*cmath.exp(2*math.pi*k*t[i]*1j) | ||
+ | draw(f.real, | ||
+ | delay(10) | ||
+ | f=0 | ||
+ | print(' | ||
+ | </ | ||
+ | </ |