1/47Kodowanie i kompresja

Kodowanie i kompresja

Wykład wprowadzający do zagadnień kodowania sygnałów cyfrowych oraz kompresji danych. Omówione zostaną podstawowe kody liniowe stosowane w transmisji cyfrowej, metody kompresji bezstratnej i stratnej oraz popularne standardy kodowania dźwięku, obrazu i wideo.

Rys. 1: Zakres tematyczny wykładu — kodowanie i kompresja w systemach telekomunikacyjnych

Wykład ten stanowi wprowadzenie do zagadnień kodowania i kompresji, które są fundamentalne dla współczesnej telekomunikacji cyfrowej. Kodowanie przekształca informację w postać odpowiednią do transmisji lub przechowywania, natomiast kompresja redukuje ilość danych potrzebnych do jej reprezentacji. Prezentacja dzieli się na dwie główne części: kody liniowe stosowane w transmisji w paśmie podstawowym oraz metody kompresji danych. W pierwszej części omówione zostaną kody NRZ, RZ, Manchester oraz kody blokowe, takie jak 4B/5B i 8B/10B. Druga część obejmuje kompresję bezstratną (Huffman, LZW, RLE) oraz stratną (DCT, kwantyzacja, modele percepcyjne). Przedstawione zostaną również praktyczne standardy, takie jak MP3, JPEG, H.264 i nowoczesny AV1. Zrozumienie tych zagadnień jest kluczowe dla projektowania wydajnych systemów komunikacyjnych. Wykład łączy podstawy teoretyczne z praktycznymi przykładami zastosowań w rzeczywistych systemach telekomunikacyjnych.

2/47Streszczenie

Streszczenie

Kody liniowe w transmisji cyfrowej umożliwiają dopasowanie sygnału do medium transmisyjnego. Kodowanie źródła minimalizuje redundancję (kompresja), a kodowanie kanału dodaje redundancję w celu korekcji błędów.

Kompresja bezstratna pozwala na idealne odtworzenie danych, kompresja stratna — na wyższy stopień kompresji kosztem utraty informacji. Standardy kodowania audio/wideo (MP3, AAC, H.264, AV1) są kluczowe dla nowoczesnej telekomunikacji.

Rys. 2: Mapa pojęć — kodowanie źródła, kodowanie kanału, kody liniowe, kompresja

Prezentacja została zaprojektowana jako uporządkowane wprowadzenie do kluczowych koncepcji kodowania i kompresji w telekomunikacji. Materiał rozpoczyna się od rozróżnienia między kodowaniem źródła, które minimalizuje redundancję, a kodowaniem kanału, które dodaje nadmiarowość w celu korekcji błędów. Następnie szczegółowo omówione są kody liniowe odpowiedzialne za dopasowanie sygnału cyfrowego do medium transmisyjnego. Kolejna część poświęcona jest kompresji bezstratnej, która umożliwia idealne odtworzenie danych po dekompresji. Kompresja stratna jest przedstawiona jako metoda pozwalająca na znacznie wyższy stopień kompresji kosztem nieodwracalnej utraty informacji. Praktyczne standardy kodowania audio, obrazu i wideo ilustrują rzeczywiste zastosowania omawianych technik. W końcowej części omówione są najnowsze trendy, w tym kodek AV1 i kompresja z wykorzystaniem sztucznej inteligencji. Taka struktura pozwala studentowi stopniowo budować wiedzę od podstaw do zaawansowanych zagadnień.

3/47Czym jest kodowanie?

Kodowanie — podstawowa definicja

Kodowanie to proces przypisania symboli informacji do postaci binarnej (ciągów bitów) w celu transmisji lub przechowywania.

  • Odwrotność: dekodowanie — odtworzenie informacji z ciągu bitów
  • Kodowanie może być jednoznaczne (każdy ciąg bitów odpowiada dokładnie jednemu symbolowi) lub niejednoznaczne
  • Cel: reprezentacja informacji w formie zrozumiałej dla systemu transmisyjnego
Przykład: ASCII — kodowanie znaków alfabetu łacińskiego za pomocą 7 lub 8 bitów.
Rys. 3: Proces kodowania — symbol informacji → kod binarny → transmisja → dekodowanie

Kodowanie jest podstawową operacją w każdym systemie telekomunikacyjnym, polegającą na przekształceniu informacji w postać binarną zrozumiałą dla urządzeń elektronicznych. Proces ten musi być jednoznaczny, aby odbiorca mógł poprawnie zdekodować przesłaną wiadomość. Kodowanie dzieli się na trzy główne kategorie: kodowanie źródła (kompresja), kodowanie kanału (FEC) oraz kodowanie liniowe (dopasowanie sygnału do medium). Przykładem prostego kodowania jest ASCII, które przypisuje 7- lub 8-bitowe kody do znaków alfabetu łacińskiego. Bardziej zaawansowane systemy kodowania, takie jak Unicode (UTF-8), obsługują znaki z różnych systemów pisma na całym świecie. W telekomunikacji kluczowe znaczenie ma również kodowanie różnicowe, w którym informacja jest przenoszona przez zmianę stanu, a nie przez sam stan. Kodowanie musi uwzględniać charakterystykę kanału transmisyjnego, taką jak szerokość pasma, stosunek sygnału do szumu i zniekształcenia. Poprawnie zaprojektowany system kodowania znacząco wpływa na niezawodność i efektywność całej transmisji.

4/47Kodowanie źródła — kompresja

Kodowanie źródła (Source Coding)

Celem kodowania źródła jest minimalizacja redundancji — usunięcie zbędnych informacji, aby zmniejszyć liczbę bitów potrzebnych do reprezentacji danych.

  • Wykorzystuje statystyczne właściwości źródła (częstotliwość występowania symboli)
  • Przykład: kodowanie Huffmana — krótsze kody dla częstszych symboli
  • Kompresja bezstratna: idealne odtworzenie oryginału (ZIP, PNG, FLAC)
  • Kompresja stratna: utrata części informacji (MP3, JPEG, H.264)
Rys. 4: Kodowanie źródła — redukcja redundancji przy zachowaniu informacji

Kodowanie źródła, nazywane również kompresją danych, ma na celu minimalizację liczby bitów potrzebnych do reprezentacji informacji przy zachowaniu jej zawartości. Techniki bezstratne wykorzystują redundancję statystyczną źródła, czyli fakt, że niektóre symbole występują częściej niż inne. Kodowanie Huffmana jest optymalnym kodem prefiksowym dla danego rozkładu prawdopodobieństwa symboli. W kompresji stratnej rezygnuje się z części informacji, która jest mało istotna z percepcyjnego punktu widzenia. Kluczowym narzędziem w kompresji stratnej jest transformata cosinusowa (DCT), która koncentruje energię sygnału w niewielkiej liczbie współczynników. Modele psychoakustyczne i psychowizyjne określają, które składowe sygnału mogą być odrzucone bez zauważalnego pogorszenia jakości. Wybór między kompresją bezstratną a stratną zależy od konkretnego zastosowania i wymagań dotyczących wierności odtworzenia. Współczesne systemy telekomunikacyjne często łączą oba podejścia w zależności od rodzaju przesyłanych danych.

5/47Kodowanie kanału — FEC

Kodowanie kanału (Channel Coding)

Celem kodowania kanału jest dodawanie redundancji w celu wykrywania i korekcji błędów transmisji (FEC — Forward Error Correction).

  • Odwrotność kodowania źródła: zamiast usuwać — dodaje się kontrolne bity
  • Przykłady: kody Hamminga, kody Reeda-Solomona, kody splotowe, kody LDPC
  • Stosowane w: łączach satelitarnych, CD/DVD, 5G, Wi-Fi
Kompromis: im więcej bitów kontrolnych, tym lepsza korekcja, ale niższa przepływność użyteczna.
Rys. 5: Kodowanie kanału — dodanie bitów parzystości umożliwia korekcję błędów

Kodowanie kanału z korekcją błędów w przód (FEC) jest niezbędne w systemach, w których retransmisja uszkodzonych pakietów jest niemożliwa lub niepraktyczna. Kody Hamminga, zaproponowane w 1950 roku, były jednymi z pierwszych kodów korekcyjnych i do dziś są używane w pamięciach ECC. Kody Reeda-Solomona są szeroko stosowane w nośnikach optycznych, takich jak CD, DVD i Blu-ray, gdzie korygują błędy powstałe na skutek uszkodzeń fizycznych płyty. Kody splotowe (convolutional codes) działają w sposób ciągły na strumieniu bitów, a ich dekodowanie najczęściej odbywa się za pomocą algorytmu Viterbiego. Kody LDPC (Low-Density Parity-Check) są stosowane w standardach 5G, DVB-S2 i Wi-Fi 6 ze względu na ich bliskość granicy Shannona. Kodowanie kanału zawsze wiąże się z kompromisem: im więcej bitów nadmiarowych, tym lepsza korekcja błędów, ale mniejsza przepływność użyteczna. W praktyce stosuje się kody o zmiennej szybkości (rate-adaptive codes), które dostosowują poziom nadmiarowości do warunków panujących w kanale. Współczesne systemy łączności satelitarnej i kosmicznej stosują zaawansowane kody turbo i LDPC o wydajności sięgającej 99% granicy Shannona.

6/47Miejsce kodowania w modelu OSI

Kodowanie w modelu OSI

Kodowanie kanału i kody liniowe są realizowane głównie w warstwie łącza danych (warstwa 2) oraz warstwie fizycznej (warstwa 1) modelu OSI.

  • Warstwa 2 (łącza danych): kodowanie kanału (FEC), ramkowanie, detekcja błędów (CRC)
  • Warstwa 1 (fizyczna): kody liniowe (NRZ, Manchester, 4B/5B), modulacja
  • Warstwa 6 (prezentacji): kodowanie źródła (kompresja) — w praktyce często w aplikacji
Rys. 6: Miejsce kodowania źródła, kanału i liniowego w modelu OSI

Model OSI (Open Systems Interconnection) zapewnia ramy koncepcyjne do zrozumienia, gdzie w systemie komunikacyjnym zachodzą poszczególne procesy kodowania. Kodowanie źródła, którego celem jest kompresja danych, teoretycznie należy do warstwy prezentacji (warstwa 6), choć w praktyce jest często implementowane na poziomie aplikacji. Kodowanie kanału z korekcją błędów (FEC) jest realizowane w warstwie łącza danych (warstwa 2), gdzie dodawane są bity parzystości i sumy kontrolne. Kody liniowe, odpowiedzialne za kształtowanie sygnału w medium transmisyjnym, działają w warstwie fizycznej (warstwa 1). W warstwie fizycznej zachodzi również modulacja, która przekształca cyfrowy strumień bitów na sygnał analogowy. W niektórych systemach stosuje się kodowanie kaskadowe, łączące różne typy kodów w celu osiągnięcia lepszej ochrony przed błędami. Zrozumienie przypisania poszczególnych typów kodowania do warstw OSI ułatwia projektowanie i diagnostykę systemów telekomunikacyjnych. Współczesne układy scalone często integrują funkcje kodowania z różnych warstw w jednym układzie (SoC).

7/47Kody liniowe — cel i parametry

Kody liniowe w transmisji cyfrowej

Kody liniowe (ang. line codes) to sposób reprezentacji cyfrowego strumienia bitów jako sygnału elektrycznego lub optycznego w medium transmisyjnym.

Cel: dopasowanie widma sygnału do charakterystyki kanału transmisyjnego.

  • Składowa stała (DC): pożądany brak — ułatwia transformatorowe sprzężenie AC
  • Synchronizacja: kod powinien zapewniać wystarczającą liczbę zmian poziomu
  • Szerokość pasma: im węższe pasmo, tym lepsze wykorzystanie medium
  • Detekcja błędów: niektóre kody umożliwiają wykrycie naruszenia reguł kodowania
Rys. 7: Ogólny schemat kodera liniowego — bity → sygnał w medium

