SZYMON M. WOŹNIAK

Cyfrowe Przetwarzanie Sygnałów

Edycja: Semestr letni 2024/2025.

Spis treści

  1. Cyfrowe Przetwarzanie Sygnałów
  2. Prowadzący
  3. Wymagania wstępne
  4. Ćwiczenia laboratoryjne
  5. Jak się przygotować na zajęcia?
  6. (Nie)obecność
  7. Wyrównywanie zaległości
  8. Sala laboratoryjna
  9. Grupy laboratoryjne
  10. Harmonogram
    1. Harmonogram A
    2. Harmonogram B
  11. Literatura
  12. Zasady oceniania
  13. Moduł CPS.jl
  14. Standardowe kolokwium zaliczeniowe
    1. Forma standardowego problemu
    2. Procedura oceny rozwiązania
    3. Dobre praktyki
    4. Odwołania od oceny
    5. Dodatkowy problem
  15. Kolokwium rozszerzające
  16. Ogólne zasady pisania kolokwium
  17. Zawody w obliczaniu transformacji Fouriera
    1. Kryterium rankingu
    2. Specyfikacja zgłoszenia
    3. Zasady i wymagania
    4. Przydatne informacje i narzędzia
  18. Zaliczenie poprawkowe
  19. 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:

Ponadto musisz posiadać dwie niezbędne umiejętności:

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ęć:

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.

GrupaHarmonogramDzień tygodniaGodzinaIlość stanowiskZajętość
EiT#1BCzwartek15:00 - 16:301513
EiT#2BCzwartek18:30 - 20:001512
EiT#3BCzwartek16:45 - 18:151512
EiT#4AŚroda18:30 - 20:001515
EiT#5AŚroda16:45 - 18:151512
EiT#6AŚroda15:00 - 16:301514

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:

Harmonogram A

tydzieńdatanr labinformacja dodatkowa
0105.03.202501Wprowadzenie do środowiska obliczeniowego.
0212.03.202502Modelowanie sygnałów oraz ich parametry.
0319.03.202503Próbkowanie i kwantyzacja.
0426.03.202504Obliczanie dyskretnej Transformacji Fouriera.
0502.04.202505+
0609.04.202506+
0716.04.202507+
0823.04.202508+
09~~30.04.2025~~-Harmonogram zajęć z piątku.
1007.05.202509+
1114.05.202510+
1221.05.202511+
1328.05.202512+
1404.06.202513+
1511.06.202514Standardowe Kolokwium Zaliczeniowe.
1618.06.2025--
1725.06.2025--

Harmonogram B

tydzieńdatanr labinformacja dodatkowa
0106.03.202501Wprowadzenie do środowiska obliczeniowego.
0213.03.202502Modelowanie sygnałów oraz ich parametry.
0320.03.202503Próbkowanie i kwantyzacja.
0427.03.202504Obliczanie dyskretnej Transformacji Fouriera.
0503.04.202505+
0610.04.202506+
07~~17.04.2025~~-Wakacje wiosenne.
0824.04.202507+
0929.04.202508+
09~~01.05.2025~~-Dzień ustawowo wolny od zajęć.
1008.05.202509+
1115.05.202510+
1222.05.202511+
1329.05.202512+
1405.06.202513+
1512.06.202514Standardowe 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.

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.

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 σ \sigma na podstawie których zostanie wystawiona ocena końcowa z ćwiczeń laboratoryjnych.

iiSkładowe ocenyψi\psi_i
1Standardowe Kolokwium Zaliczeniowe0.65 0.65
2Kolokwium Rozszerzające0.30 0.30
3Moduł CPS.jl0.05 0.05

Udział ii-tej składowej we współczynniku σ\sigma dany jest przez zmienną ψi\psi_i (waga składowej). Współczynnik oceny końcowej z ćwiczeń laboratoryjnych σ\sigma 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 σ\sigma prezentuje się następująco:

σ=100(i=13ωiΩiψi)(i=13ψi)1+Γ(p), \sigma = \left\lfloor 100 \cdot \left( \sum_{i=1}^{3} \frac{\omega_i}{\Omega_i} \cdot{} \psi_i \right) \cdot \left( \sum_{i=1}^{3} \psi_i \right)^{-1} \right\rfloor + \Gamma (p) ,

