Fale dźwiękowe¶
O scenariuszu¶
Scenariusz ten jest materiałem do przeprowadzenie co najmniej 2h zajęć lekcyjnych z czego:
1h w pracowni fizycznej:
wykład
wykonanie doświadczenia
1h lub 2h w pracowni komputerowej:
zademonstrowanie odpowiednich metod numerycznych
omówienie wyników ćwiczeń i konsultacje
Materiał został opracowany w ramach projektu iCSE4school na podstawie lekcji prowadzonych w latach 2015-2017 w III Liceum Ogólnokształcącym im. Stefana Batorego w Chorzowie przez Adama Ogazę.
Niniejsza lekcja została przetestowana trzykrotnie na uczniach zgłębiających fizykę na poziomie rozszerzonym (wiek 17 lat). W roku 2015 liczebność grupy wynosiła 14 osób, w 2016: 21 osób, a w roku 2017: 16 osób. Lekcja została poprzedzona kursem podstaw programowania w języku Python i składa się z 2 części: wstępu teoretycznego i warsztatów komputerowych. Obie części zostały sfilmowane w roku 2015 i opublikowane na Youtube z angielskimi napisami.
Uwaga!
W każdym z okien programu można zmieniać liczby, tekst, zmienne lub cały kod. Nie trzeba się martwić, jeśli program przestanie działać, bo po odświeżeniu strony powróci do ustawień początkowych. Często następny kod wynika z poprzedniego, więc należy ćwiczenia (algorytmy) wykonywać według kolejności.
Wstęp¶
Główne cele lekcji są następujące:
Wyjaśnienie, czym jest dźwięk.
Wyjaśnienie, czym jest akustyka, na jakie działy się dzieli i dlaczego?
Zdefiniowanie wszystkich wielkości fizycznych i fizjologicznych opisujących dźwięk.
Przedstawienie podstawowej wiedzy dotyczącej widma dźwięku.
Ćwiczenia w rysowaniu wykresów w Pythonie.
Pokazanie, że każda funkcja okresowa może być przedstawiona jako kombinacja liniowa funkcji sinus.
Przećwiczenie interaktów i suwaków w Pythonie.
Przygotowując tą lekcję należy wziąć pod uwagę następujące okoliczności:
Na poziomie szkoły średniej uczniowie nie potrafią całkować. Słyszeli już o całkowaniu i jego zastosowaniach, ale przeprowadzanie obliczeń na poziomie wymaganym przez transformatę Fouriera daleko wykracza poza ich możliwości. Dlatego rzeczywiste obliczenia należy zastąpić prostą zabawą z amplitudami poszczególnych harmonicznych.
Jest to pierwszy kontakt uczniów z takimi pojęciami jak @interact i suwak. Problemy techniczne same w sobie są trudne do przezwyciężenia, dlatego nie ma sensu przesadnie komplikować fizycznej strony zagadnienia.
Niniejsza lekcja (podobnie jak wszystkie inne) powinna być atrakcyjna, dlatego należy dążyć do uzyskiwania spektakularnych rezultatów możliwie prostymi środkami.
Poziom trudności przykładów powinien stopniowo wzrastać w miarę upływu lekcji. Dobrym pomysłem jest pokazywanie alternatywnych rozwiazań tego samego problemu.
Część teoretyczna¶
Ćwiczenia w programowaniu zostały poprzedzone lekcją teoretyczną o falach dźwiękowych, opublikowaną pod adresem: https://youtu.be/dp-ajKHs6WU
Główne problemy dyskutowane na wykładzie są następujące:
Definicja fali dźwiękowej.
Zapowiedź, że pewne idee przedstawione na wykładzie zostaną później rozwinięte na zajęciach komputerowych z użyciem Sage i Pythona.
Definicja akustyki i wyjaśnienie istoty akustyki fizycznej i fizjologicznej.
Infradźwięki i ultradźwięki.
Częstotliwość / długość fali i ich związek z wysokością tonu.
Widmo dźwięku i jego związek z barwą.
Prawo Webera - Fechnera.
Natężenie dźwięku i jego związek z głośnością (audiogram).
Faza dźwięku i jej związek z wrażeniami przestrzennymi.
Podczas lekcji wykorzystywano komputerowy generator akustyczny (program dołączony do jednego z podręczników) do przedstawiania związku wysokości tonu z częstotliwością. Posiadał również opcje demonstrowania, jak zmiana kształtu sygnału wpływa na widmo i barwę dźwięku. Uczniowie zostali poinformowani, że będą używać Pythona do ilustrowania kształtu sygnału złożonego, w zależności od amplitud indywidualnych harmonicznych.
Część informatyczna¶
Część informatyczna lekcji została przeprowadzona w pracowni komputerowej, sfilmowana i umieszczona pod adresem: https://youtu.be/0fVgRy6CpWQ
Film ten, nakręcony w roku 2015, pokazuje wcześniejszą wersję programu. Poniżej przedstawiona jest wersja udoskonalona.
Przykładowa funkcja złożona, zdefiniowana w sposób statyczny
Funkcja ta sama, jak wyżej, lecz uzyskana z użyciem innych środków.
Inna wersja tej samej funkcji, lecz teraz poszczególne amplitudy są sterowane za pomocą suwaków.
Z uwagi na to, że uczniowie pracowali z wcześniejszą wersją Sage, nie mogliśmy użyć gotowej funkcji histogram. W zamian zaproponowałem jej własną wersję.
Dekompozycja przykładowej funkcji z użyciem transformaty Fouriera.
Podobna analiza zastosowana dla funkcji piłokształtnej i pozostałych funkcji dostępnych w generatorze akustycznym pokazanym na filmie.
Z użyciem elementu @interact
, powyższe segmenty kodu można połączyć jak
poniżej. Teraz uczniowie mogą dokonywać prób z różnymi postaciami
sygnału:
Sterowaniu może też podlegać ilość iteracji. W poniższym przykładzie, pętla nakłada na siebie wykresy funkcji i wyświetla ich sumę wraz ze składnikami:
Poniższa pętla tworzy falę złożoną, zbudowaną z harmonicznych o amplitudach odwrotnie proporcjonalnych do ich częstotliwości. Liczba iteracji jest sterowana suwakiem. Funkcje pokazane wyżej są do siebie dodawane, a wyświetlana jest ich suma.
Ten sam efekt uzyskany bez iteracji.
Wnioski¶
Użycie Pythona doprowadziło uczniów do lepszego zrozumienia istoty widma dźwięku. W szkole średniej uczniowie nie znaja transformaty Fouriera - temat ten wykracza daleko poza podstawę programową. Dzięki powyższym programom, w zasadzie bawiąc się, dokonują wielkiego odkrycia, że każda funkcja okresowa o poprawnej symetrii (co ma miejsce w kontekście fal akustycznych), może zostać przedstawiona jako kombinacja liniowa funkcji sinus.
Z drugiej strony, uczestnicy lekcji mieli możliwość nauczenia się podstawowych metod tworzenia wykresów w sposób interaktywny, co było dla nich nowością. Temat „widmo dźwięku” stał sie mniej abstrakcyjny, ponieważ uczniowie bawili sie nim własnymi rękami.
Z moich obserwacji wynika, że uczniowie z radością używają gotowych narzędzi zawartych w tym dokumencie, natomiast nie są zdolni do ich twórczego rozwinięcia. Moje próby zachęcenia uczniów do udoskonalenia powyższego kodu nie powiodły się.