Kody liniowe są podstawowym elementem transmisji cyfrowej w paśmie podstawowym, przekształcającym strumień bitów na sygnał elektryczny lub optyczny. Głównym celem kodowania liniowego jest dopasowanie widma sygnału do charakterystyki częstotliwościowej kanału transmisyjnego. Kluczowym parametrem każdego kodu liniowego jest zawartość składowej stałej (DC), która powinna być jak najmniejsza, aby umożliwić transformatorowe sprzężenie AC. Synchronizacja odbiornika z nadajnikiem jest możliwa dzięki zmianom poziomu sygnału — im częstsze zmiany, tym łatwiejszy odzysk zegara. Szerokość pasma zajmowanego przez sygnał zależy bezpośrednio od szybkości zmian poziomu napięcia w kodzie. Niektóre kody liniowe umożliwiają detekcję błędów transmisji poprzez wykrycie naruszenia reguł kodowania. W praktyce wybór kodu liniowego zależy od medium transmisyjnego, wymaganej szybkości transmisji i dopuszczalnego poziomu złożoności układów nadawczo-odbiorczych. Kody liniowe są również istotne z punktu widzenia kompatybilności elektromagnetycznej, ponieważ kształt widma sygnału wpływa na emisję zakłóceń.

8/47Podstawowe kody liniowe — przegląd

Podstawowe kody liniowe

KodCharakterystykaPasmoSkładowa DCSynchronizacja
NRZ (Non-Return to Zero)Poziom stały przez cały bitWąskieTak (przy długich sekwencjach)Słaba
RZ (Return to Zero)Powrót do zera w połowie bitu2× NRZTakDobra
ManchesterZmiana poziomu w połowie bitu2× NRZBrakBardzo dobra
4B/5B4 bity → 5 bitów z mapowaniem1.25× NRZBrak (zbilansowany)Dobra
Rys. 8: Tabela porównawcza podstawowych kodów liniowych

Tabelaryczne zestawienie podstawowych kodów liniowych pozwala na szybkie porównanie ich najważniejszych właściwości. Kod NRZ charakteryzuje się najwęższym pasmem, ale ma istotne wady: składową stałą i słabą synchronizację. Kod RZ zapewnia lepszą synchronizację kosztem dwukrotnie szerszego pasma w porównaniu z NRZ. Kod Manchester oferuje bardzo dobrą synchronizację i zerową składową stałą, ale również wymaga dwukrotnie szerszego pasma. Kody blokowe, takie jak 4B/5B i 8B/10B, stanowią kompromis między szerokością pasma a właściwościami synchronizacyjnymi. W praktycznych zastosowaniach często stosuje się kody o efektywności 80%, które zapewniają dobrą równowagę między przepływnością a niezawodnością odzysku zegara. Wybór odpowiedniego kodu ma kluczowe znaczenie dla maksymalizacji zasięgu transmisji przy zadanej szybkości bitowej. Nowoczesne systemy transmisyjne coraz częściej stosują kody o wyższej efektywności, takie jak 64B/66B czy 128B/130B, które oferują narzut poniżej 3%.

9/47Parametry kodów liniowych — szczegóły

Parametry kodów liniowych

  • Składowa stała (DC component): wartość średnia sygnału. Długie ciągi tych samych bitów w NRZ powodują przesunięcie poziomu stałego, co utrudnia detekcję
  • Synchronizacja: odbiornik musi odtwarzać zegar z sygnału. Brak zmian poziomu → utrata synchronizacji
  • Widmo: kształt gęstości widmowej mocy (PSD) — powinno być skoncentrowane w paśmie przepustowym kanału
  • Maksymalna długość ciągu bez zmian (run length): im mniejsza, tym lepsza synchronizacja
Rys. 9: Gęstość widmowa mocy (PSD) różnych kodów liniowych

Szczegółowa analiza parametrów kodów liniowych ujawnia złożone zależności między konstrukcją kodu a jego właściwościami transmisyjnymi. Składowa stała (DC) w sygnale powstaje, gdy średnia wartość sygnału w długim przedziale czasu jest niezerowa, co prowadzi do dryftu poziomu stałego (baseline wander) w odbiorniku. Maksymalna długość ciągu bitów bez zmiany poziomu (run length) jest krytyczna dla zachowania synchronizacji — im krótsza, tym lepiej. Kształt gęstości widmowej mocy (PSD) kodu liniowego określa, jakie częstotliwości dominują w sygnale i jak sygnał będzie tłumiony przez kanał. Kody zrównoważone (DC-balanced) utrzymują średnią wartość sygnału bliską zeru, co jest szczególnie ważne w systemach światłowodowych. W systemach światłowodowych dodatkowym parametrem jest moc optyczna, która zależy od średniej wartości sygnału elektrycznego. Kody o małej mocy widmowej w pobliżu DC są preferowane w systemach z transformatorowym sprzężeniem AC. Zrozumienie tych parametrów umożliwia świadomy wybór kodu liniowego do konkretnego zastosowania inżynierskiego.

10/47Wykres — przebiegi czasowe kodów

Przebiegi czasowe kodów liniowych

Dla przykładowego strumienia bitów 1 0 1 1 0 0 0 1:

Bity:   1   0   1   1   0   0   0   1
NRZ:   ─── ─── ─── ─── ─── ─── ─── ───
        ╷   ╵   ╷   ╷   ╵   ╵   ╵   ╷
RZ:    ─┐ ─┐ ─┐ ─┐ ─┐ ─┐ ─┐ ─┐ ─┐
        ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵
Manch: ─┐ ┌─ ─┐ ─┐ ┌─ ┌─ ┌─ ─┐
        ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵
            
Rys. 10: Przebiegi czasowe kodów NRZ, RZ i Manchester dla tego samego strumienia bitów

Przebiegi czasowe kodów liniowych ilustrują wizualnie różnice między poszczególnymi metodami kodowania dla tego samego strumienia bitów. Kod NRZ utrzymuje stały poziom napięcia przez cały czas trwania bitu, co widać jako płaskie segmenty na wykresie. Kod RZ wraca do zera w połowie każdego bitu, tworząc charakterystyczne impulsy o czasie trwania równym połowie okresu bitowego. Kod Manchester zmienia poziom w połowie każdego bitu, przy czym kierunek zmiany określa wartość bitu — dzięki temu każde przejście środkowe służy zarówno synchronizacji, jak i transmisji danych. Na wykresie można zaobserwować, że przy długich sekwencjach zer w kodzie NRZ brakuje przejść, co uniemożliwia odzysk zegara. W kodzie RZ każdej jedynce towarzyszy impuls, co zapewnia lepszą synchronizację niż NRZ. Kod Manchester gwarantuje przejście w każdym bicie, niezależnie od przesyłanej wartości, co czyni go najlepszym pod względem synchronizacji. Wizualna analiza przebiegów pomaga w zrozumieniu, dlaczego niektóre kody są preferowane w konkretnych zastosowaniach. Różnice w kształcie przebiegów przekładają się bezpośrednio na różnice w widmie i właściwościach transmisyjnych.

11/47Kod NRZ (Non-Return to Zero)

Kod NRZ — stały poziom przez cały bit

W kodzie NRZ poziom napięcia jest stały przez cały czas trwania bitu:

  • 1 = wysoki poziom napięcia (np. +V)
  • 0 = niski poziom napięcia (np. -V lub 0 V)
  • Brak powrotu do zera między bitami (stąd nazwa)

Zalety: najprostszy do implementacji, wąskie pasmo (podstawowa harmoniczna = bitrate/2).

Wady: składowa stała, brak synchronizacji przy długich sekwencjach zer lub jedynek.

Rys. 11: Kod NRZ — poziom stały przez cały bit, brak powrotu do zera

Kod NRZ jest najprostszym kodem liniowym, w którym logiczna jedynka jest reprezentowana przez wysoki poziom napięcia, a zero przez niski poziom, utrzymywany przez cały czas trwania bitu. Główną zaletą NRZ jest maksymalna efektywność widmowa, ponieważ podstawowa harmoniczna sygnału ma częstotliwość równą połowie szybkości bitowej. Wadą krytyczną jest obecność składowej stałej, która pojawia się, gdy strumień bitów zawiera nierówną liczbę zer i jedynek w długim oknie czasowym. Długie ciągi identycznych bitów powodują brak przejść w sygnale, co prowadzi do utraty synchronizacji odbiornika. Zjawisko dryftu poziomu stałego (baseline wander) sprawia, że próg detekcji w odbiorniku przesuwa się, zwiększając prawdopodobieństwo błędnej decyzji. NRZ jest powszechnie stosowany w łączach krótkodystansowych, gdzie problem składowej stałej można rozwiązać przez sprzężenie pojemnościowe z dodatkowym kodowaniem. W systemach światłowodowych NRZ jest popularny ze względu na prostotę implementacji i wąskie pasmo. Mimo swoich wad NRZ pozostaje punktem odniesienia dla porównania wszystkich innych kodów liniowych.

12/47NRZ-L i NRZ-I — warianty

Warianty NRZ

NRZ-L (Level): poziom sygnału odpowiada bezpośrednio wartości bitu:

  • 1 = wysoki, 0 = niski (lub odwrotnie, zależnie od konwencji)

NRZ-I (Invert on Ones): zmiana poziomu przy bicie 1, brak zmiany przy 0:

  • 1 = zmiana poziomu (przejście), 0 = brak zmiany
  • Kod różnicowy — odporniejszy na odwrócenie polaryzacji
  • Stosowany m.in. w USB (NRZ-I z stuffingiem bitów)
Rys. 12: Porównanie NRZ-L i NRZ-I dla tego samego strumienia bitów

NRZ-L (Level) jest podstawowym wariantem NRZ, w którym wartość bitu jest bezpośrednio odwzorowana na poziom napięcia — stan wysoki odpowiada jedynce, a niski zeru. NRZ-I (Invert on Ones) jest wariantem różnicowym, w którym informacja jest przenoszona przez zmianę poziomu: jedynka powoduje przejście, zero pozostawia poziom bez zmian. Zaletą kodów różnicowych jest odporność na odwrócenie polaryzacji — gdyby przewody zostały zamienione miejscami, dane w NRZ-L zostałyby zinterpretowane odwrotnie, podczas gdy NRZ-I nadal działa poprawnie. NRZ-I jest stosowany w interfejsie USB, gdzie w połączeniu ze stuffingiem bitów zapewnia wystarczającą gęstość przejść do odzysku zegara. W USB po każdych sześciu kolejnych jedynkach wstawiany jest dodatkowy bit zerowy, co wymusza zmianę poziomu i zapobiega utracie synchronizacji. Kodowanie różnicowe jest również stosowane w interfejsach szeregowych, takich jak RS-232 i RS-485. W systemach, w których polaryzacja połączenia może być przypadkowa, różnicowe kodowanie eliminuje potrzebę automatycznego wykrywania biegunowości. NRZ-I jest również stosowany w interfejsie Fibre Channel i niektórych wersjach Ethernetu.

13/47Kod RZ (Return to Zero)

Kod RZ — powrót do zera

W kodzie RZ sygnał wraca do zera w połowie czasu trwania bitu:

  • 1 = wysoki poziom przez pierwszą połowę bitu, potem powrót do 0
  • 0 = niski poziom przez cały bit (lub odwrotnie)

Zalety:

  • Wbudowana synchronizacja (zmiana poziomu w każdym bicie = 1)
  • Prostsza detekcja progowa

Wady:

  • 2× większe pasmo niż NRZ (impulsy są 2× krótsze)
  • Większe zużycie energii (3 poziomy)
Rys. 13: Kod RZ — powrót do poziomu zerowego w połowie bitu

Kod RZ (Return to Zero) różni się od NRZ tym, że sygnał powraca do poziomu zerowego w połowie czasu trwania każdego bitu. Dzięki temu w każdym bicie o wartości jeden występuje impuls, co zapewnia wbudowaną synchronizację odbiornika. Zwiększona liczba przejść w sygnale ułatwia odzysk zegara, co jest szczególnie ważne w systemach o ograniczonym stosunku sygnału do szumu. Wadą kodu RZ jest dwukrotnie szersze pasmo w porównaniu z NRZ, ponieważ impulsy są dwa razy krótsze, a więc zawierają wyższe częstotliwości. Kod RZ wymaga trzech poziomów napięcia (dodatni, zero, ujemny), co zwiększa złożoność nadajnika i odbiornika. W systemach światłowodowych stosuje się wariant RZ, w którym impuls optyczny jest obecny tylko dla jedynki, a zero reprezentuje brak światła. Ze względu na większe zapotrzebowanie na pasmo kod RZ jest rzadko używany w szybkich łączach przewodowych. Znajduje natomiast zastosowanie w niektórych systemach transmisji radiowej i światłowodowej, gdzie korzystna jest łatwość synchronizacji.