gdzie x=max{kZ:kx} \lfloor x \rfloor = \max \{ k \in \mathbb{Z} : k \leq x \} , ωi \omega_i oznacza ilość punktów którą uzyskałeś w ramach ii-tej składowej, Ωi\Omega_i określa maksymalną ilość punktów, którą mogłeś otrzymać w semestrze, w ramach ii-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 σ\sigma jako Γ(p)\Gamma (p), gdzie pNp \in \mathbb{N}, to liczba plusów otrzymanych w ciągu semestru, a Γ:NR+\Gamma : \mathbb{N} \rightarrow \mathbb{R}_+ to niemalejąca funkcja. Krzywa funkcja Γ\Gamma 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 σ\sigma. Poniższa tabela przedstawia zależność między współczynnikiem σ\sigma, a końcową oceną z ćwiczeń laboratoryjnych.

PrzedziałOcena końcowa
σ(,50) \sigma \in (-\infty, 50) \Longrightarrow 2,0
σ[50,60) \sigma \in [50, 60) \Longrightarrow 3,0
σ[60,70) \sigma \in [60, 70) \Longrightarrow 3,5
σ[70,80) \sigma \in [70, 80) \Longrightarrow 4,0
σ[80,90) \sigma \in [80, 90) \Longrightarrow 4,5
σ[90,+) \sigma \in [90, +\infty) \Longrightarrow 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 P\cal{P}, 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 P\cal{P}. Ogólna specyfikacja zbioru P\cal{P} 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:

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 σ\sigma o wartość 5050, 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 σ50\sigma \ge 50, patrz Zasady oceniania.

SKZ będzie składać się z siedmiu losowo wybranych problemów ze zbioru P\cal{P}. Czas przewidziany na rozwiązanie wszystkich problemów na tym kolokwium wynosi 60 minut.

Za każde poprawne rozwiązanie kk-tego problemu zdobędziesz zk=1z_k = 1 punktów, natomiast za niepoprawne rozwiązanie zk=0z_k = 0 punktów. Końcowa ilość punktów ω1\omega_1, którą otrzymasz w ramach SKZ, oblicza się przez następującą zależność:

ω1=min( k=17zk, 6.5). \omega_1 = \min \left( \thinspace\thinspace\sum_{k=1}^{7} z_k, \thinspace\thinspace 6.5 \right).

Maksymalna ilość punktów, którą można uzyskać za SKZ wynosi Ω1=6.5\Omega_1 = 6.5.

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 xRN\mathbf{x} \in \mathbb{R}^N, NNN \in \mathbb{N}. Znajdź sumę elementów wektora x\mathbf{x}, które zostały podniesione do potęgi nNn \in \mathbb{N}. 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 kk-tego problemu na SKZ zostało zaliczone jako prawidłowe i w rezultacie został przydzielony za nie zk=1z_k = 1, muszą zajść poniższe warunki:

  1. Warunek poprawnego rozwiązania: Liczba x^k\hat{x}_k, będąca przesłaną odpowiedzią, musi być w przybliżeniu równa wartości referencyjnej xkx_k.

  2. 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 Δk\Delta_k nie jest jawna i jest zależna od problemu. Przykładowo jeżeli wartość referencyjna odpowiedzi wynosi xk=5.00x_k = 5.00, a podana przez Ciebie odpowiedź wynosi x^k=5.20\hat{x}_k = 5.20, to błąd względy δk\delta_k będzie wynosił:

δk=xkx^kxk=5.005.205.00=250=0.04. \delta_k = \left| \frac{x_k - \hat{x}_k}{x_k} \right| = \left| \frac{5.00 - 5.20}{5.00} \right| = \left| \frac{2}{50} \right| = 0.04.

Jeżeli założymy że dopuszczalny błąd względny Δk=0.05\Delta_{k} = 0.05, to w tym przykładzie δkΔk\delta_k \leq \Delta_k, więc zk=1z_k = 1. Jeżeli odpowiedź wynosiłaby x^k=5.56\hat{x}_k = 5.56, to zk=0z_k = 0, ponieważ błąd względy δk\delta_k byłby większy niż Δk\Delta_k.

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 δk\delta_k 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 Δk\Delta_k.

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.

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:

Wartość ω1\omega_1 w takim przypadku, będzie obliczana na podstawie poniższego wzoru:

ω1=min( k=18zk, 6.5). \omega_1 = \min \left( \thinspace\thinspace\sum_{k=1}^{8} z_k, \thinspace\thinspace 6.5 \right).

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 RP\cal{R} \supset \cal{P}, 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ść ω2\omega_2 obliczana jest jako suma punktów, którą otrzymałeś ze wszystkich μKolokwiów. Wartość Ω2\Omega_2 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ć:

