Cyfrowe Przetwarzanie Sygnałów
Edycja: Semestr letni 2024/2025.
Spis treści
- Cyfrowe Przetwarzanie Sygnałów
- Prowadzący
- Wymagania wstępne
- Ćwiczenia laboratoryjne
- Jak się przygotować na zajęcia?
- (Nie)obecność
- Wyrównywanie zaległości
- Sala laboratoryjna
- Grupy laboratoryjne
- Harmonogram
- Literatura
- Zasady oceniania
- Moduł CPS.jl
- Standardowe kolokwium zaliczeniowe
- Kolokwium rozszerzające
- Ogólne zasady pisania kolokwium
- Zawody w obliczaniu transformacji Fouriera
- Zaliczenie poprawkowe
- Historia zmian
Prowadzący
Prowadzącym ćwiczenia laboratoryjne jest Szymon Woźniak. Informację na temat konsultacji można znaleźć na podstronie Konsultacje.
Wymagania wstępne
Ćwiczenia laboratoryjne z Cyfrowego Przetwarzania Sygnałów są zajęciami wymagającymi zasadniczej wiedzy z innym przedmiotów, którą powinieneś zdobyć w ramach poprzednich kursów. W szczególności powinieneś mieć podstawową wiedzę z następujących przedmiotów:
analiza matematyczna (w szczególności rachunek różniczkowy i całkowy),
algebra liniowa,
teoria sygnałów i systemów liniowych.
Ponadto musisz posiadać dwie niezbędne umiejętności:
samodzielne wyszukiwanie informacji i studiowanie treści dostępnych w książkach oraz literaturze,
pisania prostych programów komputerowych z wykorzystaniem języka programowania o paradygmacie imperatywnym, w szczególności proceduralnym i strukturalnym.
Braki w wiedzy lub umiejętnościach przedstawionych powyżej mogą przyczynić się do tego, że ćwiczenia laboratoryjne będą od Ciebie wymagały większych nakładów pracy i czasu, niż zostało to przewidziane.
Ćwiczenia laboratoryjne
Ćwiczenia laboratoryjne są to cotygodniowe zajęcia poświęcone ćwiczeniu rozwiązywania fundamentalnych problemów z cyfrowego przetwarzania sygnałów. Celem ćwiczeń jest nabycie wiedzy, umiejętności oraz biegłości w rozwiązywaniu problemów występujących w tej dziedzinie. Zajęcia te prowadzone są w trybie konsultacyjnym. Oznacza to, że co do zasady w czasie ćwiczeń laboratoryjnych powinieneś samodzielnie opracowywać rozwiązania wybranych problemów. Ja, jako prowadzący, który jest obecny w czasie zajęć, mogę Ci pomóc, jeżeli zgłosisz taką potrzebę. Pomoc w głównej mierzę, oferuję w postaci dyskusji nad literaturą i problemami, ale także w postaci wyjaśnienia i doprecyzowania problemu, czy też zweryfikowania poprawności rozwiązania. Od razu zwrócę tutaj uwagę, że problemy (zadania) na zajęciach, będą postawione przed Tobą i twoim celem, jako osoba uczestnicząca w ćwiczeniach, jest samodzielne wypracowanie poprawnych rozwiązań dla tych problemów. Nie należy się spodziewać, że ja jako prowadzący będę przedstawiał gotowe rozwiązania tych problemów. W końcu to Ty się tutaj pojawiłeś, żeby poćwiczyć :). Natomiast, jak najbardziej w czasie zajęć możemy w pewnym zakresie omawiać i analizować twoje próby rozwiązania danego problemu w celu znalezienia błędów, poprawienia ich, czy też ulepszenia rozwiązania.
Do każdych ćwiczeń laboratoryjnych jest przydzielony pewien podzbiór problemów ze zbioru "Zbiór problemów i pytań bez odpowiedzi", które powinieneś przestudiować i rozwiązać. Masz dowolność w wyborze problemów, kolejności ich wykonywania, oraz tempie w którym będziesz je rozwiązywać. Jeżeli dany problem jest dla Ciebie trywialny i wiesz, że jesteś w stanie go bez problemu poprawnie rozwiązać, to niekoniecznie musisz go rzeczywiście rozwiązywać. Być może lepiej zająć się problemami, które są jakimś wyzwaniem. Jeżeli nie wiesz co robić w czasie zajęć, nie masz pomysłu, który problem powinieneś rozwiązać jako następny, to możesz mi to zgłosić i postaram się zaproponować kierunek, w którym powinieneś zmierzać, żeby być w stanie robić postępy.
Realizacja materiału laboratoryjnego jest obowiązkowa, pomimo że nie ma dużego przełożenia na ocenę końcową z laboratorium. Oznacza to, że pewien podzbiór opracowanych przez Ciebie rozwiązania dla problemów ze zbioru, będzie zbierany pod koniec semestru (patrz Moduł CPS.jl). Głównym celem realizacji materiału laboratoryjnego jest szczegółowe zapoznanie się z występującymi w dziedzinie problemami i sposobami ich rozwiązywania. Rozwiązywanie problemów powinno być jedną z dwóch podstaw (drugą podstawą jest studiowanie literatury), która powinno Cię przygotować do wszelkiego rodzajów kolokwiów, na podstawie których będzie wystawiona głównie ocena końcowa z ćwiczeń laboratoryjnych. To właśnie w czasie trwania kolokwiów, będzie miał okazję dowieść jak dobrze opanowałeś wszelakie koncepty występujące w przedmiocie tych zajęć. Więcej informacji na temat zasad oceniania znajdziesz w sekcji Zasady oceniana.
W ramach aktywności na zajęciach możesz się zgłosić, aby omówić przy tablicy na forum grupy wybrany problem, teorię potrzebną do rozwiązania tego problemu, czy też zaprezentować rozwiązanie danego problemu. W czasie pierwszych 13 zajęć można zdobywać tak zwane plusy (dodatkowe ponadprogramowe punkty), właśnie za taką szeroko pojętą aktywność na rzecz pchania grupy do przodu w czasie zajęć.
Jak się przygotować na zajęcia?
Pierwszym krokiem, który należy wykonać, aby efektywnie przygotować się do danych ćwiczeń laboratoryjnych, jest wstępne zapoznanie się z problemami ze zbioru, które są związane z tematyka danych zajęć.
Następnie należy skupić na dokładnym przestudiowaniu materiału wymienionego w sekcji Literatura. Podczas studiowania literatury wskazane jest przygotowanie sobie notatek, zaznaczenie najważniejszych wzorów matematycznych, czy też paragrafów. Istotnym aspektem przygotowania się do zajęć, jest przygotowanie sobie listy rzeczy, które potencjalnie wymagają dodatkowej dyskusji. Jeżeli nie rozumiesz jakiejś definicji, wyprowadzenia, twierdzenia, wzoru, czy też algorytmu, to dobrze jest być świadomym czego dokładnie się nie rozumiem. Wbrew pozorom, mi jako prowadzącemu nie przychodzi z łatwością zgadnięcie, co jest problematyczne dla Ciebie, przykładowo w danym wzorze.
Ostatnim krokiem jest powrót do zbioru problemów i dokładne zastanowienie się nad treściami problemów. Odpowiedz sobie czy rozumiesz dokładnie o co chodzi w danym problemem. Jeżeli nie rozumiesz, to zidentyfikuj czego dokładnie nie rozumiesz i co sprawia Ci trudność. Zastanów się jakie potencjalnie kroki należy wykonać aby rozwiązać dany problem.
Jeżeli zastanawiasz się czy należy rozwiązywać problemy ze zbioru przed zajęciami, to odpowiedź jest taka, że nie ma takich oczekiwać, natomiast jeżeli masz ochotę, to oczywiście nikt nie zabrania. Jedyne oczekiwanie z mojej stron jest takie, że w czasie zajęć jesteś przygotowany pod względem wiedzy teoretycznej do rozwiązywania problemów ze zbioru.
(Nie)obecność
Obecność na zajęciach laboratoryjnych jest co do zasady obowiązkowa i jest sprawdzana wraz z rozpoczęciem zajęć. W przypadku spóźnienia należy potwierdzić swoją obecności bezpośrednio u mnie. W przeciwnym razie obecność może nie zostać odnotowana.
W przypadku wystąpienia nieobecności na danych zajęciach, nie musisz przedstawiać żadnego powodu swojej nieobecności, czy też formalnego usprawiedliwienia w jakiejkolwiek postaci. Wręcz jesteś proszony, aby tego nie robić. Powody są różne, a ja nie czuje się kompetentny w ich ocenianiu. Proszę samodzielnie ocenić czy dany powód jest na tyle istotny, aby nie pojawić się na zajęciach.
Wyrównywanie zaległości
Jeżeli z powodu nieobecności na zajęciach posiadasz zaległości w realizacji materiału laboratoryjnego, to w twoim obowiązku jest samodzielnie nadrobienie owych zaległości we własnym zakresie.
W wypadku pojawienia się zaległości, które stanowią czynną podstawę do wystawienia oceny końcowej z laboratorium, należy samodzielnie zgłosić się do mnie (prowadzącego) na najbliższych zajęciach, w celu ustalenia indywidualnego sposobu nadrobienia tych zaległości. Braki nadrobienia takich zaległości, mogą stanowić podstawę do stosownego obniżenia oceny końcowej, bądź w skrajnym przypadku do wystawienia negatywnej ocen końcowej (nb
/2,0
) z ćwiczeń laboratoryjnych. Zastrzegam, że w przypadku nagromadzenia się znacznej liczby takich zaległości, mogę odmówić możliwości wyrównania części lub wszystkich zaległości.
Jeżeli nie wiesz czy posiadasz zaległości, które stanowią czynna podstawę do wystawienia oceny końcowej z laboratorium, to zawsze możesz uzyskać taką informację u mnie (prowadzącego).
Sala laboratoryjna
Ćwiczenia laboratoryjne odbywają się na kampusie AGH, pawilon C-3, sala 310. W sali jest dostępne piętnaście stanowisk komputerowych. Na poniższej mapie zaznaczona jest przybliżona lokalizacja sali laboratoryjnej.
Poniżej parę zasad, do których jesteś proszony, aby się stosować w czasie zajęć:
Należy zajmować się przedmiotem zajęć. Jeżeli zajmujesz się czymś innym, to możesz po prostu zostać wyproszony z sali.
Można się swobodnie komunikować z innymi uczestnikami zajęć, czy też pracować grupowo przy jednym stanowisku, pod warunkiem że nie przeszkadza się postronnym osobą pracującym w sali. Zasada nie obowiązuje w trakcie trwania kolokwium.
Można korzystać z tablicy znajdującej się w sali. Po skończeniu, proszę przywrócić stan pierwotny tablicy.
Zachowaj czystości i porządek na stanowisku podczas zajęć i po ich zakończeniu. Dotyczy to zarówno fizycznej przestrzeni roboczej wokół Ciebie, jak i wirtualnej przestrzeni roboczej na komputerze, na którym pracujesz. Jeżeli stworzyłeś jakieś pliki w czasie trwania zajęć, to usuń je po zakończeniu danych zajęć.
Wychodzenie z sali w czasie zajęć jest dozwolone i nie wymaga pozwolenia prowadzącego. Proszę nie pytać, czy można, bo można. Zasada ta nie obowiązuje podczas trwania kolokwium. Wyjście z sali podczas kolokwium jest równoznaczne z wcześniejszym zakończeniem kolokwium.
Grupy laboratoryjne
Zajęcia odbywają się co tydzień w każdą środę i czwartek. Możesz uczęszczać tylko i wyłącznie na jedną grupę laboratoryjną do której jesteś zapisany w Uniwersytecki System Obsługi Studiów (USOS). Poniższa tabela zawiera listę wszystkich grup laboratoryjnych w tym semestrze. Zajęcia danej grupy odbywają się przeważnie w przypisanym dniu tygodnia i podanym przedziale czasowym, chyba że organizacja roku na to nie pozwala. Szczegółowa rozpiska zajęć dla danej grupy znajduje się w harmonogramach.
Grupa | Harmonogram | Dzień tygodnia | Godzina | Ilość stanowisk | Zajętość |
---|---|---|---|---|---|
EiT#1 | B | Czwartek | 15:00 - 16:30 | 15 | 13 |
EiT#2 | B | Czwartek | 18:30 - 20:00 | 15 | 12 |
EiT#3 | B | Czwartek | 16:45 - 18:15 | 15 | 12 |
EiT#4 | A | Środa | 18:30 - 20:00 | 15 | 15 |
EiT#5 | A | Środa | 16:45 - 18:15 | 15 | 12 |
EiT#6 | A | Środa | 15:00 - 16:30 | 15 | 14 |
Jeżeli chcesz zmienić grupę laboratoryjną, to musisz skierować tę prośbę do koordynatora kursu w USOS. Ja jako prowadzący ćwiczenia laboratoryjne nie mam uprawnień do przenoszenia studentów między grupami. Jeżeli zmieniłeś grupę laboratoryjną w czasie trwania semestru, to poinformuj mnie o tym.
Harmonogram
Semestr składa się z 17 tygodni i pozwala na realizację wszystkich 14 spotkań laboratoryjnych. Istnieją dwa harmonogramy spotkań laboratoryjnych: A (środowy) oraz B (czwartkowy). Do każdego spotkania laboratoryjnego w harmonogramie jest przypisana informacja dodatkowa, która przeważnie sugeruje główną tematykę danego spotkania.
Dodatkowo następująca notacja została wykorzystana w poniższych tabelach:
przekreślone ~~daty~~ oznaczają dni, w których nie odbędą się zajęcia laboratoryjne,
+
oznacza, że przewidziano aktualizacje wartość danej komórki,-
oznacza, że nie przewidziano aktualizacji wartość danej komórki.
Harmonogram A
tydzień | data | nr lab | informacja dodatkowa |
---|---|---|---|
01 | 05.03.2025 | 01 | Wprowadzenie do środowiska obliczeniowego. |
02 | 12.03.2025 | 02 | Modelowanie sygnałów oraz ich parametry. |
03 | 19.03.2025 | 03 | Próbkowanie i kwantyzacja. |
04 | 26.03.2025 | 04 | Obliczanie dyskretnej Transformacji Fouriera. |
05 | 02.04.2025 | 05 | + |
06 | 09.04.2025 | 06 | + |
07 | 16.04.2025 | 07 | + |
08 | 23.04.2025 | 08 | + |
09 | ~~30.04.2025~~ | - | Harmonogram zajęć z piątku. |
10 | 07.05.2025 | 09 | + |
11 | 14.05.2025 | 10 | + |
12 | 21.05.2025 | 11 | + |
13 | 28.05.2025 | 12 | + |
14 | 04.06.2025 | 13 | + |
15 | 11.06.2025 | 14 | Standardowe Kolokwium Zaliczeniowe. |
16 | 18.06.2025 | - | - |
17 | 25.06.2025 | - | - |
Harmonogram B
tydzień | data | nr lab | informacja dodatkowa |
---|---|---|---|
01 | 06.03.2025 | 01 | Wprowadzenie do środowiska obliczeniowego. |
02 | 13.03.2025 | 02 | Modelowanie sygnałów oraz ich parametry. |
03 | 20.03.2025 | 03 | Próbkowanie i kwantyzacja. |
04 | 27.03.2025 | 04 | Obliczanie dyskretnej Transformacji Fouriera. |
05 | 03.04.2025 | 05 | + |
06 | 10.04.2025 | 06 | + |
07 | ~~17.04.2025~~ | - | Wakacje wiosenne. |
08 | 24.04.2025 | 07 | + |
09 | 29.04.2025 | 08 | + |
09 | ~~01.05.2025~~ | - | Dzień ustawowo wolny od zajęć. |
10 | 08.05.2025 | 09 | + |
11 | 15.05.2025 | 10 | + |
12 | 22.05.2025 | 11 | + |
13 | 29.05.2025 | 12 | + |
14 | 05.06.2025 | 13 | + |
15 | 12.06.2025 | 14 | Standardowe Kolokwium Zaliczeniowe. |
16 | ~~19.06.2025~~ | - | Dzień ustawowo wolny od zajęć. |
Literatura
Podstawowy źródłem wiedzy, z którego powinieneś korzystać to literatura w postaci książek poświęconych tematowi cyfrowego przetwarzania sygnałów. Poniżej znajduje się lista rekomendowanych książek z zakresu podstaw liniowych systemów dyskretnych i cyfrowego przetwarzania sygnałów. Kolejność książek w liście według roku wydania.
A. V. Oppenheim, A. S. Willsky, and S. H. Nawab, "Signals & systems," Prentice-Hall, Inc., 1996. [BG AGH]
R. G. Lyons, "Wprowadzenie do cyfrowego przetwarzania sygnałów," WKŁ 2010. [BG AGH]
A. V. Oppenheim, R. W. Schafer, "Discrete-Time Signal Processing, 3rd Edition," Pearson 2010. [BG AGH]
T. P. Zieliński, "Cyfrowe przetwarzanie sygnałów : od teorii do zastosowań," WKŁ 2007. [BG AGH)]
T. P. Zieliński et al., "Cyfrowe przetwarzanie sygnałów w telekomunikacji," PWN 2014. [www, BG AGH]
M. Vetterli, J. Kovačević, and V. K. Goyal, "Foundations of Signal Processing," Cambridge Core, 2014. [web,pdf]
Książka "Cyfrowe przetwarzanie sygnałów: od teorii do zastosowań" autorstwa T. P. Zieliński jest sugerowana jako źródło wiedzy pierwszego wyboru. Szczegółowe wykazy rozdziałów do przeczytania przez zajęciami, będą opierały się w głównej mierze na rozdziałach z tej książki. Biblioteka AGH zapewnia dostęp do elektronicznej wersji tej książki dla członków biblioteki. Wymaga to jedynie zalogowania się do systemu biblioteki. Bezpośredni adres www, pod którym dostępna jest książka, znajduje się pod tym >odnośnikiem<.
W poniższej liście znajdują się rozdziały/sekcje/artykuły, z którymi powinieneś się zapoznać. Niektóre z nich są w ramach przypomnienia materiału.
Tomasz P. Zieliński, "Cyfrowe przetwarzanie sygnałów : od teorii do zastosowań".
Rozdział 1, Sygnały i ich parametry
Rozdział 2, Podstawy matematyczne analizy sygnałów deterministycznych
Rozdział 3, Szereg Fouriera.
Rozdział 4, Całkowe przekształcenie Fouriera.
Rozdział 6, Analogowe filtry Butterwortha i Czebyszewa.
Rozdział 8, Analiza częstotliwościowa sygnałów dyskretnych.
Rozdział 9, Algorytmy wyznaczania dyskretnej transformacji Fouriera.
Rozdział 10, Układy dyskretne.
Rozdział 11, Projektowanie rekursywnych filtrów cyfrowych.
Rozdział 12, Projektowanie nierekursywnych filtrów cyfrowych.
Rozdział 13, Algorytmy filtracji cyfrowej.
Rozdział 17, Metody czasowo-częstotliwościowej analizy sygnałów.
Sekcja 17.3. Krótkoczasowa transformacja Fouriera STFT.
Rozdział 18, Zespoły filtrów.
Sekcja QUANTIZATION NOISE MODEL, "Taking the Mystery out of the Infamous Formula, 'SNR = 6.02N + 1.76dB,' and Why You Should Care", Walt Kester, Analog Devices, [pdf].
D. Griffin and J. Lim, “Signal estimation from modified short-time Fourier transform,” IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 32, no. 2, Art. no. 2, Apr. 1984, doi: 10.1109/TASSP.1984.1164317.
Zasady oceniania
W ramach ćwiczeń laboratoryjnych zastosowano standardową uniwersytecką skalę ocen, zaczynając od 2,0
(niedostateczny), przez ocenę 3,0
(dostateczny), aż do 5,0
(bardzo dobry). Progresja pomiędzy oceną 3,0
, a oceną 5,0
to 0,5
, która stopniowo oznacza osiągi od dostatecznych do bardzo dobrych. Aby uzyskać pozytywną ocenę (zaliczenie) z ćwiczeń laboratoryjnych należy otrzymać ocenę 3,0
lub wyżej.
Zasady oceniania przyjęte dla tych ćwiczeń laboratoryjnych kładą w głównej mierze nacisk na zdobytą wiedzę z przedmiotu oraz umiejętności rozwiązywania problemów z dziedziny przetwarzania sygnałów. Ową wiedzą i umiejętnościami będziesz miał okazję wykazać się przez semestr, w ramach Kolokwium Rozszerzającego, które składa się z szeregu niezapowiedzianych μKolokwiów (mikro-kolokwiów), odbywających się w trakcie ćwiczeń laboratoryjnych (lub innym ustalonym terminie). Na ostatnich ćwiczeniach laboratoryjnych w semestrze odbędzie się Standardowe Kolokwium Zaliczeniowe, które to będzie sprawdzać czy opanowałeś najbardziej podstawowe umiejętności i wiedzę z naciskiem na umiejętności praktyczne. Jak sama nazwa może wskazywać, Kolokwium Rozszerzające, co do zasady obejmuję szerszy zakres materiału w stosunku do Standardowego Kolokwium Zaliczeniowego. Pod koniec semestru będzie zbierany Moduł CPS.jl, który powinien powstać w trakcie realizacji materiału laboratoryjnego.
Poniżej znajduje się tabela ze składowymi współczynnika na podstawie których zostanie wystawiona ocena końcowa z ćwiczeń laboratoryjnych.
Składowe oceny | ||
---|---|---|
1 | Standardowe Kolokwium Zaliczeniowe | |
2 | Kolokwium Rozszerzające | |
3 | Moduł CPS.jl |
Udział -tej składowej we współczynniku dany jest przez zmienną (waga składowej). Współczynnik oceny końcowej z ćwiczeń laboratoryjnych jest obliczany jako część całkowita przeskalowanej ważonej średniej arytmetycznej składowych współczynnika. Dokładny wzór z którego obliczany jest współczynnik prezentuje się następująco:
gdzie , oznacza ilość punktów którą uzyskałeś w ramach -tej składowej, określa maksymalną ilość punktów, którą mogłeś otrzymać w semestrze, w ramach -tej składowej. Dodatkowo w czasie zajęć można uzyskać plusy za szeroko rozumianą aktywność na ćwiczeniach laboratoryjnych. Plusy przeliczają się na nadprogramowy składnik we współczynnika jako , gdzie , to liczba plusów otrzymanych w ciągu semestru, a to niemalejąca funkcja. Krzywa funkcja zostanie arbitralnie ustalona pod koniec semestru na podstawie statystyki przydzielonych plusów we wszystkich grupach.
Ocena końcowa z ćwiczeń laboratoryjnych jest bezpośrednio zdeterminowana przez współczynnik oceny . Poniższa tabela przedstawia zależność między współczynnikiem , a końcową oceną z ćwiczeń laboratoryjnych.
Przedział | Ocena końcowa | |
---|---|---|
2,0 | ||
3,0 | ||
3,5 | ||
4,0 | ||
4,5 | ||
5,0 |
Skal ocen jest ustalona według § 13. SKALA OCEN, z regulaminu studiów wyższych Akademii Górniczo-Hutniczej im. Stanisława Staszica w Krakowie, w brzmieniu obowiązującym od 1 października 2023 roku.
Moduł CPS.jl
Moduł CPS.jl
, to zbiór przydatnych programów komputerowych (funkcji), realizujących obliczenia często wykonywanych operacji w cyfrowym przetwarzaniu sygnałów. Twoim pobocznym zadaniem, a właściwe produktem ubocznym powstałym wskutek rozwiązywania problemów laboratoryjnych, będzie właśnie stworzenie takie modułu w języku programowania Julia.
Struktura tego modułu, to znaczy, nazwy funkcji, argumenty tych funkcji oraz to co te funkcje zwracają, będzie zdefiniowane w niektórych problemach w zbiorze, które będziesz mógł rozwiązać oraz w szablonie modułu. Szablon jest dostępny na podstronie CPS.jl (zapisz plik, nie kopiuj tekstu, bo mogą wystąpić problemy z kodowaniem). Szablon modułu będę aktualizowany przez semestr.
Modułu CPS.jl
, który udało Ci się przygotować przez semestr, będzie trzeba obowiązkowo przesyłać do końca dnia 12.06.2025. Przesłany przez Ciebie kod źródłowy musi być rezultatem twojej samodzielnej pracy. Sposób przesłania zostanie opublikowane w późniejszym terminie.
Standardowe kolokwium zaliczeniowe
Standardowe Kolokwium Zaliczeniowe (SKZ) jest to kolokwium, które ma za zadanie sprawdzić wiedzę oraz umiejętność biegłego rozwiązywania problemów z cyfrowego przetwarzania sygnałów w zakresie podstawowym. Przez zakres podstawowy należy rozumieć pewien minimalny podzbiór , wszystkich możliwych problemów, które każdy student otrzymujący zaliczenie (ocenę 3.0 lub wyżej), musi być w stanie samodzielnie rozwiązać w prawidłowy sposób. Przez prawidłowy sposób należy rozumieć w pełni poprawne rozwiązanie, natomiast nie należy utożsamiać przez to częściowo poprawnego rozwiązania lub prawie poprawnego rozwiązania. SKZ składa się wyłącznie z problemów z zakresu podstawowego . Ogólna specyfikacja zbioru znajduje się na podstronie Zakres podstawowy.
SKZ kładzie nacisk na problemy praktyczne i składa się w całości z problemów obliczeniowych natury numerycznej. Problemy te należy rozwiązać, poprzez wykonanie stosownych obliczeń dla zdefiniowanych w treści problemu danych wejściowych. Obliczenia muszą być wdrożone poprzez napisanie odpowiedniego programu komputerowego.
Jak sama nazwa wskazuję, kolokwium opisują dwa przymiotniki: standardowe i zaliczeniowe. Przez przymiotnik standardowe należy rozumieć, że wszystkie problemy na SKZ, które trzeba będzie rozwiązać, mają zawsze taką samą formę. A oznacza to, że składają się z następujących elementów:
opis problemu,
odpowiedź w postaci jednej liczby,
oraz program komputerowy wykonujący obliczenia i zwracający liczbę będącą odpowiedzią.
Przez przymiotnik zaliczeniowe należy rozumieć, że uzyskanie z tego kolokwium minimum 5 punktów (około 70%), zapewnia zaliczenie ćwiczeń laboratoryjnych. Owe 5 punktów z SKZ zwiększa wartości współczynnik o wartość , co z kolei przekłada się na co najmniej dostateczną ocenę końcową (3,0) z ćwiczeń laboratoryjnych. Co do zasady każda osoba otrzymująca zaliczenie z ćwiczeń laboratoryjnych, powinna uzyskać minimalnie te 5 punktów za SKZ. Zwróć uwagę, że jedynym warunkiem koniecznym do uzyskania zaliczenia, jest uzyskanie współczynnika , patrz Zasady oceniania.
SKZ będzie składać się z siedmiu losowo wybranych problemów ze zbioru . Czas przewidziany na rozwiązanie wszystkich problemów na tym kolokwium wynosi 60 minut.
Za każde poprawne rozwiązanie -tego problemu zdobędziesz punktów, natomiast za niepoprawne rozwiązanie punktów. Końcowa ilość punktów , którą otrzymasz w ramach SKZ, oblicza się przez następującą zależność:
Maksymalna ilość punktów, którą można uzyskać za SKZ wynosi .
Forma standardowego problemu
Jak będzie mniej więcej wyglądała forma standardowego problemu na SKZ? Rozważmy to na przykładowym problemie, który brzmi następująco:
Dany jest wektor , . Znajdź sumę elementów wektora , które zostały podniesione do potęgi . Odpowiedź podaj dla następujących wartości wejściowych:
x = [0.0, 1.0, 2.0, 3.5, 4.0, 5.0]
n = 5
Mając taki problem, należy zauważyć, że występują w nim następujące nazwane zmienne: x
, N
oraz n
. Program komputerowy należy zaimplementować w postaci funkcji o nazwie rozwiazanie_k
, gdzie k
to numer problemu. Załóżmy na potrzeby przykładu, że k = 1
. Funkcja powinna przyjmować argumenty poprzez słowa kluczowe, które to powinny nazywać się tak jak zostały nazwane w treści problemu oraz przyjmować wartości domyślne, równe wartością dla których należy podać odpowiedź.
Przykładowy program rozwiązujący powyższy problem w języku Julia:
function rozwiazanie_1(;
x = [0.0, 1.0, 2.0, 3.5, 4.0, 5.0],
n = 5,
)
sum(x .^ n)
end
Natomiast odpowiedzą jest liczba 4707.21875
, otrzymana przez wywołanie funkcji rozwiazanie_1()
.
Procedura oceny rozwiązania
Aby rozwiązanie -tego problemu na SKZ zostało zaliczone jako prawidłowe i w rezultacie został przydzielony za nie , muszą zajść poniższe warunki:
Warunek poprawnego rozwiązania: Liczba , będąca przesłaną odpowiedzią, musi być w przybliżeniu równa wartości referencyjnej .
Warunek generalizacji: Funkcja obliczająca rozwiązanie musi zwracać poprawne rozwiązania, w ujęciu warunku poprawnego rozwiązania, dla argumentów wejściowych o innych sensowych wartościach niż domyślne.
Przez pojęcie przybliżonej równości należy rozumieć, że dopuszczalny jest pewien błąd względny w stosunku do wartości referencyjnej odpowiedzi. Wartość dopuszczalnego błędu względnego nie jest jawna i jest zależna od problemu. Przykładowo jeżeli wartość referencyjna odpowiedzi wynosi , a podana przez Ciebie odpowiedź wynosi , to błąd względy będzie wynosił:
Jeżeli założymy że dopuszczalny błąd względny , to w tym przykładzie , więc . Jeżeli odpowiedź wynosiłaby , to , ponieważ błąd względy byłby większy niż .
Uwagi
Jeżeli kod źródłowy się nie wykonuje (występuje błąd wykonania lub błąd kompilacji), lub wykonuje warunkowo, to nie spełniony jest warunek 1 lub 2, przez co nie można przyznać punktu za dane rozwiązanie.
Jeżeli odpowiedź jest błędna (błąd względny jest za duży), w wyniku błędnego algorytmu realizującego obliczenia, to rozwiązanie jest uznane jako nieprawidłowe, niezależnie od tego jakiego wymiaru jest to błąd. Jeżeli pomylenie nazwy zmiennych, czy też odjęcie jednej wartości od drugiej zamiast dodania, wpływa na wartość odpowiedzi znacząco, to nie można zaklasyfikować takich błędów jako drobne i ostatecznie jednak uznać napisany algorytm za poprawny. Takie "drobne błędy" powstałe z przypadku czy też nieuwagi, potencjalnie mogą być bardzo kosztowne, jak to przykładowo było z katastrofą z powodu kreski. Jedyne akceptowalne błędy w algorytmie, to takie, które powodują odchylenie się wartości podanej odpowiedzi od wartości referencyjnej zgodnie z dopuszczalny błędem względnym .
Dobre praktyki
Poniżej znajduje się lista dobrych praktyk, które w szczególności powinno się zastosować w czasie rozwiązywania problemów ze standardowego kolokwium zaliczeniowego.
Zawsze podawaj odpowiedź z jak największą precyzją.
Sprawdź czy funkcja, który napisałeś wykonuje się i zwraca wartość, którą wpisałeś jako odpowiedź.
Zastanów się czy zwracana przez funkcję wartość ma sens. Przykładowo, jeżeli algorytm ma za zadanie oszacować stosunek mocy sygnału do mocy szumu, to być może wartość 1000 dB, to trochę za dużo.
Spróbuj stworzyć zestawy danych wejściowych do funkcji, dla których jesteś w stanie szybko oszacować czy zwracana odpowiedź jest prawidłowa. Przykładowo tworząc przypadki graniczne.
Odwołania od oceny
Po ocenieniu SKZ, otrzymasz zdalny dostęp do swojej wersji problemów z SKZ, twoich rozwiązań, oraz oceny tych rozwiązań. Jeżeli uznasz, że dane rozwiązanie zostało nieprawidłowo ocenione, to oczywiście możesz się odwołać od takiej oceny. W tym celu powinieneś zgłosić do mnie swoje odwołanie przez pocztę elektroniczną, nie później niż 36 godziny od ogłoszenia wyników. W wiadomości jesteś proszony, aby uzasadnić dlaczego uważasz, że Twoje rozwiązanie jest prawidłowe. Im bardziej szczegółowo to zrobisz, tym lepiej będę w stanie rozpatrzyć takie odwołanie.
Dodatkowy problem
Istnieje możliwość otrzymania dodatkowego problemu w ramach Standardowego Kolokwium Zaliczeniowego podczas terminu podstawowego. W rezultacie, zamiast siedmiu problemów, będziesz mógł rozwiązać osiem problemów, przy czym poprawne rozwiązanie każdego problemu dalej waży 1 punkt oraz maksymalna ilość punktów za SKZ nie wzrasta. W praktyce, przekłada się to na dwie możliwości:
odrzucenia jednego nieatrakcyjnego dla Ciebie problemu, bez straty punktu,
wykonanie wszystkich zadań i zwiększenie szans na otrzymanie większej liczby punktów w końcowy rezultacie, ponieważ błąd w jednym zadaniu nic nie waży.
Wartość w takim przypadku, będzie obliczana na podstawie poniższego wzoru:
Warunkiem otrzymania dodatkowego problemu na SKZ jest deklaracja rezygnacji z Kolokwium Rozszerzającego przed 4-tym tygodniem semestru (patrz harmonogram).
Kolokwium rozszerzające
Kolokwium rozszerzające jest to kolokwium, które ma za zadanie sprawdzić wiedzę oraz umiejętności biegłego rozwiązywania problemów z cyfrowego przetwarzania sygnałów w zakresie rozszerzonym. Przez zakres rozszerzony należy rozumieć zbiór , zawierający problemy z przedmiotu cyfrowego przetwarzania sygnałów, które można rozwiązać w oparciu o wiedzę wchodzącą w zakres materiału laboratoryjnego, a uzyskaną poprzez studiowanie wskazanej literatury oraz rozwiązywanie problemów z materiału laboratoryjnego. Kolokwium rozszerzające kładzie nacisk na biegłość w posługiwaniu się aparatem matematycznym oraz znajomość i zrozumienie fundamentalnych aspektów teoretycznych technik przetwarzania sygnałów wchodzących w zakres materiału laboratoryjnego. W ramach kolokwium rozszerzające mogą pojawić się problemy o różnorodnej naturze, od problemów opisowych, przez problemy obliczeniowe o charakterze numerycznym bądź symbolicznym, po problemy typu wykaż/udowodnij, bądź też zadania testowe wielokrotnego wyboru. Kolokwium rozszerzające składa się z szeregu μKolokwiów, które będą przeprowadzane przez semestr w czasie ćwiczeń laboratoryjnych (lub innym ustalonym terminie).
μKolokwium (micro kolokwium) to z natury niezapowiedziane kolokwium, które odbywa się w formie pisemnej bądź w formie odpowiedzi ustnej. Zakres materiału obowiązujący na μKolokwium obejmuje dotychczasowo przerobiony materiał laboratoryjny włącznie z aktualnym, patrz harmonogram. W zależności od ilości problemów i ich złożoności, pojedyncze μKolokwium może trwać od jednej minuty do kilkudziesięciu minut w skrajnych przypadkach. Podobnie jak w przypadku czasu trwania μKolokwium, maksymalna liczba punktów, która jest przyporządkowane od do danego μKolokwium, zależy od ilości problemów oraz ich złożoności.
Jeżeli masz ochotę samodzielnie zgłosić się do μKolokwium (odpowiedzi ustnej) w ramach kolokwium rozszerzającego, to w takim wypadku, proszę o wyrażenie takiej chęci przynajmniej 72 godziny przed najbliższymi zajęciami laboratoryjnymi.
Wartość obliczana jest jako suma punktów, którą otrzymałeś ze wszystkich μKolokwiów. Wartość obliczana jest jako suma maksymalnej liczby punktów, którą mogłeś otrzymać w ramach wszystkich μKolokwiów, które pisałeś.
Ogólne zasady pisania kolokwium
Informację zawarte w tej sekcji dotyczą przede wszystkim zapowiedzianych z wyprzedzeniem kolokwiów takich jak Standardowe Kolokwium Zaliczeniowe.
Podczas kolokwium będziesz miał do dyspozycji treść problemów, które należy rozwiązać, kartkę papieru, kopię dozwolonych materiałów pomocniczych, oraz komputer na którym będziesz mógł wykonać niezbędne obliczenia. Na kolokwium powinieneś przyjść z długopisem i legitymacją studencką. Kolokwium należy rozwiązać samodzielnie, bez pomocy osób trzecich. W czasie trwania kolokwium nie można przy sobie posiadać innych przedmiotów niż wymienione wcześniej, ani żadnych innych niedozwolonych materiałów pomocniczych. Komputer może zostać wykorzystany tylko i wyłącznie do rozwiązania kolokwium. Natomiast, komputer nie może być wykorzystany jako narzędzie do przeglądania niedozwolonych materiałów pomocniczych, komunikacji z osobami trzecimi, lub innych czynności. Jedynymi dozwolonymi programami, które mogą być uruchomione na komputerze w czasie trwania kolokwium, to przeglądarka internetowa oraz edytor tekstu z interpreterem/kompilatorem, bądź zintegrowane środowisko programistyczne. W czasie kolokwium można korzystać tylko i wyłącznie z biblioteki standardowej języka programowania Julia oraz z LinearAlgebra
i Makie
. Inne uruchomione programy lub inne biblioteki niż wymienione, będą traktowane jako korzystanie z niedozwolonych materiałów pomocniczych. Podczas kolokwium, w edytorze można stworzyć puste pliki tekstowe, w których będziesz zapisywać swoje rozwiązania. Otwieranie innych plików jest niedozwolone i traktowane jako korzystanie z niedozwolonych materiałów pomocniczych. W przeglądarce stron internetowych można mieć otwarte tylko i wyłącznie zakładki zawierającą treść kolokwium oraz dozwolone materiały pomocnicze. Otwieranie innych stron internetowych jest niedozwolone i traktowane jako korzystanie z niedozwolonych materiałów pomocniczych. Jeżeli nie zastosujesz się do tych zasad, zgodnie z regulaminem studiów, otrzymasz ocenę końcową 2.0
z wszystkich terminów zaliczania zajęć, z powodu korzystania z niedozwolonych materiałów pomocniczych. Jedynym dozwolonym materiałem pomocniczym w czasie trwania kolokwium jest książka "Cyfrowe przetwarzanie sygnałów: od teorii do zastosowań", autorstwa T. P. Zielińskiego. W czasie trwania kolokwium będziesz miał dostęp do kopii tej książki. Korzystanie ze swojej kopii książki jest niedozwolone i traktowane jako korzystanie z niedozwolonych materiałów pomocniczych.
Uwaga, korzystanie z dokumentacji języka lub dokumentacji dozwolonych bibliotek/paczek jest dozwolone tylko i wyłącznie z poziomu zintegrowane środowisko programistyczne w którym pracujesz. Otwieranie strony internetowej z dokumentacją będzie traktowana jako korzystanie z niedozwolonych materiałów pomocniczych.
Jako rezultat swojej pracy w czasie kolokwium będziesz musiał zdać:
odpowiedzi na problemy,
pliki z kodem źródłowym generującym rozwiązania,
nagranie ekranu komputera.
Zawody w obliczaniu transformacji Fouriera
Zawody polegają na napisaniu kodu źródłowego funkcji , która obliczy -punktową dyskretną transformacje Fouriera (dwustronne widmo częstotliwościowe) dla wektora wejściowego , gdzie . Wygrywa ten, kto opracuję najszybszą implementację, czyli funkcję, która zwraca poprawny wyniki w jak najkrótszym czasie. Autorzy najszybszych programów z pośród wszystkich grup laboratoryjnych, otrzymają dodatkowe punkty do współczynnika oceny końcowej według poniższej tabeli.
Miejsce | Bonus |
---|---|
1 | |
2 | |
3 |
W zależności od ilości i jakości nadesłanych zgłoszeń, liczba punktowanych miejsc, oraz ilość punktów za poszczególne miejsce, może się zwiększyć.
Kryterium rankingu
Dla każdego zgłoszonego programu zostanie oszacowana liczba , która będzie określać szybkość danego programu. Im większa liczba , tym dany program jest szybszy. Liczba dla danego programu zostanie oszacowana jako rozwiązanie następującego problemu,
gdzie to -ty (spośród I wykonań) czas trwania obliczania -punktowej dyskretnej transformacji Fouriera z wykorzystaniem danego programu dla losowego zespolonego sygnału o długości próbek, a [s], to limit na łączny czas obliczeniowy. W przypadku otrzymania dwóch takich samych wartości liczby dla dwóch różnych programów, zostaną przeprowadzone dodatkowe testy z zwiększona wartością . Jeżeli zwiększenie limitu na łączny czas obliczeniowy nie przyniesie rozstrzygnięcia, to kolejnym wyznacznikiem będzie łączny czas obliczeniowy (mniejszy czas to lepszy wyniki).
Warunkiem koniecznym, aby program uzyskał , jest prawidłowe obliczanie wartości dyskretnego widma częstotliwościowego. W przypadku zwrócenia nieprawidłowych wartości wyjściowych dla badanego wejścia, program otrzymuje . Zwracane przez funkcję wartości, będą porównywane z referencyjną implementacją funkcji fft
z modułu FFTW.jl (Fastest Fourier Transform in the West) przy użyciu funkcji isapprox
(z biblioteki standardowej języka Julia) z domyślnymi wartościami argumentów przez słowo kluczowe.
Szacowanie czasów dla nadesłanych programów będzie przeprowadzane na komputerach w sali laboratoryjnej z wykorzystaniem Julia v1.11.*
. Prototyp programu służącego do szacowania liczby :
using BenchmarkTools
import FFTW
function benchmark(
test_fft::Function,
ref_fft::Function;
T_limit=0.1,
M=1,
N=128,
suppres=false
)
times = Float64[]
while true
x = randn(ComplexF64, length(times)+1)
@assert test_fft(x) ≈ ref_fft(x)
best_run = begin
bench = @benchmark $test_fft($x) evals=M samples=N
bench.times |> minimum |> x -> x / 1_000_000_000
end
sum(times) + best_run > T_limit && break
push!(times, best_run)
!suppres && @show length(times) best_run sum(times)
end
return length(times), times
end
N_max, times = benchmark(test_fft, FFTW.fft)
Specyfikacja zgłoszenia
Zgłoszenia można nadsyłać do końca dnia 08.06.2025 (do godziny 23:59), poprzez pocztę elektroniczną na mój adres. Wiadomość powinna być zatytułowana w następujący sposób:
[cps] Zgłoszenie do zawodów w obliczaniu transformacji Fouriera
.
Do wiadomości powinny być dołączone dwa pliki:
Plik
FFT.jl
, zawierający w sobie:Moduł o nazwie
FFT
.Moduł musi zawierać w sobie zmienną
author
do której przypisany jest słownik z informacją o numerze albumu (klucz:index
), imię i nazwisko (klucz:name
), oraz adres poczty elektronicznej w domenie AGH (klucz:email
).Moduł musi zawierać kod źródłowy funkcji
fft
, która oblicza dyskretną transformację Fouriera. Funkcja musi przyjmować zmienną typuVector{ComplexF64}
poprzez pierwszy argument pozycyjny oraz zawracać wartość typuVector{ComplexF64}
.Moduł może zawierać stałe pomocnicze.
Moduł może zawierać funkcje pomocnicze.
Funkcja
fft
(program) może korzystać tylko i wyłącznie z jednego procesu i jednego wątku procesora.Moduł
FFT
może korzystać tylko i wyłącznie z następujących bibliotek:LinearAlgebra
.
Kod źródłowy programu (plik
FFT.jl
) nie może zajmować więcej niż 128 kibibajtów (KiB). Sprowadza się to do tego, aby w kodzie źródłowym nie można zamieszczać za dużo wcześniej obliczonych pomocniczych wartości liczbowych (stałych).Zgłoszony moduł nie może wykonywać żadnych dodatkowych obliczeń podczas inicjalizacji modułu. Przykład: podczas inicjalizacji modułu nie można dynamicznie wygenerować tablicy z wartościami pomocniczymi, które będą wykorzystywane w funkcji
fft
. Można natomiast zdefiniować w kodzie źródłowym stałe z których będzie się korzystać, o ile nie przekracza to limitu z poprzedniego punktu.Funkcja
fft
musi być czysta (bezstanowa), to znaczy, że nie może zapamiętywać stanu między kolejnymi wywołaniami funkcji oraz nie może wykorzystywać pamięci współdzielonej. Przykład: nie można zapisywać do zmiennej globalnej, natomiast można tylko odczytywać jakieś wartości z takiej zmiennej.Szablon modułu
FFT
wygląda następująco:
module FFT
author = Dict{Symbol, String}(
:index => "17681830", # numer albumu
:name => "Jean Baptiste Joseph Fourier", # imię i nazwisko
:email => "fourier@agh.edu.pl", # adres poczty elektronicznej
)
# Można dodać inne argumenty wejściowe, ale muszą one mieć
# wartość domyślną. Pierwszy argument pozycyjny musi być
# wektorem z którego oblicza się DFT.
function fft(x::Vector{ComplexF64})::Vector{ComplexF64}
missing
end
end
Plik
algorytm.pdf
, zawierający w sobie dokumentację techniczną, która szczegółowo opisuje wykorzystane w zgłoszeniu metody i algorytmy.Dokumentu należy przygotować w oparciu o szablon
IEEEtran
.Dokument musi być udostępniony na licencji Creative Commons.
Zasady i wymagania
Jedna osoba można przesłać tylko jedno zgłoszenie.
Zgłoszenie może być autorstwa tylko jednej osoby.
Zgłoszenie musi być wynikiem samodzielnej pracy autora.
Zgłoszenie musi spełniać wymagania z sekcji Specyfikacja zgłoszenia.
Kod źródłowy funkcji musi być napisany w języku programowania Julia.
Dokumentacja techniczna
algorytm.pdf
musi całościowo i jasno opisywać przesłany algorytm. W wypadku niespełnienia tych wymagań, będziesz proszony o wniesienie ewentualnych poprawek do przesłanej dokumentacji technicznej algorytmu, lub zostanie potrącona adekwatna liczba punktów uzyskanych w rozwiązaniu.
Przydatne informacje i narzędzia
Performance Tips, Julia documentation,
Wykład 2, Optimizing Serial Code, Parallel Computing and Scientific Machine Learning (SciML): Methods and Applications,
Testowanie wydajności: BenchmarkTools.jl.
Zaliczenie poprawkowe
Jeżeli nie uda Ci się uzyskać zaliczenia z ćwiczeń laboratoryjnych w terminie podstawowym, przysługują Ci dwa termin zaliczenia poprawkowego.
Domyślnie zaliczenie poprawkowe polega na ponownym podejściu do Standardowego Kolokwium Zaliczeniowego i poprawieniu współczynnika . Ocenę końcową z ćwiczeń laboratoryjnych w terminach poprawkowych, oblicza się wtedy zgodnie ze wzorem na współczynnik zaliczenia z sekcji Zasady oceniania.
Jeżeli chcesz podejść w danym terminie poprawkowym do kolokwium zaliczeniowego z całego materiału laboratoryjnego, to należy zgłosić taką chęć co najmniej 72 godziny przed terminem tego zaliczenia poprawkowego, poprzez wysłanie wiadomości pocztą elektroniczną. Miej na uwadze, że w takim przypadku będę musiał przygotować nowy zestaw problemów specjalnie na ten termin, więc jeżeli nie zgłosisz takiej chęci 72 godziny przed terminem danego zaliczenia poprawkowego, to nie zdążę przygotować tego kolokwium na czas i w rezultacie ominie Cię możliwość napisania tego kolokwium. Ocena końcowa z ćwiczeń laboratoryjnych, w przypadku podchodzenia do kolokwium poprawkowego z całego materiału laboratoryjnego, zostanie wtedy wystawiona tylko i wyłącznie na podstawie punktów uzyskanych z kolokwium poprawkowego.
Daty terminów zaliczeń poprawkowych podane są w poniższej tabeli.
tydzień | data | Termin | Sala | Godzina |
---|---|---|---|---|
17 | 26.06.2025 | I | 310/C-3 | 08:00 - 09:00 |
18 | 03.07.2025 | II | 310/C-3 | 08:00 - 09:00 |
Aktualnie powyższa tabela zawiera tylko i wyłącznie wstępny harmonogram obu terminów zaliczeń poprawkowych. Harmonogram może zostać zmieniony pod koniec semestru, tak aby dostosować go do zapotrzebowania.
Historia zmian
2025.03.18: Aktualizacja harmonogramów oraz obłożenia grup zajęciowych.
2025.03.11: Aktualizacja harmonogramów.
2025.03.09: Korekta błędów i nieaktualnych odnośników w sekcji Literatura.
2025.03.03: Publikacja dokumentu.