14/47Wady NRZ — składowa stała

Problem składowej stałej w NRZ

Gdy strumień bitów zawiera długi ciąg zer lub jedynek, sygnał NRZ utrzymuje stały poziom przez wiele okresów bitowych.

  • Skutek 1: w sygnale pojawia się składowa stała (DC), która jest blokowana przez transformatory i kondensatory sprzęgające AC
  • Skutek 2: dryft poziomu stałego (baseline wander) — odbiornik traci punkt odniesienia dla progu detekcji
  • Skutek 3: brak synchronizacji — odbiornik nie może odtworzyć zegara z sygnału
Rozwiązania: kodowanie różnicowe (NRZ-I), scrambling, stuffing bitów, kody blokowe (4B/5B).
Rys. 14: Dryft poziomu stałego w NRZ przy długim ciągu zer — trudność w detekcji progu

Problem składowej stałej w kodzie NRZ jest jednym z najpoważniejszych ograniczeń tego kodu, szczególnie widocznym przy transmisji przez transformatory lub kondensatory sprzęgające AC. Gdy strumień bitów zawiera długie sekwencje zer lub jedynek, średnia wartość sygnału przesuwa się względem poziomu zerowego. Dryft poziomu stałego (baseline wander) powoduje, że optymalny próg detekcji w odbiorniku zmienia się w czasie, zwiększając prawdopodobieństwo błędów. W systemach światłowodowych składowa stała wpływa na punkt pracy lasera i może prowadzić do zniekształceń nieliniowych. Aby zaradzić tym problemom, stosuje się różne techniki: kodowanie różnicowe (NRZ-I), scrambling danych (wymuszający losowość strumienia), stuffing bitów (wstawianie dodatkowych bitów) oraz kody blokowe (4B/5B, 8B/10B). W standardzie USB zastosowano NRZ-I z bit-stuffingiem, który gwarantuje odpowiednią gęstość przejść w sygnale. W systemach Gigabit Ethernet stosuje się kod 8B/10B, który całkowicie eliminuje składową stałą poprzez zrównoważoną liczbę zer i jedynek. Zrozumienie problemu składowej stałej jest kluczowe dla prawidłowego projektowania systemów transmisji cyfrowej.

15/47Wady RZ — szerokość pasma

Wada RZ — 2× większe pasmo

W kodzie RZ impuls trwa tylko połowę okresu bitowego (Tbit/2), co oznacza, że podstawowa harmoniczna ma częstotliwość 2× wyższą niż w NRZ.

  • NRZ: pasmo podstawowe ≈ fbit/2 (gdzie fbit = 1/Tbit)
  • RZ: pasmo podstawowe ≈ fbit (2× szersze)
  • Ogranicza maksymalną szybkość transmisji w kanale o danej szerokości pasma
  • Większe pasmo → większy poziom szumu w odbiorniku

Wniosek: RZ jest rzadko używany w szybkich łączach; częściej stosuje się kody z synchronizacją bez zwiększania pasma (Manchester, 4B/5B).

Rys. 15: Porównanie widma NRZ i RZ — RZ zajmuje 2× szersze pasmo

Dwukrotnie szersze pasmo kodu RZ w porównaniu z NRZ wynika z faktu, że impuls w RZ trwa tylko połowę okresu bitowego. W dziedzinie częstotliwości krótszy impuls oznacza szersze widmo, zgodnie z zależnością, że szerokość pasma jest odwrotnie proporcjonalna do czasu trwania impulsu. Szersze pasmo ma istotne konsekwencje praktyczne: ogranicza maksymalną szybkość transmisji w kanale o danej szerokości pasma. Większe pasmo oznacza również większą moc szumu termicznego docierającą do odbiornika, co pogarsza stosunek sygnału do szumu. W systemach światłowodowych szersze pasmo przyspiesza rozmycie impulsów spowodowane dyspersją chromatyczną, ograniczając zasięg transmisji. Z tych powodów kod RZ jest rzadko stosowany w szybkich łączach przewodowych, gdzie priorytetem jest maksymalizacja przepływności w ograniczonym paśmie. Kompromisem między wąskim pasmem a dobrą synchronizacją są kody blokowe, które dodają umiarkowaną nadmiarowość (20%) przy zachowaniu akceptowalnych właściwości synchronizacyjnych. W systemach światłowodowych dalekiego zasięgu stosuje się czasem kod RZ ze względu na lepszą tolerancję na zniekształcenia nieliniowe włókna.

16/47Kod Manchester — zasada

Kod Manchester (biphase)

W kodzie Manchester zmiana poziomu następuje w połowie każdego bitu, a kierunek zmiany określa wartość bitu:

  • 0: wysoki → niski (przejście w połowie bitu z góry na dół)
  • 1: niski → wysoki (przejście w połowie bitu z dołu do góry)

Zawsze występuje przejście w środku bitu — synchronizacja jest wbudowana.

Wariant: kod Manchester różnicowy (IEEE 802.4) — zmiana na początku bitu = 0, brak zmiany = 1.

Rys. 16: Kod Manchester — 0 = wysoki→niski, 1 = niski→wysoki w połowie bitu

Kod Manchester należy do rodziny kodów biphase, w których przynajmniej jedna zmiana poziomu występuje w każdym bicie. Dzięki temu sygnał zawiera wbudowany zegar, co eliminuje potrzebę osobnej linii zegarowej w transmisji. Każdy bit rozpoczyna się od poziomu przeciwnego niż poprzedni bit, a w połowie bitu następuje obowiązkowe przejście, którego kierunek określa wartość bitu. Gwarantowana zmiana w środku każdego bitu sprawia, że odzysk zegara jest bardzo prosty i niezawodny. Kod Manchester całkowicie eliminuje składową stałą, ponieważ każdy bit zawiera równe udziały dodatniego i ujemnego napięcia. Wadą jest wymagane dwukrotnie szersze pasmo w porównaniu z NRZ, co ogranicza maksymalną szybkość transmisji. Mimo to kod Manchester znalazł szerokie zastosowanie we wczesnych sieciach Ethernet oraz w systemach RFID. W Ethernet 10Base-T każda para przewodów w skrętce przesyła sygnał zakodowany w Manchesterze z szybkością 10 Mb/s.

17/47Kod Manchester — zalety i wady

Zalety i wady kodu Manchester

Zalety:

  • Wbudowana synchronizacja — przejście w każdym bicie, niezależnie od wartości
  • Brak składowej stałej (DC) — idealny do transformatorowego sprzężenia AC
  • Prosta detekcja błędów (naruszenie reguły przejścia)

Wady:

  • 2× większe pasmo niż NRZ (impuls efektywnie 2× krótszy)
  • 2× więcej przejść → większe zużycie energii

Kompromis: synchronizacja kosztem pasma — akceptowalny dla niższych szybkości.

Rys. 17: Widmo kodu Manchester — brak składowej DC, szerokość pasma 2× NRZ

Kod Manchester oferuje kilka istotnych zalet, które decydują o jego wyborze w wielu zastosowaniach, ale ma również poważne ograniczenia. Najważniejszą zaletą jest wbudowana synchronizacja, ponieważ przejście w połowie każdego bitu gwarantuje niezawodny odzysk zegara w odbiorniku. Brak składowej stałej eliminuje problem dryftu poziomu i umożliwia stosowanie transformatorowego sprzężenia AC. Prosta detekcja błędów jest możliwa poprzez wykrycie braku obowiązkowego przejścia w środku interwału bitowego. Główną wadą jest dwukrotnie szersze pasmo w porównaniu z NRZ, co wynika z podwójnej szybkości zmian poziomu sygnału w kanale. Większa liczba przejść w jednostce czasu zwiększa również pobór mocy w nadajniku, co jest istotne w urządzeniach zasilanych bateryjnie. W systemach szybkich, takich jak Fast Ethernet 100 Mb/s, zrezygnowano z Manchesteru na rzecz kodów blokowych 4B/5B, które oferują węższe pasmo. Kompromis między doskonałą synchronizacją a szerokością pasma jest klasycznym przykładem kompromisu projektowego w telekomunikacji cyfrowej.

18/47Kod Manchester — zastosowania

Zastosowania kodu Manchester

  • Ethernet 10Base-T (IEEE 802.3): pierwsza popularna wersja Ethernetu na skrętce — kod Manchester z szybkością 10 Mbps
  • RFID: kodowanie danych w tagach RFID — prostota dekodowania w pasywnych układach
  • MIL-STD-1553: magistrala danych w systemach awionicznych
  • Kodowanie w kartach zbliżeniowych: standard HID Proximity
  • Kodowanie w starszych systemach telemetrii
Ciekawostka: 10Base-T używa kodu Manchester, ale 100Base-TX (Fast Ethernet) już 4B/5B — szybszy kod wymaga węższego pasma.
Rys. 18: Ethernet 10Base-T — kod Manchester na skrętce komputerowej

Kod Manchester znalazł zastosowanie w wielu różnych dziedzinach, przede wszystkim tam, gdzie prostota i niezawodność są ważniejsze niż maksymalna szybkość transmisji. Najbardziej znanym zastosowaniem jest Ethernet 10Base-T, który przez wiele lat był dominującym standardem sieci lokalnych. W systemach RFID kod Manchester jest używany w komunikacji między czytnikiem a tagiem, ponieważ umożliwia prostą synchronizację w pasywnych układach zasilanych z pola magnetycznego. Magistrala danych MIL-STD-1553, stosowana w awionice wojskowej i cywilnej, wykorzystuje kod Manchester do zapewnienia niezawodnej transmisji w trudnych warunkach. Karty zbliżeniowe HID Proximity używają kodu Manchester do kodowania identyfikatorów w polu magnetycznym. W systemach telemetrii starszej generacji kod Manchester był standardem ze względu na łatwość dekodowania w prostych układach logicznych. Warto zauważyć, że wraz ze wzrostem wymaganych szybkości transmisji kod Manchester został wyparty przez bardziej efektywne widmowo kody blokowe. Obecnie kod Manchester przeżywa renesans w niektórych zastosowaniach IoT ze względu na bardzo niski pobór mocy w trybie odbioru.

19/47Kodowanie 4B/5B

Kod 4B/5B — 4 bity → 5 bitów

Każda grupa 4 bitów danych jest mapowana na 5-bitowy symbol. 16 z 32 możliwych symboli jest używanych dla danych, pozostałe dla kontroli (idle, delimiter).

Cel:

  • Zapewnienie odpowiedniej liczby przejść (synchronizacja)
  • Zrównoważenie DC (balance DC)
  • Maksymalny run length = 3 bity bez zmiany

Efektywność: 4/5 = 80% — strata 20% przepływności.

Zastosowanie: Ethernet 100Base-TX (Fast Ethernet), FDDI.

Rys. 19: Zasada kodowania 4B/5B — 4 bity danych → 5-bitowy symbol

Kod 4B/5B jest przykładem kodowania blokowego, w którym każde 4 bity danych są zastępowane 5-bitowym symbolem, co daje efektywność 80%. Dodatkowy bit zapewnia odpowiednią gęstość przejść w strumieniu wyjściowym, co ułatwia odzysk zegara w odbiorniku. Z 32 możliwych 5-bitowych kombinacji tylko 16 jest używanych dla danych, a pozostałe służą jako znaki kontrolne, takie jak idle (11111) czy znaczniki ramki. Maksymalna długość ciągu bitów bez zmiany (run length) w 4B/5B wynosi 3, co gwarantuje wystarczającą liczbę przejść do synchronizacji. Kod 4B/5B został przyjęty jako standard w Fast Ethernet 100Base-TX, gdzie zastąpił Manchester używany w 10Base-T. Jest również stosowany w interfejsie FDDI (Fiber Distributed Data Interface) do transmisji światłowodowej. Wadą kodu jest 20-procentowy narzut przepływności, który jest akceptowalnym kompromisem w zamian za dobrą synchronizację i równowagę DC. Kod 4B/5B zapoczątkował rodzinę kodów blokowych, która ewoluowała w kierunku 8B/10B, 64B/66B i 128B/130B o coraz mniejszym narzucie.

