diff options
author | Anton Luka Šijanec <anton@sijanec.eu> | 2023-07-02 22:06:37 +0200 |
---|---|---|
committer | Anton Luka Šijanec <anton@sijanec.eu> | 2023-07-02 22:06:37 +0200 |
commit | 491faac6191f30eab59f2f0c4a5cb2cc8cf3547f (patch) | |
tree | ac32a58f884cfa71afd9eeb74ca15352d83073ac /tabor/delavnica/manim | |
parent | eden izmed zadnjih commitov (diff) | |
download | sola-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.py | 13 | ||||
-rw-r--r-- | tabor/delavnica/manim/example.py | 19 | ||||
-rw-r--r-- | tabor/delavnica/manim/predst.py | 35 | ||||
-rw-r--r-- | tabor/delavnica/manim/sobota.md | 85 |
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 |