Percepcyjne kodowanie dźwięku Wykład (prof. dr hab. inż. Tomasz Zieliński): 1. Podstawy bezstratnego (Huffmana) i stratnego (ADPCM) kodowania sygnałów. 2. Percepcyjne właściwości ludzkiego słuchu. Modele psychoakustyczne 1 i 2 MPEG audio. 3. Zestawy filtrów: dekompozycja sygnału dźwiękowego w standardach MP2 i MP3. 4. Algorytm MP2 standardu MPEG-2 audio: alokacja bitów, formowanie ramki. 5. Algorytmy MP3 i AAC standardu kompresji MPEG-2 audio. 6. Algorytmy kodowania dźwięku standardu MPEG-4. 7. Algorytm AC3. Kodowanie dźwięku wielokanałowego. Bezstratne kodowanie dźwięku. 8. Kierunki rozwoju kodowania percepcyjnego dźwięku. Laboratorium (dr inż. Jarosław Bułat): 1. Bezstratne kodowanie Huffmana 2. Stratne kodowanie ADPCM 3. Modele psychoakustyczne 1 i 2 standardu MPEG-2 audio 4. Zespół filtrów poziomu MP2 standardu MPEG audio 5. Alokacja bitów i formowanie ramki w standardzie MP2 standardu MPEG audio 6. Zespół filtrów poziomu MP3 standardu MPEG-2 audio 7. Kodowanie dźwięku wielokanałowego. Bezstratne kodowanie dźwięku. 8. Test sprawdzający.
Literatura: 1. Zieliński T.: Cyfrowe przetwarzanie sygnałów. Od teorii do zastosowań: WKŁ, Warszawa 25 2. Bosi M.: Introduction to digital audio coding and standards: Springer 22. 3. Spanias A. Painter T.: Audio signal processing and coding: Wiley 27. 4. Painter T., Spanias A.: Perceptual coding of digital audio: Proc. IEEE, vol. 88, no. 4, str. 451-513, April 2 5. ISO/IEC IS11172-3: Coding of moving pictures and associated audio for digital storage media up to 1.5 Mbit/s, Part 3: Audio, Annex D,. ISO/IEC JTCI, 1992. Zasady organizacyjne: Wykłady i laboratoria odbywają się co dwa tygodnie na przemian: Tydzień 1: wykład 1 (2.1.212), Tydzień 2: lab 1, Tydzień 3: wykład 2 (16.1.212), Tydzień 4: lab 2, itd. Wykład odbywa się w Sali 127.D-5 o godz. 8: w co drugi wtorek. Forma zaliczenia przedmiotu: sprawozdania z ćwiczeń, kolokwium końcowe Zasada wystawienia oceny końcowej: średnia ważona: ocena ze sprawozdań (75%) oraz kolokwium (25%)
1. Wprowadzenie Metody kodowania: - bezstratne (medycyna, dane komputerowe) - stratne (mowa, dźwięk/audio, obraz, wideo) Kodowanie bezstratne: - nic nie ginie, inne zapisanie tego samego Zasada: - symbole występujące częściej otrzymują krótszy kod bitowy, a występujące rzadziej - dłuższy Metody kodownia: - Huffmana, arytmetyczne, słownikowe Kodowanie stratne: - utrata informacji/jakości, zauważalna lub nie Zasada: Mowa: Uwzględnianie nadajnika. Mowę wypowiada człowiek, każdy z nas jest zbudowany tak samo, można zbudować model generacji mowy, kodowaną mowę dzieli się na fragmenty i dla każdego z nich znajduje się wartości parametrów dla modelu / syntezatora. Zapisuje się i przesyła parametry syntezatora.
Dźwięk: Uwzględnianie odbiornika. Ponieważ dźwięk przeznaczony jest dla człowieka usuwamy z niego to wszystko czego człowiek nie usłyszy. Ponieważ występujące częstotliwości wzajemnie się maskują. Sygnał dźwięku dzielony jest na podpasma częstotliwościowe i przydziela się różną liczbę bitów na każde podpasmo w zależności od istotności psychoakustycznej tego podpasma. Obraz: Efektywnie kodujemy informację w dziedzinie częstotliwości: usuwamy redundancję (powtarzanie się) informacji i wysokoczęstotliwościowe szczegóły. Film: Jak wyżej, dodatkowo nie zapisujemy tego co powtarza się na kolejnych obrazach
2. Kodowanie bezstratne Zastępowanie sekwencji bitów innymi sekwencjami bitów (transkodowanie) tak aby suma bitów była mniejsza. Zasada kodowania Huffmana: jeśli coś występuje częściej otrzymuje krótszy kod! Np. Komunikat { a, a, b, a, a, c, d, d, a, a } Tablica kodowa Huffmana dla tego komunikatu Koder: Dekoder: Symbol Kod stary Liczba powtórzeń Prawdopodobieństwo Kod nowy a 6.6 = 6/1 b 1 1.1 = 1/1 1 c 1 1.1 = 1/1 11 d 11 2.2 = 2/1 11 Komunikat: { a, a, b, a, a, c, d, d, a, a }: Stary kod: 1 1 11 11 = 2bitów Nowy kod: 1 11 11 11 = 16bitów
Algorytm kodowania Huffmana 1) Połącz dwa symbole o najniższym prawdopodobieństwie p a =,6 p b =,1 p c =,1 p d =,2 p a =,6 p bc =,2 p d =,2 p a =,6 p bcd =,4 p abcd = 1 2) Zbuduj drzewo odpowiadające ww. połączeniom: a b c d p a =,6 p b =,1 p c =,1 p d =,2 1 p bc =,2 1 p bcd =,4 1 p abcd = 1 3) Znajdź nowy kod każdego symbolu: poruszaj się od pnia drzewa do konaru z danym symbolem, każdy skręt w prawo = 1, a w lewo =. Np. dla b mamy 1. Otrzymałeś: a = b = 1 c = 11 d = 11
Entropia ciągu symboli określa najmniejszą możliwą liczbę bitów, potrzebnych do zakodowania pojedynczego symbolu tego ciągu: N H( x) = pnlog2 p n= 1 Oblicz entropię komunikatu { a, a, b, a, a, c, d, d, a, a }, tego samego co poprzednio: ( ) H( x ) =.6 log (.6) +.1 log (.1) +.1 log (.1) +.2 log (.2) 2 2 2 2 ( ) Hx= ( ).44218.3322.3322.464385619 Hx= ( ) 1.57956 bita/symbol U nas mamy 1 symboli, czyli minimum to 15.71 bita. A potrzebowaliśmy 16 bitów! n
Programy w Matlabie z instrukcji function [symb, prawd] = sortuj( x ); symb = unique( x ); prawd = zeros( size(symb) ); for n=1:length(prawd) prawd(n)=sum( x == symb(n) ); end function tr = drzewo( symb, prawd ) for n=1:length(prawd); node.pr=prawd(n); node.left=[]; node.right=[]; node.symbol=symb(n); tr(n)=node; end while( length(tr) > 1 ) pr = cat(, tr.pr ); [ dummy, idx ] = sort( pr, 'ascend' ); tr = tr(idx); % sortuj według prawdopodobieństwa trnew.pr=tr(1).pr+tr(2).pr; % suma prawdopodobieństw trnew.left=tr(1); trnew.right=tr(2); trnew.symbol=[]; % symbol pusty (suma symboli) tr = [tr, trnew]; % dodaj nowy złożony symbol na końcu tr(1:2) = []; % skasuj dwa pierwsze symbole end function kod=tablicakodera( kod, tr ) if( ==isempty( tr.symbol ) ) kod(length(kod)+1).symbol = tr.symbol; kod(end).bits = []; return; end kodleft = tablicakodera( kod, tr.left ); kodright = tablicakodera( kod, tr.right ); for n=1:length(kodleft) kodleft(n).bits = ['1', kodleft(n).bits]; end for n=1:length(kodright) kodright(n).bits = ['', kodright(n).bits]; end kod = [kod, kodleft, kodright];
Alternatywny kod w Matlabie 1 function start 2 clc 3 x = abs(round(1*randn(1,1))); 4 [symbole, p]=zlicz(x); 5 [symbole, tabela] = tabela_huffmana(symbole, p); 6 bity = huffman_koder(x, symbole, tabela); 7 y = huffman_dekoder(bity, symbole, tabela); 8 blad_rekonstrukcji=sum(abs(x(:)-y(:))) 9 function [symbol tabela] = tabela_huffmana(symbol,prw); 1 for k=1:length(symbol); 11 st{k}=k; %symbole tymczasowe 12 tabela{k}=[]; 13 end 14 p=prw(:); 15 Np = length(p)+1; 16 while Np>2 17 Np = length(find(p<1)); 18 [p, I] = sort(p,'ascend'); 19 st = st(i); 2 for k=1:length(st{1}) 21 tabela{st{1}(k)}=[1 tabela{st{1}(k)}]; 22 end 23 for k=1:length(st{2}) 24 tabela{st{2}(k)}=[ tabela{st{2}(k)}]; 25 end 26 st{1}=[st{1} st{2}]; 27 st{2}=[]; 28 p(1) = p(1)+p(2); 29 p(2) = 1; 3 end 31 function bity = huffman_koder(x, symbole, tabela); 32 bity=logical([]); 33 for k=1:length(x); 34 I = find(symbole==x(k)); 35 bity = [bity logical(tabela{i})]; 36 end
37 function y=huffman_dekoder(bity, symbole, tabela); 38 Nb=length(bity); 39 I1=1; 4 y = []; 41 while I1<=Nb 42 for k=1:size(tabela,2) 43 tab = tabela{k}; It=length(tab); 44 if I1+It-1<=Nb 45 if tab == bity(i1:i1+it-1); 46 y=[y symbole(k)]; 47 I1=I1+It; 48 break 49 end 5 end 51 end 52 end 53 function [symbol, prw]=zlicz(x); 54 % x - komunikat - liczby całkowite 55 symbol=[]; 56 prw=[]; 57 x = x(:); 58 N = length(x); 59 k = 1; 6 Iz = zeros(size(x)); 61 while sum(iz)<n; 62 Is=find(x==x(k)); 63 symbol = [symbol x(k)]; 64 prw = [prw length(is)/n]; 65 Iz(Is)=1; 66 Ik=find(Iz==); 67 if length(ik)> 68 k=ik(1); 69 else 7 break 71 end 72 end
3. Kodowanie różnicowe dźwięku ( ADPCM) Modulacja DELTA kodowana jest różnica pomiędzy dwoma kolejnymi próbkami JEDNYM BITEM DPCM
Adaptive DPCM ITU G-721 32 kbits/sec Szczegóły i program w instrukcji laboratoryjnej!
4. Kodowanie mowy...n...a...sz...e...g...o... słowo " naszego".6.4.2 -.2 -.4 5 1 15 2 25 3 35 4 numer próbki.6.4.2 -.2 -.4 " na" 1 2 3 4 5 6 7 8 9 1 numer próbki.2 " sz" -.2 11 12 13 14 15 16 17 18 19 numer próbki.2 " ego" -.2 2 25 3 35 4 numer próbki
Widma częstotliwościowe słowa naszego : a) klasyczna transformata Fouriera b) krótkoczasowa transformata Fouriera a) -2-4 Moduł widma Fouriera słowa " naszego" db -6-8 -1-12 5 1 15 2 25 3 35 4 f [Hz] 4 Moduł krótkoczasowej transformaty Fouriera słowa " naszego" b) 3 f [Hz] 2 1 5 1 15 2 25 3 35 numer próbki...n...a...sz...e...g...o...
Wycinanie fragmentu mowy do analizy: okno Hamminga o długości 24 elementów jest przesuwane z krokiem 18 próbek i wymnażane z sygnałem głoska dźwięczna "a".5 -.5 1 2 3 4 5 6 7 numer próbki Model generacji sygnału mowy T? G {a 1, a 2,...,a 1 } Mowa dźwięczna Mowa bezdźwięczna Pobudzenie okresowe Pobudzenie losowe V UV e(n) Wzm H ( z) = 1 2 1 1+ a1 z + a2z +... + a1z G e(n) 1 Filtr traktu głosowego H(f) s(n) mowa 1 2 3 f [Hz]
Filtr cyfrowy udający filtr traktu głosowego e(n) G s(n) a 1 z 1 a 2 z 1 s(n 1) s(n 2) a 1 z 1 s(n 1) Schemat blokowy kodera LPC-1 mowa Preemfaza Okno Hamminga Estymacja wzmocnienia G Estymacja wsp. filtra {a k } G = r() + a = R 1 k = 1 1 a r( k) r k Filtr LP 9 Hz Progowanie Autokorelacja Decyzja: mowa dźwięczna (V) czy bezdźwięczna (UV) Decyzja UV V/UV T= N k 1 rk ( ) = xnxn ( ) ( + k) n= k =,1, 2,..., N 1 V Oblicz okres T
Porównanie głosek a i sz, wypowiadanych przez mężczyznę: sygnały czasowe ich funkcje autokorelacji ich funkcje AMDF moduły obwiedni widma częstotliwościowego a) głoska a b) głoska sz.5 -.5 głoska " a" 5 1 15 2 numer próbki.2.1 -.1 głoska " sz" 5 1 15 2 numer próbki 2 1 funkcja autokorelacji " a" -1 5 1 15 2 indeks czasu.4.2 funkcja AMDF " a" 5 1 15 2 indeks czasu 15 1 5 H(f) dla " a" 1 2 3 4 f [Hz] funkcja autokorelacji sz" " 1.5 1.5 -.5 5 1 15 2 indeks czasu.1.5 funkcja AMDF " sz" 5 1 15 2 indeks czasu 5 4 3 2 1 H(f) dla " sz" 1 2 3 4 f [Hz]
Porównanie standardów kodowania mowy LPC: kodowanie i dekodowanie mowy
CELP kodowanie: predykcja, słownik, kształtowanie szumu
CELP dekodowanie:
4. Kodowanie pasmowe dźwięku Ilustracja efektu maskowania częstotliwościowego (a) i czasowego (b) a) ton maskujący ton zamaskowany ton niezamaskowany b) ton maskujący ton zamaskowany ton niezamaskowany f m f 3 f f 1 f 2 t f m t m Kodery audio: oszukiwanie uszu w podpasmach częstotliwościowych:
Schemat blokowy kodera standardu MPEG-1 audio na poziomie MP1 i MP2. Szarym kolorem zaznaczono rozszerzenia poziomu MP2 w stosunku do MP1. Wejściowy strumień bitów AUDIO: 2*768 kilobitów na sekundę (2 kanały * 16 bitów * 48 khz), wyjściowy strumień bitów MPEG: od 2*32 do 2*192 kilobitów na sekundę Zadawana przepływność bitowa AUDIO Zespół filtrów analizy 1 2 32 12 12 12 Blok 1 Blok 2 Blok 3 Sposób Normalizacja normalizacji SCF, SCFI 1 2 32 Alokacja Alokacja bitów bitów na podpasma wsp. A i B Normalizacja Kwantyzacja Grupowanie trójkami Kodowanie strumienia bitów (ramki) MPEG FFT 1 2 3 Model psychoakustyczny 1 2 512 (124) SMR 32 Schemat blokowy dekodera standardu MPEG-1 audio na poziomie MP1 i MP2. Szarym kolorem zaznaczono rozszerzenia poziomu MP2 w stosunku do MP1 wsp. C i D 1 12 12 12 MPEG Dekodowanie strumienia bitów (ramki) Rekwantyzacja (C & D) Rozgrupowanie trójek Denormalizacja 2 32 Blok 1 Blok 2 Blok 3 Zespół filtrów syntezy AUDIO SCF, SCFI
5. Kodowanie obrazów Schemat blokowy kodera (góra) i dekodera (dół) obrazów standardu JPEG [Bhas97]. Tablice kodera entropijnego Huffmana, stosowane w standardzie, są zoptymalizowane dla szerokiej gamy obrazów, dlatego najczęściej nie są najefektywniejsze dla aktualnie kodowanego Zbiór dyskowy Obraz podzielony na bloki 8 8 Tablice kwantyzacji Tablice kodowania Nagłówek Tablice DCT Kwantyzator Q Koder entropijny Dane Zbiór dyskowy Nagłówek Tablice Tablice kodowania Tablice kwantyzacji Obraz podzielony na bloki 8 8 Dane Dekoder entropijny Rekwantyzator Q IDCT Skanowanie zygzak współczynników transformaty 2D DCT każdego bloku 8 8 pikseli DC AC i.t.d.
6. Kodowanie wideo - MPEG wideo koder i dekoder Schemat blokowy kodera (po lewej) i dekodera (po prawej) sygnału wideo standardu MPEG. Oznaczenia operacji: DCT dwuwymiarowa transformacja kosinusowa, Q kwantyzacja, VLI bezstratne kodowanie o zmiennej długości (Variable Length Integers), X 1 operacja odwrotna do X. Oznaczenia ramek: I ramka kodowana bez kompensacji ruchu tak jak w standardzie JPEG, P 1 ramka kodowana różnicowo (predykcyjnie) w stosunku do ramki I z kompensacją ruchu jednostronną ( w przód ), P 2 ramka kodowana różnicowo w stosunku do P 1 z kompensacją ruchu jednostronną ( w przód ), B ramki kodowane różnicowo z kompensacją ruchu dwustronną ( w przód od ramki I oraz w tył od odpowiedniej ramki P) Kontrola Rodzaje ramek Wejściowe bity Pamięć ramek Wstępne przetw. Wejściowe wideo DCT Q Q 1 DCT 1 VLC Bufor Wyjściowe bity I B 1 B 2 P 1 B 3 B 4 P 2 Kompensacja ruchu Bufor VLC 1 Q 1 DCT 1 Kompensacja ruchu Estymacja ruchu Pamięć ramek Multiplekser 1/2 Ramka poprzednia Ramka następna Wyjściowe wideo
Ilustracja graficzna zasady działania procedur estymacji i kompensacji ruchu: a) jednostronnej w przód, b) dwustronnej: w przód i w tył. W ramkach odniesienia, poprzedniej i następnej, znajduje się makroblok pikseli najbardziej podobny do makrobloku w aktualnej ramce i odejmuje się go od tej ramki. Tworzy się w ten sposób obraz różnicowy, charakteryzujący się małymi wartościami intensywności pikseli, który można efektywnie zakodować tak jak w standardzie JPEG. Optymalne wektory przesunięć, prowadzące do minimalizacji dynamiki obrazu różnicowego nazywa się wektorami ruchu (WR) również się je koduje i przesyła a) Ramka poprzednia WR Ramka aktualna b) Ramka poprzednia WR1 Ramka aktualna Makroblok Ramka następna WR2 Makroblok Błąd predykcji w przód 1/2 Błąd predykcji w tył Błąd predykcji Multiplekser DCT DCT