20/47Tabela mapowania 4B/5B

Mapowanie 4B/5B — wybrane kody

Dane (4 bity)Kod 5BDane (4 bity)Kod 5B
000011110100010010
000101001100110011
001010100101010110
001110101101110111
010001010110011010
010101011110111011
011001110111011100
011101111111111101

Kody kontrolne: 11111 (idle), 11000 (start delimiter), 00111 (end delimiter).

Rys. 20: Tabela mapowania 4B/5B — 16 symboli danych + kody kontrolne

Tabela mapowania 4B/5B zawiera 16 kodów 5-bitowych przypisanych do 16 możliwych kombinacji 4-bitowych danych wejściowych. Kody zostały starannie dobrane tak, aby żaden z nich nie zawierał więcej niż jednego zera na początku ani więcej niż dwóch zer na końcu, co ogranicza maksymalny run length. Na przykład wartość 0000 jest mapowana na kod 11110, który ma cztery jedynki i jedno zero, zapewniając dobrą gęstość przejść. Wartość 1111 jest mapowana na 11101, co również zapewnia odpowiednią liczbę przejść. Kody kontrolne, takie jak 11111 (idle), 11000 (start delimiter) i 00111 (end delimiter), są używane do oznaczenia granic ramek i stanów bezczynności łącza. W Fast Ethernet kody kontrolne umożliwiają wykrycie początku i końca ramki bez potrzeby stosowania dodatkowych znaczników. Mapowanie 4B/5B jest zdefiniowane w standardzie IEEE 802.3u i jest zaimplementowane sprzętowo w układach nadajników Fast Ethernet. Zrozumienie tabeli mapowania jest kluczowe przy analizie strumienia bitów w sieciach 100Base-TX.

21/47Kodowanie 8B/10B

Kod 8B/10B — 8 bitów → 10 bitów

Rozszerzenie idei 4B/5B: 8 bitów danych (256 kombinacji) mapowanych na 10-bitowe symbole (1024 kombinacje).

Właściwości:

  • Zrównoważenie DC (disparity) — liczba zer i jedynek jest wyrównana
  • Maksymalny run length = 5
  • Efektywność: 80% (jak 4B/5B)
  • Wykrywanie błędów: nieprawidłowe symbole są odrzucane

Zastosowanie: USB 3.0, SATA, PCI Express, HDMI, DVI, DisplayPort, Gigabit Ethernet.

Rys. 21: Kod 8B/10B — mapowanie 8-bitowych bajtów na 10-bitowe symbole

Kod 8B/10B jest następcą 4B/5B, oferującym takie same 80-procentowe wykorzystanie pasma, ale z lepszymi właściwościami korekcyjnymi. Został opracowany przez firmę IBM w 1983 roku i znalazł szerokie zastosowanie w szybkich interfejsach szeregowych. Kodowanie 8B/10B wykorzystuje mechanizm disparities (nierównowagi), który śledzi sumę bieżącą bitów w strumieniu i wybiera jeden z dwóch możliwych 10-bitowych symboli dla każdego bajtu danych. Dzięki temu kod zapewnia zrównoważenie DC oraz maksymalny run length wynoszący tylko 5 bitów bez zmiany. Nieprawidłowe 10-bitowe kombinacje, które nie należą do zdefiniowanego zestawu, są łatwo wykrywalne jako błędy transmisji. Kod 8B/10B jest stosowany w Gigabit Ethernet (1000Base-T i 1000Base-X), USB 3.0, SATA, PCI Express, HDMI, DVI i DisplayPort. Wadą kodu jest stosunkowo wysoka złożoność implementacji sprzętowej. Kod 8B/10B został w nowszych standardach zastąpiony bardziej efektywnymi kodami, takimi jak 64B/66B i 128B/130B.

22/47Porównanie kodów liniowych — tabela

Porównanie kodów liniowych

ParametrNRZRZManchester4B/5B8B/10B
Efektywność100%100%50%80%80%
Pasmo (wzgl. NRZ)1.25×1.25×
Składowa DCTakTakBrakBrakBrak
SynchronizacjaSłabaDobraBardzo dobraDobraDobra
Detekcja błędówBrakBrakTak (prosta)TakTak
ZłożonośćBardzo niskaNiskaNiskaŚredniaWysoka
Rys. 22: Tabela porównawcza wszystkich omawianych kodów liniowych

Tabela porównawcza kodów liniowych zestawia w jednym miejscu wszystkie kluczowe parametry omawianych kodów, ułatwiając wybór odpowiedniego rozwiązania. Efektywność kodu określa, jaka część przepływności jest wykorzystywana na transmisję danych użytecznych — NRZ i RZ mają 100%, Manchester tylko 50%, a kody blokowe 80%. Szerokość pasma względem NRZ pokazuje, jak bardzo kod poszerza widmo sygnału, co ma bezpośredni wpływ na maksymalną szybkość transmisji w kanale. Obecność składowej stałej determinuje możliwość stosowania transformatorowego sprzężenia AC i wpływa na dryft poziomu w odbiorniku. Jakość synchronizacji zależy od gęstości przejść w sygnale i jest kluczowa dla niezawodnego odzysku zegara. Możliwość detekcji błędów przez sam kod liniowy jest dodatkową zaletą, choć nigdy nie zastępuje dedykowanych mechanizmów FEC. Złożoność implementacji przekłada się na koszt układów nadawczo-odbiorczych i pobór mocy. Wybór kodu liniowego zawsze wymaga znalezienia optymalnego kompromisu między tymi parametrami.

23/47Kody blokowe — podsumowanie

Kody blokowe mB/nB

Kody blokowe (mB/nB) to rodzina kodów, gdzie m bitów danych jest zastępowanych n bitami (n > m).

  • Cel: zapewnienie równowagi DC i gwarantowanej liczby przejść w strumieniu
  • Koszt: zmniejszenie efektywnej przepływności o (n-m)/n × 100%
  • Im większe m, tym mniejszy narzut (np. 64B/66B — 3% narzutu, stosowane w 10GbE)
  • 64B/66B: 64 bity danych + 2 bity synchronizacji → efektywność 97%
Trend: nowsze interfejsy używają 128B/130B (PCIe 3.0) lub 256B/258B — jeszcze mniejszy narzut.
Rys. 23: Ewolucja kodów blokowych — od 4B/5B do 256B/258B, malejący narzut

Kody blokowe mB/nB stanowią rodzinę kodów liniowych, w których m bitów danych jest zastępowanych n bitami (n > m), co zapewnia kontrolę nad właściwościami widmowymi sygnału. Im większa wartość m, tym mniejszy procentowy narzut kodu, ale tym bardziej złożona implementacja. Kod 64B/66B, stosowany w 10 Gigabit Ethernet, dodaje tylko 2 bity synchronizacji do 64 bitów danych, osiągając efektywność 97%. Kod 128B/130B, używany w PCI Express 3.0, ma jeszcze mniejszy narzut wynoszący około 1,5%. W kodzie 64B/66B dwa bity synchronizacji służą do oznaczenia typu bloku: 01 dla danych i 10 dla kontroli. Kod 256B/258B jest stosowany w PCI Express 4.0 i 5.0, oferując najwyższą efektywność spośród wszystkich kodów blokowych. Wszystkie kody blokowe zapewniają automatyczną równowagę DC poprzez odpowiedni dobór sekwencji bitów. Kody te są implementowane sprzętowo w układach serdes (serializer/deserializer) stosowanych w szybkich interfejsach szeregowych. Wybór konkretnego kodu blokowego zależy od wymaganej przepływności, dopuszczalnego narzutu i złożoności implementacji.

24/47Kompresja bezstratna — definicja

Kompresja bezstratna (Lossless Compression)

Definicja: metoda kompresji, która umożliwia idealne odtworzenie oryginalnych danych po dekompresji — nie traci się żadnej informacji.

  • Stosowana tam, gdzie każdy bit ma znaczenie: dokumenty tekstowe, programy, bazy danych
  • Osiągalny stopień kompresji: zazwyczaj 2:1–5:1 (zależnie od danych)
  • Wykorzystuje redundancję statystyczną i powtarzalność wzorców

Zasada: częściej występujące symbole otrzymują krótsze kody; powtarzające się sekwencje są zastępowane krótszymi odwołaniami.

Rys. 24: Kompresja bezstratna — dane oryginalne → kompresja → dekompresja → identyczne dane

Kompresja bezstratna jest niezbędna w zastosowaniach, gdzie utrata nawet pojedynczego bitu jest niedopuszczalna, takich jak dokumenty tekstowe, pliki wykonywalne czy bazy danych. Stopień kompresji zależy silnie od rodzaju danych: tekst może być skompresowany do 20–40% rozmiaru oryginalnego, podczas gdy już skompresowane dane (np. JPEG) nie poddają się dalszej efektywnej kompresji. Najprostszą metodą bezstratną jest RLE (Run-Length Encoding), która koduje ciągi powtarzających się symboli. Kodowanie Huffmana wykorzystuje statystykę źródła do przypisania optymalnych długości kodów. Metody słownikowe, takie jak LZW i LZ77, identyfikują powtarzające się wzorce w strumieniu danych i zastępują je krótszymi odwołaniami do słownika. W praktyce najlepsze narzędzia kompresji bezstratnej łączą kilka metod, np. Deflate (PNG, ZIP) łączy LZ77 z kodowaniem Huffmana. Najwyższe stopnie kompresji bezstratnej osiągają algorytmy z rodziny LZMA (7z), które mogą skompresować dane nawet do 10% oryginalnego rozmiaru. W systemach telekomunikacyjnych kompresja bezstratna jest stosowana do przesyłania danych systemowych, nagłówków protokołów i plików konfiguracyjnych.

25/47Kodowanie Huffmana

Kodowanie Huffmana

Algorytm optymalnego kodowania prefiksowego (1952). Przypisuje krótsze kody symbolom o większym prawdopodobieństwie wystąpienia.

  • Algorytm: budowa drzewa binarnego od liści do korzenia — łączenie dwóch najrzadszych symboli
  • Kod prefiksowy: żaden kod nie jest prefiksem innego — jednoznaczne dekodowanie
  • Optymalność: minimalna średnia długość kodu dla danego rozkładu prawdopodobieństwa

Przykład: w tekście litera "e" (12.7%) może mieć kod "100", a "z" (0.07%) — "00101101101".

Rys. 25: Drzewo Huffmana dla przykładowego tekstu — częstsze znaki = krótsze kody

Kodowanie Huffmana, opracowane przez Davida A. Huffmana w 1952 roku, jest optymalnym kodem prefiksowym dla danego rozkładu prawdopodobieństwa symboli. Algorytm buduje drzewo binarne, łącząc dwa symbole o najmniejszym prawdopodobieństwie w każdym kroku, aż do uzyskania jednego korzenia. Własność prefiksowa oznacza, że żaden kod nie jest początkiem innego kodu, co umożliwia jednoznaczne dekodowanie bez potrzeby stosowania separatorów. Kodowanie Huffmana jest używane w wielu standardach kompresji, w tym w JPEG, MP3, Deflate (ZIP, PNG) i H.264. W praktyce często stosuje się tablice kodów Huffmana wyznaczone na podstawie statystyk typowych danych, co eliminuje potrzebę przesyłania drzewa. Wariantem jest adaptacyjne kodowanie Huffmana, które dynamicznie aktualizuje kody podczas przetwarzania strumienia danych. Ograniczeniem kodowania Huffmana jest założenie o znajomości rozkładu prawdopodobieństwa oraz konieczność transmisji tablicy kodów do dekodera. Mimo opracowania nowszych metod, takich jak kodowanie arytmetyczne, Huffman pozostaje szeroko stosowany ze względu na prostotę i efektywność.

26/47Wizualizacja — drzewo Huffmana

Drzewo Huffmana — przykład

