summaryrefslogtreecommitdiffstats
path: root/tabor/delavnica/manim
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2023-07-02 22:06:37 +0200
committerAnton Luka Šijanec <anton@sijanec.eu>2023-07-02 22:06:37 +0200
commit491faac6191f30eab59f2f0c4a5cb2cc8cf3547f (patch)
treeac32a58f884cfa71afd9eeb74ca15352d83073ac /tabor/delavnica/manim
parenteden izmed zadnjih commitov (diff)
downloadsola-gimb-4-master.tar
sola-gimb-4-master.tar.gz
sola-gimb-4-master.tar.bz2
sola-gimb-4-master.tar.lz
sola-gimb-4-master.tar.xz
sola-gimb-4-master.tar.zst
sola-gimb-4-master.zip
Diffstat (limited to 'tabor/delavnica/manim')
-rw-r--r--tabor/delavnica/manim/anim.py13
-rw-r--r--tabor/delavnica/manim/example.py19
-rw-r--r--tabor/delavnica/manim/predst.py35
-rw-r--r--tabor/delavnica/manim/sobota.md85
4 files changed, 133 insertions, 19 deletions
diff --git a/tabor/delavnica/manim/anim.py b/tabor/delavnica/manim/anim.py
new file mode 100644
index 0000000..eaac687
--- /dev/null
+++ b/tabor/delavnica/manim/anim.py
@@ -0,0 +1,13 @@
+
+from manim import *
+# or: from manimlib import *
+# from manim_slides import Slide
+
+class Test(Scene):
+ def construct(self):
+ circle = Circle(radius=3, color=BLUE)
+ dot = Dot()
+
+ self.play(MoveAlongPath(dot, circle), run_time=2, rate_func=linear)
+
+ self.play(dot.animate.move_to(ORIGIN))
diff --git a/tabor/delavnica/manim/example.py b/tabor/delavnica/manim/example.py
deleted file mode 100644
index 8356367..0000000
--- a/tabor/delavnica/manim/example.py
+++ /dev/null
@@ -1,19 +0,0 @@
-
-from manim import *
-# or: from manimlib import *
-from manim_slides import Slide
-
-class BasicExample(Slide):
- def construct(self):
- circle = Circle(radius=3, color=BLUE)
- dot = Dot()
-
- self.play(GrowFromCenter(circle))
- self.next_slide() # Waits user to press continue to go to the next slide
-
- self.start_loop() # Start loop
- self.play(MoveAlongPath(dot, circle), run_time=2, rate_func=linear)
- self.end_loop() # This will loop until user inputs a key
-
- self.play(dot.animate.move_to(ORIGIN))
- self.next_slide() # Waits user to press continue to go to the next slide
diff --git a/tabor/delavnica/manim/predst.py b/tabor/delavnica/manim/predst.py
new file mode 100644
index 0000000..7096bd3
--- /dev/null
+++ b/tabor/delavnica/manim/predst.py
@@ -0,0 +1,35 @@
+
+from manim import *
+# or: from manimlib import *
+from manim_slides import Slide
+
+class Predst(Slide):
+ def construct(self):
+ title = VGroup(
+ Text("Fourierova transformacija", t2c={"Fourierova": BLUE}),
+ Text("Predavanje na naravoslovnem taboru Gimnazije Bežigrad", font_size=32, t2c={"naravoslovnem": GREEN}),
+ Text("Anton Luka Šijanec in Vasja Žorž", font_size=32, t2c={"Šijanec": YELLOW, "Žorž": YELLOW}),
+ Text("Medvedje Brdo, 24. junija 2023", font_size=32, t2c={"junija": RED})
+ ).arrange(DOWN)
+ self.play(FadeIn(title))
+ self.next_slide() # --------------------------------------------
+ self.clear()
+ besedilo = VGroup(
+ Text("Splošno"),
+ BulletedList("")
+ ).arrange(DOWN)
+ self.play(besedilo)
+ self.next_slide() # --------------------------------------------
+ self.clear()
+ circle = Circle(radius=3, color=BLUE)
+ dot = Dot()
+
+ self.play(GrowFromCenter(circle))
+ self.next_slide() # Waits user to press continue to go to the next slide
+
+ self.start_loop() # Start loop
+ self.play(MoveAlongPath(dot, circle), run_time=2, rate_func=linear)
+ self.end_loop() # This will loop until user inputs a key
+
+ self.play(dot.animate.move_to(ORIGIN))
+ self.next_slide() # Waits user to press continue to go to the next slide
diff --git a/tabor/delavnica/manim/sobota.md b/tabor/delavnica/manim/sobota.md
new file mode 100644
index 0000000..3347f9c
--- /dev/null
+++ b/tabor/delavnica/manim/sobota.md
@@ -0,0 +1,85 @@
+fourierova transformacija
+=========================
+
+# motivacija
+
+* vizualizacija zvoka s spektrogramom
+* frekvenčni spekter zvoka je jakost zvoka v odvisnosti od posamezne frekvence zvoka
+* zvok dobimo kot amplitudo v odvisnosti od časa, spektrogram pa je grafični prikaz spremembe frekvenčnega spektra skozi čas
+* kako torej razstavimo vhodni signal (trenutna amplituda v odvisnosti od časa) v frekvenčni spekter
+
+# motivacija 2
+
+* plimovanje sicer na prvi pogled izgleda naključno, vendar se izkaže, da gre za vsoto sinusnih valovanj, ki jih povzročajo spreminjajoče se lokacije nebesnih teles (razdalje do Zemlje) z različnimi amplitudami, faznimi zamiki in frekvencami.
+* napovedovanje bi torej izvedli tako, da bi našli te komponente, ki sestavljajo ...
+
+# definicija pojmov
+
+* kaj je sinus, kosinus
+* kaj je valovanje:
+ * kaj je amplituda
+ * kaj je faza, fazni zasuk
+ * kaj je frekvenca
+ * primeri: zvok, ...
+* kompleksno število in kompleksna ravnina
+
+# fourierova vrsta
+
+* vsota končno oz. neskončno mnogo kosinusnih valovanj z različnimi amplitudami, frekvencami in faznimi zamiki
+* kako bi zapisali npr. kvadratno valovanje (square wave) kot fourierovo vrsto ... sawtooth wave, triangl.
+* vse periodične funkcije lahko zapišemo s fourierovo vrsto, vendar ne vedno končno
+* enostavno je sešteti periodične funkcije, težje pa je ugotoviti, katere seštete periodične funkcije so komponente nekega danega valovanja/signala.
+
+# fourierova transformacija
+
+* matematična operacija, ki vhodnim podatkom v obliki amplitude v odvisnosti od časa priredi razporeditev frekvenčnih komponent, ki predstavljajo te vhodne podatke ter amplitude posameznih frekvenc.
+
+# intuicija za delovanje fourierove transformacije
+
+* animacija: *navijanje* nihanja po enotski krožnici; ko periodo zadenemo z obsegom kroga.
+* kako izgleda sum sinx in sin2x
+* obnašanje faznega zasuka signala oz. komponente
+* transformacija vsote dveh signalov je enaka vsoti transformacij posameznih komponent obeh signalov: ft(a(x)+b(x))=ft(a(x))+ft(b(x))
+
+# matematična oblika
+
+* eulerjeva formula: e^(i\phi)=cos\phi+isin\phi
+ * ... izpeljava
+* inverz je fourierova
+
+# diskretni signal
+
+* za razliko od zveze reprezentacije valovanja, je diskretna reprezentacija signala samo zaporedje vzorcev amplitude na časovni interval.
+* ko nek signal zajemamo, so v diskretni obliki, torej imamo zaporedje vzorcev (samplov) amplitude v odvisnosti od odvisne spremenljivke (časa)
+ * primer: mikrofon, ...
+* kako pa na takih podatkih izvesti fourierovo transformacijo in pridobiti frekvenčne komponente, ki sestavljajo signal
+ * mat zapis zaporedja a_n
+* teorija nyquist-shannon: za popolno reprezentacijo signala z največjo frekvenco B potrebujemo vsaj 1/(2B) časovnega razmika med posameznimi vzorci (frekvenca vzorčenja je 2B)
+ * pojasni!
+ * slikica aliasing
+
+# dft
+
+* poleg vhoda je tudi izhod dft je diskreten, s tem da imamo vrednosti amplitud diskretnih frekvenčnih komponent -- izračunamo končno mnogo frekvenčnih komponent, kolikor jih potrebujemo (ločljivost)
+* koncept transformacijskega okna -- lahko so to vsi vzorci (recimo pri frekvenčnem spektru), lahko pa je to le del zaporednih vzorcev (recimo pri spektrogramu)
+* algoritem: naivno bi za vsako željeno frekvenco izračunali amplitudo, torej tak sum: sum začenjši t=t_1 do t_n A_vhodni(t) * e^(i2\pi f t)
+* izračunska kompleksnost algoritma je število, ki predstavlja število korakov glede na število vhodnih podatkov:
+ * v tem naivnem primeru algoritma za izračun: O(n * m), kjer je n število željenih frekvenc in m število vzorcev v oknu
+
+# hitra diskretna transformacija
+
+* nekatera
+* zmanjša izračunsko zahtevnost na
+
+# praktične uporabe
+
+* kompresija slik z izgubami -- JPEG
+* dtmf z diskretno ft
+
+# dopplerjev radar
+
+# uvod v heisenbergovo načelo nedoločnosti
+
+# misc
+
+* https://prajwalsouza.github.io/Experiments/Fourier-Transform-Visualization.html