Zawody w obliczaniu transformacji Fouriera

Zawody polegają na napisaniu kodu źródłowego funkcji fft:CNCN\mathrm{fft} : \mathbb{C}^N \rightarrow \mathbb{C}^N, która obliczy NN-punktową dyskretną transformacje Fouriera (dwustronne widmo częstotliwościowe) dla wektora wejściowego xCN x \in \mathbb{C}^N, gdzie NNN>0 N \in \mathbb{N} \land N > 0 . 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 σ\sigma według poniższej tabeli.

MiejsceBonus
1σ+10.0 \sigma + 10.0
2σ+7.5 \sigma + 7.5
3σ+5.0 \sigma + 5.0

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 NmaxNN_{\max} \in \mathbb{N}, która będzie określać szybkość danego programu. Im większa liczba NmaxN_{\max}, tym dany program jest szybszy. Liczba NmaxN_{\max} dla danego programu zostanie oszacowana jako rozwiązanie następującego problemu,

Nmax=arg maxNNNpod warunkiem, z˙en=1Nmini(Tn,i)Tlimit, N_{\max} = \argmax_{N \in \mathbb{N}} N \quad \text{pod warunkiem, że} \quad \sum_{n = 1}^{N} \min_i (T_{n,i}) \leq T_{\text{limit}},

gdzie Tn,iT_{n,i} to ii-ty (spośród I wykonań) czas trwania obliczania nn-punktowej dyskretnej transformacji Fouriera z wykorzystaniem danego programu dla losowego zespolonego sygnału o długości nn próbek, a Tlimit=0.1T_{\text{limit}} = 0.1 [s], to limit na łączny czas obliczeniowy. W przypadku otrzymania dwóch takich samych wartości liczby NmaxN_{\max} dla dwóch różnych programów, zostaną przeprowadzone dodatkowe testy z zwiększona wartością TlimitT_{\text{limit}}. Jeżeli zwiększenie limitu na łączny czas obliczeniowy nie przyniesie rozstrzygnięcia, to kolejnym wyznacznikiem będzie łączny czas obliczeniowy n=1Nmaxmini(Tn,i)\sum_{n = 1}^{N_{\max}} \min_i (T_{n,i}) (mniejszy czas to lepszy wyniki).

Warunkiem koniecznym, aby program uzyskał Nmax>0N_{\max} > 0, 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 Nmax=0N_{\max} = 0. 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 Tn,iT_{n,i} 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 NmaxN_{\max}:

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:

Do wiadomości powinny być dołączone dwa pliki:

  1. Plik FFT.jl, zawierający w sobie:

    1. Moduł o nazwie FFT.

    2. 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).

    3. Moduł musi zawierać kod źródłowy funkcji fft, która oblicza dyskretną transformację Fouriera. Funkcja musi przyjmować zmienną typu Vector{ComplexF64} poprzez pierwszy argument pozycyjny oraz zawracać wartość typu Vector{ComplexF64}.

    4. Moduł może zawierać stałe pomocnicze.

    5. Moduł może zawierać funkcje pomocnicze.

    6. Funkcja fft (program) może korzystać tylko i wyłącznie z jednego procesu i jednego wątku procesora.

    7. Moduł FFT może korzystać tylko i wyłącznie z następujących bibliotek:

      • LinearAlgebra.

    8. 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).

    9. 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.

    10. 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.

    11. 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
  1. Plik algorytm.pdf, zawierający w sobie dokumentację techniczną, która szczegółowo opisuje wykorzystane w zgłoszeniu metody i algorytmy.

    1. Dokumentu należy przygotować w oparciu o szablon IEEEtran.

    2. Dokument musi być udostępniony na licencji Creative Commons.

Zasady i wymagania

  1. Jedna osoba można przesłać tylko jedno zgłoszenie.

  2. Zgłoszenie może być autorstwa tylko jednej osoby.

  3. Zgłoszenie musi być wynikiem samodzielnej pracy autora.

  4. Zgłoszenie musi spełniać wymagania z sekcji Specyfikacja zgłoszenia.

  5. Kod źródłowy funkcji musi być napisany w języku programowania Julia.

  6. 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

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 ω1\omega_1. 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ńdataTerminSalaGodzina
1726.06.2025I310/C-308:00 - 09:00
1803.07.2025II310/C-308: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