Dla tekstu "ABRACADABRA" zliczamy częstości:

A: 5, B: 2, C: 1, D: 1, R: 2
            

Drzewo:

        (11)
       /    \
     A(5)   (6)
           /   \
         (3)   (3)
        /   \  /   \
      B(2) C(1) D(1) R(2)
            

Kody: A=0, B=100, C=1010, D=1011, R=11

Wynik: 40 bitów zamiast 88 (ASCII) — kompresja 55%.

Rys. 26: Drzewo Huffmana dla "ABRACADABRA" — kody prefiksowe przy liściach

Wizualizacja drzewa Huffmana dla przykładowego tekstu ABRACADABRA ilustruje zasadę działania kodowania prefiksowego. Na początku każdy znak jest liściem drzewa z wagą równą jego częstości wystąpienia. W każdym kroku algorytmu dwa węzły o najmniejszych wagach są łączone w nowy węzeł nadrzędny, którego waga jest sumą wag dzieci. Proces powtarza się, aż wszystkie węzły zostaną połączone w jeden korzeń drzewa. Kody binarne są przypisywane przez przejście od korzenia do liścia: przejście do lewego dziecka dodaje 0, a do prawego 1. W przykładzie ABRACADABRA najczęstsza litera A (5 wystąpień) otrzymuje najkrótszy kod 0, podczas gdy rzadkie litery C i D (po 1 wystąpieniu) otrzymują długie kody 1010 i 1011. Średnia długość kodu wynosi (5×1 + 2×3 + 1×4 + 1×4 + 2×2) / 11 = 23/11 ≈ 2,09 bitu na znak, co daje kompresję z 88 do 40 bitów. W praktyce drzewo Huffmana musi być przesłane do dekodera wraz ze skompresowanymi danymi. W standardzie JPEG stosuje się predefiniowane tablice Huffmana dla typowych obrazów, aby uniknąć przesyłania drzewa.

27/47LZW i RLE

LZW (Lempel-Ziv-Welch) i RLE

LZW: słownikowa metoda kompresji — buduje słownik fragmentów danych podczas kodowania. Kolejne ciągi znaków są zastępowane indeksami w słowniku.

  • Stosowany w: GIF, TIFF, Unix compress
  • Dobry dla danych z powtarzającymi się wzorcami (tekst, grafika)

RLE (Run-Length Encoding): najprostsza metoda — ciąg identycznych symboli zastępowany parą (długość, symbol).

  • Przykład: "AAAAABBBCC" → "5A3B2C"
  • Stosowany w: BMP, TIFF, fax (Group 3)
  • Dobry dla danych z długimi powtórzeniami (obrazy binarne)
Rys. 27: Zasada LZW — budowa słownika i zastępowanie ciągów indeksami

LZW (Lempel-Ziv-Welch) jest słownikową metodą kompresji bezstratnej, która dynamicznie buduje słownik podczas kodowania. Algorytm rozpoczyna od słownika zawierającego wszystkie pojedyncze symbole (np. wszystkie 256 bajtów), a następnie dodaje do niego kolejne napotkane ciągi znaków. Każdy nowy ciąg jest zapisywany do słownika i zastępowany w strumieniu wyjściowym swoim indeksem. Metoda LZW jest szczególnie efektywna dla danych z powtarzającymi się wzorcami, takich jak tekst, kod źródłowy i grafika z jednolitymi obszarami. RLE (Run-Length Encoding) jest najprostszą metodą kompresji, która zastępuje ciąg identycznych symboli parą (długość, symbol). RLE doskonale sprawdza się w obrazach binarnych, takich jak faksy (standard Group 3), oraz w prostych grafikach z dużymi jednolitymi obszarami. Wadą RLE jest możliwość zwiększenia rozmiaru danych w przypadku braku powtórzeń. LZW był stosowany w formacie GIF (opatentowany), natomiast w PNG zastąpiono go wolnym od patentów algorytmem Deflate. Współczesne implementacje często łączą podejście słownikowe z kodowaniem entropijnym dla uzyskania najlepszych rezultatów.

28/47Formaty bezstratne — ZIP, PNG, FLAC

Popularne formaty kompresji bezstratnej

FormatMetodaZastosowanieStopień
ZIPDeflate (LZ77 + Huffman)Archiwizacja plików2:1–5:1
PNGDeflate + predykcja (filtry)Grafika rastrowa2:1–5:1 (zdjęcia), 10:1 (grafika)
FLACLinear prediction + Rice codingAudio bezstratne2:1–3:1
GIFLZWAnimacje, grafika (256 kolorów)2:1–5:1
7zLZMA (LZ77 + range coding)Archiwizacja (wysoki stopień)3:1–10:1
Rys. 28: Tabela porównawcza formatów kompresji bezstratnej

Format ZIP, opracowany przez Phila Katza w 1989 roku, jest najpopularniejszym formatem archiwizacji plików, wykorzystującym algorytm Deflate. Deflate łączy algorytm LZ77 (słownikowy) z kodowaniem Huffmana, co zapewnia dobry kompromis między szybkością a stopniem kompresji. PNG (Portable Network Graphics) został zaprojektowany jako bezstratny format obrazu, który miał zastąpić opatentowany GIF. PNG stosuje wstępną predykcję (filtry PNG), która przekształca wartości pikseli w taki sposób, aby dane były bardziej podatne na kompresję Deflate. FLAC (Free Lossless Audio Codec) jest bezstratnym kodekiem audio, który wykorzystuje predykcję liniową do modelowania sygnału audio przed kodowaniem entropijnym. FLAC typowo osiąga kompresję 40–60% oryginalnego rozmiaru PCM, co pozwala zaoszczędzić znaczną ilość miejsca przy zachowaniu idealnej jakości. Format GIF, mimo ograniczenia do 256 kolorów, pozostaje popularny w animacjach internetowych dzięki obsłudze przezroczystości i prostocie. Format 7z wykorzystuje algorytm LZMA, który jest rozwinięciem LZ77 z kodowaniem zakresowym (range coding), oferującym wyższy stopień kompresji kosztem dłuższego czasu kodowania. Wybór formatu bezstratnego zależy od rodzaju danych, wymaganego stopnia kompresji i dostępnych zasobów obliczeniowych.

29/47Kompresja stratna — definicja

Kompresja stratna (Lossy Compression)

Definicja: metoda kompresji, w której część informacji jest trwale tracona — dekompresja nie odtwarza idealnie oryginału, ale wynik jest percepcyjnie akceptowalny.

  • Wyższy stopień kompresji: 10:1–100:1 (nawet 300:1 dla wideo)
  • Wykorzystanie: sygnały percepcyjne — dźwięk, obraz, wideo
  • Kompromis: jakość vs. rozmiar — im wyższa kompresja, tym więcej strat

Zasada: usuwanie informacji mało istotnych dla ludzkiego oka/ucha (psychoakustyka, psychowizja).

Rys. 29: Kompresja stratna — dane oryginalne → kompresja → dekompresja → dane zniekształcone

Kompresja stratna opiera się na założeniu, że pewne informacje zawarte w sygnale mogą być usunięte bez zauważalnego pogorszenia jakości percepcyjnej. W przypadku dźwięku wykorzystuje się zjawiska psychoakustyczne, takie jak maskowanie częstotliwościowe i czasowe, które sprawiają, że niektóre składowe dźwięku są niesłyszalne dla ludzkiego ucha. W obrazach i wideo stosuje się modele psychowizyjne, które uwzględniają ograniczoną czułość oka na szczegóły wysokoczęstotliwościowe i różnice kolorów. Stopień kompresji stratnej może być regulowany od prawie niezauważalnego (10:1) do bardzo wysokiego (100:1 i więcej), gdzie artefakty stają się wyraźnie widoczne. Najpopularniejsze standardy kompresji stratnej wykorzystują transformację sygnału do dziedziny częstotliwości (DCT lub MDCT), a następnie kwantyzację współczynników. Kompresja stratna jest nieodwracalna — po skompresowaniu i zdekompresowaniu dane różnią się od oryginału. W zastosowaniach profesjonalnych (studio nagraniowe, fotografia do druku) często unika się kompresji stratnej na rzecz bezstratnej. W telekomunikacji kompresja stratna jest niezbędna do transmisji audio i wideo w ograniczonym paśmie, co umożliwia streaming i wideokonferencje.

30/47Metody kompresji stratnej — DCT

Transformata kosinusowa (DCT)

DCT (Discrete Cosine Transform) — przekształca bloki próbek z dziedziny czasu/przestrzeni do dziedziny częstotliwości.

  • Większość energii sygnału jest skoncentrowana w kilku niskoczęstotliwościowych współczynnikach DCT
  • Współczynniki wysokoczęstotliwościowe (szczegóły) mogą być silniej skwantowane lub odrzucone
  • Odwrotna DCT (IDCT) odtwarza sygnał z zachowanych współczynników

Zastosowanie: JPEG (8×8 bloki), MPEG, H.264 (4×4, 8×8), AAC (1024 próbki).

Rys. 30: DCT — transformacja bloku obrazu z dziedziny przestrzennej do częstotliwościowej

Dyskretna transformata kosinusowa (DCT) jest kluczowym narzędziem w kompresji stratnej, przekształcającym sygnał z dziedziny czasu lub przestrzeni do dziedziny częstotliwości. DCT ma właściwość skupiania energii sygnału w niewielkiej liczbie współczynników niskoczęstotliwościowych, co jest podstawą kompresji. W standardzie JPEG obraz jest dzielony na bloki 8×8 pikseli, a każdy blok jest poddawany transformacji DCT. Powstałe 64 współczynniki DCT reprezentują składowe częstotliwościowe bloku, od stałej (DC) w lewym górnym rogu do najwyższych częstotliwości w prawym dolnym rogu. Większość energii obrazu jest skoncentrowana w kilku pierwszych współczynnikach, podczas gdy współczynniki wysokoczęstotliwościowe mają zazwyczaj bardzo małe wartości. W kodekach audio, takich jak MP3 i AAC, stosuje się zmodyfikowaną DCT (MDCT) z nakładającymi się oknami, co redukuje artefakty blokowe. DCT jest również stosowana w standardach wideo (H.264, H.265) z blokami 4×4 i 8×8. DCT przewyższa DFT (dyskretną transformatę Fouriera) w kompresji obrazu, ponieważ jej współczynniki są rzeczywiste, a transformacja ma lepsze właściwości zbieżności na krawędziach bloków.

31/47Kwantyzacja i kodowanie różnicowe

Kwantyzacja i DPCM w kompresji stratnej

Kwantyzacja: kluczowy element kompresji stratnej — redukcja dokładności reprezentacji współczynników DCT (więcej zer, mniejsza precyzja).

  • Stopień kwantyzacji określa kompromis jakość/rozmiar
  • Tabela kwantyzacji JPEG definiuje różne progi dla różnych składowych częstotliwości

DPCM (Differential PCM): kodowanie różnicowe — zamiast wartości bezwzględnych przesyła się różnice między kolejnymi próbkami.

  • Mniejsza wariancja różnic → efektywniejsze kodowanie
  • Stosowane w: JPEG (składowe DC), MPEG (ruch), predykcja liniowa audio
Rys. 31: Kwantyzacja — redukcja dokładności współczynników DCT, powstawanie zer

Kwantyzacja jest kluczowym elementem kompresji stratnej, który wprowadza nieodwracalną utratę informacji poprzez redukcję precyzji współczynników transformaty. W standardzie JPEG każdy z 64 współczynników DCT jest dzielony przez wartość z tabeli kwantyzacji, a następnie zaokrąglany do najbliższej liczby całkowitej. Tabela kwantyzacji JPEG zawiera większe wartości dla wysokich częstotliwości, co powoduje, że wiele współczynników wysokoczęstotliwościowych jest zerowanych. DPCM (Differential PCM) jest metodą kodowania różnicowego, w której zamiast wartości bezwzględnych przesyła się różnice między kolejnymi próbkami lub współczynnikami. W JPEG składowa DC każdego bloku jest kodowana różnicowo względem poprzedniego bloku, ponieważ różnice są zwykle niewielkie. W strumieniach wideo DPCM jest używany do kodowania wektorów ruchu między klatkami. Kodowanie różnicowe jest również podstawą adaptacyjnego DPCM (ADPCM), stosowanego w telefonii cyfrowej (G.721, G.726). Kwantyzacja adaptacyjna pozwala na dynamiczne dostosowanie progu kwantyzacji do lokalnych właściwości sygnału, co poprawia jakość przy zadanej przepływności. Mechanizm skalowania kwantyzacji (quantization parameter) jest podstawowym narzędziem kontroli jakości w kodekach wideo.

