kurse:efcomputergrafik:kw45

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:kw45 [2019/11/05 11:55]
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 22: Line 22:
 $$f_j(k)= e^{-2 \pi i k j\cdot \frac{1}{n-1}}$$ $$f_j(k)= e^{-2 \pi i k j\cdot \frac{1}{n-1}}$$
 Sobald $k=n-1$ ist, wiederholt sich die Funktion. D.h. wir haben eine Periode von $n-1$. Es gilt: $$f_j(k)=f_j(k+\lambda\cdot (n-1)) $$ Sobald $k=n-1$ ist, wiederholt sich die Funktion. D.h. wir haben eine Periode von $n-1$. Es gilt: $$f_j(k)=f_j(k+\lambda\cdot (n-1)) $$
-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 $\lfloor \frac{n-1}{2} \rfloor$.+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 1** 
 + 
 + Ermittle für den Datesatz "Daten_ksg.txt" ein optimales $k_{max}$. Optimal ist in diesem Fall individuel und nicht mathematisch exakt und daher nicht eindeutig. 
 + 
 +<hidden> 
 +<code python Fourier_Rek.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'
 +#----------------------------------------- 
 +# Bild zeichnen 
 +#----------------------------------------- 
 +makeGPanel(0,100,0,100) 
 +move(Koordinaten[0][0], Koordinaten[0][1]) 
 +for ko in Koordinaten: 
 +    draw(ko[0],ko[1]) 
 +delay(1000) 
 +clear() 
 +#----------------------------------------- 
 +# Berechnen der Fourierkoeffizienten 
 +# Teil 1: Init. 
 +#----------------------------------------- 
 +anzP=len(Koordinaten) 
 +dt=1/(anzP-1) 
 +kMax=int(math.floor(anzP/32)) # Datenkomprimierung 
 +print(str(anzP)+' Datenpunkte'
 +print(str(2*kMax+1)+" Fourierkoeffizienten"
 +c=[] 
 +for k in range(2*kMax+1): 
 +    c.append(complex(0,0)) 
 +f=open('Fourier_Test_ksbg.txt','w'
 +#----------------------------------------- 
 +# Berechnen der Fourierkoeffizienten 
 +# Teil 2: c_k von -kmax <= k <= kmax  
 +#----------------------------------------- 
 +for k in range(-kMax,kMax+1): 
 +    for i in range(anzP): 
 +        kshift=k+kMax 
 +        c[kshift]=c[kshift]+complex(Koordinaten[i][0],Koordinaten[i][1])*cmath.exp(-2*math.pi*k*i*dt*1j)*dt 
 +    c[kshift]=complex(round(c[kshift].real,2),round(c[kshift].imag,2)) 
 +    f.write(str(c[kshift]) + '\n'
 +f.close()     
 +print('Fourierkoeffizienten berechnet'
 +#----------------------------------------- 
 +# Rekonstruktion des Bildes 
 +#----------------------------------------- 
 +setColor('red'
 +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,kMax+1): 
 +    kshift=k+kMax 
 +    f=f+c[kshift]*cmath.exp(2*math.pi*k*t[0]*1j) 
 +move(f.real,f.imag) 
 +f=0 
 +#--------------------------------------- 
 +# Rest zeichnen 
 +#--------------------------------------- 
 +for i in range(anzP): 
 +    for k in range(-kMax,kMax+1): 
 +        kshift=k+kMax 
 +        f=f+c[kshift]*cmath.exp(2*math.pi*k*t[i]*1j) 
 +    draw(f.real,f.imag) 
 +    delay(10) 
 +    f=0    
 +print('Bild gezeichnet')  
 +</code> 
 +</hidden>
  • kurse/efcomputergrafik/kw45.1572951315.txt.gz
  • Last modified: 2019/11/05 11:55
  • by Marcel Metzler