32/47Kompromis jakość vs. rozmiar

Jakość vs. rozmiar — kompromis

W kompresji stratnej nie ma "darmowego lunchu" — wyższy stopień kompresji zawsze oznacza niższą jakość.

JakośćStopień kompresjiPrzykład (JPEG)Przykład (MP3)
Bardzo wysoka („lossless”)2:1–3:1JPEG 98% (≈ BMP/2)MP3 320 kbps
Wysoka5:1–10:1JPEG 90% (≈ 4 MB → 0.5 MB)MP3 192 kbps
Średnia10:1–20:1JPEG 70% (widoczne artefakty)MP3 128 kbps
Niska30:1+JPEG 30% (blokowość, smugi)MP3 64 kbps
Rys. 32: Wizualizacja kompromisu jakość/rozmiar — artefakty przy wysokiej kompresji JPEG

Kompromis między jakością a rozmiarem pliku jest fundamentalnym wyzwaniem w kompresji stratnej, który nie ma jednoznacznego rozwiązania. Przy bardzo wysokiej jakości (98% w JPEG, 320 kbps w MP3) kompresja jest niewielka, ale artefakty są praktycznie niezauważalne dla większości użytkowników. Przy średniej jakości (70% JPEG, 128 kbps MP3) uzyskuje się typowy kompromis, w którym plik jest mały, a jakość wciąż akceptowalna dla codziennego użytku. Niska jakość (30% JPEG, 64 kbps MP3) powoduje wyraźne artefakty, takie jak blokowość w obrazach i metaliczne brzmienie w audio. W praktyce wybór poziomu jakości zależy od zastosowania: archiwizacja wymaga wysokiej jakości, podczas gdy podgląd na stronie internetowej może zadowolić się niższą. W serwisach streamingowych stosuje się adaptacyjne strumieniowanie (ABR), które dynamicznie dobiera przepływność do warunków sieciowych. W przypadku obrazów medycznych i innych krytycznych zastosowań kompresja stratna jest całkowicie wykluczona. Zrozumienie kompromisu jakość-rozmiar jest kluczowe dla projektowania efektywnych systemów transmisji i przechowywania danych multimedialnych.

33/47Przykłady kompresji stratnej

Przykłady: JPEG, MP3, MPEG

  • JPEG: DCT 8×8 + kwantyzacja + kodowanie Huffmana — typowo 10:1–20:1 bez widocznych strat
  • MP3 (MPEG-1 Layer 3): model psychoakustyczny (maskowanie częstotliwościowe i czasowe) + DCT (MDCT) + Huffman — 128–320 kbps
  • MPEG-2 / MPEG-4: DCT + kompensacja ruchu + kwantyzacja — kompresja wideo 30:1–100:1
  • H.264/AVC: predykcja wewnątrz- i międzyklatkowa + DCT (integer) + CAVLC/CABAC — do 300:1
Rys. 33: Porównanie wizualne JPEG 95% vs. JPEG 50% — widoczne artefakty blokowe

Standard JPEG, opracowany przez Joint Photographic Experts Group w 1992 roku, pozostaje najpopularniejszym formatem obrazu na świecie, obsługiwanym przez praktycznie każde urządzenie. MP3 (MPEG-1 Layer 3) zrewolucjonizował dystrybucję muzyki w latach 90., redukując rozmiar plików audio do około 10% oryginału przy zachowaniu akceptowalnej jakości. MP3 wykorzystuje model psychoakustyczny do określenia, które fragmenty widma mogą być odrzucone bez słyszalnej różnicy, oraz MDCT (Modified DCT) do transformacji sygnału. Standardy MPEG-2 i MPEG-4 są stosowane w telewizji cyfrowej (DVB, ATSC) i na płytach DVD, oferując kompresję wideo do 100:1. H.264/AVC jest obecnie dominującym standardem kompresji wideo, stosowanym w YouTube, Blu-ray i wideokonferencjach, z typową kompresją 100–300:1. H.264 wprowadził zaawansowane techniki, takie jak predykcja wewnątrzklatkowa z wieloma kierunkami oraz kodowanie entropijne CABAC. Każdy z tych standardów ewoluował, oferując coraz lepszą kompresję kosztem rosnącej złożoności obliczeniowej kodera. Współczesne trendy wskazują na stopniowe wypieranie starszych standardów przez AV1 i VVC (H.266).

34/47Standardy kodowania dźwięku — PCM

PCM — kodowanie bez kompresji

PCM (Pulse Code Modulation): najprostsze kodowanie audio — próbkowanie + kwantyzacja + kodowanie binarne, bez żadnej kompresji.

  • CD Audio: 44.1 kHz, 16 bitów, 2 kanały → 1 411 200 bps ≈ 1.41 Mbps
  • DVD Audio: 48 kHz, 24 bity, 6 kanałów → do 6.9 Mbps
  • WAV: format kontenera dla LPCM (Linear PCM) — standard w studiach nagraniowych
  • Zalety: brak strat, niskie opóźnienie, prostota
  • Wada: bardzo duża przepływność — niepraktyczna do transmisji strumieniowej
Rys. 34: PCM — próbki kwantowane i kodowane binarne, brak kompresji

PCM (Pulse Code Modulation) jest najprostszą metodą reprezentacji sygnału analogowego w postaci cyfrowej, polegającą na próbkowaniu, kwantyzacji i kodowaniu binarnym. Standard CD-Audio wykorzystuje PCM z częstotliwością próbkowania 44,1 kHz i rozdzielczością 16 bitów na próbkę, co daje przepływność 1,41 Mbps dla sygnału stereo. Częstotliwość 44,1 kHz wynika z twierdzenia Nyquista i konieczności zachowania pasma 20 kHz słyszalnego dla człowieka, z dodatkowym marginesem na filtr antyaliasingowy. Rozdzielczość 16 bitów zapewnia zakres dynamiki 96 dB, co odpowiada różnicy między najcichszym a najgłośniejszym dźwiękiem możliwym do zapisania. W profesjonalnych zastosowaniach studyjnych stosuje się wyższe parametry: 48 kHz, 24 bity, a nawet 96 lub 192 kHz dla uzyskania lepszej jakości. Format WAV jest popularnym kontenerem dla LPCM (Linear PCM), przechowującym dane audio bez kompresji. Wadą PCM jest bardzo duża przepływność, która czyni go niepraktycznym do transmisji strumieniowej przez internet. Mimo rozwoju zaawansowanych kodeków, PCM pozostaje standardem w produkcji muzycznej, archiwizacji nagrań i w interfejsach audio HDMI.

35/47Kodeki stratne — MP3 i AAC

MP3 i AAC — kodeki percepcyjne

MP3 (MPEG-1 Layer 3): pierwszy szeroko przyjęty kodek stratny audio (1993).

  • Model psychoakustyczny — maskowanie częstotliwościowe (tony maskujące szum)
  • MDCT (Modified DCT) + Huffman
  • Typowa przepływność: 128–320 kbps
  • Ograniczenia: artefakty "pre-echo" przy sygnałach impulsowych

AAC (Advanced Audio Coding): następca MP3 (MPEG-2/4, 1997).

  • Lepsza jakość niż MP3 przy tej samej przepływności (o 30% wyższa efektywność)
  • Większa liczba pasm skal (skalowalność)
  • Standard w: YouTube, iTunes, Nintendo Switch, Android
Rys. 35: Model psychoakustyczny — progi maskowania i alokacja bitów w MP3/AAC

MP3 (MPEG-1 Layer 3) został opracowany przez Fraunhofer IIS w 1993 roku i stał się pierwszym masowo przyjętym kodekiem stratnym audio. Jego kluczową innowacją był model psychoakustyczny oparty na masce słyszenia, który określa, które składowe częstotliwościowe mogą być odrzucone lub silniej skwantowane bez słyszalnej różnicy. MP3 dzieli sygnał na 32 pasma filtrowe, a następnie stosuje MDCT z adaptacyjnym przydziałem bitów do poszczególnych pasm. Przy przepływności 128 kbps MP3 jest praktycznie nieodróżnialny od oryginału dla większości słuchaczy w typowych warunkach odsłuchowych. AAC (Advanced Audio Coding), opracowany w 1997 roku jako następca MP3, oferuje około 30% lepszą efektywność kodowania. AAC obsługuje do 48 kanałów audio, wyższe częstotliwości próbkowania (do 96 kHz) i bardziej zaawansowane techniki kodowania, takie jak Temporal Noise Shaping (TNS). AAC jest standardowym kodekiem w YouTube, iTunes, Nintendo Switch i Androidzie. Mimo że MP3 ustępuje AAC i Opusowi pod względem technicznym, pozostaje szeroko stosowany ze względu na ogromną bazę istniejących plików i wszechobecne wsparcie sprzętowe. Współczesne zastosowania audio stopniowo migrują w kierunku Opusa i AAC ze względu na lepszą jakość przy niskich przepływnościach.

36/47Kodek Opus

Opus — nowoczesny kodek uniwersalny

Opus (IETF RFC 6716, 2012) — kodek open-source łączący SILK (mowa) i CELT (muzyka).

  • Zakres przepływności: 6–510 kbps (bardzo szeroki)
  • Próbkowanie: 8–48 kHz
  • Opóźnienie: od 5 ms (najniższe ze wszystkich kodeków percepcyjnych)
  • Jakość: przewyższa MP3 i AAC przy niskich przepływnościach

Zastosowania: VoIP (Discord, WhatsApp, Zoom), streaming muzyki, WebRTC.

Ciekawostka: Opus jest jedynym kodekiem wymaganym przez standard WebRTC — wszystkie przeglądarki muszą go obsługiwać.
Rys. 36: Architektura kodera Opus — przełączanie między SILK (mowa) a CELT (muzyka)

Opus, zdefiniowany w standardzie IETF RFC 6716 z 2012 roku, jest nowoczesnym kodekiem audio zaprojektowanym do uniwersalnego zastosowania w komunikacji internetowej. Łączy dwa kodeki: SILK (opracowany przez Skype) do efektywnego kodowania mowy oraz CELT do kodowania muzyki z niskim opóźnieniem. Opus automatycznie przełącza się między SILK a CELT w zależności od rodzaju sygnału, co zapewnia optymalną jakość dla każdego typu audio. Kodek obsługuje przepływności od 6 kbps (dla mowy) do 510 kbps (dla muzyki wysokiej jakości) oraz opóźnienie od 5 ms, co jest najniższą wartością wśród wszystkich kodeków percepcyjnych. W testach słuchowych Opus przewyższa MP3 i AAC przy niskich przepływnościach i dorównuje im przy wysokich. Opus jest jedynym kodekiem wymaganym przez standard WebRTC, co oznacza, że wszystkie nowoczesne przeglądarki muszą go obsługiwać. Zastosowania Opusa obejmują VoIP (Discord, WhatsApp, Zoom), streaming muzyki na YouTube Music oraz komunikację w czasie rzeczywistym. Dzięki otwartej licencji i braku opłat patentowych Opus jest preferowanym kodekiem w aplikacjach open-source i systemach embedded.

37/47Porównanie kodeków audio

Tabela porównawcza kodeków audio

KodekTypPrzepływnośćJakość (przy 128 kbps)OpóźnienieZastosowanie
PCM (LPCM)Bezstratny1.41 Mbps (CD)Doskonała<1 msStudio, CD, archiwum
FLACBezstratny500–900 kbpsDoskonała (oryginał)~50 msArchiwum audio
MP3Stratny64–320 kbpsDobra~30 msMuzyka, podcasty
AACStratny32–512 kbpsBardzo dobra~30 msYouTube, iTunes
OpusStratny6–510 kbpsBardzo dobra5–65 msVoIP, streaming
Rys. 37: Tabela porównawcza kodeków audio — przepływność, jakość, opóźnienie

Tabela porównawcza kodeków audio obrazuje spektrum dostępnych rozwiązań, od bezstratnych formatów studyjnych po wysoce skompresowane kodeki komunikacyjne. LPCM (Linear PCM) oferuje najwyższą jakość bez kompresji, ale wymaga przepływności 1,41 Mbps dla CD-Audio, co jest niepraktyczne w streamingu. FLAC jako format bezstratny redukuje rozmiar o 40–60% przy zachowaniu idealnej jakości, co czyni go preferowanym wyborem do archiwizacji muzyki. MP3 przy 128 kbps oferuje akceptowalną jakość przy kompresji około 11:1, co przez lata czyniło go standardem w przenośnych odtwarzaczach. AAC przy tej samej przepływności przewyższa MP3 pod względem jakości, szczególnie w zakresie wysokich częstotliwości i sygnałów złożonych. Opus wyróżnia się najniższym opóźnieniem (5 ms) i najszerszym zakresem przepływności, co czyni go uniwersalnym kodekiem do komunikacji w czasie rzeczywistym. Wybór kodeka audio zależy przede wszystkim od zastosowania: archiwum wymaga FLAC, streaming muzyki dobrze radzi sobie z AAC, a komunikacja VoIP oczekuje niskiego opóźnienia Opusa. W praktyce wiele urządzeń i platform obsługuje wiele kodeków i automatycznie wybiera najlepszy dostępny.

38/47Standardy obrazu — JPEG i PNG

JPEG — kompresja stratna obrazu

JPEG (Joint Photographic Experts Group): najpopularniejszy standard kompresji zdjęć i obrazów fotorealistycznych.

  • Bloki 8×8 → DCT → kwantyzacja (tabela Q) → skanowanie zig-zag → Huffman
  • Typowy stopień: 10:1–20:1 (bez widocznych strat)
  • Obsługuje składową luminance (Y) i chrominance (Cb, Cr) — chrominance może być podpróbkowana (4:2:0)

PNG (Portable Network Graphics): kompresja bezstratna (Deflate + predykcja).

  • Obsługa przezroczystości (kanał alfa)
  • Lepszy dla grafiki z ostrymi krawędziami (tekst, diagramy, ikony)
  • Gorszy dla zdjęć (większy rozmiar niż JPEG)
Rys. 38: JPEG — etapy kompresji: bloki 8×8, DCT, kwantyzacja, kodowanie

JPEG i PNG to dwa najpopularniejsze formaty obrazu w internecie, każdy przeznaczony do innego rodzaju grafiki. JPEG wykorzystuje transformację DCT bloków 8×8 i kwantyzację współczynników, co powoduje utratę szczegółów wysokoczęstotliwościowych, ale jest mało zauważalne w zdjęciach. JPEG obsługuje podpróbkowanie chrominancji (4:2:0, 4:2:2, 4:4:4), które redukuje ilość informacji o kolorze, wykorzystując mniejszą czułość oka na szczegóły barwne. PNG stosuje kompresję bezstratną Deflate z wstępnymi filtrami predykcyjnymi, które przekształcają wartości pikseli w celu zwiększenia efektywności kompresji. PNG obsługuje przezroczystość (kanał alfa) i jest preferowany do grafiki z ostrymi krawędziami, tekstu, diagramów i ikon. Dla zdjęć PNG zwykle daje znacznie większe pliki niż JPEG, ponieważ nie może odrzucić szczegółów wysokoczęstotliwościowych. Format JPEG oferuje również tryb progresywny, w którym obraz jest wyświetlany stopniowo od rozmytego do ostrego podczas ładowania. Współczesne formaty, takie jak WebP i AVIF, próbują łączyć zalety obu podejść, oferując zarówno kompresję stratną, jak i bezstratną z przezroczystością.

39/47Standardy wideo — H.264 i H.265

H.264/AVC i H.265/HEVC

H.264/AVC (Advanced Video Coding, 2003): dominujący standard kompresji wideo.

  • Predykcja wewnątrzklatkowa (intra) + międzyklatkowa (inter) + DCT (integer 4×4/8×8) + CABAC/CAVLC
  • Kompresja: 50–100:1 względem surowego strumienia YUV
  • Zastosowanie: YouTube, Netflix, Blu-ray, DVB-T, wideokonferencje

H.265/HEVC (High Efficiency Video Coding, 2013): następca H.264.

  • 2× lepsza kompresja niż H.264 przy tej samej jakości (lub taka sama jakość przy połowie przepływności)
  • Większe bloki (CTU do 64×64), lepsza predykcja, SAO (Sample Adaptive Offset)
  • 4K/8K UHD, HDR, streaming
Rys. 39: H.264 — schemat kodera z kompensacją ruchu, DCT i kodowaniem entropijnym

H.264/AVC, opublikowany w 2003 roku przez ITU-T i MPEG, jest obecnie najbardziej rozpowszechnionym standardem kompresji wideo na świecie. Wprowadził szereg innowacji, w tym predykcję wewnątrzklatkową z 9 kierunkami, predykcję międzyklatkową z kompensacją ruchu o zmiennej wielkości bloków oraz kodowanie entropijne CABAC (Context-Adaptive Binary Arithmetic Coding). H.264 osiąga typową kompresję 100–300:1 względem surowego strumienia YUV, co umożliwiło rozwój usług video na żądanie i wideokonferencji. H.265/HEVC, opublikowany w 2013 roku, podwaja efektywność kompresji względem H.264 przy tej samej jakości wizualnej. HEVC wprowadził większe jednostki kodowania (CTU do 64×64), lepszą predykcję wewnątrzklatkową z 35 kierunkami oraz adaptacyjne przesunięcie próbek (SAO). HEVC jest niezbędny do efektywnej transmisji treści 4K i 8K UHD, gdzie przepływności bez kompresji sięgają kilkudziesięciu Gbps. Ograniczeniem HEVC są złożone opłaty licencyjne, co spowolniło jego adopcję w internecie na rzecz darmowych kodeków, takich jak VP9 i AV1. Oba standardy są szeroko stosowane w telewizji cyfrowej (DVB-T2, ATSC 3.0), Blu-ray i streamingu internetowym.

40/47Kodeki w praktyce — Netflix, YouTube

Kodeki w serwisach streamingowych

PlatformaKodeki wideoKodeki audioUwagi
NetflixH.264 (AVC), H.265 (HEVC), AV1E-AC-3 (Dolby Digital+), AACAV1 dla oszczędności pasma
YouTubeH.264, VP9, AV1Opus, AACVP9 jako główny (open-source)
YouTube MusicOpus (48–256 kbps)Opus zapewnia lepszą jakość niż MP3
TwitchH.264AACNiskie opóźnienie (streaming na żywo)
Zoom/MeetH.264 (SVC)OpusNiskie opóźnienie, adaptacja do pasma
Rys. 40: Wykres porównawczy przepływności kodeków wideo dla jakości HD/4K

Wybór kodeków w serwisach streamingowych jest podyktowany kompromisem między jakością, przepływnością, kosztami licencji i wsparciem sprzętowym. Netflix stosuje wiele kodeków w zależności od urządzenia i treści: H.264 dla najszerszej kompatybilności, H.265 dla oszczędności pasma przy 4K, a AV1 dla dalszej redukcji przepływności. YouTube używa VP9 jako głównego kodeka open-source, który oferuje kompresję porównywalną z H.265, ale bez opłat licencyjnych. YouTube Music stosuje wyłącznie kodek Opus w zakresie przepływności 48–256 kbps, co zapewnia lepszą jakość niż MP3 przy tej samej przepływności. Twitch, specjalizujący się w streamingu na żywo, używa H.264 z niskim opóźnieniem, co jest kluczowe dla interaktywności transmisji. Zoom i Google Meet używają H.264 SVC (Scalable Video Coding) z kodekiem audio Opus, co umożliwia adaptację do zmiennych warunków sieciowych. Wszystkie platformy stosują adaptacyjne strumieniowanie (ABR), które dynamicznie dostosowuje jakość do przepustowości łącza użytkownika. Trend w branży streamingowej zmierza w kierunku darmowych kodeków (AV1, Opus, VP9) ze względu na koszty licencyjne H.265 i chęć uniezależnienia się od konsorcjów patentowych.

41/47Przykład 1 — MP3 vs. FLAC

MP3 vs. FLAC — 4-minutowa piosenka

Dane: utwór CD jakości (44.1 kHz, 16 bitów, stereo) → 4 minuty = 40.4 MB surowego PCM.

FormatRozmiarStosunekUwagi
FLAC (bezstratny)~30 MB1.3:1Idealne odtworzenie
MP3 320 kbps~9.6 MB4.2:1Percepcyjnie bezstratny?
MP3 192 kbps~5.8 MB7:1Większość nie słyszy różnicy
MP3 128 kbps~3.8 MB10.6:1Widoczne artefakty na cichych fragmentach

Test ABX: czy słuchacz słyszy różnicę między FLAC a MP3 320 kbps? Większość — nie.

Rys. 41: Spektrum MP3 vs. FLAC — widoczne odcięcie wysokich częstotliwości w MP3

Porównanie MP3 i FLAC na przykładzie 4-minutowego utworu CD obrazuje praktyczne różnice między kompresją stratną a bezstratną. Surowy PCM dla takiego utworu zajmuje około 40,4 MB, co odpowiada przepływności 1,41 Mbps. FLAC kompresuje ten sam utwór do około 30 MB, co daje stopień kompresji 1,3:1, przy zachowaniu idealnej jakości i możliwości odtworzenia identycznego strumienia bitów. MP3 przy 320 kbps zajmuje około 9,6 MB, co daje kompresję 4,2:1, a w testach ABX większość słuchaczy nie jest w stanie odróżnić go od FLAC. MP3 przy 192 kbps (5,8 MB, 7:1) jest uznawany za dobry kompromis między jakością a rozmiarem. MP3 przy 128 kbps (3,8 MB, 10,6:1) jest akceptowalny do słuchania w tle, ale przy uważnym odsłuchu na dobrym sprzęcie można usłyszeć artefakty. Na spektrum MP3 widać charakterystyczne odcięcie wysokich częstotliwości powyżej około 16 kHz dla 128 kbps, podczas gdy FLAC zachowuje pełne pasmo do 22 kHz. Dla archiwizacji muzyki zaleca się FLAC, natomiast do codziennego słuchania na urządzeniach przenośnych MP3 256–320 kbps lub AAC zapewnia wystarczającą jakość. W serwisach streamingowych przepływność audio waha się od 48 kbps (mowa) do 320 kbps (muzyka wysokiej jakości).

42/47Przykład 2 — JPEG vs. PNG

JPEG vs. PNG — zdjęcie 24 MP

Dane: zdjęcie z aparatu 24 MP (6000 × 4000 pikseli).

  • BMP (surowy): 6000 × 4000 × 3 bajty ≈ 72 MB
  • PNG (bezstratny): ~16 MB — kompresja Deflate, dobra dla zdjęć z dużymi jednolitymi obszarami
  • JPEG 95% (wysoka jakość): ~6 MB — brak widocznych strat przy normalnym powiększeniu
  • JPEG 50% (średnia jakość): ~1.5 MB — widoczne artefakty blokowe przy powiększeniu
Wniosek: JPEG 95% daje 12:1 kompresji bez widocznych strat; PNG daje 4.5:1 — JPEG lepszy dla zdjęć.
Rys. 42: Porównanie wizualne JPEG 95% vs. JPEG 50% — artefakty przy 100% powiększeniu

Przykład JPEG vs PNG dla zdjęcia 24 MP (6000 × 4000 pikseli) ilustruje, dlaczego wybór formatu obrazu zależy od zawartości. Surowy BMP dla takiego zdjęcia zajmuje około 72 MB, co jest niepraktyczne do przechowywania i transmisji. PNG kompresuje to zdjęcie do około 16 MB (4,5:1), ale stopień kompresji silnie zależy od treści obrazu — zdjęcia z dużymi jednolitymi obszarami kompresują się lepiej niż te o złożonej teksturze. JPEG 95% zmniejsza ten sam obraz do około 6 MB (12:1) bez widocznych strat przy normalnym powiększeniu, co czyni go znacznie bardziej efektywnym dla zdjęć. JPEG 50% daje jedynie 1,5 MB (48:1), ale przy powiększeniu widać charakterystyczne artefakty blokowe i smugi. Dla grafiki z ostrymi krawędziami, tekstem lub diagramami PNG jest lepszym wyborem, ponieważ JPEG wprowadza widoczne zniekształcenia wokół krawędzi. Dla zdjęć publikowanych w internecie JPEG z jakością 85–95% jest optymalnym wyborem. Współczesne formaty, takie jak WebP i AVIF, oferują lepszą kompresję niż JPEG przy zachowaniu porównywalnej lub lepszej jakości. W systemach telekomunikacyjnych wybór formatu obrazu ma bezpośredni wpływ na przepustowość łącza i czas ładowania strony.

43/47Przykład 3 — H.264 w wideokonferencjach

H.264 w wideokonferencjach

Dane: wideo HD 1080p30 (1920 × 1080 pikseli, 30 fps).

  • Surowy strumień YUV (4:2:0): 1920 × 1080 × 1.5 bajta × 30 fps ≈ 93 Mbps (tu: ~1.5 Gbps z dźwiękiem)
  • H.264 (kompresja): przepływność 1–5 Mbps (zależnie od jakości i ruchu)
  • Stopień kompresji: ~100:1–300:1
  • Wideokonferencje (Zoom, Teams): typowo 1–2 Mbps dla HD 1080p — dobra jakość
  • Netflix 4K: 15–25 Mbps przy H.265/AV1 (kompresja ~1000:1 względem surowego)
Rys. 43: Porównanie przepływności H.264 dla różnych rozdzielczości i przepływności

Przykład H.264 w wideokonferencjach ilustruje, jak ogromna kompresja jest potrzebna do transmisji wideo w czasie rzeczywistym. Surowy strumień YUV 4:2:0 dla rozdzielczości 1080p30 wymaga przepływności około 93 MB/s, czyli 744 Mbps, co jest całkowicie niepraktyczne dla łącza internetowego. H.264 kompresuje to wideo do 1–5 Mbps, co daje stopień kompresji 100–300:1, umożliwiając płynną transmisję przez typowe łącze broadband. W praktyce Zoom i Microsoft Teams używają przepływności 1–2 Mbps dla HD 1080p, co zapewnia dobrą jakość przy umiarkowanym ruchu w scenie. Dla porównania Netflix 4K wymaga 15–25 Mbps przy użyciu H.265 lub AV1, co przy surowej przepływności kilkunastu Gbps oznacza kompresję rzędu 1000:1. W wideokonferencjach kluczowe jest niskie opóźnienie (poniżej 150 ms), co ogranicza stosowanie złożonych technik międzyklatkowych. Kodeki stosowane w wideokonferencjach często używają skalowalnego kodowania (SVC), które umożliwia dostosowanie przepływności do warunków sieciowych bez ponownego kodowania. W systemach 5G i nowoczesnych sieciach komórkowych wideo jest kodowane z adaptacją do zmiennej przepustowości łącza radiowego. Efektywna kompresja wideo jest kluczowa dla rozwoju usług zdalnej pracy, telemedycyny i edukacji na odległość.

44/47Trend 1 — AV1 i nowe kodeki

AV1 — nowa generacja kodeków open-source

AV1 (Alliance for Open Media, 2018): kodek wideo open-source opracowany przez konsorcjum (Google, Mozilla, Netflix, Amazon, Apple, Meta).

  • 30% lepsza kompresja niż H.265/HEVC przy tej samej jakości
  • Zalety: royalty-free (bez opłat licencyjnych)
  • Wsparcie: YouTube, Netflix, Chrome, Firefox, Edge, Android
  • Wada: bardzo wysoka złożoność obliczeniowa kodowania (10–100× wolniejsze od H.264)

Konkurenci: VVC (H.266) — jeszcze lepsza kompresja, ale zamknięty (licencje MPEG LA).

Rys. 44: Porównanie kompresji kodeków wideo — AV1 vs. H.265 vs. H.264 vs. VP9

AV1 (Alliance for Open Media Video 1) został opublikowany w 2018 roku jako odpowiedź na rosnące koszty licencyjne H.265 i potrzebę darmowego, wydajnego kodeka. Konsorcjum AOMedia, w skład którego wchodzą Google, Apple, Meta, Netflix, Amazon i Mozilla, opracowało AV1 jako kodek royalty-free. AV1 oferuje około 30% lepszą kompresję niż H.265/HEVC przy tej samej jakości, co przekłada się na oszczędność pasma rzędu 30% w serwisach streamingowych. Główną wadą AV1 jest bardzo wysoka złożoność obliczeniowa kodowania, która może być 10–100 razy większa niż H.264, co wymaga wydajnych akceleratorów sprzętowych. Współczesne procesory graficzne (GPU) kart Nvidii, AMD i Intela oraz układy SoC w smartfonach stopniowo dodają wsparcie sprzętowe dla AV1. Konkurencyjny standard VVC (H.266) oferuje jeszcze lepszą kompresję niż AV1, ale jest obciążony opłatami licencyjnymi, co ogranicza jego adopcję. YouTube i Netflix już stosują AV1 do wybranych treści, szczególnie przy niższych przepływnościach. Przyszłość kodowania wideo zmierza w kierunku darmowych, otwartych standardów z rosnącym udziałem sztucznej inteligencji w procesie kompresji.

45/47Trendy — AI i IoT w kompresji

Sztuczna inteligencja i IoT w kompresji

AI-based codecs: sieci neuronowe (GAN, autoencoders) używane do kompresji obrazu i wideo.

  • AI Image Compression: modele sieci neuronowych przewyższają tradycyjny JPEG/WebP przy niskich przepływnościach
  • Example: Google's JPEG XL, NVIDIA MAXINE — AI do wideokonferencji

Kompresja dla IoT: urządzenia z wąskim pasmem i małą mocą obliczeniową.

  • LPWAN (LoRa, NB-IoT): małe ramki (do 256 bajtów), rzadka transmisja
  • Kompresja strumieni sensorowych: różnicowa + predykcyjna
  • Edge computing: przetwarzanie i kompresja na urządzeniu przed wysłaniem do chmury
Rys. 45: AI w kompresji — autoenkoder głęboki do kompresji obrazu

Sztuczna inteligencja zaczyna odgrywać coraz większą rolę w kompresji danych, szczególnie w zastosowaniach obrazu i wideo. Sieci neuronowe typu autoenkoder uczą się reprezentacji danych o niskiej wymiarowości, która zachowuje najważniejsze informacje wizualne. Modele generatywne (GAN) są używane do rekonstrukcji obrazu po silnej kompresji, wypełniając utracone szczegóły w sposób realistyczny. Firma Google opracowała JPEG XL, który łączy tradycyjne techniki DCT z nowoczesnymi metodami kodowania, oferując lepszą kompresję niż JPEG przy zachowaniu kompatybilności. NVIDIA MAXINE wykorzystuje AI do kompresji wideo w wideokonferencjach, redukując przepływność nawet o 90% przy zachowaniu akceptowalnej jakości twarzy i gestów. W IoT kluczowym wyzwaniem jest kompresja strumieni sensorowych z ograniczoną mocą obliczeniową i wąskim pasmem. Sieci LPWAN (LoRa, NB-IoT) przesyłają ramki o rozmiarze do 256 bajtów, co wymaga bardzo efektywnego kodowania danych. Edge computing umożliwia wykonywanie wstępnej kompresji i analizy danych na urządzeniu przed wysłaniem do chmury, co redukuje zapotrzebowanie na pasmo. Przyszłość kompresji będzie prawdopodobnie łączyć tradycyjne metody transformacyjne z głębokim uczeniem dla osiągnięcia optymalnych rezultatów.

46/47Podsumowanie

Podsumowanie

  • Kodowanie i kompresja to niezbędne elementy efektywnej transmisji cyfrowej — bez nich nowoczesna telekomunikacja nie byłaby możliwa
  • Kody liniowe (NRZ, Manchester, 4B/5B, 8B/10B) dopasowują sygnał do medium, zapewniając synchronizację i równowagę DC
  • Kompresja bezstratna (Huffman, LZW, Deflate) umożliwia idealne odtworzenie danych przy umiarkowanej redukcji rozmiaru
  • Kompresja stratna (DCT, kwantyzacja, modele percepcyjne) daje wysoki stopień kompresji kosztem jakości — niezbędna dla audio/wideo
  • Dobór metody zależy od zastosowania: wymagania jakościowe, przepływność, opóźnienie, koszt obliczeniowy
  • Ewolucja kodeków: MP3 → AAC → Opus, JPEG → WebP → AVIF, H.264 → H.265 → AV1
Rys. 46: Mapa myśli — kodowanie i kompresja w systemach telekomunikacyjnych

Prezentacja przedstawiła kompleksowy przegląd zagadnień kodowania i kompresji w systemach telekomunikacyjnych. Kody liniowe, takie jak NRZ, Manchester, 4B/5B i 8B/10B, są niezbędne do dopasowania cyfrowego strumienia bitów do charakterystyki medium transmisyjnego. Kompresja bezstratna, wykorzystująca kodowanie Huffmana, LZW i Deflate, umożliwia idealne odtworzenie danych przy umiarkowanej redukcji rozmiaru. Kompresja stratna oparta na DCT, kwantyzacji i modelach percepcyjnych pozwala na bardzo wysoki stopień kompresji kosztem nieodwracalnej utraty informacji. Praktyczne standardy, takie jak MP3, JPEG, H.264 i AV1, ilustrują ewolucję kodeków w kierunku coraz lepszej efektywności kompresji. Wybór odpowiedniej metody kodowania lub kompresji zależy od zastosowania, wymaganej jakości, dostępnego pasma i mocy obliczeniowej. Współczesne trendy wskazują na rosnące znaczenie darmowych kodeków (AV1, Opus) oraz integrację sztucznej inteligencji w procesie kompresji. Zrozumienie omówionych zagadnień stanowi solidną podstawę do dalszego studiowania zaawansowanych systemów telekomunikacyjnych.

47/47Dziękuję za uwagę

Dziękuję za uwagę

Prezentacja przygotowana w ramach kursu Wprowadzenie do telekomunikacji.

Literatura uzupełniająca:

  • B. P. Lathi, "Modern Digital and Analog Communication Systems"
  • S. Haykin, "Communication Systems" — rozdziały o kodowaniu źródła i kanału
  • J. G. Proakis, "Digital Communications" — kody liniowe i modulacje cyfrowe
  • D. Salomon, "Data Compression: The Complete Reference"
  • ITU-T H.264 / H.265 — standardy kompresji wideo

„Dobór kodowania to klucz do efektywnej i niezawodnej komunikacji cyfrowej.”

Rys. 47: Kodowanie i kompresja — klucz do efektywnej transmisji cyfrowej

Dziękujemy za uwagę i mamy nadzieję, że prezentacja dostarczyła wartościowej wiedzy z zakresu kodowania i kompresji w telekomunikacji. Literatura uzupełniająca wymieniona na slajdzie obejmuje zarówno klasyczne podręczniki, jak i bieżące standardy ITU-T. Podręcznik Lathiego "Modern Digital and Analog Communication Systems" zawiera szczegółowe omówienie kodów liniowych i modulacji. Książka Salomona "Data Compression: The Complete Reference" jest wyczerpującym źródłem wiedzy o wszystkich metodach kompresji opisanych w wykładzie. Standardy ITU-T H.264 i H.265 są dostępne publicznie i stanowią podstawę do zrozumienia współczesnych systemów wideo. Zachęcamy do praktycznych eksperymentów z kodekami, takich jak porównywanie jakości MP3 i FLAC za pomocą testów ABX. Wiedzę zdobytą podczas wykładu można pogłębić, analizując rzeczywiste strumienie bitów za pomocą narzędzi takich jak Wireshark czy ffmpeg. Życzymy sukcesów w dalszej edukacji i praktyce inżynierskiej w dziedzinie telekomunikacji.