Download as pdf or txt
Download as pdf or txt
You are on page 1of 848

Cyfrowe przetwarzanie sygnałów

od teorii do zastosowań

Ukochanej Żonie
za anielską cierpliwość
Cyfrowe przetwarzanie sygnałów
od teorii do zastosowań
Tomasz P. Zieliński

W y d a w n i ctw a Ko mu n i k a cji i Ł ą czn oś ci


Warszaw a
Opiniodawcy: prof. dr hab. inż. Tadeusz Więckowski
prof. dr hab. inż. Jacek Wojciechowski

Okładkę projektował: Dariusz Litwiniec


Redaktor merytoryczny: mgr inż. Elżbieta Gawin
Redaktor techniczny: Maria Łakomy
Korekta: zespół

621.39

W książce w sposób przystępny dokonano przejścia od matematycznych podstaw teorii sygnałów


analogowych do współczesnych zastosowań analizy i przetwarzania sygnałów cyfrowych. Niezbędne
rozważania matematyczne zilustrowano licznymi przykładami obliczeniowymi, rysunkami oraz
programami komputerowymi, napisanymi w języku Matlab.
Poza klasycznymi tematami, takimi jak filtracja analogowa i cyfrowa oraz ciągła i dyskretna trans-
formacja Fouriera, opisano także zagadnienia bardziej zaawansowane: filtrację adaptacyjną, estymację
rekursywną oraz nowoczesne metody analizy częstotliwościowej i czasowo-częstotliwościowej sygna-
łów, w tym transformację falkową i zespoły filtrów. Podano również podstawy: kodowania i rozpozna-
wania sygnału mowy, kompresji MP3 sygnału audio, analizy i przetwarzania obrazów oraz cyfrowej
modulacji wielotonowej, stosowanej m.in. w szybkich telefonicznych modemach ADSL oraz w lokal-
nych bezprzewodowych sieciach komputerowych typu Wi-Fi.
Książka jest adresowana do pracowników naukowych wyższych uczelni, słuchaczy studiów doktoran-
ckich, studentów zgłębiających tajniki cyfrowego przetwarzania sygnałów oraz praktykujących inżynie-
rów zainteresowanych własnym rozwojem.

Podręcznik akademicki dotowany przez Ministra Edukacji Narodowej.

ISBN 83-206-1596-8

© Copyright by Wydawnictwa Komunikacji i Łączności sp. z o.o.


Warszawa 2005

Utwór ani w całości, ani we fragmentach nie może być skanowany, kserowany, powielany bądź
rozpowszechniany za pomocą urządzeń elektronicznych, mechanicznych, kopiujących, nagrywających
i innych bez pisemnej zgody posiadacza praw autorskich.

Wydawnictwa Komunikacji i Łączności sp. z o.o.


ul. Kazimierzowska 52, 02-546 Warszawa
tel. (0-22) 849-27-51; fax (0-22) 849-23-22
Dział handlowy tel./fax (0-22) 849-23-45
tel. (0-22) 849-27-51 w. 555
Prowadzimy sprzedaż wysyłkową książek
Księgarnia firmowa w siedzibie wydawnictwa
tel. (0-22) 849-20-32 czynna pon.–pt. w godz. 10.00–18.00
e-mail: wkl@wkl.com.pl
Pełna oferta WKŁ w INTERNECIE http://www.wkl.com.pl

Wydanie 1. Warszawa 2005.


Spis treści

Przedmowa ...................................................................................................................................................... xi

Wykaz oznaczeń ............................................................................................................................................ xiii

Wykaz skrótów ............................................................................................................................................... xv

1. Sygnały i ich parametry ............................................................................................................................ 1


1.1. Pojęcia podstawowe ....................................................................................................................... 1
1.2. Klasyfikacja sygnałów ................................................................................................................... 2
1.3. Sygnały deterministyczne ............................................................................................................... 4
1.3.1. Parametry ........................................................................................................................................ 4
1.3.2. Przykłady ........................................................................................................................................ 7
1.3.3. Sygnały zespolone ........................................................................................................................ 13
1.3.4. Rozkład sygnałów na składowe ................................................................................................... 14
1.3.5. Funkcja korelacji własnej i wzajemnej ........................................................................................ 14
1.3.6. Splot sygnałów ............................................................................................................................. 17
1.3.7. Transformacja Fouriera ................................................................................................................ 22
1.4. Sygnały losowe ............................................................................................................................. 24
1.4.1. Zmienne losowe ............................................................................................................................ 24
1.4.2. Procesy losowe, stacjonarność, ergodyczność ............................................................................. 26
1.4.3. Funkcje korelacji i kowariancji, gęstość widmowa mocy ........................................................... 28
1.4.4. Estymatory parametrów i funkcji ................................................................................................. 30
1.4.5. Filtracja sygnałów losowych ........................................................................................................ 34
1.5. Przykład ćwiczenia komputerowego ............................................................................................ 35

2. Podstawy matematyczne analizy sygnałów deterministycznych ....................................................... 39


2.1. Przestrzenie sygnałów deterministycznych .................................................................................. 39
2.2. Dyskretne reprezentacje ciągłych sygnałów deterministycznych ................................................ 41
2.3. Ciągłe reprezentacje ciągłych sygnałów deterministycznych − przekształcenia całkowe .......... 47
2.4. Reprezentacje sygnałów dyskretnych − przestrzenie wektorowe ................................................ 50
2.5. Przykład ćwiczenia komputerowego ............................................................................................ 60

3. Szereg Fouriera ....................................................................................................................................... 63


3.1. Ortogonalne funkcje bazowe ........................................................................................................ 63
3.2. Harmoniczne zespolone funkcje bazowe ..................................................................................... 65
3.3. Harmoniczne rzeczywiste funkcje bazowe .................................................................................. 66
3.4. Przykład obliczeniowy ................................................................................................................. 67
3.5. Przykład ćwiczenia komputerowego ............................................................................................ 68
3.6. Szereg Fouriera sygnałów dyskretnych − dyskretne przekształcenie Fouriera ........................... 71

4. Całkowe przekształcenie Fouriera ........................................................................................................ 74


4.1. Definicja ....................................................................................................................................... 74
4.2. Podstawowe właściwości ............................................................................................................. 75
4.3. Transformaty Fouriera wybranych sygnałów .............................................................................. 79
vi Spis treści

4.4. Widmo iloczynu i splotu dwóch sygnałów .................................................................................. 87


4.5. Twierdzenie o próbkowaniu ......................................................................................................... 93
4.6. Widmo sygnału spróbkowanego .................................................................................................. 97
4.7. Przykład ćwiczenia komputerowego .......................................................................................... 101

5. Układy analogowe ................................................................................................................................. 103


5.1. Analogowe układy LTI .............................................................................................................. 103
5.2. Transmitancja układu analogowego, zera i bieguny .................................................................. 107
5.3. Przekształcenie Laplace’a, transmitancja Laplace’a .................................................................. 112
5.4. Wykresy Bodego ........................................................................................................................ 116
5.5. Złożone układy analogowe LTI ................................................................................................. 118
5.6. Analiza matematyczna wybranych układów elektrycznych ...................................................... 120
5.7. Przykłady projektowania ............................................................................................................ 124
5.8. Przykład ćwiczenia komputerowego .......................................................................................... 129

6. Analogowe filtry Butterwortha i Czebyszewa ................................................................................... 131


6.1. Ogólne zasady projektowania filtrów analogowych .................................................................. 132
6.2. Transformacja częstotliwości ..................................................................................................... 139
6.3. Filtry Butterwortha ..................................................................................................................... 146
6.4. Filtry Czebyszewa typu I ........................................................................................................... 157
6.5. Filtry Czebyszewa typu II .......................................................................................................... 161
6.6. Sprzętowa implementacja filtrów analogowych ........................................................................ 165

7. Dyskretyzacja sygnałów analogowych ............................................................................................... 173


7.1. Podstawy .................................................................................................................................... 173
7.2. Przetworniki analogowo-cyfrowe .............................................................................................. 179
7.3. Przetworniki cyfrowo-analogowe .............................................................................................. 184
7.4. Tor przetwarzania analogowo-cyfrowego i cyfrowo-analogowego .......................................... 185

8. Analiza częstotliwościowa sygnałów dyskretnych ............................................................................. 192


8.1. Widmo Fouriera sygnałów dyskretnych .................................................................................... 192
8.1.1. Przekształcenie Fouriera dla sygnałów ciągłych ........................................................................ 193
8.1.2. Szereg Fouriera dla sygnałów ciągłych ...................................................................................... 193
8.1.3. Przekształcenie Fouriera dla sygnałów dyskretnych ................................................................. 194
8.1.4. Szereg Fouriera dla sygnałów dyskretnych, czyli dyskretne przekształcenie Fouriera............. 198
8.2. Przykłady dyskretnych transformat Fouriera sygnałów ............................................................. 202
8.3. Interpretacja dyskretnego przekształcenia Fouriera ................................................................... 206
8.4. Tor przetwarzania sygnałów podczas analizy częstotliwościowej ............................................ 210
8.5. Dyskretne okna czasowe ............................................................................................................ 212
8.5.1. Okna nieparametryczne .............................................................................................................. 212
8.5.2. Okna parametryczne ................................................................................................................... 217
8.6. Przykłady analizy częstotliwościowej z wykorzystaniem funkcji okien ................................... 220
8.7. Szybkie wyznaczanie funkcji autokorelacji i funkcji gęstości widmowej mocy....................... 226

9. Algorytmy wyznaczania dyskretnej transformacji Fouriera ........................................................... 231


9.1. Metoda bezpośrednia .................................................................................................................. 231
9.2. Algorytm Goertzela .................................................................................................................... 234
9.3. Rekurencyjne wyznaczanie sekwencji dyskretnych transformat Fouriera ................................ 236
9.4. Transformacja świergotowa − lupa w dziedzinie częstotliwości ............................................... 239
9.5. Szybka transformacja Fouriera − algorytmy radix-2 ................................................................. 241
9.5.1. Podział w dziedzinie czasu − DIT (Decimation in Time) .......................................................... 241
9.5.2. Podział w dziedzinie częstotliwości − DIF (Decimation in Frequency) ................................... 252
9.6. Szybka transformacja Fouriera dla sygnałów rzeczywistych .................................................... 255
9.7. Dwuwymiarowa dyskretna transformacja Fouriera ................................................................... 257
9.8. Wyznaczanie DCT metodą szybkiej transformacji Fouriera ..................................................... 258
Spis treści vii

10.Układy dyskretne .................................................................................................................................. 260


10.1. Układy dyskretne LTI ................................................................................................................ 260
10.2. Algorytm filtracji sygnałów za pomocą dyskretnych układów LTI .......................................... 265
10.3. Transformacja Z ......................................................................................................................... 267
10.4. Odwrotna transformacja Z ......................................................................................................... 270
10.5. Właściwości transformacji Z ...................................................................................................... 274
10.6. Transmitancja układów dyskretnych ......................................................................................... 275
10.7. Przykłady projektowania układów dyskretnych metodą „zer i biegunów” ............................... 280
10.8. Przykład ćwiczenia komputerowego .......................................................................................... 284

11.Projektowanie rekursywnych filtrów cyfrowych .............................................................................. 288


11.1. Wymagania stawiane filtrom cyfrowym .................................................................................... 289
11.2. Metoda Yule’a-Walkera ............................................................................................................. 291
11.3. Metoda niezmienności odpowiedzi impulsowej ........................................................................ 291
11.4. Metoda dopasowanej transformacji Z ........................................................................................ 293
11.5. Metoda transformacji biliniowej ................................................................................................ 293
11.6. Przykłady projektowania filtrów w języku Matlab ................................................................... 297
11.7. Przykład ćwiczenia komputerowego .......................................................................................... 304

12.Projektowanie nierekursywnych filtrów cyfrowych ......................................................................... 307


12.1. Wprowadzenie ............................................................................................................................ 308
12.2. Metoda próbkowania w dziedzinie częstotliwości .................................................................... 313
12.3. Metoda optymalizacji średniokwadratowej ............................................................................... 317
12.4. Metoda aproksymacji Czebyszewa (algorytm Remeza) ............................................................ 321
12.5. Metoda okien .............................................................................................................................. 325
12.6. Filtry specjalne ........................................................................................................................... 339
12.6.1. Filtr Hilberta ............................................................................................................................... 339
12.6.2. Filtr różniczkujący ..................................................................................................................... 345
12.6.3. Filtr interpolatora i decymatora cyfrowego ................................................................................ 347
12.6.4. Przykład ćwiczenia komputerowego .......................................................................................... 351
12.7. Synchronizacja próbek wejściowych i wyjściowych filtra ........................................................ 353

13.Algorytmy filtracji cyfrowej ................................................................................................................ 356


13.1. Klasyczne struktury filtrów cyfrowych ...................................................................................... 356
13.2. Struktura zmiennych stanu ......................................................................................................... 361
13.3. Inne struktury filtrów cyfrowych ............................................................................................... 363
13.4. Splot liniowy i kołowy ............................................................................................................... 364
13.5. Algorytmy szybkiego splotu sygnałów dyskretnych ................................................................. 371
13.6. Algorytmy sekcjonowanego szybkiego splotu sygnałów dyskretnych...................................... 373
13.7. Przykład ćwiczenia komputerowego .......................................................................................... 376

14.Filtry adaptacyjne ................................................................................................................................. 379


14.1. Wprowadzenie ............................................................................................................................ 379
14.2. Podstawy filtracji adaptacyjnej .................................................................................................. 380
14.3. Filtracja optymalna − filtr Wienera ............................................................................................ 382
14.4. Gradientowe filtry adaptacyjne .................................................................................................. 384
14.5. Filtry adaptacyjne LMS − filtry bez pamięci ............................................................................. 386
14.6. Filtry adaptacyjne LS (RLS) − filtry z pamięcią ....................................................................... 388
14.7. Przykłady zastosowań................................................................................................................. 391
14.8. Przykład ćwiczenia komputerowego − filtr adaptacyjny (N)LMS ............................................ 394

15.Liniowa estymacja rekursywna ........................................................................................................... 399


15.1. Metoda najmniejszych kwadratów. Filtry RLS i WRLS ........................................................... 399
15.2. Metoda minimalno-średniokwadratowa. Filtr Kalmana ........................................................... 408
viii Spis treści

16.Zaawansowane metody analizy częstotliwościowej sygnałów ......................................................... 420


16.1. Wprowadzenie ............................................................................................................................ 420
16.2. Modelowanie parametryczne AR, MA i ARMA ....................................................................... 423
16.2.1. Podstawy .................................................................................................................................... 423
16.2.2. Model AR ................................................................................................................................... 426
16.2.3. Model MA .................................................................................................................................. 427
16.2.4. Model ARMA ............................................................................................................................ 429
16.2.5. Podsumowanie ........................................................................................................................... 430
16.3. Metody podprzestrzeni ............................................................................................................... 430
16.3.1. Podstawy .................................................................................................................................... 430
16.3.2. Metoda Pisarenki ........................................................................................................................ 432
16.3.3. Metody pochodne: MUSIC, EV i MV ....................................................................................... 435
16.3.4. Metoda ESPRIT ......................................................................................................................... 437
16.3.5. Metody podprzestrzeni sygnału (składowych głównych) ......................................................... 439
16.4. Przykład ćwiczenia komputerowego .......................................................................................... 440

17.Metody czasowo-częstotliwościowej analizy sygnałów ..................................................................... 443


17.1. Problem analizy czasowo-częstotliwościowej ........................................................................... 444
17.2. Transformacja Gabora ................................................................................................................ 450
17.3. Krótkoczasowa transformacja Fouriera STFT ........................................................................... 455
17.4. Transformacja falkowa ............................................................................................................... 459
17.5. Transformacja Wignera-Ville’a ................................................................................................. 472
17.6. Reprezentacje czasowo-częstotliwościowe z klasy Cohena ...................................................... 477
17.7. Przykłady zastosowań ................................................................................................................ 486
17.8. Przykład ćwiczenia komputerowego .......................................................................................... 493

18.Zespoły filtrów ....................................................................................................................................... 496


18.1. Wprowadzenie ............................................................................................................................ 496
18.2. Pojęcia podstawowe ................................................................................................................... 500
18.2.1. Decymator i interpolator ............................................................................................................. 500
18.2.2. Dekompozycja polifazowa sygnałów ........................................................................................ 503
18.2.3. Decymator i interpolator w zapisie polifazowym ...................................................................... 506
18.3. Opis matematyczny zespołu filtrów ........................................................................................... 507
18.3.1. Analiza jednej gałęzi .................................................................................................................. 507
18.3.2. Analiza wszystkich gałęzi .......................................................................................................... 511
18.3.3. Zapis polifazowy zespołu filtrów ............................................................................................... 512
18.3.4. Warunek perfekcyjnej rekonstrukcji .......................................................................................... 514
18.4. Zespoły filtrów z modulacją zespoloną ...................................................................................... 515
18.4.1. DFT jako modulowany zespół filtrów ....................................................................................... 516
18.4.2. Krótkoczasowa transformacja Fouriera STFT jako modulowany zespół filtrów ..................... 518
18.4.3. Uogólniony modulowany zespół filtrów oparty na DFT ........................................................... 519
18.5. Zespoły filtrów z modulacją kosinusową ................................................................................... 527
18.5.1. Równania, budowa ..................................................................................................................... 527
18.5.2. Projektowanie filtrów prototypowych ....................................................................................... 533
18.6. Implementacja programowa zespołu filtrów standardu MPEG audio ....................................... 539

19.Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy ......................................... 545


19.1. Wprowadzenie ............................................................................................................................ 545
19.2. Model generacji sygnału mowy ................................................................................................. 549
19.3. Układ decyzyjny „mowa dźwięczna/bezdźwięczna” ................................................................ 551
19.4. Wyznaczanie filtra traktu głosowego ......................................................................................... 557
19.5. Algorytm kodera i dekodera mowy standardu LPC-10 ............................................................. 563
19.6. Przykład programu komputerowego .......................................................................................... 566
19.7. Od kodowania do rozpoznawania mowy ................................................................................... 569
Spis treści ix

20.Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane ........................................... 577


20.1. Metoda Durbina-Levinsona ....................................................................................................... 577
20.2. Filtry kratowe ............................................................................................................................. 581
20.3. Przykładowy program komputerowy ......................................................................................... 590

21.Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku .................................................... 592


21.1 Wprowadzenie do standardu MPEG audio ............................................................................... 593
21.2. Podstawy modelowania psychoakustycznego ........................................................................... 594
21.3. Modele psychoakustyczne standardu MPEG audio .................................................................. 603
21.3.1. Model psychoakustyczny I ......................................................................................................... 603
21.3.2. Model psychoakustyczny II ....................................................................................................... 604
21.3.3. Program komputerowy ............................................................................................................... 612
21.4. Zespoły filtrów w standardzie MPEG audio .............................................................................. 618
21.5. Kodowanie dźwięku na poziomach MP1 i MP2 ....................................................................... 631
21.5.1. Algorytm kompresji i dekompresji ............................................................................................. 631
21.5.2. Program komputerowy ............................................................................................................... 638

22.Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych ...................... 647


22.1. Wprowadzenie do świata 2D i 3D ............................................................................................. 649
22.2. Transformacje ortogonalne 2D obrazów .................................................................................... 658
22.2.1. Dyskretna transformacja Fouriera .............................................................................................. 658
22.2.2. Dyskretna transformacja kosinusowa ........................................................................................ 663
22.2.3. Dowolna transformacja ortogonalna − interpretacja współczynników ..................................... 665
22.3.4. Program komputerowy ............................................................................................................... 668
22.3. Filtracja 2D obrazów .................................................................................................................. 670
22.3.1. Splot 2D ...................................................................................................................................... 670
22.3.2. Projektowanie filtrów 2D ........................................................................................................... 674
22.3.3. Przykładowe filtry 2D ................................................................................................................ 683
22.3.4. Program komputerowy ............................................................................................................... 686
22.4. Falkowa dekompozycja 2D obrazów ......................................................................................... 690
22.4.1. Jednowymiarowa predykcyjna transformacja falkowa .............................................................. 691
22.4.2. Związki pomiędzy klasyczną a predykcyjną transformacją falkową ........................................ 697
22.4.3. Program komputerowy do falkowej dekompozycji obrazów .................................................... 700
22.5. Przykłady zastosowań ................................................................................................................ 707
22.5.1. Kompresja JPEG i MPEG .......................................................................................................... 707
22.5.2. Znaki wodne w obrazach ........................................................................................................... 715
22.5.3. Dopasowywanie do siebie obrazów cyfrowych ......................................................................... 718
22.5.4. Detekcja linii w inżynierii materiałowej − transformacja Hougha ............................................ 730
22.2.5. Algorytmiczna stabilizacja obrazu w zastosowaniach medycznych ......................................... 733
22.5.6. Systemy nawigacji wspomagające zabiegi medyczne ............................................................... 737

23.Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej ................................... 740
23.1 Podstawy modulacji .................................................................................................................. 741
23.2. Cyfrowe modulacje wielotonowe ............................................................................................... 745
23.3. Standard ADSL .......................................................................................................................... 748
23.4. Modulator-demodulator DMT ................................................................................................... 751
23.5 Źródła zniekształceń i zakłóceń ................................................................................................. 754
23.6 Wybrane zagadnienia implementacyjne ..................................................................................... 759
23.6.1. Identyfikacja odpowiedzi impulsowej kanału ........................................................................... 759
23.6.2. Korekcja czasowa kanału − skracanie czasu trwania odpowiedzi impulsowej ......................... 764
23.6.3. Synchronizacja blokowa ............................................................................................................ 767
23.6.4. Korekcja częstotliwościowa kanału ........................................................................................... 769
23.6.5. Estymacja przepływności bitowej .............................................................................................. 770
23.6.6. Właściwy dobór korektora czasowego ....................................................................................... 773
23.7. Przykład ćwiczenia komputerowego .......................................................................................... 773
x Spis treści

24.Projekt FAZA: estymacja chwilowego przesunięcia fazowego ....................................................... 778


24.1. Estymatory proste ....................................................................................................................... 778
24.2. Estymatory złożone .................................................................................................................... 781
24.3. Przykłady algorytmów ............................................................................................................... 782
24.4. Przykładowy program komputerowy ......................................................................................... 786

25.EPILOG: implementacja algorytmów DSP na procesorach sygnałowych .................................... 787


25.1 Wprowadzenie do budowy i programowania procesorów DSP ................................................ 788
25.2. Splot sygnałów na procesorze DSP ........................................................................................... 791
25.3. Wybrane zagadnienia implementacyjne ..................................................................................... 796
25.3.1. Specyfika budowy i zastosowań procesorów sygnałowych ...................................................... 796
25.3.2. Podstawy pisania i uruchamiania programów ........................................................................... 800
25.3.3. Zaawansowane narzędzia programowe ...................................................................................... 803
25.3.4. Przykład projektowania filtra IIR ............................................................................................... 805
25.4. Przykładowa aplikacja procesora DSP ...................................................................................... 807
25.4. Procesory DSP a układy programowalne FPGA ....................................................................... 808
25.5. Przyszłość DSP − czy jesteśmy trendy? .................................................................................... 810

Literatura .................................................................................................................................................... 813

Dodatki ........................................................................................................................................................ 823

D.1. Wykaz programów ....................................................................................................................... 823


D.2. Wersja elektroniczna programów ................................................................................................ 824

Skorowidz .................................................................................................................................................... 825


Przedmowa

Celem niniejszej książki jest w miarę całościowe przedstawienie podstaw cyfrowego przetwarza-
nia sygnałów. Ich znajomość jest niezwykle istotna w czasach, w których obserwuje się zdecydo-
wane preferowanie rozwiązań opartych na technice cyfrowej a nie analogowej. Tendencja ta jest
wyraźnie obserwowana od wielu lat i jest wynikiem coraz większej dostępności, także cenowej,
bardzo wydajnych układów cyfrowych (mikroprocesorów i mikrokontrolerów, pamięci oraz ukła-
dów peryferyjnych, takich jak przetworniki analogowo-cyfrowe i cyfrowo-analogowe) oraz zalet
przetwarzania cyfrowego nad analogowym (niezmienności czasowej sposobu przetwarzania da-
nych, spowodowanej brakiem zależności od starzejących się i zmieniających swoje właściwości
elementów elektronicznych). W związku z tym coraz częściej obserwuje się projektowanie ukła-
dów elektronicznych, w których jak najwcześniej następuje przetworzenie sygnałów analogowych
na postać cyfrową i realizowanie algorytmu przetwarzania całkowicie w postaci operacji arytme-
tycznych na liczbach, reprezentujących wartości chwilowe spróbkowanych sygnałów analogo-
wych. Ten scenariusz jest powszechny wszędzie. Przykładem mogą być różnorakie systemy stero-
wania i nadzoru: przemysłowe, wojskowe, medyczne. Dodatkowo w epoce multimedialnej szeroko
przetwarzane i analizowane są cyfrowe sygnały mowy, muzyki (audio), obrazy i ich sekwencje
(wideo, telewizja).
Wszędzie tam, gdzie znajduje się procesor przetwarzający cyfrowe dane pomiarowe mamy do
czynienia z cyfrowym przetwarzaniem sygnałów. Okazuje się jednak, że niezależnie od źródła
tych sygnałów podstawowe metody ich przetwarzania i analizy są identyczne lub bardzo podobne.
Dlaczego tak się dzieje? Ponieważ w każdym przypadku patrzymy na sygnał jako na funkcję
zmienną w czasie, lub przestrzeni, i wykorzystujemy znane, ogólnie dostępne narzędzia analizy
matematycznej tych funkcji, czyli na przykład stosujemy osiemnastowieczne przekształcenie
Fouriera lub mającą dopiero kilkanaście lat transformację falkową do częstotliwościowej analizy
sygnałów.
Zdaniem autora nie można mówić o przetwarzaniu sygnałów cyfrowych bez nawiązania do teorii
(analizy i przetwarzania) sygnałów analogowych, czyli teorii funkcji ciągłych. Analiza i przetwa-
rzanie danych cyfrowych są nierozerwalnie związane z analizą i przetwarzaniem sygnałów analo-
gowych. Najczęściej dane cyfrowe są spróbkowaną wersją („kopią”) danych analogowych i ich
analiza ma nam dać informacje nie o „kopii”, ale o „oryginale”. Narzędzia stosowane w obu przy-
padkach i ich właściwości wzajemnie się przy tym przenikają. Filtry cyfrowe wywodzą się z fil-
trów analogowych, implementowana na komputerach dyskretna transformacja Fouriera (stosowana
przykładowo w bardzo popularnym obecnie standardzie kompresji muzyki mp3) powstała
z „całkowego” szeregu Fouriera, zaś transformacja Z pełni podobną rolę w świecie liniowych,
niezmiennych w czasie układów dyskretnych jak transformacja Laplace’a w świecie układów
analogowych.
Z tego powodu niniejsza książka będzie podróżą po wielu kontynentach. Znajdą się w niej: ele-
menty teorii sygnałów analogowych i obwodów elektrycznych (rozdziały 1 − 6), podstawowe (roz-
działy 7 − 13) i bardziej zaawansowane (rozdziały 14 − 18) metody cyfrowej analizy i przetwa-
rzania sygnałów oraz ich wybrane, ciekawe zastosowania (rozdziały 19 − 23). Autorowi zawsze
będzie przyświecał podstawowy cel, aby pokazać związki i przenikanie się świata „analogowego”
xii Przedmowa

i „cyfrowego”. Równocześnie nacisk zostanie położony nie na istniejące „wzory mnemotechnicz-


ne”, dające inżynierowi gotowe recepty „jak żyć” dzisiaj, ale zamykające drogę dalszego rozwoju
jutro, tylko na staranne matematyczne wytłumaczenie rozpatrywanych kwestii, które pozwoli na
dalsze, samodzielne, świadome poruszanie się Czytelnika w dziedzinach dla niego nowych.
Pierwsze wytłumaczenie zawsze będzie jak najprostsze. Główną intencją autora jest „odczarowa-
nie” tematów pozornie trudnych i „rzucenie mostów” pomiędzy brzegami z pozoru odległymi.
W książce tej nie ma nic nowego. Wszystko już było. W dużej części składa się ona z prostych wy-
prowadzeń i przekonywujących wytłumaczeń, które zostały wyłowione z setek książek i artykułów
− morza słów − i skrzętnie zapamiętane. Więc po co ją napisano? Autor z przykrością stwierdza,
że sam mozolnie całymi latami odkrywał niektóre proste prawdy. I tak jak podczas wspinaczki w
górach, po każdym „podejściu” odsłaniał mu się „nowy widok”. Wędrówka ta już trwa ponad
dwadzieścia lat. I na pewno do szczytu jest jeszcze bardzo daleko. Ale może warto pokazać innym
drogę „na skróty”, podjąć próbę dopasowania elementów „łamigłówki” oraz syntezy własnych
przemyśleń.
Książka jest podręcznikiem akademickim. W zamierzeniu autora każdy z rozdziałów stanowi
zamkniętą całość, odpowiednią do oddzielnej lektury, dlatego część przedstawionego materiału
będzie się w niewielkim stopniu powtarzać, ale zazwyczaj w nieco innej formie.

Kończąc to krótkie wprowadzenie, autor chciałby bardzo serdecznie podziękować wszystkim, któ-
rzy są cichymi współautorami tej książki. Na wstępie Panu profesorowi Michałowi Szyperowi,
wieloletniemu opiekunowi naukowemu, za inspirację do twórczej, wytężonej, bezkompromisowej
pracy i bezkompromisowego postępowania (w tym pisania). Serdeczne podziękowania autor kieru-
je także do swoich doktorantów, byłych i obecnych, czyli Panów: Jarosława Bułata, Krzysztofa
Dudy, Rafała Frączka, Mirosława Sochy i Jacka Stępnia, a zwłaszcza do Pawła Turczy, niekwe-
stionowanego lidera grupy, którzy swoimi pytaniami oraz wspólnym z autorem poszukiwaniem na
nie odpowiedzi w sposób znaczący przyczynili się do obecnego kształtu merytorycznego książki.
Autor składa także szczególne podziękowania swoim kolegom: dr Andrzejowi Bieniowi za wpro-
wadzenie go w świat cyfrowego przetwarzania sygnałów, dr Henrykowi Łopaczowi i dr Romanowi
Rumianowi za długą, owocną, niezwykle kształcącą współpracę oraz dr Tomaszowi Twardowskie-
mu za ożywczy powiew świeżości, wniesiony w jego życie naukowe w ostatnich latach.
Idąc dalej i przechodząc do konkretów, autor chciałby bardzo gorąco podziękować: dr Romanowi
Rumianowi za współautorstwo rozdziału 25, dr Krzysztofowi Dudzie za współautorstwo rozdzia-
łów 22.4, 22.5.2 i 22.5.3, dr Robertowi Wielgatowi za współautorstwo rozdziału 19.7 oraz dr
Przemysławowi Korohodzie za bardzo cenne uwagi i sugestie dotyczące zawartości merytorycznej
całego rozdziału 22.
Miłym obowiązkiem autora jest także serdeczne podziękowanie wszystkim osobom, które poświę-
ciły swój czas, bardzo wnikliwie przeczytały cały manuskrypt niniejszej książki lub jego wybrane
części oraz pomogły usunąć występujące w nim błędy i nieścisłości, a w szczególności Panom pro-
fesorom: Markowi Domańskiemu, Andrzejowi Dziechowi, Januszowi Gajdzie, Zdzisławowi Papi-
rowi, Ryszardowi Panuszce i Michałowi Szyperowi, Panom doktorom: Krzysztofowi Dudzie, Je-
rzemu Jurkiewiczowi, Przemysławowi Korohodzie, Pawłowi Turczy i Tomaszowi Twardowskie-
mu oraz wszystkim swoim doktorantom, przede wszystkim Jarosławowi Bułatowi.

Autor ma nadzieję, że choć w niewielkiej części udało mu się zrealizować swoje ambitne zamie-
rzenia. Dlatego z zawstydzeniem i pokorą przedstawia Czytelnikowi skromny wynik swojej pracy.

Kraków, wrzesień 2005 Tomasz P. Zieliński


Wykaz oznaczeń

arg(.) − kąt liczby zespolonej


A(s) − mianownik transmitancji układu analogowego H(s)
A(z) − mianownik transmitancji układu dyskretnego H(z)
A(Ω) − funkcja analityczna równa ± M(Ω)
B(s) − licznik transmitancji układu analogowego H(s)
B(z) − licznik transmitancji układu dyskretnego H(z)
cxy(τ), Cxy(τ) − funkcja kowariancji wzajemnej sygnałów x(t) i y(t)
Ex − energia sygnału x
E[x] − wartość oczekiwana zmiennej losowej x
f – częstotliwość
fpr, fp − częstotliwość próbkowania
F = f / fpr − częstotliwość unormowana
F(x) − dystrybuanta zmiennej losowej x
h(n) − odpowiedź impulsowa układu dyskretnego o transmitancji H(z)
h(t) − odpowiedź impulsowa układu analogowego o transmitancji H(s)
H(s) − transmitancja (funkcja przejścia) układu analogowego
H(z) − transmitancja (funkcja przejścia) układu dyskretnego
H kI ( II ) ( z ) − transformata Z k-tej składowej polifazowej (typu I lub II) filtra h(n)
H lI, (kII ) ( z ) − transformata Z k-tej składowej polifazowej (typu I lub II) filtra hl(n)
Im(.), Imag(.) – część urojona liczby zespolonej
M(ω) = | X(jω) | − moduł transformaty Fouriera X(jω) sygnału x(t)
M(Ω) = | X(ejΩ) | − moduł transformaty Fouriera X(ejΩ) sygnału x(n)
p(n) − filtr prototypowy w zespole filtrów
pT(t) − okno prostokątne o czasie trwania [− T, T]
p(x) − funkcja gęstości prawdopodobieństwa zmiennej losowej x
Px − moc sygnału x
Pxy(f ) − funkcja wzajemnej gęstości widmowej mocy sygnałów x(t) i y(t)
Re(.), Real(.) – część rzeczywista liczby zespolonej
rxy(τ), Rxy(τ) − funkcja korelacji wzajemnej sygnałów x(t) i y(t)
s − zmienna transformacji Laplace’a
sgn(t) − sygnał (funkcja) znaku
sinc(x) − funkcja typu sin(x)/x
Sx(t, f ) − reprezentacja czasowo-częstotliwościowa sygnału x(t)
t – czas
Unwrap( Φ(Ω) ) – funkcja „uciąglająca” charakterystykę fazowo-częstotliwościową
WN = exp(− j 2π / N ) − stała dyskretnej transformacji Fouriera DFT
xiv Wykaz oznaczeń

x − zmienna losowa
x, x − wektor
X − macierz
x(n) – sygnał czasu dyskretnego (dyskretny)
x(t) − sygnał czasu ciągłego (analogowy)
X(ejΩ) − transformata Fouriera sygnału x(n)
X(f ) − transformata Fouriera sygnału
X(jω) − transformata Fouriera sygnału x(t)
X(s) − transformata Laplace’a sygnału x(t)
X(z) − transformata Z sygnału x(n)
z − zmienna transformacji Z

δ(n) − dyskretny impuls jednostkowy (impuls Kroneckera)


δ(t) − impuls Diraca
Φ(ω) − faza transformaty Fouriera X(jω) sygnału x(t)
Φ(Ω) − faza transformaty Fouriera X(ejΩ) sygnału x(n)
σ2x − wariancja sygnału x
ω = 2πf − pulsacja analogowa
Ω = 2πf / fpr − pulsacja unormowana, pulsacja cyfrowa

(.)H − sprzężenie i transpozycja wektora lub macierzy (np. xH, XH)


(.)T − transpozycja wektora lub macierzy (np. xT, XT)
(.)* − sprzężenie zespolone liczby (np. x*)
(.) , − wartość średnia sygnału (np. x )
l,
(.) − wartość przybliżona, estymata sygnału (np. x̂ )
. − moduł liczby zespolonej (np. |x |)
. − norma sygnału (np. x )
<> − iloczyn skalarny dwóch sygnałów (<x, y>)
⊗ − operator splotu dwóch sygnałów (np. x ⊗ y)
)(.), ((.), ∠(.) − kąt liczby zespolonej (np. )X(jω), )X(ejΩ))
Wykaz skrótów

A/C Analog/Cyfra FFT Fast Fourier Transform


ADPCM Adaptive Differential Pulse Code FIR Finite Impulse Response
Modulation FM Frequency Modulation
ADSL Asymmetric Digital Subscriber Line FPGA Field Programmable Gate Array
AM Amplitude Modulation HP Highpass
AMDF Average Magnitude Difference HSV High-Speed Videoendoscopy
Function IDFT Inverse Discrete Fourier Transform
AR Autoregressive IFFT Inverse Fast Fourier Transform
ARMA Autoregressive Moving Average IIR Infinite Impulse Response
ASIC Application-Specific Integrated ILS Iterative Least Squares
Circuits IMDCT Inverse Modified Discrete Cosine
AWGN Additive White Gaussian Noise Transform
BIBO Bounded Input Bounded Output JPEG Joint Photographic Expert Group
BP Bandpass KL Karhunen-Loeve (Transform)
BS Bandstop LFM Linear Frequency Modulation
C/A Cyfra/Analog LMS Least Mean Squares
CCD Charge-Coupled Devices LOT Lapped Orthogonal Transform
CTD Charge Transfer Devices LP Lowpass
CWT Continuous Wavelet Transform LPC Linear Prediction Coding
DCT Discrete Cosine Transform LS Least Squares
DFT Discrete Fourier Transform LSB Least Significant Bit
DIF Decimation in Frequency LSF Line Spectrum Frequencies
DIT Decimation in Time LSP Line Spectrum Pairs
DMA Direct Memory Access LTI Linear Time-Invariant
DMT Discrete MutiTone MA Moving Average
DOA Direction of Arrival MAC Multiply-And-Accumulate
DP Dolnoprzepustowy MDCT Modified Discrete Cosine Transform
DSB Double Sideband MLT Modulated Lapped Transform
DSP Digital Signal Processing MMS Minimum Mean Squares
(Processor) MN Minimum Norm
DST Discrete Sine Transform MPEG Moving Pictures Expert Group
DTW Dynamic Time Warping MSB Most Significant Bit
DWT Discrete Wavelet Transform MUSIC Multiple Signal Classification
EV Eigenvalue, Eigenvector MV Minimum Variance
EVD Eigenvalue Decomposition NEXT Near End Crosstalk
ESPRIT Estimation of Signal Parameters via NLMS Normalised Least Mean Squares
Rotational Invariance Techniques NMT Noise is Masking Tone
FB Filter Bank OFDM Orthogonal Frequency Division
FDM Frequency Division Multiplexing Multiplexing
FEQ Frequency Equalizer PCM Pulse Code Modulation
FEXT Far End Crosstalk PER Periodogram
xvi Wykaz skrótów

PR Perfect Reconstruction SMR Signal-to-Mask Ratio


PTF Predykcyjna Transformacja SNR Signal-to-Noise Ratio
Falkowa SPEC Spectrogram
P&P Próbkowanie z Podtrzymaniem STFT Short-Time Fourier Transform
QAM Quadrature Amplitude Modulation SVD Singular Value Decomposition
QMF Quadrature Mirror Filters S&H Sample & Hold
Radix-N Podstawa-N TDM Time Division Multiplexing
RLS Recursive Least Squares TEQ Time Equalizer
SAW Surface Acoustics Waves TF Time-Frequency
SC Suppressed Carrier TMN Tone is Masking Noise
SCAL Scalogram VDSL Very high speed Digital Subscriber
SCC Switched Capacitor Circuits Line
SCF Scaling Factors VLI Variable Length Integers
SCFI Scaling Factors’ Information WLS Weighted Least Squares
SFM Sinusoidal Frequency Modulation WRLS Weighted Recursive Least Squares
SFM Spectral Flatness Measure WV Wigner-Ville
1
Sygnały i ich parametry

Celem niniejszego rozdziału jest skrótowe wprowadzenie Czytelnika w szeroko rozumianą


problematykę analizy i przetwarzania sygnałów. Na wstępie zostanie w nim przeprowadzona
klasyfikacja sygnałów ze względu na różne kryteria, a następnie szczegółowo zostaną przed-
stawione klasy sygnałów deterministycznych i losowych wraz z typowymi dla nich „narzę-
dziami” obliczeniowymi analizy i przetwarzania. W praktyce inżynierskiej analiza sygnałów
najczęściej sprowadza się do analizy częstotliwościowej (fourierowskiej) oraz korelacyjnej. Od
pierwszej z nich oczekuje się udzielenia odpowiedzi na pytanie o elementy składowe (często-
tliwościowe) sygnału, natomiast od drugiej − pomocy w ustaleniu jego charakteu, np. okreso-
wości. Najpowszechniejszą operacją przetwarzania sygnałów jest natomiast ich filtracja, czyli
odseparowywanie od siebie składowych sygnału lub jego odszumianie.
W pewnym sensie rozdział ten stanowi porządkujące, encyklopedyczne streszczenie wielu
zagadnień, które potem będą szczegółowo omawiane w dalszej części książki. Zebranych
w nim jest wiele nowych pojęć, definicji, własności. Jednak z powodu bogactwa treści i lapi-
darności formy sprawia on najczęściej „przygnębiające” wrażenie na Czytelniku, który bierze
książkę do ręki po raz pierwszy. Autor ma jednak nadzieję, że rozdział ten jest jak „stare
wino”, tym lepsze im później (częściej) do niego wracamy. Dlatego głowa do góry,
Czytelniku!

1.1. Pojęcia podstawowe


W rozumieniu niniejszej książki, w największym uproszczeniu, sygnał to zmienność dowolnej
wielkości fizycznej, która może być opisana za pomocą funkcji jednej f(x) lub wielu zmien-
nych f(x1, x2, x3, ...), przykładowo temperatury, ciśnienia, napięcia elektrycznego itp. W prakty-
ce najczęściej interesują nas sygnały będące funkcjami czasu f(t) lub położenia w przestrzeni
f(x, y, z), np. f(t) = sin(2πft), f(t) = Aet, f(x,y) = exp(x2+y2). Sygnałem jest więc zmienność
jakiejś wielkości fizycznej w funkcji wybranego argumentu, np. temperatury lub natężenia fali
elektromagnetycznej w funkcji czasu lub chropowatości powierzchni w funkcji położenia.
Sygnały są generowane między innymi przez o b i e k t y b i o l o g i c z n e , s p o ł e c z n e
i t e c h n i c z n e , występujące w otaczającym nas świecie, i zazwyczaj zawierają informację
o tych obiektach. Przykładowo w sygnale mowy ludzkiej jest zawarta określona „treść”,
2 Sygnały i ich parametry

podobnie jak w zapisie sygnału elektrokardiogramu serca − informacja o aktualnym stanie


pacjenta. Wiele sygnałów jest także generowanych sztucznie przez samego człowieka i wyko-
rzystywanych w różnych u k ł a d a c h t e c h n i c z n y c h . Wówczas sygnały te służą najczęściej
do przenoszenia informacji, tak jak ma to miejsce w transmisji radiowej lub telewizyjnej, lub
też do zbierania informacji o otaczającym nas świecie. Przykładem tego ostatniego może być
echografia impulsowa (np. utrasonografia medyczna, technika radarowa), w której wysyła się
sygnały impulsowe w stronę obiektu i analizuje sygnały od niego odbite.
Przez teorię sygnałów rozumie się zazwyczaj matematyczne podstawy opisu, analizy i prze-
kształcania (przetwarzania) sygnałów jako specyficznych funkcji matematycznych. Analiza
sygnałów ma na celu wydobycie informacji zawartej w sygnałach, np. rozpoznanie treści
sygnału mowy, diagnozę stanu pacjenta na podstawie sygnału elektrokardiogramu lub obrazu
ultrasonograficznego, przewidywanie ruchów tektonicznych (trzęsień ziemi) z rejestrowanych
sygnałów geosejsmicznych, detekcję obiektów latających na podstawie sygnałów od nich
odbitych lub przez nie generowanych (np. szumowych, termicznych). Przetwarzanie sygnałów
to natomiast transformowanie sygnału z jednej postaci do drugiej, na przykład modulacja i de-
modulacja sygnałów w systemach teleinformatycznych, w szczególności modulacja AM i FM
sygnałów w radiostacjach i ich demodulacja w odbiornikach radiowych.
Celem niniejszej książki jest przedstawienie podstawowych metod opisu, analizy i prze-
twarzania sygnałów.

1.2. Klasyfikacja sygnałów


W niniejszym podrozdziale przedstawiono klasyczny podział sygnałów na oddzielne grupy
sygnałów o charakterystycznych właściwościach. Będą w nim przede wszystkim dyskutowane
sygnały czasowe, oznaczone przez x(t), ale funkcje innych argumentów klasyfikuje się w spo-
sób analogiczny.
Schemat podstawowej klasyfikacji sygnałów jest przedstawiony na rysunku 1.1.

Sygnały

deterministyczne losowe

okresowe niestacjonarne stacjonarne

prawie okresowe
nieergodyczne ergodyczne
zmodulowane
rozkład równomierny
impulsowe o ograniczonej energii
rozkład normalny
o nieskończonym czasie trwania i ograniczonej energii
inne rozkłady

Rys. 1.1. Schemat blokowy podstawowej klasyfikacja sygnałów


Sygnały i ich parametry 3

Ogólnie wszystkie sygnały możemy podzielić na:


1) funkcje różnych argumentów, np. czasu lub położenia (odległości),
2) funkcje różnej liczby argumentów (wieloargumentowe), np. jedno-, dwu- lub
wielowymiarowe,
3) funkcje przyjmujące różne wartości, np. rzeczywiste lub zespolone,
4) sygnały ciągłe (analogowe) x(t) oraz dyskretne xk(t), x(n) i xk(n),
5) sygnały deterministyczne i losowe.

Sygnały ciągłe czasu ciągłego x(t) są opisane ciągłymi funkcjami czasu, przyjmującymi warto-
ści ze zbioru liczb rzeczywistych.
Sygnały dyskretne czasu ciągłego xk(t) są sygnałami ciągłymi w czasie, przyjmującymi warto-
ści dyskretne. Przykładem takiego sygnału jest sygnał wyjściowy z przetwornika cyfrowo-ana-
logowego C/A, którego wartości są skwantowane. W szczególności sygnał muzyki z płyty CD
po przetworniku C/A a przed dolnoprzepustowym filtrem rekonstruującym.
Sygnały ciągłe czasu dyskretnego x(n) powstają w wyniku dyskretyzacji (spróbkowania)
w czasie sygnałów ciągłych, tzn. z sygnału ciągłego pobierane są wartości (próbki) tylko
w wybranych chwilach czasowych. Próbkowanie może być równomierne (równe odstępy
czasowe pomiędzy chwilami pobierania próbek) lub nierównomierne. W przypadku próbkowa-
nia równomiernego odstęp pomiędzy próbkami ∆t nazywa się okresem próbkowania, a jego
odwrotność 1/∆t − częstotliwością próbkowania fp. Zapis x(n) oznacza wartość sygnału n-tej
chwili czasowej, tzn. x(n) = x(n∆t). W zależności od kontekstu przez x(n) można także rozu-
mieć zbiór wszystkich próbek sygnału dyskretnego, czyli {x(n)}. Jak będzie później pokazane,
z sygnału spróbkowanego w czasie można odtworzyć sygnał ciągły, jeśli częstotliwość próbko-
wania jest odpowiednio dobrana w stosunku do widma częstotliwościowego dyskretyzowanego
sygnału (zgodnie z twierdzeniem Nyquista, znanym także jako twierdzenie Kotielnikowa- -
Shannona). Przykładem dwuwymiarowego sygnału ciągłego argumentu dyskretnego (poło-
żenia) jest obraz zapisany w analogowej pamięci kamery CCD.
Sygnały cyfrowe xk(n), czyli sygnały dyskretne czasu dyskretnego, to sygnały ciągłe czasu
dyskretnego x(n), w których dodatkowo dokonano kwantowania wartości sygnału, przykłado-
wo zaokrąglono wartości rzeczywiste do najbliższych liczb całkowitych. Sygnały cyfrowe
otrzymywane są z tzw. przetworników analogowo-cyfrowych (A/C), w których przeprowadza
się równocześnie dyskretyzację czasu i kwantowanie wartości sygnałów analogowych (ciąg-
łych). Po przetworniku AC sygnał przyjmuje tylko skończoną liczbę dokładnie określonych
wartości (każdy przedział wartości rzeczywistych otrzymuje swojego jednego reprezentanta).
Z kwantowaniem jest nierozerwalnie związane pojęcie kodowania, gdyż numer reprezentanta
dowolnego przedziału wartości można zapisać w różny sposób, na przykład w kodzie
dwójkowym pozycyjnym bez znaku lub ze znakiem, w kodzie uzupełnień do dwóch lub kodzie
dziesiętnym zapisywanym binarnie. Oczywiście, możliwe jest także zapamiętywanie nie nume-
ru, ale wartości reprezentanta, przykładowo jako liczby zmiennoprzecinkowej. Przykładem sy-
gnału cyfrowego jest sygnał muzyki (audio) zapisany na płycie CD.
W przypadku sygnałów deterministycznych dany jest „przepis” matematyczny na wartość, jaką
przyjmie sygnał w każdej chwili czasu (konkretna zależność matematyczna). W rzeczywistości
bardzo rzadko spotyka się sygnały w pełni deterministyczne. Zazwyczaj prawie zawsze
wybrane parametry funkcji sygnału, przykładowo amplituda lub faza sygnałów sinusoidalnych,
przyjmują wartości, które nie są jednoznacznie określone (zdeterminowane).
Dla sygnałów losowych (stochastycznych) nie jest znany „przepis” na wartość sygnału w każ-
dej chwili czasowej, tylko „przepis” na prawdopodobieństwo przyjęcia poszczególnych warto-
ści przez ten sygnał. Sygnały losowe dzielą się na sygnały stacjonarne i niestacjonarne,
4 Sygnały i ich parametry

Sygnały stacjonarne dzielą się dodatkowo na sygnały ergodyczne i nieergodyczne. Podstawą


opisu właściwości sygnałów losowych nie jest jeden sygnał (jedna realizacja procesu losowe-
go), lecz wiele sygnałów (nieskończony zbiór takich realizacji). Sygnały stacjonarne mają d l a
k a ż d e j c h w i l i c z a s o w e j takie same wartości podstawowych parametrów statystycznych
(typu średnia, wariancja) w zbiorze ich wielu realizacji, sygnały zaś niestacjonarne nie mają tej
właściwości. Dodatkowo dla stacjonarnych sygnałów ergodycznych podstawowe parametry
statystyczne typu średnia/wariancja dla jednej realizacji są takie same jak po zbiorze wielu
realizacji; wystarczy więc zarejestrować i analizować tylko jedną „realizację” sygnału, aby
wyciągnąć poprawne wnioski statystyczne.

Przykład. Na rysunku 1.2 są zaprezentowane przykładowe, charakterystyczne przebiegi czaso-


we sygnałów. Na rysunkach 1.2a−1.2d jest pokazany deterministyczny sygnał sinusoidalny,
odpowiednio sygnał ciągły czasu ciągłego, sygnał ciągły czasu dyskretnego (sygnał zdyskrety-
zowany „w czasie”), sygnał dyskretny czasu ciągłego (sygnał zdyskretyzowany „w wartoś-
ciach”, czyli skwantowany) oraz sygnał dyskretny czasu dyskretnego, czyli cyfrowy (równo-
cześnie zdyskretyzowany „w czasie” i „w wartościach”). Rysunek 1.2e przedstawia z kolei
sygnał losowy, a rysunek 1.2f − rzeczywisty sygnał mowy, odpowiadający sekwencji głosek
„sze”, który w swojej pierwszej części ma charakter „losowy”, a w drugiej − „zdeterminowa-
ny”.

Dalej przedstawiono skrótowo poszczególne rodzaje sygnałów.

1.3. Sygnały deterministyczne

1.3.1. Parametry

Jak już było powiedziane sygnały deterministyczne („zdeterminowane”) przyjmują w dowolnej


chwili czasowej wartości rzeczywiste, określone przez znane zależności matematyczne. Z sy-
gnałami tymi wiąże się wiele parametrów, które mają charakteryzować (różnicować) ich
właściwości. Definicje podstawowych parametrów sygnałów deterministycznych są podane
w tabeli 1-1. Wariancja sygnału jest miarą jego „rozrzutu” wokół wartości średniej. W zależ-
ności od wartości, przyjmowanych przez poszczególne parametry, sygnały te dzielą się na
odrębne klasy. Jednymi z najbardziej podstawowych są klasy sygnałów o ograniczonej energii
(0 < Ex < ∞) oraz o ograniczonej mocy średniej (0 < Px < ∞).
Na podstawie wartości różnych parametrów sygnałów można dokonywać ich automatycznego
rozpoznawania i klasyfikacji.
Momenty z tabeli 1-1 opisują specyficzne cechy sygnału, np. jego położenie względem środka
osi czasu, punkt skupienia w osi czasu oraz „szerokość” czasu trwania. Praktyczna interpreta-
cja poszczególnych momentów jest następująca:
τ 2x moment bezwładności, charakteryzujący „rozkład kształtu” sygnału wokół środka osi
czasu,
1
tx odcięta środka ciężkości sygnału, czyli punkt czasu, wokół którego sygnał jest skupiony,
t x2 średni kwadrat odciętej środka ciężkości sygnału,
t x2 promień bezwładności sygnału,
σ 2x wariancja sygnału wokół t x1 , czyli miara „rozrzutu” sygnału wokół jego środka ciężkości.
Sygnały i ich parametry 5

a) ciągły czasu ciągłego x(t) b) ciągły czasu dyskretnego x(n)


1 1

0,5 0,5

0 0

-0,5 -0,5

-1 -1
0 0,1 0,2 0,3 0,4 t 0 4 8 12 14 n
Czas [s] Numer próbki

c) dyskretny czasu ciągłego (skwantowany) xk(t) d) dyskretny czasu dyskretnego (cyfrowy) xk(n)
1 1

0,5 0,5

0 0

-0,5 -0,5

-1 -1
0 0,1 0,2 0,3 0,4 t 0 4 8 12 16 n
Czas [s] Numer próbki

e) losowy x(t) f) rzeczywisty x(t) (mowa)

0,2
0,5
0,1
0 0

-0,5 -0,1

-0,2
0 0,1 0,2 0,3 0,4 t 0 100 200 300 400 t
Czas [s] Czas [ms]

Rys. 1.2. Przykłady sygnałów: a) ciągły czasu ciągłego, b) ciągły czasu dyskretnego (zdyskretyzowany
„w czasie”), c) dyskretny czasu ciągłego (zdyskretyzowany „w wartościach”, skwantowany), d) dyskretny
czasu dyskretnego, czyli cyfrowy (zdyskretyzowany „w czasie” i „w wartościach”), e) losowy, f) rzeczywisty
(sygnał mowy: „sze”)

Jednak parametry t x1 , σ 2x nie są dobrymi miarami cech sygnałów, dla których całka ∫ x(t )dt
przyjmuje wartość równą lub bliską zeru, czyli np. dla sygnałów oscylacyjnych. Dla takich
sygnałów definiuje się inne parametry: odciętą środka ciężkości kwadratu sygnału, wariancję
kwadratu sygnału wokół tej odciętej i szerokość średniokwadratową jako pierwiastek z warian-
cji.
6 Sygnały i ich parametry

Tab. 1-1. Podstawowe parametry sygnałów ciągłych x(t) i dyskretnych x(n). Oznaczenia: t0 − dowolna
chwila czasowa, n0 − dowolny indeks czasu, [t1, t2], [n1, n2] − granice przedziałów
Parametr Sygnał ciągły x(t) Sygnał dyskretny x(n)
t2 n
1 1 2
Wartość średnia
sygnału w przedziale
x=
t 2 − t1 ∫ x(t )dt x= ∑
n2 − n1 + 1 n = n
x(n )
t1 1

+τ N
Wartość średnia całego 1 1
x = lim ∫ x (t )dt x = lim ∑
N →∞ 2 N + 1 n =− N
x(n )
sygnału τ→∞ 2τ τ
t0 +T n 0 + ( N −1)
Wartość średnia 1 1
sygnału okresowego xT =
T ∫ x(t )dt , T − okres xN =
N
∑ x(n) , N − okres
t0 n = n0

t0 + T 1 n+ N
1
Średnia bieżąca xt = ∫ x (τ )dτ , T − stała xn = ∑ x(k ) , N − stała
2 N + 1 k =n − N
2T t −T
+∞ ∞
Energia sygnału Ex = ∫ x (t )dt
2 Ex = ∑ x 2 (n)
−∞ n = −∞
t2 n
Moc średnia sygnału 1 1 2
Px (t1 , t2 ) = x 2 = Px (n1 , n2 ) = x 2 = ∑ x 2 (n)
∫ x (t )dt
2
w przedziale t2 − t1 n2 − n1 + 1 n = n
t1 1

τ N
Moc średnia całego 1 1
sygnału (wartość Px = x 2 = lim 2
∫ x (t )dt Px = x 2 = lim ∑ x 2 (n )
N →∞ 2 N + 1 n =− N
τ→∞ 2τ −τ
średniokwadratowa)
t0 +T n 0 + ( N −1)
Moc średnia sygnału 1 1
okresowego PxT =x =2
T ∫ x (t )dt , T − okres
2 PxN = x 2 =
N
∑ x 2 (n ) , N − okres
t0 n = n0

Wartość skuteczna Px Px
sygnału
Wariancja całego 1 τ 1 N
sygnału (wokół x ) σ2x = lim ∫ [ x (t ) − x ] dt
2
σ 2x = lim ∑ [ x (n) − x ] 2
τ→∞ 2τ −τ N →∞ 2 N + 1 n =− N
t n2
Wariancja sygnału w 1 2 1
σ2x = [ x(t ) − x ] 2 dt σ2x = ∑ [ x (n) − x ] 2
przedziale (wokół x ) t2 − t1 t∫ n2 − n1 + 1 n = n1
1

+∞ ∞
Momenty zwykłe
τm =
rzędu m, m = 1, 2, 3, ... x ∫ t x(t )dt
m k xm = ∑ n m x(n)
−∞ n = −∞
+∞ ∞
( ) ( n − k x1 )
m m
Momenty centralne
rzędu m, m = 1, 2, 3, ...
δmx = ∫ t − τx1 x (t ) dt δmx = ∑ x(n)
−∞ n =−∞
+∞ +∞ ∞ ∞
Unormowane momenty m
zwykłe rzędu m tx = ∫ t x(t )dt
m
∫ x(t )dt n xm = ∑ n m x(n ) ∑ x( n)
−∞ −∞ n = −∞ n = −∞
+∞ +∞ ∞ ∞
(t − tx1 ) ( n − n x1 )
m m
Unormowane momenty
centralne rzędu m
σmx = ∫ x (t )dt ∫
m
x (t )dt σ x = ∑ x(n) ∑ x(n )
−∞ −∞ n =−∞ n =−∞
Sygnały i ich parametry 7

Tab. 1-1. cd.

Odcięta środka +∞ +∞ ∞ ∞
ciężkości kwadratu t x12 = ∫ tx (t )dt
2
∫ x (t )dt
2 n x12 = ∑ nx 2 (n) ∑ x 2 (n)
sygnału −∞ −∞ n = −∞ n = −∞

+∞ +∞ ∞ ∞
( t − tx1 ) ( n − nx1 )
2 2
Wariancja kwadratu σ 2x 2 = x 2 (t )dt x 2 (t )dt σ2x 2 = ∑ x 2 (n ) ∑ x 2 (n)
∫ 2 ∫ 2

sygnału wokół t x12 −∞ −∞ n =−∞ n =−∞

Szerokość σ 2x 2 σ 2x 2
średniokwadratowa

1.3.2. Przykłady

W tabeli 1-2 zestawiono równania i przebiegi czasowe przykładowych ciągłych sygnałów de-
terministycznych x(t). Ich podstawowe parametry można znaleźć w literaturze (np. [Szab90]).
Równania sygnałów dyskretnych x(n) otrzymuje się podstawiając t = n⋅∆t, T = N⋅∆t, n = ...,
−2, −1, 0, 1, 2,..., gdzie ∆t oznacza okres próbkowania sygnałów ciągłych (czyli odwrotność
częstotliwości próbkowania), a T czas obserwacji. Kształcącym jest samodzielne wygenerowa-
nie przebiegów czasowych kilku sygnałów dyskretnych x(n).
Sygnały deterministyczne, w zależności od swoich właściwości i wartości parametrów, są dzie-
lone na następujące podklasy:
1) sygnały impulsowe o ograniczonej energii,
2) sygnały o nieskończonym czasie trwania i ograniczonej energii,
3) sygnały nieokresowe o ograniczonej mocy średniej,
4) sygnały okresowe,
5) sygnały prawie okresowe,
5) sygnały zmodulowane.
Sygnały okresowe to sygnały, dla których w dowolnej chwili czasu t prawdziwa jest zależność:
x(t) = x(t+kT), gdzie T jest okresem sygnału, a k − dowolną liczbą całkowitą. Wartości
przyjmowane przez sygnały okresowe powtarzają się co czas T. Najbardziej znanym sygnałem
okresowym jest przebieg sinusoidalny postaci x(t) = Asin(ωt+φ0) = Asin(2πft+φ0), gdzie A oz-
nacza amplitudę, ω − pulsację, f − częstotliwość sygnału wyrażoną w hercach, a φ0 − fazę
sygnału wyrażoną w radianach. Sygnał ten ma okres T = 1/f, gdyż dla takiej wartości T mamy:
sin(2πf(t+kT)) = sin(2πft+2πfkT) = sin(2πft+2πfk(1/f)) = sin(2πft+k2π) = sin(2πft). Moc średnia
sygnału sinusoidalnego jest równa A2/2, a wartość skuteczna − A/ 2 . Suma sygnałów
sinusoidalnych o różnych częstotliwościach jest także sygnałem okresowym, jeśli dla dowol-
nych dwóch częstotliwości f1 i f2 tej sumy można znaleźć takie dwie liczby naturalne m i n, że
nf1 = mf2. Sygnały okresowe można aproksymować („przybliżać”) za pomocą tzw. szeregu
Fouriera, czyli sumy sygnałów (ko)sinusoidalnych (harmonicznych) o odpowiednio dobranych
częstotliwościach. Zagadnieniu temu będzie poświęcony rozdział 2 i 3.
Sygnał dyskretny ma natomiast okres N (N>0), jeśli dla dowolnego n mamy x(n) = x(n+N) i N
jest najmniejszą liczbą, dla której zachodzi ta równość. Wbrew naszym intuicyjnym ocze-
kiwaniom nie każdy sinusoidalny sygnał ciągły jest po spróbkowaniu okresowy. Zależy to od
jego częstotliwości f0 i częstotliwości próbkowania fp = 1/∆t. Warunek powtarzania się sygnału
co N próbek ma bowiem następująca postać
sin[2πf0(n⋅∆t)] = sin[2πf0{(n+N)⋅∆t}] = sin[2πf0(n⋅∆t) + 2πf0(N⋅∆t)]
8 Sygnały i ich parametry

Tab. 1-2. Definicje wybranych ciągłych sygnałów deterministycznych


Równania i przebiegi czasowe przykładowych sygnałów impulsowych o ograniczonej energii

Impuls prostokątny x(t)


1
0 dla t > 0.5

x (t ) = Π (t ) = 0.5 dla t = 0.5
1 t
 dla t < 0.5
-0.5 0 0.5

Impuls trójkątny x(t)


1
 0 dla t > 1
x (t ) = Λ (t ) = 
1 − t dla t ≤ 1 t

-1 0 1

Impuls kosinusoidalny (ω0 = 2πf0, f0 = 1/T) x(t)


1
 t 
x (t ) = cos ω0t ⋅ Π  
 T /2 t

-T/4 0 T/4

Impuls wykładniczy x(t)


1
 t −T /2
x (t ) = e−αt Π   , α>0
 T 
t

0 T

i jest on spełniony, kiedy 2πf0(N⋅∆t) = k⋅2π, czyli dla f0 równego f0 = k/(N⋅∆t) (inaczej
f0 = fp⋅k/N), gdzie k jest dowolną liczbą naturalną. Jeśli k jest równe 1, okres sygnału jest rów-
ny N próbek.
Co ciekawe po spróbkowaniu ciągłe, okresowe sygnały sinusoidalne o częstotliwościach f0
i f0±kfp są nierozróżnialne, gdyż sin[2π(f0±kfp)(n⋅∆t)] = sin[2πf0(n⋅∆t)±2πkn] = sin[2πf0(n⋅∆t)],
czyli są one takimi samymi sekwencjami próbek. To samo dotyczy sygnałów kosinusoidalnych.
W analogiczny sposób można udowodnić następujące związki pomiędzy dyskretnymi
sygnałami (ko)sinusoidalnymi o częstotliwościach kfp+fx i kfp−fx: sin[2π(kfp+fx)(n⋅∆t)] =
= −sin[2π(kfp−fx)(n⋅∆t)] oraz cos[2π(kfp+ fx)(n⋅∆t)] = cos[2π(kfp− fx)(n⋅∆t)].

Sygnały prawie okresowe to sygnały będące sumą co najmniej dwóch sygnałów sinusoidal-
nych o częstotliwościach, których stosunek jest niewymierny, tzn. różny od stosunku dwóch
liczb naturalnych: f1/f2 = T2/T1 ≠ m/n. Z tego powodu sygnały te nie są okresowe (!), pomimo
tego, iż składają się z sygnałów okresowych. Nie istnieją bowiem takie liczby naturalne m i n,
dla których zachodzi nf1 = mf2 (mT1 = nT2). W związku z tym sinusoidy składowe nigdy nie
„spotkają się” w tej samej „fazie okresu”.
Sygnały i ich parametry 9

Tab. 1-2. cd.


Równania i przebiegi czasowe przykładowych sygnałów o nieskończonym czasie trwania
i ograniczonej energii

Wykładniczy malejący x(t)


A
 Ae − αt dla t ≥ 0
x(t ) =  , α>0
0 dla t < 0
t
0

Sinusoidalny malejący wykładniczo x(t)

 Ae − αt sin(ω0t ) dla t ≥ 0
x (t ) =  , α>0
 0 dla t < 0 t
0

2 π/ω 0

Sinc(t) x(t)
1
sin(ω0t ) /(ω0t ) dla t ≠ 0
Sinc( ω0t ) = 
 1 dla t = 0

miejsca zerowe dla t = kπ / ω0 , k = ..., −1, 0, 1,... t

−4π/ω −2π/ω 0 2π/ω0 4π/ω0

Gaussowski x(t)
1
−πt 2
x (t ) = e

Sygnały zmodulowane (patrz tabela 1-2) to sygnały harmoniczne postaci A(t)cos(ϕ(t)) =


= A(t)cos[ω0t+φ0+φ(t)] = A(t)cos[2πf0t+φ0+φ(t)], w których amplituda A i (lub) kąt ϕ charakte-
ryzują się określoną zmiennością w czasie. W przypadku modulacji amplitudy mamy
A(t) = A[1+kam(t)], gdzie ka oznacza głębokość modulacji (0<ka≤1), m(t) jest zaś funkcją
modulującą (|m(t)|≤1). Modulację kąta ϕ(t) dzieli się na modulację częstotliwości (wówczas
φ(t ) = k f ∫ m (t )dt ) i fazy (wtedy φ(t) = kφm(t)). Dla szczególnych postaci funkcji modulującej
m(t) otrzymujemy modulację liniową i sinusoidalną. Im większe są wartości parametrów ka, kf
i kφ, tym większa jest głębokość modulacji. Pulsację ω0, równą 2πf0 (gdzie f0 to częstotliwość
wyrażona w hercach), nazywa się pulsacją nośną. W sygnałach z modulacją kąta c h w i l o w a
w a r t o ś ć p u l s a c j i ( c z ę s t o t l i w o ś c i ) dana jest następującym wzorem:
dϕ(t ) 1 dϕ(t )
ω(t ) = , f (t ) = (1.1)
dt 2π dt
10 Sygnały i ich parametry

Tab. 1-2. cd.

Równania i przebiegi czasowe przykładowych sygnałów nieokresowych o ograniczonej mocy średniej

Skok jednostkowy x(t)

1 dla t ≥ 0 1
x(t ) = 1(t ) =  t
0 dla t < 0
0

Wykładniczy narastający x(t)


1
( )
x(t ) = 1 − e −αt 1(t ) , α > 0
t
0

Funkcja znaku sgn(t) x(t)


1
 1 dla t > 0
 t
sgn(t ) =  0 dla t = 0
− 1 dla t < 0 0

−1

Całka z Sinc(t): x(t)


t
Si(t ) = ∫ Sinc( τ)dτ t
0
0 2π/ω0

Dla modulacji fazy i częstotliwości odpowiednio otrzymujemy z niego (patrz tabela 1-2):
dm(t )
ωφ (t ) = ω0 + k φ , ω f (t ) = ω0 + k f m(t ) (1.2) (1.3)
dt

Jeśli zadajemy ωf(t), to wówczas znajdujemy kąt fazowy sygnału Acos(ϕ(t)) ze wzoru:

ϕ(t ) = ∫ d ϕ( t ) = ∫ ω f (t ) dt = ∫ [ω0 + k f m(t )] dt = ω0t + k f ∫ m(t ) dt + φ0

Przykład. Przykładowe przebiegi czasowe sygnałów deterministycznych. Na rysunku 1.3 po-


kazane są sygnały deterministyczne, będące modyfikacjami sygnałów sinusoidalnych. Kolejno
poziomo mamy (rysunki 1.3a do 1.3i):
• zwykły sygnał sinusoidalny x1(t) = sin(2π5t),
• sygnały okresowe będące sumą dwóch sygnałów sinusoidalnych:
x2(t) = sin(2π5t)+sin(2π10t) oraz x3(t) = sin(2π5t)+0,2sin(2π25t);
• sygnał prawie okresowy będący sumą dwóch sygnałów sinusoidalnych o niewymiernym
stosunku częstotliwości: x4(t) = sin(2π5t)+sin(2π(π)t);
• dwa sygnały sinusoidalne z modulacją amplitudy:
x5(t) = exp(−20(t−0,5)2)⋅sin(2π10t) oraz x6(t) = exp(−5t)⋅sin(2π20t);
Sygnały i ich parametry 11

Tab. 1-2. cd.

Równania i przebiegi czasowe przykładowych sygnałów okresowych

Sygnał sinusoidalny (ω0 = 2πf0, f0 = 1/T) x(t)


x (t ) = A sin(ω0t ) 1
t

T=2π/ω0

Fala prostokątna bipolarna x(t)


A
 A dla t ∈ ( kT , kT + τ ) t

x(t ) = − A dla t ∈ ( kT + τ, kT + T ) 0 τ T
 0 dla t = k ⋅ T , kT + τ −A

Fala prostokątna unipolarna x(t)


 A dla t ∈ ( kT − τ / 2, kT + τ / 2 ) A

x(t ) =  A / 2 dla t = kT ± τ / 2 t
 0 dla t pozostałych

−τ 0 τ T

Równania i przebiegi czasowe przykładowych sygnałów zmodulowanych

• Modulacja amplitudy x(t)

x (t ) = A[1 + ka ⋅ m(t )] ⋅ cos ( ω0t ) , 0 < ka ≤ 1


t
• Modulacja kąta (ogólnie)
x (t ) = A cos[ϕ(t )]

− modulacja fazy x(t)

x (t ) = A cos  ω0t + φ0 + kφ ⋅ m(t ) 


t
− modulacja częstotliwości

x (t ) = A cos  ω0t + φ0 + k f ⋅ ∫ m(t )dt 


-------------------------------------------------------------
x(t)
− liniowa modulacja fazy / częstotliwości

1 t
m(t ) = αt ; ∫ m(t )dt = 2αt
2

− sinusoidalna modulacja fazy / częstotliwości


1
m(t ) = cos(ωm t ) ; ∫ m(t )dt = ωm sin(ωm t )
12 Sygnały i ich parametry

1.2 2
0.8
1
0.4
a) 0 b) 0
-0.4
-1
-0.8
-1.2 -2
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas [s] Czas [s]

1.5 2
1
1
0.5
c) 0 d) 0
-0.5
-1
-1
-1.5 -2
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas [s] Czas [s]

1.2 1.2
0.8 0.8
0.4 0.4
e) 0 f) 0
-0.4 -0.4
-0.8 -0.8
-1.2 -1.2
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas [s] Czas [s]

1.2 1.2
0.8 0.8
0.4 0.4
g) 0 h) 0
-0.4 -0.4
-0.8 -0.8
-1.2 -1.2
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas [s] Czas [s]

1.2

0.8

i) 0.4

-0.4
-5 -4 -3 -2 -1 0 1 2 3 4 5
Czas [s]

Rys. 1.3. Przykłady sygnałów deterministycznych, będących zmodyfikowanymi sygnałami sinusoidalnymi:


a) sin(2π5t), b) sin(2π5t)+sin(2π10t), c) sin(2π5t)+0,2sin(2π25t), d) sin(2π5t)+sin(2π(π)t), e) exp(−20⋅
⋅(t−0,5)2)⋅sin(2π10t), f) exp(−5t)⋅sin(2π20t), g) sin(2π(0,5⋅20t2)), h) sin(2π(10t+10sin(2π2t)/(2π2))),
i) sin(2πt) / (2πt). UWAGA: b), c) − okresowa suma dwóch sinusoid, d) prawie okresowa suma dwóch
sinusoid, e), f) − modulacja amplitudy, g), h) − modulacja częstotliwości
Sygnały i ich parametry 13

1 1

0.5 0.5

0 0

-2 -1 0 1 2 -2 -1 0 1 2
Czas [s] Czas [s]

0.5 1
0.4 0.8
0.3 0.6
0.2 0.4
0.1
0.2
0
0
-0.1
-4 -3 -2 -1 0 1 2 3 4 -10 -8 -6 -4 -2 0 2 4 6 8 10
Czas [s] Czas [s]

1
1
0.5
0 0.5
-0.5
0
-1

0 2 4 6 8 10 0 2 4 6 8 10
Czas [s] Czas [s]

Rys. 1.4. Przykłady kilku deterministycznych sygnałów niesinusoidalnych: impulsy (prostokątny, trójkątny,
gaussowski exp( −0,5t 2 ) / 2π i eksponencjalny jednostronny exp( −t ) , t ≥ 0 oraz fale (bipolarna prostokątna
oraz unipolarna trójkątna)

• dwa sygnały sinusoidalne z modulacją częstotliwości:


x7(t) = sin(2π(0,5⋅20t2)) oraz x8(t) = sin(2π(10t+10sin(2π2t)/( 2π2)));
• sygnał impulsowy o ograniczonej energii typu sin(x)/x: x9(t) = sin(2πt)/ (2πt).
Z kolei na rysunku 1.4 przedstawione są przykłady kilku deterministycznych sygnałów nie-
sinusoidalnych: impulsy (prostokątny, trójkątny, gaussowski exp( −0,5t 2 ) / 2π i eksponencjal-
ny jednostronny exp( −t ) , t≥0) oraz fale (bipolarna prostokątna oraz unipolarna trójkątna).

1.3.3. Sygnały zespolone


Sygnały deterministyczne (choć nie tylko one) mogą także przyjmować wartości zespolone
i mieć następującą postać:
z (t ) = x r (t ) + jxu (t ) (1.4)

gdzie j = − 1 . Dla sygnałów takich parametry definiowane są inaczej niż w tabeli 1-1. Na
przykład energia i moc średnia dane są następującymi wzorami:
∞ t t0 +T
2 1 2 2 1 2
Ex = ∫ x ( t ) dt , Px = ∫
t2 − t1 t
x (t ) dt , Px =
T
∫ x(t ) dt (1.5)
−∞ 1 t0
14 Sygnały i ich parametry

Najbardziej znanymi zdeterminowanymi sygnałami zespolonymi są:


• zespolony przebieg wykładniczy:
z ( t ) = e jωt = cos(ωt ) + j sin(ωt ) (1.6)
• tzw. sygnał analityczny:
1 ∞ 1
z (t ) = xr ( t ) + jxu ( t ), xu (t ) = ∫
π −∞
xr ( τ)
t−τ
dτ (1.7)

gdzie xu(t) jest transformatą Hilberta sygnału xr(t).

1.3.4. Rozkład sygnałów na składowe


Sygnały deterministyczne można rozkładać na następujące składowe:
• rzeczywistą i urojoną:
1 1
xr (t ) = Re ( z (t ) ) = z ( t ) + z* ( t )  , xu (t ) = Im ( z (t ) ) = z (t ) − z * (t )  (1.8)
2  2 

• stałą (wartość średnia x ) i zmienną ( ~


x (t ) = x (t ) − x ),
• parzystą i nieparzystą:
1 1
x p (t ) = [x(t ) + x ( −t )] , xn (t ) = [x(t ) − x( −t )] (1.9)
2 2

Przykład. Na rysunku 1.5 przedstawiono rozkład sygnału x (t ) = e −t ⋅ 1(t ) na składową parzystą


xp(t) i nieparzystą xn(t).

a) sygnał b) składowa parzysta c) składowa nieparzysta


1 1 1
0.5 0.5 0.5
0 0 0
-0.5 -0.5 -0.5
-6 -4 -2 0 2 4 6 -6 -4 -2 0 2 4 6 -6 -4 -2 0 2 4 6
Czas [s] Czas [s] Czas [s]

Rys. 1.5. Rozkład sygnału x(t) = exp(−t) (a) na składową parzystą xp(t) (b) i nieparzystą xn(t) (c)

1.3.5. Funkcja korelacji własnej i wzajemnej

Obecnie, chwilowo, zawęzimy nasze rozważania do klasy s y g n a ł ó w o o g r a n i c z o n e j


e n e r g i i . Funkcja korelacji wzajemnej pomiędzy determistycznymi sygnałami x(t) i y(t) zde-
finiowana jest w tej klasie jako:
+∞
Rxy ( τ) = ∫ x (t ) y * (t − τ) dt (1.10)
−∞

funkcja zaś korelacji własnej sygnału x(t) dana jest wzorem:


Sygnały i ich parametry 15

+∞
Rxx ( τ) = Rx ( τ) = ∫ x ( t ) x* (t − τ) dt (1.11)
−∞

Jak się później przekonamy Rxy(τ) to iloczyn skalarny dwóch sygnałów w funkcji przesunięcia
jednego z nich. W funkcji korelacji drugi sygnał opóźnia się w stosunku do pierwszego o czas
τ, następnie oba sygnały wymnaża się przez siebie i całkuje ich iloczyn. W ten sposób dla
każdego τ otrzymuje się liczbę, mówiącą na ile opóźniony drugi sygnał jest podobny do syg-
nału pierwszego (skorelowany z nim). Funkcja korelacji Rxx(τ) jest wykorzystywana do badania
„powtarzalności” (okresowości) sygnału, ponieważ przyjmuje ona wartości maksymalne dla
wartości przesunięcia τ równego wielokrotności okresu sygnału (wówczas bowiem mnożone są
przez siebie wartości dodatnie sygnałów x(t) i x*(t−τ) oraz wartości ujemne tych sygnałów,
dlatego iloczyn x(t)x*(t−τ) ma zawsze wartość dodatnią, a całka z niego − wartość maksy-
malną; w innym przypadku dla jakiegoś t iloczyn x(t)x*(t−τ) może być ujemny i wartość całki
z tego iloczynu po czasie jest mniejsza). Przykładowo funkcja Rxx(τ) jest stosowana do wyzna-
czania okresu głosek dźwięcznych sygnału mowy (patrz rozdział 21). Z kolei funkcja korelacji
wzajemnej Rxy(τ) może być stosowana do detekcji odbić w sygnale odebranym w echogra-
fii impulsowej. Wówczas impulsowy sygnał wysłany jest korelowany (przesuwany w czasie
i wymnażany) z sygnałem odebranym, w którym występują „kopie” sygnału oryginalnego
(nadanego), odbite od różnych obiektów. Maksima funkcji korelacji informują nas o obecności
i położeniu impulsów odbitych, czas opóźnienia zaś tych impulsów w stosunku do impulsu
wysłanego − o drodze przebytej przez sygnał, czyli o odległości obiektu od nadajnika.
Funkcja R(τ) ma następujące właściwości:
W1. Rxy ( τ) = R*yx ( − τ) , Rxx ( τ) = R*xx ( − τ) (symetria) (1.12a)
+∞
2
W2. Rxx ( τ) ≤ Rxx (0) , Rxx (0) = ∫ x (t ) dt (wartość maksymalna) (1.12b)
−∞

+∞  +∞   +∞ 
W3. ∫ Rxy ( τ)d τ =  ∫ x (t ) dt   ∫ y* (t ) dt  (1.12c)
  
−∞  −∞   −∞ 
Funkcja korelacji sygnałów z odjętymi wartościami średnimi (patrz tabela 1-1) nosi nazwę
funkcji kowariancji (własnej lub wzajemnej).
Dla innych klas sygnałów przyjmuje się inne definicje funkcji korelacji. Przykładowo dla
s y g n a ł ó w o k r e s o w y c h funkcję tę definiuje się w sposób następujący:
T T
1 1
Rxy ( τ) = ∫
T 0
x (t ) y * (t − τ)dt , Rxx ( τ) = ∫ x (t ) x * (t − τ)dt
T 0
(1.13)

dla klasy zaś s y g n a ł ó w o o g r a n i c z o n e j m o c y ś r e d n i e j jako


T T
1 1
∫ x(t ) y (t − τ)dt, Rxx (τ) = lim ∫ x(t ) x
* *
R xy ( τ) = lim (t − τ)dt (1.14)
T → ∞ 2T T → ∞ 2T
−T −T

Dla sygnałów dyskretnych o ograniczonej energii definicja funkcji korelacji własnej i wza-
jemnej jest następująca:
16 Sygnały i ich parametry

∞ ∞
Rxy ( k ) = ∑ x(n ) y* (n − k ), Rxx ( k ) = Rx ( k ) = ∑ x( n) x* (n − k ) (1.15)
n = −∞ n = −∞

Natomiast dla sygnałów okresowych o okresie N mamy:


N −1 N −1
1 1
Rxy ( k ) =
N
∑ x(n ) y* (n − k ), Rxx (k ) = Rx (k ) = N
∑ x( n) x* (n − k ) (1.16)
n =0 n =0

Własności (1.12a) − (1.12c) są także prawdziwe dla funkcji korelacji sygnałów dyskretnych.
Ponieważ w praktyce nie dysponuje się nieskończoną ilością próbek sygnału, wartości funkcji
(1.15) estymuje się (przybliża) na podstawie dostępnych N danych za pomocą jednej z nastę-
pujących zależności (−N+1 ≤ k ≤ N−1):
N −1− |k |
Rxy (k ) = ∑ x (n) y * (n − k ) (1.17)
n =0
N −1− |k |
1
Rxy (k ) =
N−|k |
∑ x( n) y * ( n − k ) (1.18)
n =0
N −1− |k |
1
Rxy (k ) =
N
∑ x (n) y * (n − k ) (1.19)
n =0

W zależności od wartości przesunięcia k liczba sumowanych, niezerowych elementów jest


różna, ponieważ analizujemy sygnały o skończonej długości. Wraz ze wzrostem |k| liczba
dodawanych składników jest coraz mniejsza, maleje więc także wartość Rxy(k), dana wzorem
(1.17). Dlatego wprowadza się normowanie tej wartości przez aktualną liczbę składników
występujących w sumie (1.18). Możliwe jest także dzielenie funkcji (1.17) przez długość
korelowanych sygnałów i otrzymanie (1.19). Korelację liczoną z wzoru (1.17) nazywa się
nieunormowaną, te wyznaczane zaś ze wzorów (1.18) i (1.19) − unormowanymi. Estymator
funkcji korelacji (1.18) jest nieobciążony, a estymator (1.19) − obciążony. Dalsze szczegóły
dotyczące tych estymatorów przedstawiono w kolejnym podrozdziale, poświęconym sygnałom
losowym.
Z definicji funkcji autokorelacji wynika, że funkcja ta dla sumy kilku sygnałów sinusoidalnych
o różnych częstotliwościach fk i dowolnych fazach φk:
M M  f 
x (t ) = ∑ Ak sin(2πf k t + φk ) , x (n) = ∑ Ak sin 2π f k n + φk 

(1.20a)
k =1 k =1  pr 
jest równa (wyprowadzenie pozostawiamy Czytelnikowi jako „zadanie domowe”)
M
Ak2 M
A2  f 
R ( τ) = ∑ cos(2 πf k τ) , R( m) = ∑ k cos 2π k m  (1.20b)
 f pr 
k =1 2 k =1 2 
Przykład. Na rysunkach 1.6a − 1.6d są przedstawione następujące sygnały sinusoidalne
x1(t) = sin(2π5t) i x2(t) = sin(2π5t)+0,5sin(2π10t)+0,25sin(2π30t) oraz ich funkcje autokorela-
cji Rx(τ), wyliczone ze wzoru (1.19) po uprzedniej dyskretyzacji sygnałów (∆t = 1 ms) i uw-
zględnieniu tylko jego N = 1000 próbek. Jak widać funkcje te są symetryczne względem
punktu τ = 0 oraz okresowe. W prosty sposób można z nich „odczytać” wartość okresu anali-
zowanych sygnałów. Ponieważ funkcje te wyznaczono na podstawie skończonej liczby próbek
Sygnały i ich parametry 17

a) sygnał x1(t) b) sygnał x2(t)


1.2 2
0.8
1
0.4
0 0
-0.4
-1
-0.8
-1.2 -2
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas t [s] Czas t [s]

c) funkcja autokorelacji Rx1(τ) d) funkcja autokorelacji Rx2(τ)


0.5 1

0.5

0 0

-0.5

-0.5 -1
-0.8 -0.4 0 0.4 0.8 -0.8 -0.4 0 0.4 0.8
Przesunięcie τ [s] Przesunięcie τ [s]

e) widmo Fouriera 2|X1(f)| f) widmo Fouriera 2|X2(f)|


1 1
0.8 0.8
0.6 0.6
0.4 0.4
0.2 0.2
0 0
0 10 20 30 40 50 0 10 20 30 40 50
Częstotliwość f [Hz] Częstotliwość f [Hz]
Rys. 1.6. Przykład analizy sygnałów deterministycznych: a), b) sygnały x1(t)= sin(2π5t) i x2(t)= sin(2π5t)+
+0,5sin(2π10t)+0,25sin(2π30t), c), d) ich funkcje autokorelacji Rxx(τ) (1.18) oraz e), f) moduły |.| częstotli-
wościowych widm amplitudowych Fouriera 2X(f) (1.27b)

sygnału xi(n), dla dużych wartości przesunięcia k (dużych wartości parametru τ = k⋅∆t) liczba
sumowanych iloczynów xi(n)xi*(n−k) jest we wzorze (1.19) coraz mniejsza i dokładność
estymaty funkcji autokorelacji maleje.

1.3.6. Splot sygnałów

Splotem dwóch funkcji x(t) i h(t) nazywamy funkcję y(t) zdefiniowaną następująco:
+∞ +∞
y (t ) = ∫ x(τ)h(t − τ)dτ = ∫ h(τ) x(t − τ)dτ (1.21a)
−∞ −∞
18 Sygnały i ich parametry

y ( t ) = x (t ) ⊗ h ( t ) = h ( t ) ⊗ x ( t ) (1.21b)
Splot opisuje operację filtracji jednego sygnału przez drugi (np. x(t) to sygnał filtrowany, a h(t)
− sygnał filtrujący). Kolejność operacji podczas splotu jest następująca: 1) odwróć w czasie
drugi z sygnałów ze względu na τ: h(τ) → h(−τ), 2) przesuń go w czasie o czas t: h(−τ)
→ h(t−τ), 3) wymnóż pierwszy sygnał ze zmodyfikowanym drugim: x(t)h(t−τ), 4) scałkuj
wynik mnożenia. Odpowiednio dla sygnałów dyskretnych otrzymujemy:
∞ ∞
y(n) = ∑ x( k )h(n − k ) = ∑ h( k ) x (n − k ) (1.22a)
k = −∞ k = −∞
y ( n ) = x( n ) ⊗ h (n ) = h(n ) ⊗ x(n ) (1.22b)
Obliczanie splotu dyskretnego (filtracji cyfrowej) przebiega w ten sam sposób jak splotu cią-
głego (tzn. odwróć drugi z sygnałów ze względu na k, przesuń go o n próbek, wymnóż z pier-
wszym sygnałem oraz zsumuj wszystkie iloczyny próbek).
Na rysunkach 1.7 i 1.8 przedstawiono graficzną ilustrację opisanej powyżej operacji splotu
ciągłego i dyskretnego w przypadku dwóch identycznych sygnałów prostokątnych x(t) = h(t)
oraz x(n) = h(n).
Równania splotu (1.21), (1.22) mają fundamentalne znaczenie w teorii przetwarzania układów
analogowych i cyfrowych, ponieważ opisują „mechanizm” filtracji sygnałów. Jeden z sygna-
łów jest bowiem sygnałem „filtrowanym” (x(t) lub x(k)), drugi zaś − sygnałem „filtrującym”
(h(t) lub h(k)). Sygnał „filtrujący” jest zazwyczaj odpowiedzią impulsową układu (filtra)
analogowego lub cyfrowego przez który przechodzi sygnał, przykładowo kanału transmisyjne-
go. W wyniku filtracji z sygnału x(t) lub x(k) są „usuwane” („redukowane”) jego wybrane
składowe częstotliwościowe. Na rysunku 1.9 jest przedstawiona operacja filtracji sygnału
x(t) = sin(2πf1t)+0,5sin(2πf2t) za pomocą sygnału h(t) = sin(2πf1t)⋅exp(−4t)/0,1249 dla f1=2 Hz
i f2=8 Hz. Jak widać w jej wyniku z sygnału x(t) „wyeliminowano” składową 0,5sin(2πf2t),
gdyż w sygnale y(t) po zaniku stanu przejściowego dominuje składowa sin(2πf1t). Zdolność
splotu do realizacji filtracji częstotliwościowej jest związana z fundamentalną właściwością
transformacji Fouriera, mówiącą, że jeśli sygnały x(t), y(t) i h(t) (x(n), y(n) i h(n)) związane są
zależnością (1.21) (lub (1.22)), to ich częstotliwościowe, zespolone widma Fouriera X(f), Y(f)
i H(f) wiąże następujący wzór:
Y ( f ) = X ( f ) H ( f ) = X ( f )  H ( f ) e j)H ( f )  (1.23)

Co z niego wynika? Bardzo wiele. Zerowa wartość widma H(f0) dla częstotliwości f0 powo-
duje, że widmo Y(f0) także przyjmuje wartość zerową dla f0, czyli w sygnale wyjściowym y(t)
(y(n)) nie ma składowej o tej częstotliwości, niezależnie od tego czy była ona obecna w sy-
gnale x(t) (x(n)) i jego widmie X(f). W równaniu (1.23) „ H ( f ) ” i „ )H ( f ) ” oznaczają moduł
i kąt liczby zespolonej H(f). Dla x (t ) = e j 2 π f t wynikiem splotu jest y (t ) =| H ( f ) | e j (2 π f t + )H ( f )) ,
czyli sygnał oryginalny x(t) zmodyfikowany w amplitudzie przez H ( f ) oraz w fazie przez
)H ( f ) .
Magia filtracji zaprezentowanej na rysunku 1.9 jest „odczarowana” na rysunku 1.10, przedsta-
wiającym moduły widm sygnałów X(f), H(f) i Y(f) w rozpatrywanym przypadku. Aby „posta-
wić kropkę nad i” konieczne jest zdefiniowanie transformacji Fouriera i związanych z nią
widm częstotliwościowych sygnałów.
1.5 1.5 1.5 1.5 1.5
x(τ) x(τ) x(τ) x(τ) x(τ)
1 1 1 1 1
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
τ [s] τ [s] τ [s] τ [s] τ [s]
-0.5 -0.5 -0.5 -0.5 -0.5
-2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3

1.5 1.5 1.5 1.5 1.5


h(-τ) h(τ) h(0.5-τ) h(1-τ) h(2-τ) h(3-τ)
1 1 1 1 1
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
τ [s] τ [s] τ [s] τ [s] τ [s]
-0.5 -0.5 -0.5 -0.5 -0.5
-2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3

1.5 1.5 1.5 1.5 1.5


y0(t) y0.5(t) y1(t) y2(t) y3(t)
1 1 1 1 1
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
t [s] t [s] t [s] t [s] t [s]
-0.5 -0.5 -0.5 -0.5 -0.5
-2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3

Rys. 1.7. Ilustracja graficzna splotu dwóch identycznych ciągłych impulsów prostokątnych x(τ) i h(τ). W pierwszym rzędzie − sygnał x(τ), w drugim rzędzie −
kolejne przesunięcia odwróconego w czasie sygnału h(t0−τ) (t0 = 0; 0,5; 1; 2; 3 sekundy), w trzecim rzędzie − wynik splotu yt0(t) dla t zmieniającego się od 0 do t0
(t0 = 0; 0,5; 1; 2; 3 sekundy)
1.5 1.5 1.5 1.5 1.5
x(k) x(k) x(k) x(k) x(k)
1 1 1 1 1
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
k k k k k
-0.5 -0.5 -0.5 -0.5 -0.5
-8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12

1.5 1.5 1.5 1.5 1.5


h(-k) h(k) h(2-k) h(4-k) h(8-k) h(12-k)
1 1 1 1 1
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
k k k k k
-0.5 -0.5 -0.5 -0.5 -0.5
-8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12

6 6 6 6 6
y0(n) y2(n) y4(n) y8(n) y12(n)
4 4 4 4 4
2 2 2 2 2
0 0 0 0 0
n n n n n
-2 -2 -2 -2 -2
-8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12 -8 -4 0 4 8 12

Rys. 1.8. Ilustracja graficzna splotu dwóch identycznych dyskretnych impulsów prostokątnych x(k) i h(k). W pierwszym rzędzie − sygnał x(k), w drugim rzędzie −
kolejne przesunięcia odwróconego w czasie sygnału h(n0−k) (n0 = 0, 2, 4, 8, 12 próbek), w trzecim rzędzie − wynik splotu yn0 (n) dla n zmieniającego się od 0 do n0
(n0 = 0, 2, 4, 8, 12 próbek; aktualnie wyznaczana próbka jest zaznaczona czarnym kolorem)
1.5 x(τ) 1.5 x(τ) 1.5 x(τ) 1.5 x(τ) 1.5 x(τ)
1 1 1 1 1
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
-0.5 -0.5 -0.5 -0.5 -0.5
-1 -1 -1 -1 -1
-1.5 -1.5 -1.5 -1.5 -1.5
-2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3

6 h(-τ) h(τ) 6 h(0.5-τ) 6 h(1-τ) 6 h(2-τ) 6 h(3-τ)


4 4 4 4 4
2 2 2 2 2
0 0 0 τ [s] 0 0
τ [s] τ [s] τ [s]
-2 -2 -2 -2 -2
-2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3

1.5 y0(t) 1.5 y (t) 1.5 y (t) 1.5 y (t) 1.5 y (t)
1 1 0.5 1 1 1 2 1 3
0.5 0.5 0.5 0.5 0.5
0 0 0 0 0
-0.5 -0.5 -0.5 -0.5 -0.5
-1 -1 t [s] -1 t [s] -1 t [s] -1 t [s]
-1.5 t [s] -1.5 -1.5 -1.5 -1.5
-2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3 -2 -1 0 1 2 3

Rys. 1.9. Ilustracja graficzna splotu sygnału x(τ) z odpowiedzią impulsową filtra h(τ). W pierwszym rzędzie − sygnał filtrowany (wejściowy) x(τ), w drugim rzędzie
− kolejne przesunięcia odwróconej w czasie odpowiedzi impulsowej filtra, czyli h(t0−τ) (t0 = 0; 0,5; 1; 2; 3 sekundy), w trzecim rzędzie − sygnał po filtracji
(wyjściowy) yt0 (t) dla t zmieniającego się od 0 do t0 (t0 = 0; 0,5; 1; 2; 3 sekundy)
22 Sygnały i ich parametry

1 1
|H(f)| |Y(f)|
0.8 |X(f)| 0.8
0.6 0.6
0.4 0.4
0.2 0.2
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Częstotliwość f [Hz] Częstotliwość f [Hz]
Rys. 1.10. Spróbkowane w częstotliwości moduły widm Fouriera sygnałów z rysunku 1.9: |X(f)| sygnału
wejściowego x(t) i |H(f)| odpowiedzi impulsowej h(t) (po lewej) oraz |Y(f)| sygnału wyjściowego y(t) (po
prawej)

1.3.7. Transformacja Fouriera

Transformacja Fouriera jest podstawowym narzędziem analizy częstotliwościowej sygnałów


i będzie szczegółowo omawiana w następnych rozdziałach. Pomimo tego poświęcimy jej obec-
nie trochę miejsca, mając na uwadze kompletność prowadzonych w tym miejscu rozważań,
dotyczących klasycznych metod opisu i analizy sygnałów.
Prosta i odwrotna transformacja Fouriera są zdefiniowane następującą parą równań (milcząco
obecnie zakładamy istnienie poniższych całek dla transformowanego sygnału):
∞ ∞
X( f ) = ∫ x (t )e − j 2 π f t dt , x(t ) = ∫ X ( f )e
j 2π f t
df (1.24a, b)
−∞ −∞

X(f ) jest zespolonym widmem Fouriera sygnału x(t) i zawiera informację o jego „zawartości”
częstotliwościowej (f − częstotliwość w hercach). Wartość X(f) informuje nas o tym „ile” jest
w sygnale zespolonej składowej harmonicznej ej2πft = cos(2πft)+jsin(2πft) o konkretnej często-
tliwości f (j = −1 ). Widmo Fouriera powstaje w wyniku wymnażania analizowanego sygnału
z sygnałami harmonicznymi postaci e−j2πft = cos(2πft)−jsin(2πft), czyli sprzężonymi do ej2πft,
i scałkowania tego iloczynu. Można interpretować tę operację jako wyznaczanie miary kore-
lacji (podobieństwa) sygnału do poszczególnych funkcji harmonicznych. Ponieważ funkcje te
są zespolone, widmo Fouriera X(f) jest także zespolone. Ma więc ono część rzeczywistą
Re(X(f)) i urojoną Im(X(f)) oraz moduł | X(f)| i fazę (kąt) ) X(f):

X ( f ) = Re ( X ( f ) ) + j Im ( X ( f ) ) = X ( f ) e j )X ( f ) (1.25a)

Im( X ( f )
X( f ) = ( Re( X ( f ) )2 + ( Im( X ( f ) )2 , )X ( f ) = arctg (1.25b)
Re( X ( f )

W wyniku prostej transformacji Fouriera dokonujemy dekompozycji (rozłożenia) sygnału na


jego składowe o różnych częstotliwościach. Naturalnym więc jest, że z widma Fouriera syg-
nału można zsyntezować oryginalny sygnał za pomocą odwrotnej transformacji Fouriera − na-
leży wówczas zsumować (scałkować) wszystkie sygnały harmoniczne ej2πft wzięte z wyzna-
czonymi wcześniej „wagami” X(f) (1.24b).
Sygnały okresowe o okresie T przedstawia się za pomocą szeregu Fouriera:
Sygnały i ich parametry 23

1T − j 2 π ( kf 0 ) t

X ( kf 0 ) = ∫ x (t )e dt , x (t ) = ∑ X ( kf 0 )e j 2 π( kf0 )t (1.26)
T0 k =−∞

ponieważ w tym przypadku w analizowanym sygnale występuje wyłącznie podstawowa


składowa harmoniczna o częstotliwości f0 = 1/T oraz jej wielokrotności.
Dla sygnałów dyskretnych x(n) para transformacji Fouriera (1.24) przyjmuje następującą
postać (−fpr/2 < f ≤ fpr/2):
+∞ + f pr / 2
− j 2 π ( f / f pr ) n 1 j 2 π ( f / f pr ) n
X(f )= ∑ x ( n ∆t ) e , x ( n ∆t ) = ∫ X ( f )e df (1.27a)
n =−∞ f pr − f pr / 2

Sygnał x(n) (lub x(n∆t)) powstaje w wyniku pobierania „próbek” z sygnału x(t) odległych
o czas ∆t = 1/fpr, gdzie fpr oznacza częstotliwość próbkowania, wyrażoną w hercach. Zgodnie
z twierdzeniem o próbkowaniu częstotliwość próbkowania musi być co najmniej dwa razy
większa niż maksymalna częstotliwość sygnału. Z powodu okresowości funkcji e−j2π(f / fpr)n ze
względu na częstotliwość f:
 f + kf pr   f   f 
exp  − j 2π n  = exp  − j 2π n  exp ( − j 2 πkn ) = exp  − j 2π n
 f pr   f pr   f pr 
   
widmo X(f ) sygnału dyskretnego jest także okresowe i powtarza się co częstotliwość próbko-
wania fpr, czyli wystarczy je wyznaczyć dla wartości f z przedziału [0, fpr) lub (−fpr/2, fpr/2].
Ponieważ dodatkowo funkcje dla częstotliwości ujemnych są równe sprzężeniu zespolonemu
funkcji dla częstotliwości dodatnich

( )
*
e − j 2 π (− f )t = e− j 2 πft

można wyznaczyć X(f) tylko dla częstotliwości z przedziału [0, fpr/2] i skorzystać z zależności
X(−f) = X*(f) (symetria części rzeczywistej i asymetria części urojonej widma względem czę-
stotliwości f = 0).
Natomiast wzory na szereg Fouriera (1.26) dla sygnałów dyskretnych x(n) mają następującą
postać (0 ≤ k ≤ N−1):
1 N −1 N −1
X (kf 0 ) =
N
∑ x ( n ∆t ) e − j 2 π ( k / N ) n , x ( n ∆t ) = ∑ X ( kf 0 ) e j 2 π( k / N ) n (1.27b)
n =0 k =0

gdzie k jest indeksem częstotliwości, n − indeksem czasu, a f0 = 1/T = 1/(N ∆t) = fpr/N (∆t
oznacza odległość czasową pomiędzy próbkami sygnału dyskretnego, która jest równa odwrot-
ności częstotliwości próbkowania tego sygnału). W tym przypadku wystarczy wyznaczyć
współczynniki szeregu dla 0 ≤ k ≤ N/2 a pozostałe znaleźć z zależności X(N/2+k) = X*( N/2−k).

Przykład. Na rysunkach 1.6e i 1.6f pokazane są przeskalowane, częstotliwościowe widma


Fouriera 2|X(f)| sygnałów sinusoidalnych z rysunków 1.6a i 1.6b, które wyliczono ze wzoru
(1.27b), po uprzedniej dyskretyzacji obu sygnałów z krokiem ∆t = 1 ms i przyjęciu N = 1000.
W tym przypadku f0 = 1/(N ∆t) = 1 Hz, w związku z czym obserwujemy w widmie „prążki” dla
k = 5; 10; 30 i mają one amplitudę 1; 0,5 i 0,25.
24 Sygnały i ich parametry

1.4. Sygnały losowe


Jak już było powiedziane w podrozdziale 1.2, dla sygnałów losowych (stochastycznych) x(t)
nie istnieje „przepis” matematyczny na wartości przyjmowane w kolejnych chwilach cza-
sowych, tylko „przepis” na prawdopodobieństwo przyjęcia przez sygnał określonej wartości.
W teorii sygnałów losowych stosuje się pojęcia procesu (sygnału) losowego, jego konkretnych
realizacji czasowych oraz związanych z nimi zmiennych losowych. Po swoim wystąpieniu
konkretne realizacje czasowe procesu losowego są już sygnałami zdeterminowanymi. Ponie-
waż kluczowe jest tutaj pojęcie zmiennej losowej, od niego zaczniemy.

1.4.1. Zmienne losowe

Zmienna losowa x to zmienna przyjmująca wartości w sposób losowy (stochastyczny), ale


zgodnie ze z góry określonym prawdopodobieństwem. Dystrybuantą F(x0) zmiennej losowej
x jest nazywane prawdopodobieństwo przyjęcia przez nią wartości x mniejszej lub równej od
x0, tzn.
F ( x0 ) = Pr[ x ≤ x0 ] (1.28)
Kiedy x0 → −∞, wówczas F(x0) → 0, a dla x0 → ∞ mamy F(x0) → 1. Jeżeli x0 przybiera
wartości ciągłe, to równoważnym do dystrybuanty opisem zmiennej losowej x jest jej funkcja
gęstości prawdopodobieństwa, definiowana jako pochodna dystrybuanty:
∂ F ( x0 )
p ( x0 ) = (1.29)
∂ x0

Określa ona, jakie jest prawdopodobieństwo przyjęcia przez zmienną losową x wartości x0. Po-
nieważ zmienna losowa musi przyjąć jakąś wartość, prawdopodobieństwo przyjęcia dowolnej
wartości jest równe jedności:

∫ p( x0 )dx0 = 1 (1.30)
−∞

Z definicji funkcji gęstości prawdopodobieństwa wynika, że:


x0
F ( x0 ) = ∫ p ( ζ ) dζ (1.31)
−∞

Dla zmiennych losowych przyjmujących wartości dyskretne definiuje się masę prawdopodo-
bieństwa:
p ( xk ) = Pr[ x = xk ] , ∑ p ( xk ) = 1 (1.32)
k

Wartość oczekiwana zmiennej losowej x, przyjmującej wartości w zbiorze c i ą g ł y m , jest


określona zależnością:
+∞
x = E[ x ] = ∫ x0 p( x0 ) dx0 (1.33)
−∞

i jest to wartość, która jest przyjmowana przez zmienną losową z największym prawdopodo-
Sygnały i ich parametry 25

bieństwem (najbardziej „prawdopodobna”). Natomiast dla sygnałów o wartościach d y s k r e t -


n y c h mamy:

x = E [ x ] = ∑ xk p ( xk ) (1.34)
k

Z kolei wartości średniokwadratowe i wariancja σx2 zmiennej losowej x zdefiniowane są na-


stępująco:
+∞
E[ x 2 ] = ∫ x0 p( x0 ) dx0 ,
2
E[ x 2 ] = ∑ xk2 p( xk ) (1.35)
−∞ k

σ 2x = E [( x − x ) 2 ] = E[ x 2 ] − x 2 (1.36)

Funkcja korelacji wzajemnej dwóch zmiennych losowych x i y jest zdefiniowana jako:


+∞ +∞
R xy = E[ x y ] = ∫ ∫ xy p( xy ) dx dy (1.37)
−∞ −∞

gdzie p(xy) jest gęstością prawdopodobieństwa przyjęcia przez iloczyn tych zmiennych
wartości xy, a d(xy) = dxdy jest różniczką tego iloczynu. Dwie niezależne zmienne losowe nie
są ze sobą skorelowane: E[xy] = 0.
Podsumowując można powiedzieć, że przyjęcie wartości przez zmienną losową jest jak wynik
rzutu kostką do gry: prawdopodobieństwo otrzymania poszczególnych pól jest znane i równe
1/6, ale nie wiadomo jaki będzie wynik obecnego rzutu.
Najpopularniejsze są zmienne losowe o następujących rozkładach funkcji gęstości prawdo-
podobieństwa:
1) normalnym: p(x0) jest funkcją Gaussa o określonej wartości średniej x i wariancji σ2:

1  ( x − x )2 
p ( x0 ) = exp  − 0 2  (1.38)
2πσ 2  2σ 
2) równomiernym: p(x0) jest funkcją „prostokątną” równą (w szczególności [a = 0, b = 1] lub
[a = −1, b = 1]):
 1
 dla a ≤ x0 ≤ b
p ( x0 ) =  b − a (1.39)
 0 dla pozostałych x0

Dla rozkładu normalnego o w a r t o ś c i ś r e d n i e j r ó w n e j z e r o i w a r i a n c j i σ 2


r ó w n e j 1 , prawdopodobieństwo przyjęcia przez zmienną losową wartości z przedziału
[−1, 1] jest równe 0,682, wartości z przedziału [−2, 2] − 0,954, wartości zaś z przedziału
[−3, 3] − 0,997.

Przykład. Na rysunku 1.11 przedstawiono N = 1000 wartości dwóch dyskretnych zmiennych


losowych, uzyskanych z generatorów liczb pseudolosowych o rozkładzie normalnym i rów-
nomiernym (rys. 1.a i 1b) oraz teoretyczny kształt ich funkcji charakterystycznych: dystrybuant
(rys. 1c i 1d) i funkcji gęstości prawdopodobieństwa (rys. 1e i 1f). Otrzymane wartości potra-
ktowano jak próbki ciągłej zmiennej losowej (sygnału losowego), zdyskretyzowanej w czasie
z krokiem ∆t = 1 ms. Kształt funkcji charakterystycznych odpowiada przypadkowi nieskończo-
nego czasu obserwacji (nieskończonej liczbie obserwowanych wartości).
26 Sygnały i ich parametry

a) szum „gaussowski” x(t) b) szum „równomierny” x(t)


3 1
2
0.5
1
0 0
-1
-0.5
-2
-3 -1
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas t [s] Czas t [s]

c) dystrybuanta szumu „gaussowskiego” c) dystrybuanta szumu „równomiernego”


1 1.2
F(x) F(x)
0.8 1
0.8
0.6 0.6
0.4 0.4
0.2
0.2 0
x x
0 -0.2
-4 -2 0 2 4 -2 -1 0 1 2

e) f.g.p. szumu „gaussowskiego” f) f.g.p. szumu „równomiernego”


0.4 0.6
p(x) p(x)
0.3 0.4
0.2
0.2
0.1
x 0
x
0
-4 -2 0 2 4 -2 -1 0 1 2
Rys. 1.11. Przykłady fragmentów sygnałów losowych o rozkładzie normalnym (a) i równomiernym (b) oraz
ich dystrybuanty (c, d) i funkcje gęstości prawdopodobieństwa (e, f)

1.4.2. Procesy losowe, stacjonarność, ergodyczność

Sygnały losowe związane są z tzw. procesami losowymi. Obserwowane sygnały są konkretny-


mi realizacjami („zapisami”, „próbami”) tych procesów. Aby określić rodzaj procesu losowe-
go X, należy zebrać wiele jego realizacji, czyli sygnałów xk(t), k = 1, 2, 3,... Zbiór tych
realizacji określa właściwości generującego je procesu. Aby poznać te właściwości, należy
wyznaczyć i porównać podstawowe parametry statystyczne obserwowanych danych, uśrednio-
nych po zbiorze wszystkich realizacji {xk(t), k = 1, 2, 3,...}, tzn. dla każdego t. Zakłada się, że
zbiór wszystkich wartości przyjmowanych przez proces X w chwili t w poszczególnych
realizacjach jest niezależną, dyskretną zmienną losową xt, mającą określoną dystrybuantę Ft(x)
i funkcję gęstości prawdopodobieństwa pt(x). Podstawowymi parametrami statystycznymi
zmiennej xt jest średnia x t i σ 2xt wariancja oraz współczynnik korelacji R xt xt + τ tej zmiennej
ze zmienną xt + τ , „oddaloną” od niej o czas τ. Procesem stacjonarnym w szerszym sensie jest
Sygnały i ich parametry 27

nazywany proces, dla którego wartość średnia i wariancja przyjmowanych wartości po zbiorze
jego realizacji oraz wartości funkcji korelacji pomiędzy różnymi chwilami czasowymi nie
zależą od t, tzn. dla wszystkich wartości t są takie same:

xt = E [ xt ] = const , σ 2x t = E [( xt − xt ) 2 ] = const

Rx t xt + τ = E[ xt xt + τ ] = const dla t = var (1.40)

Analogicznie procesem stacjonarnym w węższym sensie jest nazywany proces, dla którego
w s z y s t k i e jednowymiarowe momenty statystyczne wyższych rzędów zmiennych losowych
xt oraz momenty łączne tych zmiennych są takie same, tzn. nie zależą od chwili t. Procesem
ergodycznym jest taki proces stacjonarny, dla którego wartości parametrów statystycznych
(wartość średnia, wariancja, funkcja korelacji) po zbiorze realizacji są równe wartościom tych
parametrów wyznaczonych z jego dowolnej realizacji czasowej xk(t) (czyli po czasie). Dla
procesów ergodycznych stacjonarność w szerszym sensie wymaga niezależności od czasu t0
bieżącej wartości średniej i bieżącej funkcji autokorelacji sygnału xk(t) (dla dostatecznie
dużego T):
t0 + T t0 + T
1 1
x ( t0 ) =
T ∫ x(t )dt , Rx(t0 ) ( τ) =
T ∫ x(t ) x(t − τ)dt (1.41)
t0 t0

Przykład. Graficzny przykład podejścia do analizy sygnałów losowych jest przedstawiony na


rysunku 1.12. Przedstawione są na nim cztery realizacje x1(t), x2(t), x3(t), x4(t) procesu losowe-
go X oraz zmienne losowe w trzech chwilach czasowych xt1, xt2, xt3. Proces jest stacjonarny,
jeśli parametry statystyczne zmiennych xt są takie same, niezależnie od chwili czasowej t,

xt1 xt2 xt3 τ


x4(t)
t

x3(t)
t

x2(t)
t

x1(t)
t

t1 t2 t3 tk tk+τ
Rys. 1.12. Graficzna ilustracja podstaw analizy procesów losowych: x1(t), x2(t), x3(t) − konkretne realizacje
czasowe procesu losowego X; xt1, xt2 i xt3 − obserwowane zmienne losowe w chwilach czasowych t1, t2 i t3.
Proces jest stacjonarny, jeśli parametry statystyczne (różne wartości oczekiwane E[.]) zmiennych losowych
xt są takie same i nie zależą od chwili czasowej t, w szczególności E[xt] = const i E[xt xt+τ] = R(τ), czyli
wartość oczekiwana wszystkich zmiennych losowych xt jest taka sama, wartość zaś oczekiwana ich iloczynu
zależy tylko od ich „przesunięcia” czasowego τ
28 Sygnały i ich parametry

a ergodyczny − kiedy jest on stacjonarny i parametry statystyczne każdej jego realizacji


czasowej są takie same jak wszystkich zmiennych losowych xt.
Dla dociekliwych. Oczywiście sygnały losowe są ciągłe i dyskretne. Zgodnie z twierdzeniem
Wolda każdy dyskretny sygnał (proces) losowy x(n), stacjonarny w szerokim sensie, może być
przedstawiony jako suma dwóch składowych: deterministycznej xd (n) oraz czysto losowej
xl (n):
x ( n ) = xd ( n ) + xl ( n ) (1.42)

Składowa deterministyczna jest idealnie (bez błędu) przewidywalna na podstawie nieskończo-


nej przeszłości (historii) sygnału, tzn.

xd ( n ) = − ∑ α k xd (n − k ) , α k − stałe predykcji. (1.43)
k =1

Przykładem takiego sygnału może być suma sinusoidy o losowej fazie oraz szumu.

1.4.3. Funkcje korelacji i kowariancji, gęstość widmowa mocy

Funkcje korelacji R(.) i kowariancji C(.) definiuje się dla s t a c j o n a r n y c h sygnałów loso-
wych x(t) i y(t) w następujący sposób:

sygnały ciągłe sygnały dyskretne


Rxx ( τ) = E[ x (t ) x (t − τ)] Rxx (m ) = E[ x (n ) x (n − m)]
Rxy ( τ) = E [ x(t ) y (t − τ)] Rxy (m) = E[ x (n ) y ( n − m )]

C xx ( τ) = E[( x(t ) − xt )( x (t − τ) − xt − τ )] C xx ( m) = E[( x( n ) − xn )( x (n − m) − xn − m )]


C xy ( τ) = E [( x(t ) − xt )( y (t − τ) − yt − τ )] C xy (m ) = E [( x(n ) − xn )( y ( n − m ) − yn − m )]

gdzie E[.] oznacza wartość oczekiwaną po zbiorze wszystkich realizacji (sygnałów) procesu
dla ustalonego t. Definicja funkcji kowariancji jest analogiczna do funkcji korelacji, z tą róż-
nicą, że odejmuje się w niej od zmiennych losowych, związanych z konkretną chwilą czasową,
ich wartości oczekiwane („średnie”, najbardziej prawdopodobne) xt i y t − τ . Dla sygnałów
stacjonarnych powyższe wartości oczekiwane nie zależą od czasu t (indeksu n). Przypomnijmy:
• w powyższych wzorach x(t) i y(t−τ) (odpowiednio: x(n) i y(n−m)) należy traktować jako
dwie niezależne zmienne losowe xt i yt−τ: pierwsza występuje w chwili czasowej t, druga
zaś − w chwili czasowej t−τ;
• przyjmują one różne wartości w zbiorze wszystkich realizacji;
• funkcja korelacji jest wartością oczekiwaną (najbardziej prawdopodobną) iloczynu tych
zmiennych, dla sygnałów niestacjonarnych zależną od wyboru wartości parametrów t i τ:
+∞ +∞
Rxy (t , τ) = E[ x ( t ) y ( t − τ)] = ∫ ∫ xt yt −τ p( xt yt −τ ) dxt dyt −τ (1.44a)
−∞ −∞

dla sygnałów zaś stacjonarnych nie będącą funkcją czasu t, tylko „przesunięcia” τ:
Sygnały i ich parametry 29

+∞ +∞
Rxy ( τ) = E[ x (t ) y (t − τ)] = ∫ ∫ xt yt −τ p( xt yt −τ ) dxt dyt −τ (1.44b)
−∞ −∞

Przykładowo, obliczając Cxy(τ) należy najpierw wyznaczyć wartości oczekiwane xt i yt −τ


w chwilach czasowych t i t−τ dla obu zmiennych xt i yt−τ (czyli wartości „średnie” po zbiorach
realizacji w chwilach czasowych t i t−τ), a następnie odjąć je od obserwowanych zmiennych
losowych i obliczyć wartość oczekiwaną (po zbiorze realizacji) ich iloczynu. W tym celu
należy znać łączne prawdopodobieństwo p(xt yt−τ) wystąpienia określonej wartości iloczynu
xt yt−τ.
Do analizy częstotliwościowej sygnałów losowych stosuje się funkcję gęstości widmowej
mocy. Jest ona zdefiniowana jako transformacja Fouriera funkcji autokorelacji:
∞ ∞
− j 2 π ( f / f pr ) m
Pxx ( f ) = ∫ Rxx (τ)e
− j 2 πfτ
dτ , Pxx ( f ) = ∑ Rxx (m)e (1.45a)
−∞ m = −∞

W związku z powyższym, prawdziwe są „odwrotne” zależności:


∞ f pr / 2
j 2 πfτ 1 j 2 π ( f / f pr ) m
Rxx ( τ) = ∫ Pxx ( f )e df , R xx (m ) =
f pr ∫ Pxx ( f )e df (1.45b)
−∞ − f pr / 2

Para równań (1.45a), (1.45b) nosi nazwę równań Wienera-Chinczyna dla sygnałów ciągłych
i dyskretnych. Ponieważ funkcja autokorelacji jest symetryczna względem τ = 0 (Rxx(τ) =
= Rxx(−τ)), Pxx(f) jest rzeczywiste, gdyż tylko symetryczne względem zera funkcje cos(2πft) są
potrzebne do rozwinięcia harmonicznego Rxx(τ). Można wykazać [Hayk98], że dla ciągłych
sygnałów stacjonarnych, ergodycznych funkcja gęstości widmowej mocy jest równa:

 T 2
1  1 2  1 
Pxx ( f ) = lim E  ∫ x ( t )e
− j 2 πft
dt  = lim E  X ( f )  = lim E  X T ( f ) X T* ( f )
T → ∞  2T  T → ∞  2T T  T → ∞  2T 
 −T

(1.46a)
gdzie E[.] oznacza wartość oczekiwaną, XT(f) jest transformatą Fouriera fragmentu sygnału
z przedziału czasowego [−T, T] (czyli widmem amplitudy tego fragmentu), funkcja
1/(2T)⋅|XT(f)|2 nazywana jest zaś periodogramem i ma taki sam wymiar jak funkcja widmowej
gęstości mocy. Natomiast dla dyskretnych sygnałów stacjonarnych mamy:

 −j
2 π nf 2
N
 1   1 2

f pr
Pxx ( f ) = lim E  x ( n )e  = Nlim E XN ( f )  =
N →∞ 2 N + 1 n =− N →∞   2N + 1 
 
 

 1  (1.46b)
= lim E  X N ( f ) X N* ( f )
N →∞  2N + 1 

W tym przypadku periodogram jest zdefiniowany jako 1/(2N+1)⋅|XN(f)|2. Wzór (1.46b) stanowi
podstawę praktycznych metod szacowania wartości funkcji Pxx(f), na przykład metody Welcha,
opisanej w dalszej części tego rozdziału.
30 Sygnały i ich parametry

Szum nazywa się białym, jeśli jego Pxx(f ) jest stałe i nie zależy od częstotliwości. Jeśli nato-
miast tak nie jest, to szum jest kolorowy. Szczególnym rodzajem szumu kolorowego jest
idealny szum dolnopasmowy, dla którego funkcja Pxx(f ) ma kształt prostokątny, tzn. ma war-
tość stałą, różną od zera dla częstotliwości z przedziału (−fmax, fmax) oraz równą zero poza tym
przedziałem. Innymi przykładami szumu kolorowego jest szum różowy i niebieski. Dla
pierwszego z nich funkcja Pxx(f ) m a l e j e 6 decybeli na oktawę (20 decybeli na dekadę), dla
drugiego zaś − r o ś n i e 6 decybeli na oktawę (20 decybeli na dekadę).
Szum o rozkładzie normalnym (1.38) i wariancji σ2 ma następujące parametry:
σ2 , τ = 0 σ 2 , m = 0
R ( τ) =  , R (m) =  , Pxx ( f ) = σ 2
 0, τ ≠ 0  0, m ≠ 0

1.4.4. Estymatory parametrów i funkcji

Przystępując do analizy sygnałów losowych należy zbadać z jakiego rodzaju procesem są one
związane − niestacjonarnym czy stacjonarnym. W przypadku stwierdzenia stacjonarności nale-
ży zbadać, czy czasem „obserwowany” proces nie jest ergodyczny. Oczywiście najprostsza jest
analiza losowych procesów (sygnałów) ergodycznych, ponieważ przeprowadza się ją na
podstawie tylko jednej realizacji zmiennej losowej. Jednak wówczas nie jesteśmy w stanie
dokładnie wyznaczyć parametrów procesu losowego, gdyż nie dysponujemy nieskończenie
długim zapisem sygnału, czyli nie dysponujemy pełną informacją statystyczną o nim, i z tego
powodu musimy te wartości estymować. Funkcja, według której jest przeprowadzane to
„szacowanie”, nazywa się estymatorem. Estymator nazywa się nieobciążonym, jeśli jego war-
tość oczekiwana jest równa rzeczywistej wartości estymowanego parametru (tzn. jest najbar-
dziej prawdopodobne, że właśnie ją otrzymamy). W przeciwnym przypadku estymator jest
obciążony, tzn. występuje przesunięcie pomiędzy rzeczywistą wartością parametru a wartością
oczekiwaną estymatora. Z kolei wariancja estymatora określa jego „wahania” („rozrzut”)
wokół wartości oczekiwanej. Estymator nazywa się zgodnym, jeśli jego wariancja dąży do zera
przy wzroście liczby danych, służących do jego wyznaczenia. Dobry estymator to estymator
zgodny, nieobciążony.
Sygnały ciągłe. Załóżmy, że dysponujemy jedną realizacją ciągłego sygnału losowego x(t)
o skończonej długości Ts (t0 ≤ t ≤ t0+Ts). Prawdopodobieństwo przyjęcia przez ten „fragment”
sygnału wartości z przedziału (x, x+∆x) jest równe Tx/Ts, gdzie Tx jest sumą odcinków czasu
∆ti, w których wartości chwilowe realizacji znajdują się w tym przedziale: Tx = Σ(∆ti). W gra-
nicy dla Ts dążącego do nieskończoności otrzymujemy prawdopodobieństwo przyjęcia przez
całą realizację wartości z przedziału (x, x+∆x):
Tx
Pr [x ≤ x (t ) ≤ x + ∆x ] = lim
Ts → 0 Ts

Jeśli dodatkowo szerokość przedziału wartości ∆x dąży do zera, to wówczas w granicy


uzyskuje się funkcję gęstości prawdopodobieństwa p(x) danego sygnału (procesu) losowego
x(t):
Pr[x ≤ x (t ) ≤ x + ∆x ]
p ( x ) = lim
∆x → 0 ∆x
Sygnały dyskretne. Obecnie załóżmy, że mamy N próbek jednej realizacji dyskretnego sygnału
losowego x(n), n0 ≤ n ≤ n0+Ns−1. Prawdopodobieństwo przyjęcia przez ten fragment sygnału
wartości z przedziału (x, x+∆x) jest równe Nx/Ns, gdzie Nx jest liczbą próbek, których wartości
Sygnały i ich parametry 31

znajdują się w tym przedziale. W granicy dla Ns dążącego do nieskończoności otrzymujemy


prawdopodobieństwo przyjęcia przez całą realizację wartości z przedziału (x, x+∆x):
Nx
Pr [x ≤ x ( n ) ≤ x + ∆x ] = lim
N s →0 Ns

Jeśli dodatkowo szerokość przedziału ∆x dąży do zera, to w granicy uzyskuje się funkcję
gęstości prawdopodobieństwa p(x) danego sygnału (procesu) losowego x(n):

Pr[x ≤ x ( n ) ≤ x + ∆x ]
p ( x ) = lim
∆x → 0 ∆x
Estymatę „kształtu” funkcji gęstości prawdopodobieństwa p(x) ergodycznego, dyskretnego
procesu otrzymuje się obliczając tzw. histogram, czyli 1) biorąc odpowiednio dużą liczbę Ns
próbek sygnału, 2) dzieląc obserwowany zakres zmienności zmiennej x na przedziały o sze-
rokości ∆x, 3) zliczając liczbę próbek, występujących w poszczególnych przedziałach. Po
unormowaniu histogramu, tzn. po jego podzieleniu przez liczbę wszystkich próbek Ns oraz
szerokość przedziału ∆x, otrzymuje się „pełną” estymatę funkcji p(x). Estymata ta jest tym
lepsza, im większe jest Ns oraz mniejsze ∆x. Weryfikacja hipotez „kształtu” (rodzaju) rozkładu
zmiennej losowej jest dokonywana za pomocą testów zgodności, np. testu chi kwadrat.
Zgodnie z twierdzeniem granicznym większość sygnałów występujących w przyrodzie ma
rozkład normalny (gaussowski), wynikający z równoczesnego występowania wielu czynników,
oddziaływających w różnych kierunkach.
W praktyce stosuje się następujące estymatory wartości oczekiwanej i funkcji autokorelacji
ergodycznego procesu losowego (wyznaczane na podstawie spróbkowanej w czasie jednej
realizacji zmiennej losowej x):
N
1
xˆ =
N
∑ xn (1.47)
n =1
N −1− |m |
1
Rˆ xx
(1)
( m) =
N
∑ x(n ) x ∗ (n − m) (1.48a)
n =0
N −1− |m |
1
Rˆ xx
(2)
( m) =
N−|m|
∑ x(n ) x ∗ (n − m) (1.48b)
n =0

Estymator Rˆ xx
(1)
( m) jest estymatorem obciążonym, Rˆ xx
( 2)
(m) jest zaś estymatorem nieobciążo-
nym. Jednak Rˆ xx( 2)
(m) charakteryzuje się większą wariancją niż Rˆ xx
(1)
( m) , czyli jego „rozrzut”
wokół wartości oczekiwanej jest większy. Jak widać powyższe definicje są identyczne jak
wartości średniej i funkcji korelacji sygnału deterministycznego.
Natomiast estymator funkcji widmowej gęstości mocy definiuje się jako wynik transformacji
Fouriera estymatora funkcji autokorelacji:
N −1
− j 2 π ( f / f pr ) m
PˆN ( f ) = ∑ Rˆ xx (m) e (1.49a)
m = − ( N −1)

Nie jest to estymator zgodny, ponieważ jego wariancja nie dąży do zera przy wzroście długości
segmentu danych N. Jedną z metod zmniejszania wariancji estymatora (1.49a) stanowi metoda
Blackmana-Tukeya. Poddaje się w niej transformacji Fouriera nie estymator funkcji autokore-
32 Sygnały i ich parametry

lacji, tylko jego iloczyn z wybraną funkcją wagową w(n) (np. oknem Hanninga lub Hammin-
ga), czyli transformuje się Rˆ xx (m ) w( m) :
N −1
− j 2 π ( f / f pr ) m
PˆN ( f ) = ∑ w(m) Rˆ xx (m) e (1.49b)
m = − ( N −1)

Inną metodą jest procedura Welcha, w której wykorzystuje się związek pomiędzy funkcją
gęstości widmowej mocy a periodogramem (patrz (1.46)). Metoda Welcha sprowadza się do
uśrednienia kilku zmodyfikowanych periodogramów. W metodzie tej ciąg analizowanych N
próbek sygnału jest dzielony na L fragmentów o długości M, które zachodzą na siebie lub nie
w zależności od przesunięcia D:
x ( i ) ( n ) = x ( n + iD ), 0 ≤ i ≤ L − 1, 0 ≤ n ≤ M − 1 (1.50)
Następnie wektory danych są wymnażane z wybraną funkcję wagową w(n) (tzw. „oknem”, np.
Hamminga) i dla każdego z nich (i = 0, 1,..., L−1) wyznacza się zmodyfikowany periodogram
jako kwadrat modułu transformaty Fouriera nie oryginalnych lecz „zważonych” próbek
sygnału:
2
M −1 M −1
1 − j 2 π ( f / f pr ) n
PˆM(i ) ( f ) =
Ew
∑x (i )
(n ) w(n )e , Ew = ∑ w2 ( n ) (1.51)
n =0 n =0

Końcowy estymator funkcji gęstości widmowej mocy jest określony wzorem:


1 L −1
Pˆxxw ( f ) = ∑ PˆM(i ) ( f ) (1.52)
L i =0

Kiedy D = M, kolejne fragmenty danych nie zachodzą na siebie (metoda Barletta), natomiast
dla D = M/2 kolejne fragmenty sygnału pokrywają się w pięćdziesięciu procentach.

Przykład. Na rysunku 1.13 przedstawiono wyniki komputerowej analizy dwóch dyskretnych


sygnałów losowych, szumu o rozkładzie normalnym i równomiernym, tylko na podstawie ich
pojedynczych 1000-punktowych realizacji, pokazanych na rysunku 1.11a i 1.11b. Na rysunku
1.13 zaprezentowano następujące funkcje obu sygnałów: histogram, funkcję autokorelacji,
widmo amplitudowe Fouriera oraz estymatę funkcji gęstości widmowej mocy. Jak widać tylko
kształt histogramów rozróżnia je w sposób wyraźny: rozpoznajemy w nich bowiem kształt
zbliżony do funkcji Gaussa (rys. 1.9a) oraz funkcji prostokątnej (rys.1.9b). Ze względu na małą
liczbę analizowanych próbek, obserwowane rozkłady nie mają dużej wartości statystycznej
i znacznie odbiegają od zależności teoretycznych. Z kształtu funkcji autokorelacji obu przebie-
gów losowych wynika, że oba sygnały są dobrze skorelowane („same ze sobą”) tylko dla
przesunięcia równego zero, tzn. że ich kolejne próbki nie są ze sobą skorelowane
(przypomnijmy analogię do rzutu kostką do gry: wartości uzyskane w kolejnych rzutach nie
zależą od siebie). Natomiast widmo amplitudowe Fouriera wskazuje na obecność „wielu”
częstotliwości w całym obserwowanym zakresie pasma częstotliwościowego. Jednak wysokość
poszczególnych prążków widma nie jest jednakowa (nawet przy wzroście liczby próbek, które
posłużyły do jego wyznaczenia), co powoduje, że najwyższe „prążki” mogą być mylnie
interpretowane jako sygnały sinusoidalne, „zanurzone” w szumie. Aby uniknąć takiej pomyłki,
dzieli się obserwowany sygnał na krótsze fragmenty, wyznacza się widmo amplitudowe dla
każdego z nich, a następnie uśrednia się i normuje kwadraty modułów tych widm, otrzymując
w ten sposób estymatę funkcji gęstości widmowej mocy sygnału losowego. Chociaż w każdym
widmie amplitudowym wartości maksymalne i minimalne występują dla różnych wartości
Sygnały i ich parametry 33

a) histogram szumu „gaussowskiego” x1(t) b) histogram szumu „równomiernego” x2(t)


35 20
hist(x) hist(x)
30 16
25
20 12
15 8
10
5 4
x x
x
0 0
-4 -2 0 2 4 -1 -0.5 0 0.5 1

c) estymata funkcji autokorelacji Rx1(τ) d) estymata funkcji autokorelacji Rx2(τ)


1 0.4
0.75 0.3
0.5 0.2
0.25 0.1
0 0
-0.25 -0.1
-0.5 -0.2
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
Przesunięcie τ [s] Przesunięcie τ [s]

e) widmo Fouriera 2|X1(f)| f) widmo Fouriera 2|X2(f)|


0.16 0.12

0.12
0.08
0.08
0.04
0.04

0 0
0 100 200 300 400 500 0 100 200 300 400 500
Częstotliwość f [Hz] Częstotliwość f [Hz]

g) estymata gęstości widmowej mocyPx1(f) h) estymata gęstości widmowej mocyPx2(f)


1.4 0.6
1.2 0.5
1 0.4
0.8 0.3
0.6 0.2
0.4 0.1
0 100 200 300 400 500 0 100 200 300 400 500
Częstotliwość f [Hz] Częstotliwość [Hz]
Rys. 1.13. Przykładowe wyniki analizy sygnałów losowych z rysunku 1.11a i 1.11b: po lewej − szumu
o rozkładzie normalnym, po prawej − szumu o rozkładzie równomiernym, w pionie − histogram, estymata
funkcji autokorelacji (1.18), widmo amplitudowe Fouriera (1.27b) oraz estymata funkcji gęstości widmowej
mocy (1.52)
34 Sygnały i ich parametry

częstotliwości, to jednak w wyniku uśrednienia tych widm doprowadza się do ich wygładzenia,
tym większego im więcej widm cząstkowych się uśredni (rysunki 1.13g i 1.13h). Jak widać
w obu przypadkach analizowany szum jest „biały”, tzn. w przybliżeniu nie zależny od często-
tliwości.

1.4.5. Filtracja sygnałów losowych


Obecnie skrótowo omówimy problem przejścia „ciągłych” sygnałów losowych x(t) przez
liniowe układy analogowe o odpowiedzi impulsowej h(t) (patrz równanie (1.21a)) oraz „dys-
kretnych” sygnałów losowych x(n) przez liniowe układy dyskretne o odpowiedzi impulsowej
h(n) (patrz równanie (1.22a)). Wyznaczmy wartości oczekiwane E[.] obu stron równań
(1.21a)(1.22a):
∞  ∞ ∞
y = E [ y ( t ) ] = E  ∫ h ( τ ) x (t − τ )d τ  = ∫ h ( τ) E [ x (t − τ) ] d τ = x ∫ h ( τ) d τ = x ⋅ H ( 0 )
 −∞  −∞ −∞
(1.53a)
 ∞  ∞ ∞
y = E [ y (n )] = E  ∑ h(k ) x (n − k ) = ∑ h( k )E [x (n − k )] = x ∑ h( k ) = x ⋅ H (0) (1.53b)
k = −∞  k = −∞ k = −∞

Jak widać wartości średnie y sygnałów w y j ś c i o w y c h y(.) są równe iloczynowi wartości


średnich x sygnałów w e j ś c i o w y c h x(.) i wartości transformaty Fouriera (odpowiednio
(1.24a) i (1.27a)) odpowiedzi impulsowych h(.) dla częstotliwości f równej zero.
Następnie obliczmy korelację wzajemną Ryx(.) sygnałów y(.) i x(.) w obu przypadkach:

 ∞  
Ryx (τ) = E  y (t + τ) x* (t )  = E  ∫ h(ξ) x (t + τ − ξ)d ξ  x* (t )  =
 −∞ 
 
∞ ∞
= ∫ h (ξ) E[ x ( t + τ − ξ) x* (t )] d ξ = ∫ h(ξ) Rxx ( τ − ξ)d ξ = Rxx ( τ ) ⊗ h( τ ) (1.54a)
−∞ −∞

 ∞  
Ryx (k ) = E  y (n + k ) x* (n)  = E  ∑ h(l ) x( n + k − l )  x* (n)  =
 l =−∞  
∞ ∞
= ∑ h(l ) E[ x (n + k − l ) x* ( n )] = ∑ h( l ) Rxx ( k − l ) = Rxx ( k ) ⊗ h( k ) (1.54b)
l =−∞ l =−∞

Wynika stąd, że jest ona równa splotowi (1.21a), (1.22a) odpowiedzi impulsowej h(.) układu
liniowego z funkcją korelacji własnej Rxx(.) sygnału wejściowego x(.).
Z kolei wyznaczmy funkcję korelacji własnej sygnału y(.), tym razem jednak tylko dla przy-
padku dyskretnego (w sposób analogiczny przeprowadza się przekształcenia w przypadku
sygnałów i układów „ciągłych”):

  ∞ 
R yy ( k ) = E  y ( n + k ) y* ( n )  = E  y ( n + k )  ∑ x* ( l )h* ( n − l )   =
  l =−∞  

∑ h* (n − l ) E [y(n + k ) x* (l )] = ∑ h* (n − l ) R yx (n + k − l )
∞ ∞
= (1.55)
l = −∞ l = −∞
Sygnały i ich parametry 35

Wprowadźmy oznaczenie m = n − l. Wówczas:



R yy ( k ) = ∑ h* (m) R yx (k + m) = R yx (k ) ⊗ h* (−k ) (1.56)
m = −∞

Łącząc (1.56) i (1.54b) mamy:

R yy (k ) = Rxx (k ) ⊗ h( k ) ⊗ h* ( −k ) (1.57)

Po wykonaniu transformacji Fouriera (1.27a) obu stron powyższego równania i skorzystaniu


z jej właściwości splotu (1.22)(1.23), otrzymujemy:

F [ Ryy (k )] = F [ Rxx ( k ) ⊗ h( k ) ⊗ h* (−k )] = F [ Rxx ( k ) ] ⋅ F [ h( k ) ⊗ h* (− k )] =

= F [ Rxx (k ) ] ⋅ F [ h(k ) ] ⋅ F [ h* ( −k ) ] = F [ Rxx (k ) ] ⋅ H ( f ) ⋅ H * ( f )

czyli po uwzględnieniu (1.45):

Pyy ( f ) = Pxx ( f ) | H ( f ) |2 (1.58)

Równanie (1.58) łączy gęstość widmową mocy sygnału wyjściowego z gęstością widmową
mocy sygnału wejściowego i odpowiedzią częstotliwościową układu H(f).

1.5. Przykład ćwiczenia komputerowego


Większość ilustracji tego podrozdziału wygenerowano za pomocą programu napisanego w ję-
zyku Matlab, przedstawionego w tabeli 1-3, który po odpowiednich modyfikacjach może być
podstawą do własnych eksperymentów obliczeniowych Czytelnika.
Obecnie przedstawimy dodatkowy przykład analizy, podsumowujący rozważania, prowadzone
w niniejszym rozdziale. Za pomocą opisanych wyżej metod przeanalizujemy sygnał zdetermi-
nowany postaci x(t) = sin(2π5t)+0,5sin(2π10t)+0,25sin(2π30t), występujący w obecności ad-
dytywnego szumu s(t) o rozkładzie normalnym (wartość średnia równa zero i odchylenie
standardowe równe 0,5 i 3). W tym przypadku funkcja autokorelacji, widmo amplitudowe
Fouriera oraz estymata funkcji gęstości widmowej mocy mają kształt, przedstawiony na rysun-
ku 1.14. Należy je porównać z odpowiednimi funkcjami, otrzymanymi w przypadku oddzielnej
analizy sygnału zdeterminowanego x(t) (rysunki 1.6b, 1.6d, 1.6f) i szumu s(t) (rysunki 1.13a,
1.13c, 1.13e, 1.13g). Z rysunku 1.14 można wyciągnąć następujące wnioski.
• Z kształtu funkcji autokorelacji (rysunki 1.14c i 1.14d) wynika, że sygnał składa się ze zde-
terminowanej składowej okresowej (o czym świadczy okresowość funkcji autokorelacji)
oraz z losowej składowej szumowej (skokowa zmiana wartości funkcji autokorelacji dla
zerowego przesunięcia), przy czym ich udział „procentowy” w analizowanych sygnałach
jest różny.
• Z widma amplitudowego Fouriera pierwszego sygnału wyraźnie można odczytać wartości
częstotliwości i amplitud składowych sygnału zdeterminowanego. Niestety nie jest już to
takie proste w przypadku drugiego, bardziej zaszumionego sygnału.
• Jednak estymata funkcji gęstości widmowej mocy pozwala na jednoznaczną „detekcję”
w obu przypadkach wszystkich składowych sinusoidalnych, występujących w sygnale.
36 Sygnały i ich parametry

a) sygnał x1(t) b) sygnał x2(t)


3 10
2
5
1
0 0
-1 -5
-2
-10
-3
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Czas t [s] Czas t [s]

c) estymata funkcji autokorelacji Rx1(τ) d) estymata funkcji autokorelacji Rx2(τ)


1 10

0.5
5
0
0
-0.5

-1 -5
-0.8 -0.4 0 0.4 0.8 -0.8 -0.4 0 0.4 0.8
Przesunięcie τ [s] Przesunięcie τ [s]

e) widmo Fouriera 2|X1(f)| f) widmo Fouriera 2|X2(f)|


1 1.2
0.8
0.8
0.6
0.4
0.4
0.2
0 0
0 10 20 30 40 50 0 10 20 30 40 50
Częstotliwość f [Hz] Częstotliwość f [Hz]

g) estymata gęstości widmowej mocyPx1(f) h) estymata gęstości widmowej mocy Px2(f)


200 200
160 160
120 120
80 80
40 40
0 0
0 10 20 30 40 50 0 10 20 30 40 50
Częstotliwość f [Hz] Częstotliwość f [Hz]
Rys. 1.14. Przykład analizy sygnału x(t) = sin(2π5t)+0,5sin(2π10t)+0,25sin(2π30t) z rysunku 1.6b w przy-
padku występowania addytywnego szumu białego o rozkładzie normalnym o wartości średniej równej zero
i odchyleniu standardowym równym 0,5 (rys. a) i 3 (rys. b). Kolejno w pionie: estymata funkcji autokorelacji
Rx(τ) (1.18), przeskalowane widmo amplitudowe Fouriera 2|X(f)| (1.27b) oraz estymata funkcji gęstości
widmowej mocy Px(f) (1.52)
Sygnały i ich parametry 37

Z przeprowadzonego eksperymentu jasno wynika, że t y l k o na podstawie wizualnej analizy


przebiegu czasowego sygnału czasami jest bardzo trudno wyciągnąć poprawne wnioski, doty-
czące jego składowych. Natomiast jest to o wiele prostsze, jeśli stosuje się mniej lub bardziej
zaawansowane metody analizy sygnałów, przykładowo analizę korelacyjną i częstotliwościo-
wą. Analiza taka jest więc bardzo przydatna, a znajomość jej kanonów − szczególnie wska-
zana.
W dalszej części pracy większość zasygnalizowanych do tej pory zagadnień będzie rozwinięta
w sposób bardziej szczegółowy.

Tab. 1-3. Przykładowe ćwiczenie komputerowe

% Ćwiczenie: Sygnały i ich parametry


% 1. Wygeneruj N=1000 próbek sygnału sinusoidalnego x(t)=Asin(2πfxt) o amplitudzie A=5 i o częstotliwości
% fx=10 Hz, spróbkowanego z częstotliwością fp=1000 Hz. Narysuj ten sygnał.
N=1000; A=5; fx=10; fp=1000; % Parametry sygnału
dt=1/fp; % Okres próbkowania
t=dt*(0:N-1); % Wektor chwil próbkowania
x=A*sin(2*pi*fx*t); % Sygnał
plot(t,x); grid; title(‘Sygnał x(t)’); xlabel(‘czas [s]’); pause

% Oblicz wartości parametrów sygnału:

x_sred1=mean(x), x_sred2=sum(x)/N % wartość średnia


x_max=max(x) % wartość maksymalna
x_min=min(x) % wartość minimalna
x_std1=std(x), x_std2=sqrt(sum((x-mean(x)).^2) / (N-1)) % odchylenie standardowe
x_eng=dt*sum(x.^2) % energia
x_moc=(1/N)*sum(x.^2) % moc średnia
x_skut=sqrt(x_moc) % wartość skuteczna

% Oblicz i narysuj funkcję autokorelacji R1, R2 i R3 sygnału x(n).

R1=xcorr(x); % nieunormowana
R2=xcorr(x,’biased’); % unormowana przez długość /N
R3=xcorr(x,’unbiased’); % unormowana przez /(N-abs(k))
tR=[-fliplr(t) t(2:N)]; plot(tR,R1); grid; title(‘Autokorelacja’); pause

% Teraz sam wylicz R3


for k=0:N-1
R(k+1)= sum( x(1:N-k)*x(1+k:N) )/(N-k);
end
R = [ fliplr(R) R(2:N-1) ];
plot(tR,R); grid; title(‘Autokorelacja wyliczona’); pause

% Oblicz współczynniki zespolonego szeregu Fouriera dla tego sygnału.


% Narysuj część rzeczywistą, urojoną i moduł tych współczynników.

X = fft(x); % szybka dyskretna transformacja Fouriera


df = 1/(N*dt); % częstotliwość podstawowa f0 = df = 1/T = 1/(N*dt)
f = df * (0 : N-1); % kolejne częstotliwości w szeregu Fouriera
subplot(311); plot(f,real(X)); grid; title('Real(X)'); xlabel(’Hz’); pause
subplot(312); plot(f,imag(X)); grid; title('Imag(X)'); xlabel(’Hz’); pause
subplot(313); plot(f,abs(X)); grid; title('Abs(X)'); xlabel(’Hz’); pause
clf;
plot(f(1:N/2+1),abs(X(1:N/2+1))/(N/2)); grid; title('Po wyskalowaniu'); pause

% Zsyntezuj sygnał na podstawie współczynników jego szeregu Fouriera i porównaj z oryginałem.


xs=ifft(X);
plot(t,real(x-xs)); grid; title('Różnica'); pause % około 10^(−14)
38 Sygnały i ich parametry

% 2. Wygeneruj N=1000 próbek szumu o rozkładzie równomiernym i normalnym (gaussowskim). Wyznacz dla nich
% funkcję autokorelacji, autokowariancji, histogram, szereg Fouriera i periodogram.
s1 = rand(1,N); s2=randn(1,N);
s = s2; % wybierz szum: s=s1 lub s=s2
R = xcorr(s,‘unbiased’);
plot(tR,R); grid; title(‘Autokorelacja szumu’); pause
C = xcov(s);
plot(tR,C); grid; title(‘Autokowariancja szumu’); pause
Hs = hist(s,100); % podziel oś [xmin, xmax] na 100 podprzedziałów
plot(Hs); title(‘Histogram szumu’); pause
S=fft(s);
plot(f,abs(S)); grid; title('Widmo Fouriera szumu'); xlabel('f [Hz]'); pause
[Pss, fss]=psd(s,N/10,fp); % uśrednij widma odcinków sygnału o długości N/10
plot(fss,Pss); grid; title('Widmo uśrednione'); xlabel('f [Hz]'); pause

% 3. Dodaj sygnały z punktu 1 i 2. Wyznacz i narysuj funkcję autokorelacji, autokowariancji i histogram sygnału
% sumarycznego.
% 4. Powtórz operacje z punktu 3 po dodaniu do sygnału 1+2 jeszcze jednej sinusoidy o częstotliwości 250 Hz.
% 5. Zmoduluj w amplitudzie sygnał sinusoidalny z punktu pierwszego.
ampl = hamming(N)’; % przykładowa funkcja modulująca amplitudę
y1 =ampl.*x; % modulacja amplitudy
plot(t,y1); grid; title(‘Sygnał z modulacją amplitudy’); pause

ampl = exp(-10*t); % eksponencjalna funkcja obwiedni amplitudy


y2 =ampl.*x; % modulacja
plot(t,y2); grid; title(‘Sygnał z modulacją amplitudy’); pause

% 6. Wygeneruj sygnał sinusoidalny z liniową modulacja częstotliwości (ω=ωx+αt) oraz z sinusoidalną modulacją
% częstotliwości ((ω=ωx+sin(ωmt)).
fx = 0; alfa = 10 % wybierz, zaczynając od małych wartości; potem obserwuj
y3 = sin(2*pi*(fx*t + 0.5*alfa*t.^2));
plot(t,y3); grid; title(‘Sygnał z liniową modulacją częstotliwości’); pause

fx = 10; fm = 2; df = 10; % częstotliwości − nośna, modulująca, głębokość modulacji


y4 = sin(2*pi*(fx*t + df * sin(2*pi*fm*t)/(2*pi*fm)));
plot(t,y4); grid; title(‘Sygnał z sinusoidalną modulacją częstotliwości’); pause

% 7. Sklej dwa sygnały.


y5 = [ y1 y4];
plot(y5); grid; title(‘Sygnał sklejony’); pause

% 8. „Spleć” ze sobą dwa sygnały, czyli dokonaj filtracji jednego z nich przez drugi
T = 5; N = 1000; % czas trwania sygnałów, liczba próbek
dt = T/N; t = dt*(0:N); % okres próbkowania, kolejne chwile czasowe

x = sin(2*pi*2*t)+0.5*sin(2*pi*8*t); % sygnał filtrowany: sinusoidy 2 Hz + 8 Hz


h = sin( 2*pi*2*t).*exp(-4*t); % sygnał filtrujący
y = conv(x,h); % operacja filtracji (splot, konwolucja)
subplot(311); plot(t,x); title('Sygnał WE x(t)');
subplot(312); plot(t,h); title('Odp impulsowa h(t)');
subplot(313); plot(t,y(1:N+1)); title('Sygnał WY h(t)');
pause

% 9. Skwantuj sygnał x(t) z punktu 8

x_min=-1.5; x_max=1.5; x_zakres=x_max-x_min; % minimum, maksimum, zakres


Nb=3; Nq=2^Nb; % liczba bitów, liczba przedziałów kwantowania
dx=x_zakres/Nq; % szerokość przedziału kwantowania
xq=dx*round(x/dx); % kwantyzacja sygnału
clf; plot(t,xq); % pokaż sygnał po skwantowaniu
2
Podstawy matematyczne
analizy sygnałów
deterministycznych

Jak już było powiedziane w rozdziale 1, w rozumieniu niniejszej książki sygnał jest dowolną
funkcją jedno- lub wieloargumentową. W związku z tym w analizie sygnałów mogą, a nawet
powinny, zostać zastosowane „narzędzia” matematyczne, służące do analizy i aproksymacji
funkcji, czyli metody analizy funkcjonalnej i teorii aproksymacji. Dlatego przedstawimy je te-
raz w sposób skrótowy.
W niniejszym rozdziale nie będziemy rygorystycznie przestrzegać formalizmu matematycz-
nego i często będziemy czynili od niego odstępstwa na rzecz większej zrozumiałości zapisu dla
osób „niewtajemniczonych”. Z tego powodu zapis „x(t)” będzie w zależności od kontekstu
oznaczał zarówno sygnał ciągły jak i jego wartość w chwili czasowej t. Identyczna konwencja
będzie także stosowana dla sygnałów dyskretnych „x(n)”. Dodatkowo „x” będzie w zależ-
ności od kontekstu oznaczał sygnał ciągły lub/albo dyskretny, a „x” − zawsze tylko sygnał
dyskretny.

2.1. Przestrzenie sygnałów deterministycznych


Sygnały, podobnie jak funkcje, tworzą przestrzenie, czyli zbiory o określonych właściwoś-
ciach.
Przestrzenią metryczną nazywamy zbiór sygnałów, w którym jest zdefiniowana metryka, czyli
funkcjonał, przyporządkujący dowolnym dwóm sygnałom x i y nieujemną liczbę rzeczywistą
ρ(x,y) ≥ 0. Liczba ta może być interpretowana jako odległość pomiędzy tymi sygnałami.
Metryka powinna spełniać warunki: tożsamości (ρ(x, y) = 0 ⇔ x = y), symetrii (ρ(x, y) =
= ρ(y, x)) i nierówności trójkąta (ρ(x, y)+ρ(y, z) ≥ ρ(x,z)). Ciąg elementów przestrzeni metry-
cznej jest nazywany ciągiem Cauchy’ego, jeśli odległość pomiędzy wyrazami tego ciągu
maleje do zera wraz ze wzrostem numerów jego elementów. Przestrzeń metryczną nazywa się
zupełną, jeśli każdy jej ciąg Cauchy’ego jest zbieżny do jakiegoś elementu tej przestrzeni
(czyli ma granicę należącą do tej przestrzeni).
Przestrzenią liniową nazywamy zbiór sygnałów z operacjami dodawania sygnałów x (operacja
„+”) oraz mnożenia sygnałów przez liczbę α (operacja „⋅”), jeśli operacja dodawania jest
przemienna (x+y = y+x) i łączna ((x+y)+z = x+(y+z)), operacja zaś mnożenia − rozdzielna
względem dodawania (α⋅(x+y) = α⋅x+α⋅y, (α+β)⋅x = α⋅x+β⋅y) oraz łączna (α⋅(β⋅x) = (αβ)⋅x).
40 Podstawy matematyczne analizy sygnałów deterministycznych

W przestrzeni liniowej musi istnieć sygnał zerowy 0, taki że 0⋅x = 0, oraz skalar identycz-
nościowy 1, taki że 1⋅x = x.
Przestrzeń liniowa unormowana to przestrzeń liniowa, w której zdefiniowane jest odwzo-
rowanie, przyporządkowujące każdemu sygnałowi x liczbę rzeczywistą nieujemną ||x|| (normę
tego sygnału) i spełniające następujące warunki: ||x|| = 0 (wartość zerowa) ⇔ x = 0 (element
zerowy), ||α⋅x|| = |α|⋅||x||, ||x+y|| ≤ ||x||+||y||.
Przestrzenią Banacha nazywamy przestrzeń l i n i o w ą u n o r m o w a n ą , która równocześnie
jest przestrzenią m e t r y c z n ą z u p e ł n ą . W przestrzeni tej metryka ρ(x,y) jest indukowana
przez normę ||.|| i równa ρ(x,y) = ||x−y||.
Iloczynem skalarnym jest nazywane odwzorowanie, przyporządkowujące uporządkowanej
parze dwóch sygnałów {x, y} l i c z b ę 〈x, y〉, które spełnia następujące aksjomaty:
1) 〈x, y〉 = 〈y, x〉* (2.1)
2) 〈α ⋅ x + β ⋅ y, z〉 = α ⋅ 〈x, z〉 + β ⋅ 〈y, z〉 (2.2)
3) x ≠ 0 ⇒ 〈x, x〉 > 0 (2.3)
4) x = 0 ⇒ 〈x, x〉 = 0 (2.4)
gdzie „*” oznacza sprzężenie zespolone.
Przestrzenią unitarną jest przestrzeń l i n i o w a , w której jest określony i l o c z y n s k a l a r n y
〈x, y〉 dwóch sygnałów x i y, i która jest u n o r m o w a n a przez normę, związaną z tym
iloczynem x = x, x . Dwa sygnały x i y przestrzeni unitarnej są ortogonalne („prosto-
padłe”, czyli „⊥”), jeśli 〈x, y〉 = 0. Jeśli dodatkowo 〈x, x〉 = 1 i 〈y, y〉 = 1, to są one ortonormal-
ne („ortogonalne” i „unormowane”).
Przestrzeń Hilberta to przestrzeń u n i t a r n a (liniowa, unormowana przez iloczyn skalarny),
która jest także przestrzenią m e t r y c z n ą z u p e ł n ą .

Przykłady. Przestrzeniami metrycznymi zupełnymi są następujące przestrzenie sygnałów:

1) C(0, T) − zbiór X wszystkich sygnałów określonych w przedziale domkniętym [0, T] i ciąg-


łych w tym przedziale, z metryką:
ρ( x, y ) = max x (t ) − y ( t ) , x, y ∈ X (2.5)
[ 0, T ]

2) L(0, T) − zbiór X wszystkich sygnałów określonych w przedziale domkniętym [0, T] (utoż-


samiając ze sobą sygnały równe prawie wszędzie, tzn. oprócz przeliczalnej liczby punktów),
z metryką:
T
ρ( x, y ) = ∫ x (t ) − y (t ) dt , x, y ∈ X (2.6)
0

przestrzeń ta często jest zwana w literaturze przestrzenią sygnałów bezwzględnie całkowal-


nych;
3) L2(0, T) − zbiór X wszystkich sygnałów określonych w przedziale domkniętym [0, T] (utoż-
samiając ze sobą sygnały równe prawie wszędzie), z metryką:
T
2
ρ( x, y ) = ∫ x (t ) − y (t ) dt , x, y ∈ X (2.7)
0
Podstawy matematyczne analizy sygnałów deterministycznych 41

przestrzeń ta jest często zwana w literaturze przestrzenią sygnałów całkowalnych z kwadra-


tem;
4) LT2 − zbiór X wszystkich sygnałów okresowych o okresie T z metryką:
T
1 2
ρ( x, y ) =
T ∫ x (t ) − y ( t ) dt (2.8)
0

Ponieważ w przestrzeniach metrycznych C(0, T) i L(0, T) nie można wprowadzić odwzorowa-


nia spełniającego aksjomaty (warunki) iloczynu skalarnego, nie są to przestrzenie Hilberta,
natomiast przestrzenie L2(0, T) i LT2 są przestrzeniami Hilberta. Iloczyn skalarny i norma są
w nich zdefiniowane następująco:
T T
x, y L 2 = ∫ x (t ) y * (t )dt , x 2
L
= x, x L2 = ∫ | x(t ) |
2
dt (2.9)
0 0

1T 1T
x (t ) y* ( t )dt , | x(t ) |2 dt
T 0∫ T 0∫
x, y L2T
= x L2T
= x, x L2T
= (2.10)

Teoretycznie jest możliwe definiowanie przestrzeni sygnałów o nieskończonym czasie trwania.


My zajęliśmy się wyłącznie przykładami przestrzeni sygnałów określonych w przedziale czasu
(0, T), ponieważ w praktyce inżynierskiej są dostępne jedynie sygnały o skończonej długości.
Dodatkowo przedmiotem zainteresowania cyfrowego przetwarzania sygnałów nie są sygnały
ciągłe, tylko zdyskretyzowane w czasie, czyli ciągi liczb, także o skończonej długości − na
przykład N. Dla nich równania (2.9), (2.10) przyjmują następującą postać:
N −1 N −1
x, y l2
= ∑ x( n) y* (n ), x l2
= x, x l2
= ∑ | x( n) |2 (2.11)
n =0 n =0

1 N −1 1 N −1
x, y l N2
=
N
∑ x (n) y* ( n), x l N2
= x, x l N2
=
N
∑ | x(n ) |2 (2.12)
n =0 n =0

same zaś przestrzenie sygnałów mogą być traktowane jako N-wymiarowe p r z e s t r z e n i e


w e k t o r o w e , w których kolejne próbki sygnału stanowią kolejne współrzędne wektora:

[ x(0), x(1), x(2),...] = [ x0 , x1, x2 ,...] (2.13)

W dalszej części rozdziału będziemy się koncentrować przede wszystkim na analizie matema-
tycznej sygnałów ciągłych x(t). Po zastąpieniu czasu przez jego indeks oraz całek przez sumy:

x (t ) → x ( n ), ∫ x (t )dt → ∑ x( n)
n

w prosty sposób można rozszerzyć prowadzone rozważania na przestrzenie sygnałów dyskret-


nych.

2.2. Dyskretne reprezentacje ciągłych sygnałów


deterministycznych
Niech {xi(t): i = 1, 2,..., N} oznacza zbiór N sygnałów należących do przestrzeni liniowej X.
Wówczas każdy sygnał tej przestrzeni, postaci
42 Podstawy matematyczne analizy sygnałów deterministycznych

N
x (t ) = ∑ αi xi (t ) (2.14)
i =1

jest nazywany liniową kombinacją sygnałów xi (t). Elementy zbioru {xi (t): i = 1, 2,..., N} są
liniowo niezależne, jeżeli równość
N
∑ αi xi (t ) = 0(t ) (2.15)
i =1

jest spełniona tylko wtedy, kiedy wszystkie współczynniki αi (i = 1, 2,..., N) są równe zero.
We wzorze (2.15) 0(t) oznacza element zerowy przestrzeni. Jeśli każdy zbiór liniowo nieza-
leżnych sygnałów przestrzeni X zawiera co najwyżej N sygnałów, to przestrzeń ta jest nazy-
wana przestrzenią N-wymiarową. Dowolny zbiór N liniowo niezależnych sygnałów przestrzeni
N-wymiarowej jest nazywany bazą tej przestrzeni, samą zaś przestrzeń nazywa się przestrzenią
rozpiętą na tej bazie. Istnieje wiele różnych baz przestrzeni N-wymiarowej. Wszystkie one
zawierają dokładnie N elementów. Jeśli zbiór {xi(t): i = 1, 2,..., N} jest bazą przestrzeni, to
współczynniki αi, i = 1, 2,..., N, we wzorze (2.14) są nazywane współrzędnymi sygnału x(t)
względem sygnałów bazowych, a ich zbiór {αi, i = 1, 2,..., N } − reprezentacją sygnału x(t)
względem danej bazy.
Baza ortogonalna i ortonormalna. Załóżmy, że XN jest N-wymiarową przestrzenią unitarną
rozpiętą na bazie {xi(t): i = 1, 2,..., N}. Wynika stąd, że każdy sygnał, należący do tej prze-
strzeni, można przedstawić w sposób jednoznaczny za pomocą (2.14). Współrzędne αi, i = 1,
2, ..., N, rozwinięcia sygnału x(t) względem N funkcji bazowych xi(t) wyznacza się w sposób
następujący. Utwórzmy iloczyny skalarne obu stron równania (2.14) z sygnałami bazowymi
xj (t), j = 1, 2,..., N:
N
x (t ), x j (t ) = ∑ α i xi (t ), x j (t ) , j = 1, 2, 3,..., N (2.16)
i =1

Otrzymuje się w ten sposób układ N równań liniowych z N niewiadomymi αi. Można go zapi-
sać w postaci macierzowej:
Xα = x (2.17a)
gdzie
 x1, x1 xN , x1   α1   x, x1 
   , x= 
X=  , α =   (2.17b)
 
 x1, xN xN , xN  α N   x, x N 

skąd otrzymujemy
α = X −1x (2.18)
Baza {xi(t): i = 1, 2,..., N} N-wymiarowej przestrzeni unitarnej X jest bazą ortogonalną, jeżeli
jej każde dwa sygnały bazowe są ortogonalne, tzn. kiedy:
xi , x j = 0 dla i ≠ j, 1 ≤ i , j ≤ N (2.19)

Ponadto jeżeli norma każdego sygnału bazowego jest jednostkowa, tzn. dla każdego i jest
spełniona równość xi = xi , xi = xi , xi = 1 , to taką bazę nazywamy bazą ortonormalną.
W przypadku bazy ortonormalnej macierz X jest macierzą jednostkową (tzn. macierzą diago-
Podstawy matematyczne analizy sygnałów deterministycznych 43

nalną z jedynkami na głównej przekątnej i zerami poza nią), zatem macierz odwrotna do niej
jest także jednostkowa. Wówczas:
1 0  x, x1 
α = X -1x =  x= 
(2.20a)
   
0 1  x, x N 
czyli
αi = x, xi , i = 1, 2, 3,..., N (2.20b)
Jeśli
N N
x (t ) = ∑ αi xi (t ), y (t ) = ∑ β j x j (t ) (2.21)
i =1 j =1

a baza jest ortonormalna, to prawdziwa jest następująca zależność:


N N N
x , y = ∑∑ αiβ*j xi , x j = ∑ αiβ*i = α, β (2.22)
i =1 j =1 i =1

W przypadku tylko jednego sygnału otrzymujemy:


N
x , x = ∑ αi α*i = α, α (2.23)
i =1

Dwa powyższe równania są znane jako tzw. równość Parsevala, zgodnie z którą iloczyn ska-
larny dwóch sygnałów jest równy iloczynowi skalarnemu współczynników ich rozwinięć
względem sygnałów bazowych, tzn. jest zachowany także po transformacji obu sygnałów.
Iloczyn skalarny jest zachowywany w przestrzeni L2 przez transformacje ortogonalne.
Aproksymacja sygnałów z nieskończenie wymiarowej przestrzeni unitarnej. Niech XN ozna-
cza N-wymiarową podprzestrzeń przestrzeni X, unitarnej i nieskończenie wymiarowej. Pod-
przestrzeń XN jest rozpięta na bazie {xi (t): i = 1, 2,..., N}. Dowolnemu sygnałowi x(t), należące-
mu do przestrzeni X, należy przyporządkować taki sygnał ~ x (t ) , należący do podprzestrzeni XN:
N
x (t ) = ∑ αi xi (t )
~ (2.24a)
i =1

który najlepiej reprezentuje (przybliża) x(t) w sensie minimalizacji normy różnicy sygnałów
x (t ) − ~
x (t ) :
x−~
x = min (2.24b)

Z twierdzenia o rzucie ortogonalnym wynika, że dla każdego x(t)∈X (przestrzeni nieskończe-


nie wymiarowej) istnieje tylko jeden element ~
x(t) ∈XN (przestrzeni N-wymiarowej) określony
wyrażeniem:
N N N
x (t ) = ∑ x, xi xi (t ) = ∑ αi xi (t ) = ∑ vi (t )
~ (2.25)
i =1 i =1 i =1

taki, że:
1) dla każdego xˆ(t) ∈XN , różnego od ~ x (t ) , jest spełniona nierówność x − ~
x < x − xˆ ,
~
2) sygnał x (t ) − x (t ) jest ortogonalny do każdego elementu należącego do podprzestrzeni XN.
44 Podstawy matematyczne analizy sygnałów deterministycznych

Przykład. Przekonywującą ilustracją omawianego twierdzenia może być graficzne przedsta-


wienie zadania aproksymacji wektora z przestrzeni trójwymiarowej w przestrzeni dwuwymia-
rowej, czyli na płaszczyźnie. Jest ono pokazane na rysunku 2.1. W takim przypadku najlep-
szym „przybliżeniem” wektora v:
v = v x + v y + v z = α xe x + α ye y + α ze z = α x [1, 0, 0] + α y [0, 1, 0] + α z [0, 0, 1] (2.26)
na płaszczyźnie xy jest bowiem jego rzut prostopadły (ortogonalny) na tę płaszczyznę, czyli
v = v xy = v x + v y = α xe x + α ye y = α x [1, 0, 0] + α y [0, 1, 0] (2.27)
Błąd aproksymacji wektora v na płaszczyźnie xy, czyli to co się na niej nie „mieści”, jest
równy:
v − v = v − v xy = v z = α ze z = α z [0, 0, 1] (2.28)
Jest on prostopadły do tej płaszczyzny i zawiera trzeci, brakujący wymiar. W równaniach
(2.26)(2.27)(2.28) wektory:
e x = [1, 0, 0], e y = [0, 1, 0], e z = [0, 0, 1] (2.29)

są ortonormalnymi wektorami bazowymi trójwymiarowej przestrzeni wektorowej, a liczby αx,


αy, αz stanowią wartości następujących iloczynów skalarnych (definicja (2.11) dla N = 3):
α x = v, e x , α y = v, e y , α z = v, e z (2.30)

Z ortogonalności wektorów bazowych wynika, że:


e x , e y = 0, e y , e z = 0, ex ,ez = 0 (2.31)

natomiast ich ortonormalność dodatkowo implikuje:


e x , e x = 1, e y , e y = 1, ez ,ez = 1 (2.32)

Zachodzenie równości (2.31), (2.32) jest łatwo wykazać, uwzględniając definicje (2.11) oraz
(2.29).

z
y v

vz
vy
vxy

ey
ez

ex vx x

Rys. 2.1. Przykład aproksymacji wektora v z przestrzeni 3D w przestrzeni xy, czyli 2D

W ogólnym przypadku rzutujemy ortogonalnie sygnał x(t) na każdą z osi układu współrzęd-
nych, czyli na każdą funkcję bazową xi(t). Otrzymujemy w ten sposób „wektory” vi(t) = αi⋅xi(t)
(współczynnik*funkcja bazowa), które „zawierają” część sygnału, przypadającą na osie xi(t),
Podstawy matematyczne analizy sygnałów deterministycznych 45

i = 1, 2, 3,..., N. Z wartości współczynników αi = 〈x, xi〉 widać „ile” należy wziąć każdej z fun-
kcji bazowych xi(t). Najlepszą aproksymatę sygnału w danej podprzestrzeni XN otrzymuje się
sumując rzuty sygnału x(t) na wszystkie funkcje bazowe xi(t).
Ortonormalizacja Grama-Schmidta zbioru sygnałów liniowo niezależnych. Niech {xi(t): i =
= 1, 2,..., N} będzie zbiorem sygnałów liniowo niezależnych w N-wymiarowej przestrzeni XN.
Mając taką bazę, można rekurencyjnie utworzyć dwa ciągi sygnałów {yi(t): i = 1, 2,..., N}
i {zi(t): i = 1, 2,..., N}, z których pierwszy stanowi bazę ortogonalną, a drugi − bazę ortonor-
malną przestrzeni XN:
1) y1 (t ) = x1 (t )
2) y 2 (t ) = x2 (t ) − x2 , y1( n ) y1( n ) (t )

3) y3 (t ) = x3 (t ) − x3 , y 2( n ) y2( n ) (t ) − x3 , y1( n ) y1( n ) (t )


...
i −1
i) yi (t ) = xi (t ) − ∑ xi , yk( n ) yk( n ) (t )
k =1
...
N −1
N) y N (t ) = x N (t ) − ∑ x N , yk( n ) yk( n ) (t )
k =1
gdzie
yk (t )
y k( n ) (t ) = , k = 1, 2, 3,..., N
yk

Za pierwszą funkcję bazową y1(t) przyjmuje się x1(t). Następnie y1(t) normalizuje się i otrzy-
muje w ten sposób y1(n)(t). W kolejnym kroku wyznacza się y2(t), odejmując od x2(t) jego rzut
ortogonalny na sygnał y1(n)(t), czyli tę część x2(t), która jest już zawarta w y1(n)(t). Po norma-
lizacji y2(t) i otrzymaniu y2(n)(t), opisaną procedurę powtarza się rekurencyjnie dalej, odejmując
od xi(t) jego rzuty ortogonalne na wyznaczone do tej pory, unormowane sygnały yk(n)(t),
k = 1, 2,..., i−1.
Normalizacja bazy ortogonalnej. Jeżeli {yn(t)} jest zbiorem sygnałów ortogonalnych i jest
spełniony w związku z tym następujący warunek:

0 dla i≠ j
yi , y j =  (2.33)
 wi dla i= j

to zbiór sygnałów {zn(t)}


yn (t ) yn (t )
z n (t ) = = , n = 1, 2, 3,... (2.34)
yn wn

jest zbiorem sygnałów ortonormalnych.


Zbiór zupełny. Niech X będzie przestrzenią Hilberta, a zbiór {x1(t), x2(t), x3(t),...} nieskończo-
nym ortogonalnym (lub ortonormalnym) zbiorem sygnałów tej przestrzeni. Zbiór ten nazywany
jest zbiorem zupełnym wtedy i tylko wtedy, gdy nie istnieje nie należący do niego różny od
zera sygnał przestrzeni X ortogonalny (ortonormalny) do każdego sygnału xi(t), i = 1, 2, 3, ....
Przestrzeń X jest rozpięta na zbiorze {x1(t), x2(t), x3(t),...} wtedy i tylko wtedy, gdy jest on
zupełny. Wówczas zbiór ten stanowi bazę przestrzeni X. Zbiory ortonormalne zupełne istnieją
46 Podstawy matematyczne analizy sygnałów deterministycznych

jedynie w tzw. ośrodkowych przestrzeniach Hilberta, tzn. w takich przestrzeniach Hilberta,


w których istnieje przeliczalny zbiór gęsty.
Twierdzenie o zbieżności. Jeśli X jest przestrzenią Hilberta, a zbiór {x1(t), x2(t), x3(t),...} jest
nieskończonym zbiorem sygnałów ortonormalnych w tej przestrzeni, to dla każdego x(t)∈X
ciąg {~
xn (t )} elementów aproksymujących postaci:
n
xn (t ) = ∑ αi xi (t ), αi = x, xi
~ (2.35)
i =1

jest zbieżny do sygnału x(t) dla n dążącego do nieskończoności wtedy i tylko wtedy, gdy zbiór
{x1(t), x2(t), x3(t),...} jest zbiorem zupełnym.
Szereg Fouriera. Dla przestrzeni X i zbioru sygnałów {x1(t), x2(t), x3(t),...} jak wyżej, szereg
funkcyjny postaci:

∑ αi xi (t ) , gdzie αi = x, xi (2.36)
i =1

jest szeregiem Fouriera sygnału x(t)∈X względem zbioru (ciągu) funkcji {x1(t), x2(t), x3(t),...},
a liczby αi nazywamy współczynnikami Fouriera tego szeregu. Każdy sygnał x(t)∈X jest
równy (w sensie normy przestrzeni X) sumie swojego szeregu Fouriera wtedy i tylko wtedy,
gdy zbiór {x1(t), x2(t), x3(t),...} jest zupełny. Dla takiego zbioru dla każdego x(t)∈X spełniona
jest także tzw. równość Parsevala:

= ∑ αi
2 2
x (2.37)
i =1

Przykłady zbiorów ortonormalnych zupełnych

• funkcje harmoniczne rzeczywiste − trygonometryczny szereg Fouriera sygnału nieokre-


sowego (przestrzeń L2(0, T) sygnałów całkowalnych w kwadracie):
 1 2  2π  2  2π  
 , cos n t  , sin n t  : n = 1, 2, 3,... (funkcje bazowe)
 T T  T  T  T  
Kiedy współczynniki normujące 1 / T , 2 / T włącza się do współczynników szeregu,
otrzymuje się szereg o następującej postaci:

x (t ) = a0 + ∑ (an cos(nω0t ) + bn sin (nω0t )) (2.38a)
n =1

gdzie (ω0 = 2π/T):


T T
1 1 2 2
a0 = α0 = ∫ x(t )dt , an = αn = ∫ x(t ) cos(nω0t )dt (2.38b)
T T0 T T0
T
2 2
bn = βn = ∫ x(t ) sin( nω0t )dt (2.38c)
T T0

Inna postać trygonometrycznego szeregu Fouriera będzie przedstawiona w rozdziale


trzecim.
Podstawy matematyczne analizy sygnałów deterministycznych 47

• funkcje harmoniczne rzeczywiste − trygonometryczny szereg Fouriera sygnału okresowe-


go (przestrzeń LT2(0, T)): jak w poprzednim przykładzie tylko całkowanie od t0 do t 0 + T ;
• funkcje harmoniczne zespolone − zespolony szereg Fouriera sygnału nieokresowego
(przestrzeń L2(0, T)):
 1 jn 2 π t 
 e T : n = 0,± 1,± 2,... (funkcje bazowe)
 T 

∞ 2π   1 jn 2 π t  
*
T 2π
1 jn T t    1 − jn t
x (t ) = ∑ αn
T
e , αn =  x (t ),
 T
e T
 =
T ∫ x ( t )e T dt (2.39a, b)
n = −∞     0

Po włączeniu współczynnika normującego 1/ T do współczynników szeregu, otrzymuje
się:
∞ 1T 2π
x (t ) = ∑ X n e jnω0t , Xn = − jnω t
∫ x (t )e 0 dt , ω0 = , n = 0, ± 1, ± 2, ...
n =−∞ T0 T
(2.40a, b)
• funkcje harmoniczne zespolone − zespolony szereg Fouriera sygnału okresowego (prze-
strzeń LT2(0, T)): jak wyżej tylko całkowanie od t0 do t 0 + T .

Innymi przykładami zbiorów ortonormalnych zupełnych są:

• wielomiany: Czebyszewa pierwszego rodzaju w L2(−1, 1),


Hermite’a w L2(−∞, +∞),
Legendre’a w L2(−1, 1),
Laguerre’a w L2(0, +∞),
• funkcje: Bessela pierwszego rodzaju w L2(−1, 1),
Czebyszewa w L2(0, +∞),
Legendre’a w L2(0, +∞),
Haara w L2(0, 1),
Walsha w L2(0, 1).

2.3. Ciągłe reprezentacje ciągłych sygnałów deterministycznych


− przekształcenia całkowe
Niech x(t) oznacza dowolny sygnał. Załóżmy, że istnieje para przekształceń całkowych
x(t) → X(s) i X(s) → x(t), takich że:
X ( s ) = ∫ x ( t )ϕ(t , s )dt , t ∈ Ω (2.41a)

x (t ) = ∫ X ( s )ψ( s, t )ds, s ∈ Γ (2.41b)


Γ

gdzie ϕ(t , s ) i ψ( s, t ) są jądrami przekształceń, a s jest zmienną tych jąder. Aby transformacje
były odwracalne, jądra muszą spełniać warunek (δ(t) − impuls Diraca):
48 Podstawy matematyczne analizy sygnałów deterministycznych

∫ ψ( s, t )ϕ( τ, s)ds = δ(t − τ) (2.42)


Γ

ponieważ:
   
x (t ) = ∫  ∫ x ( τ)ϕ( τ, s )d τ ψ( s, t )ds = ∫  ∫ ψ( s, t )ϕ( τ, s )ds  x ( τ)d τ (2.43)
ΓΩ  ΓΩ 
(całki po konturze zamkniętym Γ, obejmującym środek układu współrzędnych). Jądra są samo-
sprzężone, jeśli ψ( s, t ) = ϕ* (t , s ).

Poniżej przedstawiono przykłady najbardziej znanych przekształceń całkowych.

Przykład 1 − przekształcenie Laplace’a (s − liczba zespolona):


∞ ∞
ψ( s, t ) = e st , ϕ(t , s ) = e − st , X ( s) = ∫ x (t ) e − st dt , x (t ) = ∫ X ( s )e st ds (2.44a, b)
−∞ −∞

gdzie X(s) oznacza transformatę Laplace’a sygnału x(t).

Przykład 2 − przekształcenie Fouriera (czyli przekształcenie Laplace’a dla s = j2πf = jω):


∞ ∞
ψ( f , t ) = e j 2 πft , ϕ(t , f ) = e − j 2 πft , X( f ) = ∫ x (t )e− j 2 πft dt , x(t ) = ∫ X ( f ) e j 2 πft df (2.45)
−∞ −∞

1 ∞
ψ(ω, t ) = e jωt , ϕ( t , ω) = e − jωt , X (ω) = ∫ x (t )e − jωt dt , x (t ) = jωt
∫ X ( ω)e d ω (2.46)
−∞
2π −∞

gdzie X(f) to widmo częstotliwościowe Fouriera sygnału x(t). Sygnały z przestrzeni L2 ( −∞, ∞)
są transformowalne w sensie przekształcenia Fouriera. Dla dwóch sygnałów należących do tej
przestrzeni ich iloczyn skalarny jest równy iloczynowi skalarnemu ich widm:
∞ ∞
x, y = X ,Y ↔ ∫ x ( t ) y * (t )dt = ∫ X ( f )Y * ( f )df (2.47)
−∞ −∞
Dla y(t) = x(t), mamy:
∞ ∞
2 2 2 2
x = X ↔ ∫ x (t ) dt = ∫ X ( f ) df (2.48)
−∞ −∞

czyli równość kwadratów norm: sygnału i jego widma Fouriera (tzw. równość Parsevala).
Wniosek: przekształcenie Fouriera zachowuje energię sygnału.

Przykład 3 − przekształcenie Hilberta (sygnał analityczny)


1 1 1 ∞ x (t ) 1 ∞ X (s)
ψ ( s, t ) =
π( s − t )
, ϕ( t , s ) = −
π( t − s )
, X (s) = ∫
π −∞ s − t
dt , x (t ) = − ∫
π −∞ t − s
ds (2.49)

Zmienna s ma znaczenie zmiennej czasowej, a transformata Hilberta X(s) sygnału jest funkcją
czasu. Z tego powodu powyższe równania definicyjne często zapisuje się jako:
Podstawy matematyczne analizy sygnałów deterministycznych 49

1 ∞ x ( τ) 1 1 ∞ xˆ ( τ)  1
xˆ (t ) = ∫
π −∞ t − τ
d τ = ⊗ x (t ),
πt
x(t ) = − ∫
π −∞ t − τ
d τ =  −  ⊗ xˆ ( t )
 πt 
(2.50)

gdzie ⊗ oznacza operację splotu. Sygnały z przestrzeni L2 (Ω ) są transformowalne w sensie


Hilberta (podobnie sygnały o ograniczonej mocy średniej i wartości średniej). Przykłady par
transformat ( x (t ) ↔ xˆ (t ) ) :
sin(ω0t ) 1 − cos(ω0t )
cos(ω0t ) ↔ sin(ω0t ) , sin (ω0t ) ↔ − cos(ω0t ) , ↔ (2.51)
ω0t ω0t
1 1 1
δ(t ) ↔ , ↔ (2.52)
πt 1 + t2 1 + t2
Sygnał analityczny jest definiowany jako sygnał zespolony: z (t ) = x (t ) + jxˆ (t ).

Przykład 4 − przekształcenie Hankela, kosinusowe i sinusowe przekształcenie Fouriera

W tym przypadku jądra są funkcjami zmiennej iloczynowej st:


∞ ∞
ψ( s, t ) = ψ( st ), ϕ( t , s ) = ϕ( st ), X (s) = ∫ x ( t )ϕ( st )dt , x (t ) = ∫ X ( s )ψ( st )ds (2.53)
−∞ −∞

W szczególności otrzymujemy tzw. przekształcenie Hankela (Jr(α) − funkcja Bessela rzędu r):
∞ ∞
X ( s ) = ∫ x(t ) st J r ( st )dt , x(t ) = ∫ X ( s ) st J r ( st )ds (2.54)
0 0

Przypadek r = −1 / 2, s = ω (jednostronne przekształcenie Fouriera kosinusowe):

2 2∞ 2∞
J −1/ 2 ( α) =
πα
cos α, X (ω) = ∫ x (t ) cos( ωt )dt ,
π0
x (t ) = ∫ X (ω) cos(ωt )dt (2.55)
π0

Przypadek r = 1 / 2, s = ω (jednostronne przekształcenie Fouriera sinusowe):

2 2∞ 2∞
J1/ 2 ( α) =
πα
sin α, X (ω) = ∫ x(t )sin(ωt )dt,
π0
x(t ) = ∫ X (ω)sin(ωt )dt
π0
(2.56)

Przykład 5 − przekształcenie Mellina


∞ c + j∞
1
X M ( s ) = ∫ x (t )t s −1dt , x (t ) = X ( s )t − s ds, t ≥ 0
2πj c −∫j∞
(2.57)
0

gdzie s − zmienna zespolona, c − odpowiednio dobrana rzeczywista stała dodatnia. Stosując


podstawienie t = e − τ otrzymujemy:
dt = − e − τdτ, t s −1 = e − τ( s −1) , (t → 0) ⇒ (τ → ∞ ), (t → ∞ ) ⇒ (τ → −∞ ) (2.58)
skąd

−τ
X M (s) = ∫ x(e )e − sτ dτ (2.59)
−∞
50 Podstawy matematyczne analizy sygnałów deterministycznych

czyli przekształcenie Mellina x(t ) jest równoważne przekształceniu Laplace’a x e − τ , czyli ( )


funkcji oryginalnej z argumentem przeskalowanym nieliniowo. Jeśli dodatkowo podstawimy
s = jω w przekształceniu Laplace’a, to przekształcenie Mellina jest równoważne przekształ-
ceniu Fouriera funkcji przeskalowanej. Można wykazać, że moduł przekształcenia Laplace’a
nie zmienia się, kiedy sygnał jest przeskalowywany w osi czasu, gdyż:
x (t ) ↔ X M ( s ), x ( at ) ↔ a − s X M ( s ) (2.60)
Można więc go stosować do rozpoznawania sygnałów o tym samym kształcie, lecz przeskalo-
wanych w osi czasu (lub położenia), tzn. „rozciągniętych” lub „ściśniętych”.

2.4. Reprezentacje sygnałów dyskretnych


− przestrzenie wektorowe
W praktycznych zastosowaniach cyfrowego przetwarzania sygnałów zawsze dysponujemy je-
dynie skończonym zbiorem próbek sygnału:
{x(1), x( 2), x(3),…, x ( N )} (2.61)
Zbiór ten możemy traktować jako wektor w przestrzeni N-wymiarowej:
x = [x1, x2 , x3 ,…, x N ] = [x (1), x ( 2), x (3),…, x ( N )] (2.62)
Najprostszym zbiorem funkcji bazowych rozpinających tę przestrzeń wektorową jest zbiór
postaci:
e1 = [1, 0, 0,..., 0]
e 2 = [0, 1, 0,..., 0]
e 3 = [0, 0, 1,..., 0] (2.63)
..........................
e N = [0, 0, 0,..., 1]
analogiczny do zbioru [1, 0, 0], [0, 1, 0] i [0, 0, 1], rozpinającego przestrzeń trójwymiarową
(patrz rysunek 2.1). Wówczas każdy z wektorów bazowych w pełni „odpowiada” tylko za je-
den wymiar wektora (2.61), gdyż zgodnie z równaniem analizy mamy:
N
x (k ) = x, e k = ∑ x(n)ek* (n) (2.64)
n =1

ponieważ ek(n) = 0 dla n ≠ k oraz ek(k) = 1. Przykładowo zbiór trzech próbek x = [ 1,5; 4; 0,1]
można rozłożyć względem takiej bazy w następujący sposób:
x = [1,5; 4; 0,1] = 1,5 ⋅ [1; 0; 0] + 4 ⋅ [0; 1; 0] + 0,1 ⋅ [0; 0; 1] = 1,5e1 + 4e 2 + 0,1e 3 (2.65)

W ogólności dla N próbek sygnału otrzymujemy równanie syntezy wektora x z funkcji bazo-
wych ek:
N
x= ∑ xk e k (2.66)
k =1
Podstawy matematyczne analizy sygnałów deterministycznych 51

Oczywiście (2.63) nie jest jedyną bazą ortogonalną (ortonormalną) rozpinająca N-wymiarową
przestrzeń wektorową. Może ją stanowić dowolny zbiór wektorów {b1, b2, b3,..., bN}:
b k = [bk (1), bk (2), bk (3),..., bk ( N )] , k = 1, 2, 3,..., N (2.67)
spełniających warunek ortogonalności (1 ≤ k, l ≤ N):
N
0, k ≠ l
bk , bl = ∑ bk (n )bl* (n ) = c, k =l
(2.68)
n =1 
lub ortonormalności:
N
0, k ≠ l
bk , bl = ∑ bk (n )bl* (n ) = 1, k =l
(2.69)
n =1 
Wówczas:
N
x= ∑ αk b k (2.70)
k =1
oraz
N
α k = x,b k = ∑ x(n)bk* (n ) (2.71)
n =1

gdzie k jest indeksem numeru funkcji bazowej, a n − indeksem jej próbki.

Najbardziej znany zbiór wektorów ortonormalnych, poza (2.63), stanowi unormowana, dys-
kretna baza Fouriera zespolonych sygnałów harmonicznych postaci (k = 1, 2,..., N, n = 1, 2,
..., N, j = − 1 ):

1 j N ( k −1)⋅( n −1) 1   2π   2π 
bk (n ) = e = cos ( k − 1) ⋅ ( n − 1)  + j sin (k − 1) ⋅ (n − 1)  (2.72)
N N   N  N 
która po zmianie sposobu indeksowania na (k = 0, 1, 2,..., N−1, n = 0, 1, 2,..., N−1) jest zapisy-
wana zwyczajowo jako:

1 j N kn 1   2π   2 π 
bk (n ) = e =  cos kn  + j sin kn  (2.73)
N N   N  N 
W zapisie (2.73) baza zerowa b0 jest składową stałą, bazy zaś b1, b2, b3, ..., itd., odpowiadają
częstotliwościom f0, 2f0, 3f0, ..., itd., gdzie f0 = fpróbkowania/N. Bazy (2.72), (2.73) spełniają także
warunek ortogonalności (2.69). Przykładowo dla (2.72) mamy:
*
N
 1 j ( 2 π / N )( k −1)( n −1)  1 j ( 2 π / N )( l −1)( n −1)  1 N
0, k ≠ l
∑  N
e 
 N
e  =
 N
∑ e j( 2π / N )( k −l )( n −1) = 1,
k =l
n =1 n =1 

(2.74)
ponieważ
N −1
N
 0, k ≠ l
∑ e j( 2π / N )(k −l )( n −1) = ∑ e j( 2π / N )(k −l )n =  N ,
k =l
(2.75)
n =1 n =0 
52 Podstawy matematyczne analizy sygnałów deterministycznych

Przykład

Dla N = 4 funkcje bazowe zespolonej, dyskretnej bazy Fouriera (2.72) mają następującą pos-
tać:
b1 = [ +0,5 + j 0,0; + 0,5 + j 0,0; + 0,5 + j 0,0; + 0,5 + j 0,0]
b 2 = [ +0,5 + j 0,0; + 0, 0 + j 0,5; − 0,5 + j 0,0; + 0,0 − j 0,5]
b3 = [ +0,5 + j 0,0; − 0,5 + j 0,0; + 0,5 + j 0,0; − 0,5 + j 0,0]
b 4 = [ +0,5 + j 0,0; + 0, 0 − j 0,5, − 0,5 + j 0,0; + 0,0 + j 0,5]

a współczynniki rozwinięcia sygnału x = [1,5; 4; 0,1; 100] względem tych wektorów bazo-
wych, zgodnie z (2.71), są równe (zwróćmy uwagę na sprzężenie zespolone współrzędnych baz
Fouriera):
α1 = 1, 5 ⋅ ( +0,5 − j 0,0 ) + 4 ⋅ ( +0,5 − j 0,0 ) + 0.1 ⋅ ( +0,5 − j 0,0 ) + 100 ⋅ ( +0,5 − j 0,0 ) = 52,8
α 2 = 1, 5 ⋅ ( +0,5 − j 0,0 ) + 4 ⋅ ( +0,0 − j 0,5 ) + 0, 1 ⋅ ( −0,5 − j 0,0 ) + 100 ⋅ ( +0,0 + j 0,5 ) = 0,7 + j 48
α3 = 1, 5 ⋅ ( +0,5 − j 0,0 ) + 4 ⋅ ( −0,5 − j 0,0 ) + 0, 1 ⋅ ( +0,5 − j 0, 0 ) + 100 ⋅ ( −0,5 − j 0,0 ) = −51, 2
α 4 = 1, 5 ⋅ ( +0,5 − j 0,0 ) + 4 ⋅ ( +0,0 + j 0,5 ) + 0, 1 ⋅ ( −0,5 − j 0,0 ) + 100 ⋅ ( +0,0 − j 0,5 ) = 0,7 − j 48

Uwzględniając (2.70), analizowany sygnał możemy więc przedstawić jako:


x = 52,8 ⋅ b1 + (0,7 + j 48) ⋅ b 2 − 51, 2 ⋅ b 3 + (0,7 − j 48) ⋅ b 4
Na rysunku 2.2 przedstawiono „próbki” wszystkich zespolonych funkcji bazowych Fouriera
dla N = 8.

Przykładami innych dyskretnych baz ortonormalnych są następujące bazy (numer bazy k =


= 0, 1, 2,..., N−1, numer próbki n = 0, 1, 2,..., N−1):
1) kosinusowa DCT:

 πk (2n + 1) 1 2
bk (n ) = c (k ) ⋅ cos  , c (0) = , dla k > 0 c (k ) = (2.76)
 2N N N
2) sinusowa DST:
2  π(k + 1)( n + 1) 
bk (n ) = sin (2.77)
N + 1  N +1 

3) Hartleya:
1  2π 2π 
bk (n ) =  cos kn + sin kn  (2.78)
N N N 
4) Hadamarda:
M −1
1
bk (n ) = ( −1) f ( k , n ) , gdzie f ( k , n ) = ∑ ki ni , M = log 2 N (2.79)
N i =0

k = k0 + 2k1 + ... + 2 M −1 k M −1 , n = n0 + 2n1 + ... + 2 M −1 nM −1 , ki , ni = 0, 1


Podstawy matematyczne analizy sygnałów deterministycznych 53

część rzeczywista część zespolona


0.4 0.4
k=1 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=2 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=3 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=4 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=5 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=6 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=7 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
0.4 0.4
k=8 0 0

-0.4 -0.4
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8

Rys. 2.2. Wektory bk, k = 1, 2,..., N, zespolonej bazy fourierowskiej (2.72) dla N = 8. W pionie kolejno: b1,
b2, b3,..., b8 (część rzeczywista po lewej stronie, urojona zaś − po stronie prawej). Zwrócić należy uwagę na
następujące zależności: Re(bN/2+1+k) = Re(bN/2+1−k), Im(bN/2+1+k) = −Im(bN/2+1−k), k = 1, 2,..., N/2−1, czyli na
powtarzanie się kształtów części rzeczywistej i urojonej funkcji bazowych (z ewentualną negacją znaku,
obserwowaną w części urojonej). W przypadku analizy (dekompozycji) sygnałów rzeczywistych powoduje
to symetryczne „powtarzanie” się wartości współczynników dekompozycji, zgodnie z zależnością: αN/2+1+k =
= (αN/2+1−k)*, k = 1, 2,..., N/2−1. Widać to na rysunkach 2.3 i 2.4
54 Podstawy matematyczne analizy sygnałów deterministycznych

5) Haara:
 p/2 q − 1 n q − 1/ 2
 2 , ≤ <
 2p N 2p
1  p/2 q − 1 / 2 n q
b0 ( n ) = 1 / N , bk ( n ) =  −2 , p
≤ < p , k = 1, 2,..., N − 1 (2.80)
N  2 N 2
 0, pozostałe n

N = 2m , k = 2 p + q − 1, 0 ≤ p ≤ m − 1 , p = 0 ⇒ q = 0, 1, p ≠ 0 ⇒ 1 ≤ q ≤ 2p

Przykładowo dla N = 4 mamy: k = 0, 1, 2, 3; p = 0, 0, 1, 1; q = 0, 1, 1, 2.


Bazę Hadamarda można w prosty sposób otrzymać z następującej zależności rekurencyjnej:

1 1 1  1 H(n ) H(n ) 
H(2) = , H (2n )
=  
2 1 − 1 2 H(n ) − H(n ) 

w której H(n) oznacza macierz n-punktowej transformacji Hadamarda. Kolejne wiersze tej ma-
cierzy stanowią n-punktowe, ortonormalne wektory bazowe tej transformacji.
Zwróćmy w tym miejscu uwagę na następujące fakty związane z bazami (2.76) − (2.80):
1) są to bazy o wartościach rzeczywistych;
2) indeksowanie zmiennych k i n w powyższych wzorach odpowiada indeksowaniu zastosowa-
nemu we wzorze (2.73), a nie (2.72);
3) baz kosinusowych i sinusowych nie uzyskano w wyniku „prostego” wzięcia części rzeczy-
wistej i urojonej zespolonej bazy fourierowskiej (2.73); nie przeszkadza to jednak, że naj-
prostsze „szybkie” algorytmy wyznaczania transformacji DCT i DST wykorzystują algorytm
„szybkiej” transformacji Fouriera FFT, implementujący (2.73) efektywnie pod względem
numerycznym;
4) baza Hadamarda przyjmuje tylko dwie wartości {−1/ N , 1/ N }, czyli ma kształt prosto-
kątny.
Oczywistym jest, że ze względów obliczeniowych preferuje się stosowanie do analizy sygna-
łów rzeczywistych funkcji bazowych o wartościach rzeczywistych. Na rysunku 2.3 przedsta-
wiono wszystkie funkcje bazowe bazy kosinusowej i sinusowej oraz bazy Hadamarda i Haara
dla N = 8.
Wybór rodzaju funkcji bazowych ma bardzo istotny wpływ na liczbę niezerowych współczyn-
ników αk, k = 1, 2,..., N, rozwinięcia sygnału w szereg (2.70), (2.71). Im funkcje te są lepiej
dopasowane do sygnału, tym mniej funkcji bazowych z tego szeregu jest potrzebnych do „od-
tworzenia” sygnału. Wynika stąd, że sygnały sinusoidalne powinny być rozpinane za pomocą
baz o kształcie „sinusoidalnym”, sygnały zero-jedynkowe zaś − za pomocą baz „zero-jedynko-
wych”.
Na rysunku 2.4 przedstawiono dwa 16-punktowe sygnały „sinusoidalne” oraz współczynniki
αk, k = 1, 2,..., 16, rozłożenia dwóch sygnałów dyskretnych względem zespolonych baz fourie-
rowskich. W pierwszym przypadku jedna z funkcji bazowych ma dokładnie taką samą często-
tliwość jak analizowany sygnał sinusoidalny, w związku z czym wystarczy ją tylko przesunąć
w fazie i przeskalować w amplitudzie, aby w pełni odtworzyć sygnał analizowany. Zapewnia to
odpowiedni dobór wartości zespolonego współczynnika αk, równego:
α k = αk ⋅ e j∠α k = Re(αk ) + j Im(αk ) (2.81)
Podstawy matematyczne analizy sygnałów deterministycznych 55

baza kosinusowa baza sinusowa baza Hadamarda baza Haara

0.5 0.5 0.5 1


k=0 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=1 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=2 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=3 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=4 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=5 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=6 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

0.5 0.5 0.5 1


k=7 0 0 0 0

-0.5 -0.5 -0.5 -1


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

Rys. 2.3. Wektory bk, k = 0, 1, 2,..., N−1, rzeczywistej bazy kosinusowej, sinusowej, Hadamarda i Haara
(pionowo od lewej strony do prawej). UWAGA: w przypadku bazy Hadamarda w celu uzyskania rosnących
częstotliwości wyjątkowo ustawiono wektory bazowe w zmienionej kolejności:b0, b4, b6, b2, b3, b7, b5, b1
56 Podstawy matematyczne analizy sygnałów deterministycznych

analizowany sygnał x1(n) analizowany sygnał x2(n)


1
0.5
0 0
-0.5
-1 n n
1 5 10 15 1 5 10 15
część rzeczywista αk część rzeczywista αk

1 0.2

0.5 0.1

0 k 0 k
1 5 10 15 1 5 10 15

część urojona αk część urojona αk


1 1

0 0

-1 -1
k k
1 5 10 15 1 5 10 15

moduł αk moduł αk
2
1
1
0.5

0 k 0 k
1 5 10 15 1 5 10 15

Rys. 2.4. Dekompozycja dwóch dyskretnych sygnałów sinusoidalnych względem bazy fourierowskiej
(2.72) dla N = 16. Pionowo: sygnał, a potem kolejno część rzeczywista, urojona oraz moduł współ-
czynników rozwinięcia αk, k = 1, 2,..., N. Analizowane sygnały dyskretne: x1(n) = cos((2π/N)2n), x2(n) =
= cos((2π/N)1.35n), n = 1, 2,..., N

W drugim przypadku analizowany sygnał jest „sinusoidą” o częstotliwości, która nie jest obec-
na w zbiorze funkcji bazowych Fouriera. W związku z tym nie może być przedstawiona za
pomocą tylko jednego wektora bazowego. Współczynniki rozwinięcia uzyskujemy rzutując
prostopadle wektor sygnału na kierunki poszczególnych wektorów bazowych. Jak widać
widmo sygnału względem tych funkcji jest rozmyte, tzn. zawiera wiele współczynników nieze-
rowych. Analogiczne zjawisko występuje także w przypadku stosowania baz ortogonalnych
o wartościach rzeczywistych, na przykład bazy sinusoidalnej lub kosinusoidalnej. Jednak wów-
czas podobne rozmycie otrzymuje się także w przypadku kiedy w sygnale analizowanym
występuje składowa, odpowiadająca jednej z funkcji bazowych, lecz nie jest z nią „zsynchro-
nizowana”, tzn. jest w stosunku do niej przesunięta w czasie. Wówczas konieczna jest obec-
ność pozostałych funkcji bazowych w sumie rozwinięcia. Sytuacja taka jest pokazana na ry-
sunku 2.5.
Podstawy matematyczne analizy sygnałów deterministycznych 57

x(n) x(n)

0.2 0.2
a) 0 b) 0
-0.2 -0.2
n n
0 5 10 15 0 5 10 15
αk αk
1

0.5
c) 0.5 d)

0
0 k k
0 5 10 15 0 5 10 15

Rys. 2.5. Przykładowa dekompozycja dyskretnego sygnału względem bazy kosinusowej dla N = 16: a), b)
− rozkładane sygnały równe wektorowi b2 bazy kosinusowej oraz wektorowi b2 przesuniętemu
cyklicznie w prawo o jedną próbkę, c), d) − współczynniki rozwinięcia obu sygnałów

analizowany sygnał x(n) część rzeczywista αk


1 2

a) 0.5 b) 1

0 n 0 k
1 5 10 15 1 5 10 15

część urojona αk moduł αk


2
1

c) 0 d) 1

-1
k 0 k
1 5 10 15 1 5 10 15

Rys. 2.6. Dekompozycja dyskretnego sygnału prostokątnego względem bazy fourierowskiej (2.72) dla
N = 16. Kolejno poziomo: a) analizowany sygnał oraz b) część rzeczywista, c) urojona i d) moduł
współczynników rozwinięcia αk, k = 1, 2,..., N

Na rysunku 2.6 pokazano natomiast dekompozycję fourierowską dyskretnego sygnału prosto-


kątnego. W tym przypadku w celu rekonstrukcji sygnału zawsze jest konieczne użycie wielu
funkcji bazowych, gdyż ich kształt „nie pasuje” do analizowanego sygnału.
Bardziej szczegółowe rozważania dotyczące dyskretnej transformacji Fouriera DFT, związanej
z bazą (2.73), i jej zastosowania są przedstawione w dalszych rozdziałach. I tak w rozdziale
8 przedyskutowano różne aspekty zastosowania DFT do analizy częstotliwościowej sygnałów,
a w rozdziale 9 przedstawiono szybkie metody wyznaczania tej transformaty.

Dla dociekliwych − różne wersje dyskretnej transformacji kosinusowej. W literaturze definiu-


je się cztery rodzaje dyskretnych transformacji kosinusowych i sinusowych. Przykładowo
58 Podstawy matematyczne analizy sygnałów deterministycznych

funkcje bazowe transformacji kosinusowych mają zwyczajowo w takim przypadku następują-


cą, zunifikowaną postać:
 πkn 
DCT-I: bk (n ) = 2 / N ⋅ c ( k ) c ( n ) ⋅ cos  , k , n = 0, 1, 2,..., N
 N 
 πk (n + 1/ 2) 
DCT-II: bk (n ) = 2 / N ⋅ c ( k ) ⋅ cos   , k , n = 0, 1, 2,..., N − 1
 N

 π(k + 1/ 2)n 
DCT-III: bk (n ) = 2 / N ⋅ c ( n ) ⋅ cos   , k , n = 0,1, 2,..., N − 1
 N

 π(k + 1/ 2)(n + 1/ 2) 
DCT-IV; bk (n ) = 2 / N ⋅ cos   , k , n = 0,1, 2,..., N − 1
 N
gdzie:
1 / 2 , i = 0 lub i = N
c (i ) = 
 1, 0 < i < N

Transformacja przedstawiona wzorem (2.76) jest więc transformacją kosinusową typu DCT-II.
To właśnie ona jest stosowana w algorytmach kompresji obrazów nieruchomych (standard
JPEG) i ruchomych (standard MPEG), natomiast transformacja DCT-III jest wykorzystywana
w modulowanych zespołach filtrów popularnego standardu MPEG audio (standardy MPEG-1
[ISO92] i MPEG-2 [ISO94], poziomy mp1, mp2 i mp3).

Dla dociekliwych − optymalne wektory bazowe dla sygnałów losowych. Załóżmy obecnie, że
dekomponowany (analizowany) wektor x (2.62), ortonormalne (ortogonalne i unormowane)
wektory bazowe bk, k = 1, 2,..., N, (2.67) oraz wektor współczynników α (2.71) są „pionowe”,
czyli że:
 x (1)   bk (1)   α1 
 x ( 2)   b ( 2)  α 
x=  , bk =  k , α =  2 (2.82)
     
     
 x ( N ) bk ( N ) α N 
Niech x oznacza teraz d y s k r e t n y s y g n a ł l o s o w y o zerowej wartości średniej, który
przyjmuje w ogólności wartości zespolone. Zgodnie z (2.70), (2.71) także taki wektor x może
być przedstawiony jako liniowa kombinacja wektorów bazowych bk:
x = Bα, α = B H x, B = [b1, b 2 ,..., b N ] (2.83)
gdzie „H” oznacza transpozycję macierzy oraz zespolone sprzężenie jej elementów. Kolumny
macierzy przekształcenia B są równe wektorom bazowym bk. W przypadku analizy sygnałów
losowych wektory te powinny być takie, aby dwa dowolne współczynniki „rozwinięcia” αk i αl
nie były ze sobą skorelowane (E[.] oznacza wartość oczekiwaną (1.33)):

[ ] 0, k ≠ l
E αk αlH =  (2.84)
λ k , k = l
Po uwzględnieniu (2.83), równanie (2.84) jest równoważne następującemu warunkowi:
Podstawy matematyczne analizy sygnałów deterministycznych 59


( )H  = bkH ⋅ E [xx H ]⋅ bl = bkH ⋅ R xx ⋅ bl = λ0,,
E  b kH x ⋅ b lH x
k ≠l
k =l
(2.85)
 k

Ponieważ dla dowolnych dwóch ortonormalnych funkcji bazowych bk i bl mamy:


0, k ≠ l
b kH ⋅ b l =  (2.86)
 1, k = l
stąd (2.85) można zapisać jako:
R xx b k = λ k b k , k = 1, 2, 3,..., N (2.87)
Wynika stąd, że w przypadku dekompozycji sygnałów losowych funkcje bazowe bk powinny
być równe wektorom własnym macierzy Rxx, zbudowanej z wartości funkcji autokorelacji
R xx (m ) = E[ x n x n* − m ] analizowanego sygnału:

 E[ x1 x1* ] E[ x1 x2* ] E[ x1 x *N ]   Rxx (0) Rxx ( −1) Rxx ( −( N − 1)) 


 *   R (1)
E[ x2 x1* ] E[ x2 x2* ] E [ x2 x N ]   Rxx (0) Rxx ( −( N − 2))
R xx = E [xx H ] =  = xx 
   
   
* *
 E[ x N x1 ] E[ x N x2 ] E[ x N x *N ]  Rxx ( N − 1) Rxx ( N − 2) Rxx (0) 

(2.88)
Otrzymywana w ten sposób baza jest nazywana bazą Karhunena-Loevego (KL). Jest ona opty-
malnie „dopasowana” do analizowanego sygnału losowego, to znaczy zapewnia koncentrację
energii sygnału w najmniejszej liczbie wektorów bazowych dekompozycji (gdyż każda
następna funkcja bazowa „przechwytuje” maksymalną ilość energii sygnału, leżącej poza
przestrzenią wektorową „rozpiętą” na poprzednich funkcjach bazowych). Ponieważ Rxx(m) =
= R*xx(−m), macierz Rxx jest zawsze macierzą hermitowską (symetryczną w sposób sprzężony),
dodatnio określoną lub półokreślnoną. Dla szumu białego o wariancji σ2 mamy Rxx = σ2 I.
Bazę Karhunena-Loevego wyznacza się konstruując macierz autokorelacji Rxx = E[xxH] (2.88),
związaną z analizowanym sygnałem (funkcja autokorelacji Rxx(m) jest znana lub estymowana,
na przykład na podstawie (1.48)), a następnie dekomponując tę macierz względem jej wartości
własnych λk (na przykład wykorzystując funkcję eig()w programie Matlab):
N
R xx = ∑ λ k v k v kH , λ1 ≥ λ 2 ≥ λ 3 ≥ ... ≥ λ N (2.89)
k =1

Optymalne funkcje bazowe bk są równe ortogonalnym wektorom własnym vk macierzy, otrzy-


manym w wyniku powyższej dekompozycji. Wartości własne i wektory własne zespolonej,
hermitowskiej macierzy kwadratowej Rxx spełniają równanie (2.87):
R xx v k = λ k v k (2.90)
Ponieważ wartości własne są nieujemne i uporządkowane od największej do najmniejszej
(λ1 ≥ λ2 ≥ λ3 ≥...≥ λN), w wyniku dekompozycji sygnał może już być dobrze aproksymowany
przez kombinację liniową tylko kilku pierwszych wektorów własnych w (2.70) (np. M << N).
Ponieważ jednak wektory własne są zależne od sygnału, nie jest możliwe stworzenie szybkich
algorytmów obliczeniowych, gdyż wykorzystuje się w nich a priori specyficzne cechy funkcji
bazowych, a w tym przypadku funkcje te nie są znane. W szczególnym przypadku dyskretnych
autoregresyjnych sygnałów losowych postaci:
60 Podstawy matematyczne analizy sygnałów deterministycznych

x (n ) = ax(n − 1) + szum(n ) / 1 − a 2 (2.91)


generowanych przez procesy losowe AR(1) i mających funkcję autokorelacji daną wzorem
R (m) = a m (2.92)
dyskretna baza kosinusowa DCT-II stanowi bardzo dobre przybliżenie optymalnych baz
Karhunena-Loevego dla wartości a bliskich 1, jest ona więc stosowana w przetwarzaniu
obrazów cyfrowych (standardy JPEG i MPEG), gdyż obrazy najczęściej modeluje się właśnie
za pomocą dwuwymiarowych modeli autoregresyjnych pierwszego rzędu AR(1,1):

x ( m, n ) = a1 x ( m − 1, n ) + a2 x ( m, n − 1) − a1a2 x ( m − 1, n − 1) + szum( m, n ) / (1 − a12 )(1 − a22 ) (2.93)


z a1 = a2 = 0,95, mających funkcję autokorelacji:
R( m, n ) = a1m a2n (2.94)
W równaniach (2.91), (2.93) występuje szum normalny o wartości średniej równej zero i wa-
riancji równej 1.

2.5. Przykład ćwiczenia komputerowego


W tabeli 2-1 jest przedstawiony przykładowy program, napisany w języku Matlab, który po-
służył do wygenerowania wszystkich rysunków zaprezentowanych w tym rozdziale. Zdaniem
autora zainteresowany Czytelnik może go z powodzeniem wykorzystać do dalszych, samo-
dzielnych eksperymentów.

Tab. 2-1. Przykładowe ćwiczenie komputerowe

% Ćwiczenie: Transformacje ortogonalne sygnałów

% Transformaty ortogonalne sygnałów


% 1) kształt dyskretnych baz: Fouriera, kosinusowej, sinusowej, Hadamarda, Walsha
% 2) dopasowanie bazy − przykładowa dekompozycja dwóch sygnałów
clear all; subplot(111);

N=4; % wybór liczby (długości) funkcji bazowych (wymiar przestrzeni wektorowej)


n=0:N-1; % indeksy wszystkich próbek poszczególnych funkcji bazowych
NN=2*N; % zmienna pomocnicza

% Kształt funkcji bazowych dla transformacji kosinusowej i sinusowej


% n-ta próbka k-tej funkcji bazowej

f = 1/sqrt(N); % współczynnik normalizujący transformację Fouriera


c = [ sqrt(1/N) sqrt(2/N)*ones(1,N-1) ]; % współczynnik normalizujący transformację kosinusową
s = sqrt(2/(N+1)); % współczynnik normalizujący transformację sinusową
for k=0:N-1 % wyznacz wszystkie próbki k-tej bazy
bf(k+1,n+1) = f * exp(j*2*pi/N*k*n); % transformacja Fouriera
bc(k+1,n+1) = c(k+1) * cos( pi*k*(2*l+n) / NN ); % transformacja kosinusowa
bs(k+1,n+1) = s * sin( pi*(k+1)*(n+1) / (N+1) ); % transformacja sinusowa
% stem(bc(k+1,1:N)); title('k-ta funkcja bazowa'); pause
end

% Kształt funkcji bazowych dla transformacji Hadamarda


% n-ta próbka k-tej funkcji bazowej
Podstawy matematyczne analizy sygnałów deterministycznych 61

m=log2(N); c=sqrt(1/N);
for k=0:N-1
kk=k;
for i=0:m-1
ki(i+1)=rem(kk,2); kk=floor(kk/2);
end
for n=0:N-1
nn=n;
for i=0:m-1
ni(i+1)=rem(nn,2); nn=floor(nn/2);
end
bHD(k+1,n+1) = c * (-1)^sum(ki .* ni);
end
% stem(bHD(k+1,1:N)); title('k-ta funkcja bazowa'); pause
end

% Kształt funkcji bazowych dla transformacji Haara


% n-ta próbka k-tej funkcji bazowej
c=sqrt(1/N); bHR(1,1:N)=c*ones(1,N);
for k=1:N-1
p=0;
while(k+1 > 2^p)
p=p+1;
end
p=p-1;
q=k-2^p+1;
for n=0:N-1
x=n/N;
if ( ( (q-1)/2^p <= x ) & ( x < (q-1/2)/2^p ) ) bHR(k+1,n+1)= c*2^(p/2);
elseif ( ( (q-1/2)/2^p <= x ) & ( x < q/2^p )) bHR(k+1,n+1)=-c*2^(p/2);
else bHR(k+1,n+1)=0;
end
end
% stem(bHR(k+1,1:N)); title('k-ta funkcja bazowa'); pause
end

% Sprawdzenie ortonormalności wybranych funkcji bazowych

for k=1:N % zbudowanie macierzy transformacji


Tf(k,1:N) = bf(k,1:N); % transformacja Fouriera
Tc(k,1:N) = bc(k,1:N); % transformacja kosinusowa
Ts(k,1:N) = bs(k,1:N); % transformacja sinusowa
THD(k,1:N) = bHD(k,1:N); % transformacja Hadamarda
THR(k,1:N) = bHR(k,1:N); % transformacja Haara
end
T = THR; % wybierz transformację
I = T * T' % sprawdź, czy iloczyn jest macierzą diagonalną jednostkową
pause

% Przykład analizy (dekompozycji) i syntezy sygnału

% Generacja sygnałów testowych

kk = 2; % testowy „indeks” częstotliwości, np. 1.35, 2, 2.5, 3


fi = 0; % przesunięcie fazowe 0, pi/8, pi/4, pi/2
n = 0 : N-1;
x1 = cos( (2*pi/N)*kk*n + fi ); % cz. rzeczywista bazy fourierowskiej
x2 = cos( pi*kk*(2*n+1)/NN + fi ); % wektor bazy kosinusowej
x3 = sin( pi*(kk+1)*(n+1)/(N+1) + fi ); % wektor bazy sinusowej
x4 = cos( (2*pi/N)*2*n + fi ) + cos( (2*pi/N)*4*n + fi );
x5 = [ ones(1,N/2) zeros(1,N/2) ];
x6 = [ -ones(1,N/4) ones(1,N/2) -ones(1,N/4) ];

x = x6; % wybór konkretnego sygnału do dekompozycji

T = THR; % wybór transformacji: Tf, Tc, Ts, THD, THR


62 Podstawy matematyczne analizy sygnałów deterministycznych

a = T * x'; % analiza w zapisie macierzowym


y = T' * a; % synteza w zapisie macierzowym
y = y'; % zamień wektor pionowy na poziomy
stem(l,x,'filled','-k'); axis tight; title('sygnał analizowany x(l)');
xlabel('numer próbki'); pause
stem(l,real(a),'filled','-k'); axis tight; title('wsp dekomopozycji alfa(k)');
xlabel('numer próbki'); pause
stem(l,y,'filled','-k'); axis tight; title('sygnał zsyntezowany x(l)');
xlabel('numer próbki'); pause
stem(l,y-x,'filled','-k'); axis tight; title('błąd syntezy 1: y(l)-x(l)');
xlabel('numer próbki'); pause

% Analiza i synteza w zapisie niemacierzowym

y=zeros(1,N); %
for k = 0 : N-1 % ANALIZA: oblicz współczynniki
a(k+1) = sum( x .* conj(T(k+1,1:N)) ); %
end %
for k = 0 : N-1 % SYNTEZA: odtwórz sygnał
y = y + a(k+1) * T(k+1,1:N); %
end %
stem(l,y-x,'filled','-k'); axis tight; title('błąd syntezy 2: y(l)-x(l)');
xlabel('numer próbki'); pause
3
Szereg Fouriera

Niniejszy rozdział stanowi kontynuację rozdziału poprzedniego, dotyczącego zagadnienia


aproksymacji sygnałów za pomocą zbioru funkcji bazowych. Przedstawiono w nim teorię
i przykłady zastosowań klasycznego szeregu Fouriera − najstarszego, ale zarazem najbardziej
popularnego i najczęściej stosowanego narzędzia dekompozycji (analizy) częstotliwościowej
sygnałów analogowych. Spojrzenie na równania definicyjne szeregu Fouriera jako na wynik
szczególnego zadania o p t y m a l i z a c j i p a r a m e t r y c z n e j wartości współczynników funkcji
aproksymującej badany sygnał jest bardzo kształcące (np. [Izyd99]).
Szereg Fouriera jest protoplastą dyskretnej transformacji Fouriera, niepodzielnie królującej
w świecie komputerowej analizy częstotliwościowej sygnałów. Dlatego nie może go zabraknąć
w naszym podręczniku. „Każdy Jaś o nim wiedzieć powinien”.

3.1. Ortogonalne funkcje bazowe


Załóżmy, że chcemy aproksymować sygnał okresowy x(t), przyjmujący wyłącznie wartości
r z e c z y w i s t e , należący do przestrzeni Hilberta LT2 wszystkich sygnałów okresowych o okre-
sie T. Z poprzedniego rozdziału wiemy, że iloczyn skalarny 〈x, y〉 dowolnych dwóch r z e -
c z y w i s t y c h sygnałów x(t) i y(t), należących do tej przestrzeni, oraz norma ||x|| sygnału x(t)
są zdefiniowane następująco (patrz (2.10)):

t0 +T t0 + T
1 1
x, y L2T
= ∫ x (t ) y (t )dt , x L2T
= x, x = ∫ | x( t ) |2 dt (3.1)
T t0 T t0

W szczególności wartość parametru t0 może być równa zero. Do aproksymacji chcemy użyć
zbioru r z e c z y w i s t y c h , ortogonalnych („prostopadłych”) funkcji bazowych fk(t), tzn. fun-
kcji spełniających warunek:
t0 +T
1
fi , f j =
T ∫ f i (t ) f j (t )dt = 0 dla i ≠ j (3.2)
t0
64 Szereg Fouriera

Kryterium „jakości” aproksymacji jest błąd średniokwadratowej:


t0 + T 2
 ∞ 
1
ε= ∫  x (t ) − ∑ ck f k (t ) dt (3.3)
T to  k = −∞ 
W celu znalezienia jej minimum należy przyrównać do zera pochodne cząstkowe funkcji
ε względem współczynników rozwinięcia ck, −∞ ≤ k ≤ ∞:
∂ε ∂ε ∂ε ∂ε ∂ε
= = = = ... = 0 (3.4)
∂c0 ∂c1 ∂c−1 ∂c2 ∂c− 2
Dla dowolnego cn otrzymujemy:
 t +T ∞
2 
∂ 1 0   
 x (t ) − ∑ ck f k (t ) dt  = 0
∂cn  T t∫  k = −∞  
 0 

∂ 1
t0 +T  ∞  ∞   
2

∫  x 2 (t ) − 2 x (t ) ∑ ck f k (t ) +  ∑ ck f k ( t )   dt  = 0 (3.5)
∂cn  T t  k =−∞  k =−∞   
 0 

Ponieważ funkcje bazowe są ortogonalne (3.2), stąd:


t0 + T t0 + T 2
 ∞   ∞ 2 2 
∫  ∑ ck f k (t )  dt = ∫  ∑ ck f k ( t )  dt (3.6)
t0  k =−∞  t0  k =−∞ 

i równanie (3.5) możemy zapisać w postaci:

∂ 1  
t0 +T ∞ ∞
 2
 x (t ) − 2 x (t ) ∑ ck f k ( t ) + ∑ ck f k (t )  dt  = 0
 2 2
∂cn  T ∫ (3.7)
 t0  k =−∞ k =−∞  

Po wykonaniu różniczkowania względem współczynnika cn w (3.7) otrzymujemy (zamiana


kolejności różniczkowania i całkowania):
t0 + T
∫  −2 x (t ) f n (t ) + 2cn f n2 (t )  dt = 0 (3.8)
 
t0
skąd
t0 +T

∫ x(t ) f n (t )dt
t0
cn = t0 +T
(3.9)
∫ f n2 (t )dt
t0
Uogólniając powyższe rozważania na z e s p o l o n e sygnały okresowe x(t) oraz z e s p o l o n e
funkcje bazowe fk(t), spełniające warunek ortogonalności (3.2), otrzymuje się następującą za-
leżność na współczynniki rozwinięcia sygnału w uogólniony szereg Fouriera:
t0 + T t0 +T
cn = ∫ x(t ) f n* (t ) dt ∫ f n (t ) f n* (t )dt (3.10)
t0 t0
Szereg Fouriera 65

3.2. Harmoniczne zespolone funkcje bazowe


Załóżmy, że funkcje bazowe są zespolonymi sygnałami harmonicznymi postaci:
 2π   2π 
f k (t ) = e j (kω0 )t = e j 2 π (kf 0 )t = e j 2 π( k / T )t = cos t  + j sin t , j = −1 (3.11)
T /k  T /k 
o pulsacjach kω0 (radiany na sekundę), częstotliwościach kf0 (herce, czyli okresy na sekundę)
i okresach T/k (sekundy), gdzie f0 = 1/T jest częstotliwością podstawową, zależną od wartości
okresu T analizowanego sygnału. Ponieważ funkcje sinus i kosinus mają okres 2π, okresem
funkcji cos(2πt/(T/k)) i sin(2πt/(T/k)) jest taka wartość zmiennej t, dla której 2πt/(T/k) = 2π,
czyli T/k. Jak widać dla kolejnych funkcji bazowych (rosnącego |k|) wartość ich okresu jest
coraz mniejsza, a ich częstotliwość coraz większa. Oczywiście tak zdefiniowane funkcje
bazowe są do siebie ortogonalne, czyli spełniają warunek (3.2), ponieważ pole całkowanej po-
wierzchni iloczynu fi(t)⋅fj(t) dwóch funkcji dla i ≠ j jest równe zero (pola „dodatnie”, leżące
powyżej osi czasu, oraz „ujemne”, leżące poniżej tej osi, wzajemnie się znoszą). Jeśli połączy-
my pary funkcji bazowych o takiej samej wartości |k|, to otrzymamy (uwzględniając: cos(−φ) =
= cos(φ), sin(−φ) = −sin(φ)):
g k ( t ) = f − k (t ) + f k (t ) = e ( 0 ) + e ( 0 ) = 2 cos ( ( k ω0 )t )
j kω t − j kω t
(3.12)
czyli nową funkcję bazową gk(t), przyjmującą tylko wartości rzeczywiste.
W przypadku harmonicznych funkcji bazowych szereg Fouriera jest zdefiniowany wzorem:

x (t ) = ∑ ck e jkω t 0 (3.13)
k = −∞
i sygnał x(t) jest przedstawiany jako suma następujących składowych: składowej stałej (k = 0,
f0(t) = 1), pierwszej harmonicznej (k = ±1, f±1(t) = exp(j2π(±f0)t), drugiej harmonicznej (k = ±2,
f±2(t) = exp(j2π(±2f0)t) itd. Ponieważ sygnały bazowe są funkcjami harmonicznymi o różnych
częstotliwościach, rozłożenie sygnału na związany z nim szereg Fouriera jest metodą analizy
częstotliwościowej, ponieważ współczynniki rozwinięcia ck informują nas, jakie częstotliwości
występują w rozwinięciu, a jakie nie.
Mnożąc obustronnie równanie (3.13) przez exp(−jnω0) i całkując od t0 do t0+T, otrzymujemy
t0 + T t0 +T
 ∞ ∞  t0 + T 
j ( k − n ) ω0t 
∫ x (t )e − jnω0t dt = ∫  ∑ ck e  dt = ∑ ck  ∫ e j ( k − n ) ω0t dt  (3.14)
t0 t0  k =−∞  k =−∞  t0 

Ponieważ po zastosowaniu reguły d’Hospitala i uwzględnieniu ω0 = 2π/T:


t0 + T T 0 dla k ≠ n
∫ e j ( k − n )ω0t dt = ∫ e j ( k −n ) ω0t dt =
T  e j 2 π( k −n ) − 1 =  (3.15)
j 2 π( k − n )   T dla k = n
t0 0
stąd
t0 + T
− jnω0 t
∫ x ( t )e dt = cnT (3.16)
t0
Ostatecznie dla harmonicznych funkcji bazowych mamy:
t +T t +T
1 0 − jnω0t 1 0
cn =
T t
∫ x ( t ) e dt , c0 =
T t
∫ x(t )dt (3.17)
0 0
66 Szereg Fouriera

Identyczny wynik otrzymuje się podstawiając (3.11) do (3.17) i uwzględniając następującą za-
leżność:
t0 + T t0 + T t0 + T
jnω t − jnω t
∫ f n (t ) f n* (n )dt = ∫ e 0 e 0 dt = ∫ dt = T (3.18)
t0 t0 t0

Oczywiście współczynniki szeregu Fouriera są zespolone w przypadku harmonicznych funkcji


bazowych. W związku z tym można je zapisać w układzie biegunowym za pomocą promienia
i kąta (czyli modułu i fazy):

ck = ck e jϕk (3.19)

Wówczas rozwinięcie sygnału (3.13) w szereg funkcji bazowych można zapisać jako:

x (t ) = ∑ ck e j ( k ω0t +ϕk ) (3.20)
k =−∞

Sygnał x(t) jest wtedy przedstawiany jako suma wszystkich składowych harmonicznych
exp(jkω0t), k = 0, ±1, ±2, ..., wziętych z określoną amplitudą |ck| i fazą ϕk.

3.3. Harmoniczne rzeczywiste funkcje bazowe


Załóżmy obecnie, że analizowany sygnał x(t) przyjmuje wyłącznie w a r t o ś c i r z e c z y -
w i s t e , tzn. że
x*(t) = x(t) (3.21)
Wykonując sprzężenie zespolone obu stron równania (3.13) oraz zmieniając kierunek sumo-
wania, otrzymujemy:
∞ ∞
x * (t ) = ∑ ck* e − jkω t = ∑ c−* k e jkω t
0 0 (3.22)
k = −∞ k = −∞

Z równości (3.21) wynika, że


∞ ∞
x * (t ) = x ( t ) ⇒ ∑ c−* k e jkω t = ∑ ck e jkω t
0 0 (3.23)
k = −∞ k = −∞

skąd wnioskujemy, że ck = c− k* oraz ck* = c− k. Jeśli tak, to możemy rozbić sumę (3.13) na dwa
składniki i zapisać ją w postaci:
∞ ∞ ∞
x (t ) = c0 + ∑  ck e jk ω0t + c−k e − jk ω0t  = c0 + ∑  ck e jk ω0t + ck* e− jkω0t  = c0 + ∑ 2 Re  ck e jk ω0t 
k =1 k =1 k =1
(3.24)
ponieważ suma liczby zespolonej i jej sprzężenia jest równa podwojonej części rzeczywistej
tej liczby: z + z* = (p+jq)+(p−jq) = 2p. Jeśli przyjmiemy (3.19), to (3.24) przyjmuje postać

[ ]
∞ ∞
x (t ) = c0 + ∑ 2 Re ck e j ( kω0 t + ϕ k ) = c0 + 2 ∑ ck cos(kω0 t + ϕ k ) (3.25)
k =1 k =1
Szereg Fouriera 67

Z kolei dla:
 −b 
ck = ak − jbk , ck = ak2 + bk2 , ϕk = arctg  k  (3.26)
 ak 
otrzymujemy z (3.24):
Re  ck e jk ω0t  = Re  ( ak − jbk ) ( cos ( k ω0 t ) + j sin ( k ω0t ) )  = [ ak cos( k ω0 t ) + bk sin( k ω0 t ) ]
 

x (t ) = a0 + 2 ∑ [ak cos( kω0t ) + bk sin( kω0t )] (3.27)
k =1
Ponieważ
t0 +T t0 +T t0 +T
1 1 1
ck = ∫ x (t )e − jk ω0t dt = ∫ x( t ) cos( k ω0t ) dt − j ∫ x (t )sin( k ω0t ) dt (3.28)
T t0
T t0
T t0

stąd uwzględniając zależność ck = ak − jbk, mamy:


t0 +T t 0 +T
1 1
ak =
T
∫ x (t )cos(k ω0 t ) dt , bk =
T
∫ x (t )sin( k ω0t ) dt (3.29)
t0 t0

3.4. Przykład obliczeniowy


Jako przykład zdekomponujmy w szereg Fouriera typowy sygnał prostokątny postaci
 0 dla t = 0
 A dla 0 < t < T / 2

x(t ) = 
 0 dla t = T / 2
− A dla T / 2 < t < T
przedstawiony na rysunku 3.1a. Obliczenia:

A 
T /2 T T /2 T
1 − jkω t 1
ck = ∫ Ae 0 dt + ∫ ( − A)e − jkω0 t dt =  − jkω t
∫ e 0 dt − ∫e
− jkω0 t
dt 
T T T2 T 
0  0 T /2

A  −1   − jk ω0t 
(
A  jT   − jk π
) ( )
T /2 T
ck =   e − e − jk ω0t =   e − 1 − 1 − e − jk π 
T  jk ω0   0 T /2
 T  k 2π   

 0 dla k parzystych
A  − jk π 
ck = j e −1 =  2A
kπ  
 − j k π dla k nieparzystych

 0 dla k = 2l  0 dla k = 2l
ck =  , ϕk = 
2 A kπ dla k = 2l + 1 − π / 2 dla k = 2l + 1
 0 dla k = 2l
ak = 0, bk = 
2 A kπ dla k = 2l + 1
Ostatecznie z wzoru (3.27) otrzymujemy:
4A  1 1 
x (t ) =  sin ω0t + sin 3ω0t + sin 5ω0t + ... 
π  3 5 
68 Szereg Fouriera

Tab. 3-1. Współczynniki szeregu Fouriera wybranych sygnałów

Sygnał Współczynniki szeregu Fouriera


Prostokątny, bipolarny
4A  1 1 
rys. 3.1a x (t ) =  sin ω0t + sin 3ω0t + sin 5ω0t + ... 
π  3 5 
Prostokątny, unipolarny
A 2A  1 1 
wypełnienie 1/2 x (t ) = +  cos ω0t − cos 3ω0t + cos 5ω0t − ... 
rys. 3.1b 2 π  3 5 
Prostokątny, unipolarny,
Aτ 2 Aτ ∞ sin( πk τ / T )
wypełnienie dowolne x (t ) =
T
+ ∑
T k =1 πk τ / T
cos k ω0t
rys. 3.1c
Trójkątny, bipolarny 1
8A  1 1 
rys. 3.1d x (t ) = 2
sin ω0t − 2 sin 3ω0t + 2 sin 5ω0t − ... 
π  3 5 
Trójkątny, bipolarny 2
2A  1 1 
rys. 3.1e x (t ) =  sin ω0t − sin 2ω0t + sin 3ω0t − ... 
π  2 3 
Trójkątny, unipolarny 1
A 4A ∞ 1
rys. 3.1f x (t ) = − ∑
2 π2 k =0 (2k + 1)2
cos(2k + 1)ω0t

Trójkątny, unipolarny 2
A A ∞ sin k ω0t
rys. 3.1g x (t ) = − ∑
2 π k =1 k
Sinusoidalny wyprostowany
2A 4A ∞ 1
dwupołówkowo x (t ) =
π
− ∑
π k =1 4k 2 − 1
cos2k ω0t
rys. 3.1h
Sinusoidalny wyprostowany
A A 2A ∞ 1
jednopołówkowo x (t ) = + sin ω0t −
π 2

π k =1 4k 2 − 1
cos2k ω0 t
rys. 3.1i

Jak widać w tym przypadku sygnał jest aproksymowany tylko za pomocą funkcji typu sinus.
Jest to związane z faktem, że analizowany sygnał jest sygnałem asymetrycznym (x(t) = −x(−t)),
podobnie jak funkcja sinus. Analogicznie szereg Fouriera sygnałów symetrycznych ((x(t) =
= x(−t)) składa się wyłącznie z funkcji typu kosinus, także symetrycznych. Sygnały nie mające
jednej z powyższych właściwości (symetria, asymetria) są aproksymowane szeregiem, w któ-
rym równocześnie występują funkcje sinus i kosinus bez przesunięcia fazowego (szereg (3.27))
lub szeregiem tylko funkcji kosinus przesuniętych w fazie (szereg (3.25)).
W tabeli 3-1 podano współczynniki szeregu Fouriera dla kilku wybranych sygnałów deter-
ministycznych, których przebiegi czasowe są przedstawione na rysunku 3.1.

3.5. Przykład ćwiczenia komputerowego


Przedstawimy teraz przykład komputerowej dekompozycji w szereg Fouriera dyskretnych
wersji sygnałów z rysunków 3.1a i 3.1f (T = 1 sekunda, f0 = 1 Hz). Wykorzystamy do tego celu
program, napisany w języku Matlab, przedstawiony w tabeli 3-2. Uzyskane wyniki są zapre-
zentowane na rysunku 3.2.
Szereg Fouriera 69

x1(t) x2(t)
A
t A
a) b)
0 T/2 T t
-A
-T/2 0 T/2 T

x4(t)
x3(t) A
A T/2 t
c) d)
t 0 T

-τ/2 τ/2 T/2 T -A

x5(t) x6(t)
A A

e) T/2 t f)
0 T t

-A 0 T 2T

x7(t)
x8(t)
A
A
g) h)
t t

0 T 2T 0 T/2 T

x9(t)
A
i)
t
0 T/2 T

Rys. 3.1. Kształt sygnałów, dla których podano współczynniki szeregu Fouriera w tabeli 3-1. a) − bipolarna
fala prostokątna, b), c) − unipolarne fale prostokątne, d), e), f), g) − różne bipolarne i unipolarne fale
trójkątne, h), i) − sygnał sinusoidalny wyprostowany dwupołówkowo i jednopołówkowo

Tab. 3-2. Przykład programu do wyznaczania z definicji szeregu Fouriera sygnałów dyskretnych

% Ćwiczenie: Szereg Fouriera − aproksymacja wybranych przebiegów czasowych

clear all; clf; subplot(111);

% Parametry programu

T=1; % okres przebiegu prostokątnego [sekundy]


N=1000; % liczba próbek przypadających na ten okres
dt=T/N; % odległość między próbkami
t=0:dt:(N-1)*dt; % kolejne chwile czasowe odpowiadające próbkom sygnału
A=1; % amplituda sygnału [−A, +A]
NF=30; % liczba współczynników szeregu Fouriera do wyznaczenia (mniejsza lub równa N/2)
70 Szereg Fouriera

isygnal=1; % numer sygnału testowego

f0=1/T; % częstotliwość podstawowa szeregu Fouriera

% Wygenerowanie jednego okresu sygnału


if (isygnal==1) x=[0 A*ones(1,N/2-1) 0 -A*ones(1,N/2-1)]; end
if (isygnal==2) x=[A*ones(1,N/4) 0 -A*ones(1,N/2-1) 0 A*ones(1,N/4-1)]; end
if (isygnal==3) x=[A*ones(1,N/8) 0 -A*ones(1,5*N/8-1) 0 A*ones(1,2*N/8-1)]; end
if (isygnal==4) x=(A/T)*t; end
if (isygnal==5) x=[(2*A/T)*t(1:N/2+1) (2*A/T)*t(N/2:-1:2)]; end
if (isygnal==6) x=sin(2*pi*t/(T)); end

% Dodaj inne sygnały ...


% if (isygnal==7) x=?; end
plot(t,x); grid; title('Sygnał analizowany'); xlabel('czas [sek]'); pause

% Wyznaczenie współczynników rozwinięcia sygnału w szereg Fouriera


for k=0:NF-1
ck=cos(2*pi*k*f0*t); % plot(t,ck); grid; title('cosinus'); pause % k-ty cosinus
sk=sin(2*pi*k*f0*t); % plot(t,sk); grid; title('sinus'); pause % k-ty sinus
a(k+1)=sum(x.*ck)/N; % współczynnik kosinusa
b(k+1)=sum(x.*sk)/N; % współczynnik sinusa
% F(k+1,1:N)=(ck-j*sk)/sqrt(N); % w celach testowych dla małego N
end

% I = F * F' % test ortonormalności bazy Fouriera dla małego N


% pause
f=0 : f0 : (NF-1)*f0;
subplot(211); stem(f,a,'filled'); xlabel('[Hz]'); title('Współczynniki cos');
subplot(212); stem(f,b,'filled'); xlabel('[Hz]'); title('Współczynniki sin');
pause

% Porównanie ze współczynnikami teoretycznymi − dodaj dla pozostałych

if (isygnal==1) % funkcja asymetryczna (tylko sinusy)


at=[]; bt=[];
for k=1:2:NF
at=[at 0 0];
bt=[bt 0 (2*A)/(pi*k)];
end
subplot(211); plot(f,a-at(1:NF)); grid; xlabel('[Hz]'); title('Różnica cos');
subplot(212); plot(f,b-bt(1:NF)); grid; xlabel('[Hz]'); title('Różnica sin');
pause
end

% Porównanie z dyskretną transformacją Fouriera


X = fft(x,N)/N;
X = conj(X); % funkcje bazowe exp(-jwt) a nie exp(j*wt),
% czyli dla sygnałów rzeczywistych x mamy sprzężenie
subplot(211); plot( f, a-real(X(1:NF)) ); grid; title('Różnica z DFT - COS');
subplot(212); plot( f, b-imag(X(1:NF)) ); grid; title('Różnica z DFT - SIN');
pause

% Synteza sygnału ze współczynników rozwinięcia


subplot(111);
a(1)=a(1)/2; y=zeros(1,N);
for k=0:NF-1
y = y + 2*a(k+1)*cos(k*2*pi*f0*t) + 2*b(k+1)*sin(k*2*pi*f0*t);
plot(t,y); grid; title('Suma = k pierwszych funkcji bazowych'); pause
end
plot(t,y); grid; title('Całkowity sygnał zsyntezowany'); xlabel('czas [sek]'); pause
plot(t,y-x); grid; title('Sygnał błędu'); xlabel('czas [sek]'); pause
Szereg Fouriera 71

współczynniki sinusów współczynniki sinusów


0
1
-0.1
a) b)
0.5 -0.2

-0.3
0
0 5 10 15 20 0 5 10 15 20
f [Hz] f [Hz]

suma 5 harmonicznych suma 5 harmonicznych


1
1

c) 0 d) 0.5

-1 0
0 0.5 1 0 0.5 1
czas [s] czas [s]

suma 10 harmonicznych suma 10 harmonicznych


1 1

e) 0 f) 0.5

-1 0
0 0.5 1 0 0.5 1
czas [s] czas [s]

suma 30 harmonicznych suma 30 harmonicznych


1 1

g) 0 h) 0.5

-1 0
0 0.5 1 0 0.5 1
czas [s] czas [s]

Rys. 3.2. Przykład rozwinięcia w szereg Fouriera sygnału z rysunku 3.1a (po lewej) i 3.1g (po prawej), czyli
fali prostokątnej bipolarnej oraz fali trójkątnej unipolarnej: a), b) − współczynniki rozwinięcia względem
funkcji sinus, c), d) − suma pierwszych 5 harmonicznych, e), f) − suma pierwszych 10 harmonicznych, g), h)
− suma pierwszych 30 harmonicznych. Dla drugiego sygnału uwzględniono w sumie także składową stałą.
W rozwinięciu w szereg Fouriera obu sygnałów brak jest składowych kosinusoidalnych

3.6. Szereg Fouriera sygnałów dyskretnych


− dyskretne przekształcenie Fouriera
Obecnie t y l k o w c e l a c h p o g l ą d o w y c h wyznaczymy w sposób uproszczony odpo-
wiedniki równań (3.13), (3.17) dla sygnałów dyskretnych. Załóżmy, że dysponujemy N prób-
72 Szereg Fouriera

kami dyskretnego sygnału okresowego x(n) o okresie N, czyli wartościami x(0), x(1), x(2),...,
x(N−1). Próbki te są odległe od siebie o odstęp czasu ∆t (okres próbkowania), czyli często-
tliwość próbkowania wynosi fp = 1/∆t. Ponieważ sygnał jest okresowy, więc x(n) = x(n+N).
Zainteresujmy się na początek wzorem (3.17). W rozpatrywanym przypadku okres sygnału
T jest równy T = N⋅∆t, w związku z czym częstotliwość podstawowa szeregu Fouriera f0 wy-
nosi f0 = 1/T = 1/(N⋅∆t), jej k-ta harmoniczna fk jest zaś równa kf0 = k/(N⋅∆t). Odpowiadająca
jej pulsacja ωk ma wartość kω0 = k ⋅2πf0 = 2π(kf0) = 2πk/(N⋅∆t). Uwzględniając powyższe
zależności oraz zastępując całkę sumą i podstawiając t = n⋅∆t, dt = ∆t (uproszczone całkowanie
metodą „prostokątów”), równanie (3.17) można zapisać jako
2 πk
1 N −1 1 N −1 −j ( n∆t )
ck = ∑
N ∆t n = 0
x(n∆t )e− jk ω0 ( n ∆t ) ∆t =
N
∑ x ( n )e N ∆t , k = 0, ± 1, ± 2, ... (3.30)
n=0

skąd po uproszczeniu wyrażenia znajdującego się w eksponencie otrzymujemy:


N −1 2π
1 −j kn
ck =
N
∑ x ( n )e N , k = 0, ± 1, ± 2, ... (3.31)
n =0

Ponieważ jednak funkcja eksponencjalna występująca w powyższym wzorze jest okresowa ze


względu na k i ma okres równy N :
2π 2π
−j (k + N )n −j kn
e N =e N (3.32)
stąd funkcje bazowe są identyczne dla k i k+N i współczynniki szeregu Fouriera sygnału dys-
kretnego wystarczy obliczyć tylko dla 0 ≤ k ≤ N − 1 . Ostatecznie współczynniki szeregu Fou-
riera są w tym przypadku równe:
N −1 2π
1 −j kn
ck =
N
∑ x ( n )e N , k = 0, 1, 2, ..., N − 1 (3.33)
n =0

gdzie c0 jest wartością średnią sygnału x(n), c1 to współczynnik rozwinięcia tego sygnału
względem sygnału harmonicznego o częstotliwości podstawowej f0 = 1/T = 1/(N⋅∆t), c2 jest
współczynnikiem rozwinięcia względem sygnału o częstotliwości 2f0, c3 − współczynnikiem
„dla” 3f0, itd.
Jeśli rozkładany sygnał x(n) przyjmuje tylko wartości rzeczywiste, to
N −1 N −1
1  2π  1  2π 
Re(ck ) = ∑ x(n) cos N kn , Im(ck ) = − ∑ x(n) sin N kn 
N n =0 N n =0

Jednak dla dowolnego n dyskretne funkcje bazowe kosinus są identyczne dla k i N−k (lub
N/2+k i N/2−k):

 2π   2π   2π   2π 
cos ( N − k )n  = cos kn , cos ( N / 2 + k )n  = cos ( N / 2 − k )n  (3.34)
N  N  N  N 
gdyż
 2π   2π   2π   2π 
cos ( N − k )n  = cos 2 πn − kn  = cos(2πn ) cos kn  + sin(2πn )sin kn 
N   N  N  N 
Szereg Fouriera 73

a cos(2πn) = 1 i sin(2πn) = 0. Podobnie funkcje sinus są takie same dla indeksów k i N−k, tylko
zanegowane:

 2π   2π   2π   2π 
sin ( N − k )n  = − sin kn , sin ( N / 2 + k )n  = − sin ( N / 2 − k )n  (3.35)
 N   N   N   N 
Wynika stąd, że:
Re(c N / 2 + k ) = Re(c N / 2 − k ), Im(c N / 2 + k ) = − Im(c N / 2 − k ) (3.36a)
czyli
c N / 2 + k = (c N / 2 − k )* (3.36b)
Jak widać pierwszych N/2+1 współczynników ck ( 0 ≤ k ≤ N / 2 ) jednoznacznie określa szereg
Fouriera sygnału dyskretnego, a współczynniki o indeksach N / 2 + 1 ≤ k ≤ N − 1 są (a)syme-
tryczne. Granicznemu indeksowi k = N/2 odpowiada częstotliwość funkcji harmonicznej równa
f = (N/2)f0 = (N/2)(1/(N∆t)) = 1/(2∆t) = fp/2, czyli połowie częstotliwości próbkowania. Z za-
leżności (3.32) wynika, że ck+mN = ck, czyli wartości współczynników szeregu powtarzają się
okresowo co N.
„Identyczność” odpowiednich dyskretnych funkcji bazowych można zaobserwować na rysunku
2.2 dla N = 8. Jak widać spróbkowane bazowe sygnały (ko)sinusoidalne o wysokich często-
tliwościach „wyglądają” tak samo jak odpowiednie bazowe sygnały (ko)sinusoidalne o niskich
częstotliwościach. Jest więc tracona „informacja” częstotliwościowa, zawarta w dyskretnych
funkcjach bazowych dla k > N/2. Dodatkowo funkcje bazowe o częstotliwościach o indek-
sach k oraz k + mN są dokładnie takie same.

Dygresja. Podobne problemy z „kształtem” muszą także dotyczyć analizowanego sygnału.


Wynika stąd, że po spróbkowaniu sygnału analogowego x(t) z częstotliwością fp, w jego wersji
dyskretnej x(n) nie możemy rozróżnić częstotliwości f i mfp−f oraz f i mfp+f. Należy więc
ograniczyć tak pasmo częstotliwościowe sygnału, aby nie występował w nim ten problem.
Najczęściej filtruje się sygnał filtrem dolnoprzepustowym, usuwającym z niego składowe
o częstotliwości równej lub większej od połowy częstotliwości próbkowania. Dlaczego elimi-
nuje się także połowę fp? Ponieważ w przypadku sygnału (ko)sinusoidalnego o tej często-
tliwości można mieć pecha i podczas próbkowania „trafiać” wyłącznie w miejsca zerowe
„funkcji” sygnału i uzyskać składową stała, a to musi zakończyć się „fatalnym zauroczeniem”
prostotą sygnału i diagnostyczną katastrofą.

Traktując współczynniki ck szeregu Fouriera jako widmo amplitudowe X(k) analizowanego


sygnału x(n) (patrz rozdział 1), ostatecznie otrzymuje się na podstawie (3.33) parę równań
szeregu Fouriera dla sygnałów dyskretnych:
N −1 2π N −1 2π
1 −j kn j kn
X (k ) =
N
∑ x (n)e N , x( n) = ∑ X ( k )e N (3.37a, b)
n =0 k =0

Powszechnie w literaturze powyższa transformacja sygnału jest nazywana dyskretną transfor-


macją Fouriera. Jest to transformacja ortogonalna, ponieważ funkcje bazowe „rozpinające”
sygnał są wzajemnie do siebie ortogonalne, lecz nie ortonormalne (patrz rozdz. 2.4).
Problemowi analizy częstotliwościowej sygnałów z wykorzystaniem wzoru (3.37a) w całości
poświęcono rozdział ósmy.
4
Całkowe przekształcenie Fouriera

Przypomnijmy, sygnały cyfrowe powstają w wyniku dyskretyzacji w czasie i kwantowania


wartości sygnałów analogowych. Jak związane są ze sobą ich widma częstotliwościowe? Czy
w wyniku operacji próbkowania nie tracimy bezpowrotnie ważnych informacji o sygnale ana-
logowym? Jak należy dobierać częstotliwość próbkowania? Celem niniejszego rozdziału jest
próba udzielenia prostej i przekonywającej odpowiedzi na powyższe, fundamentalne pytania.
Możliwe jest to na gruncie całkowego przekształcenia Fouriera. Jak się okaże przekształcenie
to jest bardzo użyteczne do interpretacji wielu ważnych zjawisk obserwowanych podczas
analizy częstotliwościowej sygnałów analogowych i dyskretnych.

4.1. Definicja
Całkowe przekształcenie Fouriera jest określone parą następujących transformacji:
∞ ∞
1
∫ x(t )e ∫ X ( jω)e d ω
− jωt j ωt
X ( jω) = dt , x(t ) = (4.1a, b)
−∞
2π −∞

wiążących sygnał x(t) z jego widmem Fouriera X(jω). Pierwsze równanie jest równaniem „ana-
lizy” (wyznaczenie współczynników Fouriera), a drugie − równaniem „syntezy” (zsyntezo-
wanie sygnału z jego współczynników Fouriera). Aby sygnał miał transformatę Fouriera X(jω)
(tzn. aby całka (4.1a) była określona w sensie Cauchy’ego), musi on spełniać tzw. warunki
Dirichleta:

1) ∫ x(t ) dt < ∞
−∞
2) mieć skończone wartości maksimów i minimów w każdym skończonym przedziale,
3) mieć skończoną liczbę punktów nieciągłości w każdym skończonym przedziale.
Wzory (4.1a), (4.1b) mogą być także interpretowane jako całki z iloczynów dystrybucji (fun-
kcji uogólnionych), których wynikiem może być także dystrybucja.
Całkowe przekształcenie Fouriera jest wyprowadzane jako graniczny przypadek szeregu Fou-
riera:
Całkowe przekształcenie Fouriera 75

∞ ∞  1 T /2  ∞  2π 1 T / 2 
1) x (t ) = ∑ ck e jk ω0t = ∑  ∫ x ( τ)e − jk ω0 τ d τ  e jk ω0t = ∑  ∫ x ( τ)e− jk ω0 τ d τ  e jk ω0t
  
k =−∞ k =−∞  T −T / 2  k =−∞  T 2 π −T / 2 
(4.2)
2) załóżmy, że okres T sygnału x(t) rośnie do nieskończoności (T→∞); wówczas pulsacja
podstawowa szeregu ω0 = 2π/T maleje i dąży do nieskończenie małej wartości dω (ω 0→dω),
co z kolei powoduje, że „skokowa” zmiana pulsacji kω 0 przechodzi w zmianę ciągłą (kω 0→ω)
i suma względem zmiennej k może być zastąpiona całką względem ciągłej zmiennej ω:
∞  ∞
1 ∞  T /2 − jk ω0 τ   2π  1  1 ∞
lim ∑  ∫ x ( τ)e d τ  e jk ω0t   = ∫  ∫ x( τ)e − jωτd τ  e jωt d ω = jωt
∫ X ( jω)e d ω
T →∞ 2 π k =−∞   T  2 π −∞  −∞  2 π −∞
 −T / 2  
(4.3)
Podobnie jak w przypadku szeregu Fouriera, dla r z e c z y w i s t e g o sygnału x(t) mamy:
∞ ∞
X ( jω) = ∫ x (t ) cos(ωt )dt − j ∫ x (t ) sin(ωt )dt = X R (ω) + jX I (ω) (4.4)
−∞ −∞

skąd wynika, że X(−jω) = X*(jω), ponieważ XR(−ω) = XR(ω) i XI(−ω) = −XI(ω), gdyż cos(−ωt)
= cos(ωt) i sin(−ωt) = −sin(ωt).
Transformata Fouriera X(jω) sygnału x(t) jest nazywana widmem („częstotliwościowym”) tego
sygnału, gdyż informuje nas o jego „zawartości” widmowej („częstotliwościowej”). Ponieważ
X(jω) jest w ogólności liczbą zespoloną, można ją zapisać w układzie biegunowym za pomocą
modułu i fazy (długości promienia i kąta):
X ( jω)
X ( jω) = X ( jω) e j (4.5)

i przedstawić równanie odwrotnego przekształcenia Fouriera (4.1b) jako:


1 ∞ j ( ωt + X ( j ω) )
x (t ) = ∫ X ( jω) e
2π −∞
dω (4.6)

Wynika z niego, że podczas operacji syntezy wynikowy sygnał x(t) powstaje w wyniku sumo-
wania nieskończonej liczby sygnałów harmonicznych ejωt, z których każdy ma swoją amplitudę
|X(jω)| i przesunięcie fazowe X(jω).

4.2. Podstawowe właściwości


Wyprowadzimy teraz niektóre podstawowe właściwości przekształcenia Fouriera, które będą
przez nas wykorzystywane w następnych rozdziałach. Ponieważ większość tych właściwości
ma także dyskretna wersja przekształcenia Fouriera, która będzie dyskutowana później, mają
one podstawowe znaczenie dla swobodnego poruszania się „w meandrach” analizy i prze-
twarzania sygnałów, tak analogowych jak i cyfrowych. Stanowią podstawowy zbiór tego, „co
każdy ... znawca teorii sygnałów ... wiedzieć powinien”.
Oznaczmy przez F(.) proste przekształcenie Fouriera, przez F −1(.) zaś przekształcenie od-
wrotne. Dodatkowo niech X(jω), Y(jω) i Z(jω) oznaczają transformaty Fouriera sygnałów x(t),
y(t) i z(t), tzn. x(t)↔X(jω), y(t)↔Y(jω), z(t)↔Z(jω).
76 Całkowe przekształcenie Fouriera

1) Liniowość: ax (t ) + by (t ) ↔ aX ( jω) + bY ( jω) (4.7)


Dowód. Własność ta bezpośrednio wynika z faktu, że całkowanie jest operacją liniową (cał-
ka z sumy dwóch funkcji jest równa sumie całek każdej z nich z osobna).
2) Symetria (dualność): X(jt) ↔ 2πx(−ω) (4.8)
Dowód. Po podstawieniu t = Ω, otrzymujemy
∞  1 ∞ 
F ( X ( jt ) ) = X ( jt )e− jωt dt = 2π 
∫ X ( jΩ) e jΩ ( −ω) d Ω  = 2πx ( −ω)
 2π ∫ 
−∞  −∞ 

1  ω
3) Przeskalowanie: x( at ) ↔ X  , a > 0 (4.9)
a a
Dowód. Po podstawieniu τ = at, otrzymujemy t = τ/a, dt = dτ/a oraz
∞ ∞ τ ∞ ω
− jω dτ 1 −j τ 1  ω
F ( x ( at ) ) = − jωt
∫ x(at )e dt = ∫ x ( τ) e a = ∫ x ( τ ) e a dτ = X  
−∞ −∞
a a −∞ a a

Wniosek. Jak widać przeskalowanie sygnału w osi czasu prowadzi do odwrotnego przeska-
lowania jego widma, tzn. „ściśnięcie” (krótszy czas trwania) sygnału (a > 1) prowadzi do
„rozszerzenia” jego widma, „rozciągnięcie” (dłuższy czas trwania) zaś sygnału (a < 1) − do
„zwężenia” widma. Przykładowo, jeśli a = 2, to sygnał po przeskalowaniu przyjmuje
w chwili czasowej t = 1/2 wartość, którą przed operacją skalowania miał dla t = 1, natomiast
widmo sygnału przeskalowanego przyjmuje dla ω = 2 połowę wartości, którą miało przed-
tem dla ω = 1. Właściwość ta ma podstawowe znaczenie w tzw. analizie czasowo-częstotli-
wościowej sygnałów, która będzie rozpatrywana w jednym z kolejnych rozdziałów. Na
rysunku 4.1 przedstawiono przykładowy sygnał x(t), jego wersję przeskalowaną x(2t) oraz
widma obu sygnałów. Po dwukrotnym „przyspieszeniu” sygnału jego widmo przesuwa się
od częstotliwości 10 herców do częstotliwości 20 herców, ulega dwukrotnemu rozszerzeniu
oraz zmniejszeniu w amplitudzie o połowę.
4) Przesunięcie w czasie: x (t − t0 ) ↔ e − jωt0 X ( jω) (4.10)
Dowód. Po zastosowaniu podstawienia t−t0 = τ, mamy t = τ+ t0, dt = dτ oraz
∞ ∞ ∞
∫ x (t − t0 )e − jωt dt = ∫ x ( τ)e − jω( τ+ t0 )d τ = e − jωt0 ∫ x ( τ)e − jωτd τ = e − jωt0 X ( jω) = X ( jω) e j ( X ( jω) −ωt0 )

−∞ −∞ −∞
Wniosek. Transformata Fouriera sygnału przesuniętego w czasie jest równa przesuniętej
w fazie (mnożnik exp(−jωt0)) transformacie Fouriera sygnału oryginalnego. Wartości bez-
względne (moduły liczb zespolonych) obu transformat są więc takie same.
5) Przesunięcie w częstotliwości (modulacja zespolona): e ± jω0t x ( t ) ↔ X ( j ( ω ∓ ω 0 )) (4.11)
∞ ∞
Dowód. ∫ ( )
e ± jω0t x (t ) e − jωt dt = ∫ x (t ) e− j ( ω∓ ω0 )t dt = X ( j (ω ∓ ω0 ))
−∞ −∞
Wniosek. Widmo Fouriera sygnału x(t) po zmodulowaniu (wymnożeniu) przez sygnał
exp(±jω0t) jest równe X(j(ω∓ω0), czyli widmu sygnału niezmodulowanego X(jω), przesu-
niętemu do pulsacji ±ω0 (częstotliwości ±f0). Przykładowo, po wymnożeniu sygnału x(t)
Całkowe przekształcenie Fouriera 77

1 1
x(t) x(2t)
0.5 0.5

0 0

-0.5 -0.5
t [s] t [s]
-1 -1
0 0.5 1 1.5 0 0.5 1 1.5
0.16 0.16
X(f) X(f/2)/2
0.12 0.12

0.08 0.08

0.04 0.04
f [Hz]
f [Hz]
0 0
0 10 20 30 0 10 20 30
Rys. 4.1. Przykładowy sygnał x(t) oraz jego wersja przeskalowana x(2t) oraz widma obu sygnałów (odpo-
1 f 
wiednio): X(f) oraz X 
2 2

X(ω+ω0) X(ω) X(ω−ω0)


Rys. 4.2. Widma X(ω+ω0), X(ω) i X(ω−ω0)
ω sygnałów x(t)exp(−jω0t), x(t), x(t)exp(+jω0t)
-ω0 0 ω0 (modulacja zespolona)

z sygnałem exp(jω0t) stara wartość X(j0) jest przesunięta do pulsacji ω0, gdyż dla tej pulsacji
X(j(ω−ω0)) = X(j(ω0−ω0)) = X(j0). Rysunek 4.2 stanowi ilustrację konsekwencji „częstotli-
wościowych” operacji modulacji zespolonej.

1
6) Modulacja rzeczywista: x (t ) cos(ω0t ) ↔ [ X (ω − ω0 ) + X (ω + ω0 )] (4.12a)
2
−j
x (t )sin( ω0t ) ↔ [ X (ω − ω0 ) − X (ω + ω0 )] (4.12b)
2
Dowód. Jest to konsekwencja właściwości 5 (modulacja zespolona), liniowości przekształ-
cenia Fouriera oraz wzoru Eulera:

cos(ω0 t ) =
2
[
1 jω0t
e
1
]
+ e − jω0t = [(cos(ω0 t ) + j sin(ω0 t ) ) + (cos(ω0 t ) − j sin(ω0 t ) )]
2

sin( ω0 t ) =
1 jω0t
2j
e [− e − jω0t =
1
2j
]
[(cos(ω0t ) + j sin(ω0t ) ) − (cos(ω0t ) − j sin(ω0t ) )]

W powyższych równaniach uwzględniono, że cos(−φ) = cos(φ), sin(−φ) = −sin(φ). X(ω+ω0)


oznacza widmo X(ω) sygnału x(t) przesunięte do pulsacji −ω0, a X(ω−ω0) − widmo X(ω)
przesunięte do pulsacji ω0.
78 Całkowe przekształcenie Fouriera


7) Splot sygnałów: z (t ) = x(t ) ⊗ y (t ) = ∫ x(τ) y (t − τ)dτ ↔ Z ( jω) = X ( jω)Y ( jω) (4.13)
−∞

Dowód. Po wprowadzeniu nowej zmiennej ξ = t−τ, otrzymujemy t = ξ+τ, dt = dξ+dτ oraz


∞  ∞  ∞  ∞  ∞  ∞ 
∫  ∫ x ( τ) y (t − τ)d τ e − jωt dt = ∫  ∫ x( τ)e− jωτ d τ  y ( ξ)e− jωξ ( d ξ + d τ ) =  ∫ x( τ)e− jωτ d τ  ∫ y (ξ)e − jωξ d ξ 
     
−∞  −∞  −∞  −∞   −∞  −∞ 
Wniosek. S p l o t s y g n a ł ó w w d z i e d z i n i e c z a s u j e s t r ó wn o wa ż n y i l o c z y n o wi
i c h t r a n s f o r m a t F o u r i e r a w d z i e d z i n i e c z ę s t o t l i wo ś c i . Kształtując więc
odpowiednio widmo Y(jω) sygnału y(t) można za pomocą splotu modyfikować widmo X(jω)
sygnału x(t), czyli filtrować ten sygnał. „Jedynki” w widmie Y(jω) „przepuszczają” wybrane
pulsacje z X(jω), a „zera” − usuwają je. Jak widać w praktyce operację splotu dwóch
sygnałów w dziedzinie czasu można zastąpić serią trzech przekształceń Fouriera, dwóch
„prostych” (X(jω) = F(x(t)) i Y(jω) = F(y(t))) i jednego „odwrotnego” (z(t) = F−1( X(jω)⋅
⋅Y(jω))).

1
X ( jν)Y ( j ( ω − ν) )dν = X ( jω) ⊗ Y ( jω)
2π −∫∞
8) Iloczyn sygnałów: z (t ) = x(t ) y (t ) ↔ Z ( jω) =

(4.14)
Dowód. Po wprowadzeniu nowej zmiennej Ω = ω−ν , otrzymujemy ω = Ω+ν oraz
1 ∞ 1 ∞   1 ∞  1 ∞ 
z(t ) = ∫  ∫ X ( jν)Y ( j (ω − ν))d ν  e jωt d ω =  ∫ X ( jν)e jνt d ν  ∫ Y ( jΩ )e jΩt d Ω  = x(t ) y (t )
2π −∞  2π −∞    
  2π −∞  2π −∞ 
Wniosek. Widmo iloczynu dwóch sygnałów czasowych jest równe splotowi widm tych syg-
nałów. Uwzględniając dodatkowo właściwość 7, widać, że obowiązuje zasada wzajemności
operacji w dziedzinie czasu i częstotliwości: iloczyn w jednej dziedzinie owocuje splotem
w drugiej dziedzinie.

∫ x(τ) y
*
9) Korelacja: z (t ) = ( τ − t ) dτ ↔ Z ( jω) = X ( jω)Y * ( jω) (4.15)
−∞

Dowód. Analogiczny jak w przypadku splotu (podstawienie ξ = τ − t, stąd t = τ − ξ oraz


dt = dτ − dξ):
∞ *
∞  − jωt ∞  ∞  * ∞  ∞ 
∫  ∫ x( τ) y ( τ − t )dτ e dt = ∫  ∫ x( τ)e dτ  y ( ξ)e (dτ − dξ) =  ∫ x ( τ)e dτ  ∫ y (ξ)e dξ 
* − jωτ jωξ − jωτ − jωξ

−∞  −∞  −∞  −∞   −∞  − ∞ 
Wniosek. W przypadku sygnałów i funkcji dyskretnych, powyższa zależność może być wy-
korzystana do szybkiego wyznaczenia funkcji autokorelacji sygnału w dziedzinie często-
tliwości za pomocą sekwencji trzech transformacji Fouriera: 1) dwóch transformacji pros-
tych − X(jω) = F(x(t)), Y(jω) = F(y(t)), 2) iloczynu X(jω)Y*(jω), 3) jednej transformacji od-
wrotnej − z(t) = F−1(X(jω)Y*(jω)). W przypadku korelacji własnej wystarczy wykonać tylko
dwie transformacje: jedną prostą i jedną odwrotną; wówczas X(jω)X *(jω) = |X(jω)|2.

d n x(t ) dx (t )
10) Pochodna: n
↔ ( jω) n X ( jω), ↔ jωX ( jω) (4.16)
dt dt
Całkowe przekształcenie Fouriera 79

Dowód. Po zróżniczkowaniu obu stron równania (4.1b) otrzymujemy:


d n x (t ) 1 ∞ 1 ∞
= ∫ ( jω) n X ( jω)e jωt d ω = n jωt
∫ ( jω) X ( jω)  e d ω
dt n 2 π −∞ 2π −∞ 

skąd wynika, że (jω)nX(jω) jest transformatą Fouriera n-tej pochodnej sygnału x(t).
Uwaga. Jak się później okaże, właściwość ta ma podstawowe znaczenie podczas analizy
częstotliwościowej układów liniowych, których opis matematyczny jest dany równaniami
różniczkowymi (patrz (5.12)).
t
1
11) Całka: ∫ x ( τ ) dτ ↔

X ( jω) + πX (0)δ(ω) (4.17)
−∞

Uwaga. Potem zobaczymy, że właściwość ta jest istotna podczas analizy częstotliwościo-


wej układów, opisanych równaniami całkowymi.

2 1 ∞ 2
12) Równość Parsevala: ∫ x (t ) dt = ∫
2 π −∞
X ( jω) d ω (4.18)
−∞

Dowód. Podstawienie odwrotnej transformacji Fouriera za x(t) i zmiana kolejności całko-


wania:
∞ ∞  1 ∞  ∞ ∞  ∞
1 1
∫  2π ∫ X ( jω)e dω  x * (t )dt = X ( jω) ∫ x * (t )e jωt dt dω =
jωt
∫ x (t ) x * (t )dt = ∫ ∫ X ( jω) X ( jω)dω
*
 2 π   2 π
−∞ −∞  −∞  −∞  −∞  −∞

Wniosek. Przekształcenie Fouriera zachowuje energię sygnału.

4.3. Transformaty Fouriera wybranych sygnałów


Ponieważ podstawową rolę w teorii przekształcenia Fouriera odgrywa specyficzny „sygnał”
zwany impulsem (deltą) Diraca, jej definicję i transformatę Fouriera podano na początku. Im-
puls ten nie jest funkcją w tradycyjnym znaczeniu, tylko tzw. dystrybucją, czyli funkcją uogól-
nioną. Jest on zdefiniowany w sposób następujący:

 = 0 dla t ≠ 0
δ( t ) 
 ≠ 0 dla t = 0
, ∫ δ(t )dt = 1 (4.19), (4.20)
−∞

i reprezentuje sobą nieskończenie krótki impuls o nieskończonej amplitudzie i jednostkowym


polu. Impulsem Diraca jest przykładowo granica następującego ciągu funkcyjnego:
1  πt 2 
δ(t ) = lim g T (t ), g T (t ) = exp − 2  (4.21)
T →0 T  T 
czyli granica funkcji gaussowskiej dla T dążącego do zera. Innym przykładem impulsu Diraca
może być sygnał „graniczny” postaci:
1  0 dla t > T
δ(t ) = lim pT (t ), pT (t ) =  (4.22)
T →0 2T  1 dla t ≤ T
Oba sygnały (4.21) i (4.22), aproksymujące impuls Diraca, są przedstawione na rysunku 4.3.
Liczba 1 na rysunku 4.3c oznacza jednostkowe pole powierzchni impulsu Diraca.
80 Całkowe przekształcenie Fouriera

a) gT(t) b) pT(t)/2
1/T3

T3 c) δ(t)
T1>T2>T3
1
T2
T1 t t
t
-T1 -T2 -T3 0 T3 T2 T1 0

Rys. 4.3. Aproksymacja sygnału delty Diraca δ(t) za pomocą: a) funkcji gaussowskich, b) impulsów pros-
tokątnych, c) graficzne oznaczenie sygnału delty Diraca

Impuls Diraca bywa także definiowany jako funkcjonał, przyporządkowujący sygnałowi x(t),
ciągłemu w chwili t = 0, wartość x(0):

∫ x(t )δ(t )dt = x(0) (4.23a)


−∞

lub ogólniej

∫ x(t )δ(t − τ)dt = x(τ) (4.23a)


−∞

czyli może on być traktowany jako szczególnego rodzaju funkcjonał próbkowania sygnałów
analogowych. Zależności (4.23) są konsekwencją warunku jednostkowego pola (4.20) impulsu
δ(t). W przypadku okresowego próbkowania sygnałów analogowych funkcja próbkująca
teoretycznie jest przedstawiana jako suma równomiernie poprzesuwanych impulsów Diraca.
Ponieważ suma taka jest sygnałem okresowym, można ją rozwinąć w szereg Fouriera
∞ ∞
1 ∞ jkω0t 2π
∑ δ(t − kT ) = ∑ c k e jkω0t = ∑ e , ω0 = T
T k = −∞
(4.24)
k = −∞ k = −∞

ponieważ z (4.20) wynika, że współczynniki rozwinięcia ck są równe:


T /2
1 1
ck = ∫ δ(t )e − jkω0t dt = (4.25)
T −T / 2
T

Teraz wyprowadzimy transformaty Fouriera wybranych sygnałów. Na rysunku 4.4 graficznie


przedstawiono kształty przebiegów czasowych rozpatrywanych sygnałów i ich widm Fouriera,
z wyjątkiem sygnału harmonicznego (sygnał numer 6).
 0 dla t > T sin ωT
1) Impuls prostokątny: pT (t ) =  ↔ 2 (4.26)
 1 dla t ≤ T ω

Dowód.
∞ T
T
1 − jωt e − jωT − e jωT sin ωT sin ωT
∫ pT (t )e − jωt dt = ∫ e − jωt dt = e = =2 = 2T = 2T sinc( ωT )
−∞ −T − jω −T − jω ω ωT
Dla x → 0 mamy sin(x)/x → 1, a dla ω → 0 wartość funkcji sin(ωT)/ω zmierza do T.
Całkowe przekształcenie Fouriera 81

sin Ωt  0 dla ω > Ω


2) Impuls sinc: 2 ↔ 2πPΩ ( −ω), PΩ (ω) = PΩ ( −ω) =  (4.27)
t  1 dla ω ≤ Ω
Wynika z (4.26) i z właściwości symetrii (dualności) przekształcenia Fouriera.

3) Impuls Diraca: δ(t ) ↔ 1 (4.28)


Dowód. Wykorzystując właściwość (4.23) sygnału delty Diraca otrzymujemy:

− jωt
∫ δ(t )e dt = e − jω⋅0 = 1
−∞

Przykładowo dla sygnału (4.22), stosując regułę d’Hospitala, mamy:



 1  T 1  sin ( ωT )
∫  Tlim pT (t )  e − jωt dt = lim  ∫ pT (t )e− jωt dt  = lim =1
 
−∞ 
→0 2T  T →0
 −T 2T  T →0 ωT

4) Sygnał stały: 1 ↔ 2πδ(ω) (4.29)


Wynika z (4.28) i właściwości symetrii (dualności) przekształcenia Fouriera.
∞ ∞

5) Szereg impulsów Diraca: δ T (t ) = ∑ δ(t − kT ) ↔ ω0 ∑ δ(ω − kω0 ) , gdzie ω0 =
T
(4.30)
k = −∞ k = −∞

Dowód. Z (4.24) otrzymujemy:


∞ ∞ ∞ ∞ ∞  ∞  ∞
  1  1 1
∫  ∑ δ(t − kT ) e dt = ∫  T ∑ e e dt = T ∑  ∫ e e dt  = T ∑ 2πδ(ω − kω0 )
− jωt jkω t − jωt jkω t − jωt
0 0

− ∞  k = −∞  −∞  k = −∞  k = −∞  −∞  k = −∞

Wniosek. Jak się później okaże, z właściwości tej będziemy korzystać podczas wyprowadze-
nia twierdzenia o próbkowaniu sygnałów analogowych, gdyż operacja próbkowania o okre-
sie T będzie przedstawiana jako iloczyn sygnału próbkowanego x(t) z szeregiem impulsów
Diraca postaci ∑δ(t−kT).
6) Sygnał harmoniczny: e jω0t ⋅ 1 ↔ 2πδ( ω − ω0 ) (4.31)
Wynika z (4.29) oraz właściwości przesunięcia w częstotliwości przekształcenia Fouriera.

7) Sygnały (ko)sinusoidalne:

cos ω0t =
2
e (
1 jω0t
+ e− jω0t ) ↔
1
2
( 2πδ(ω − ω0 ) + 2πδ(ω + ω0 ) ) (4.32a)

sin ω0t =
1
2j
(
e jω0t − e − jω0t ) ↔ −
j
2
( 2πδ(ω − ω0 ) − 2πδ(ω + ω0 ) ) (4.32b)

Wynika z (4.31) i właściwości liniowości przekształcenia Fouriera.

− 1 dla t < 0
 2
8) Sygnał znaku: x (t ) = sgn(t ) =  0 dla t = 0 ↔ X ( jω) = (4.33)
 1 dla t > 0 jω

82 Całkowe przekształcenie Fouriera


 
F {sgn(t )} = F  lim e
−ε t −ε t
Dowód. sgn(t )  = lim ∫ e sgn(t )e − jωt dt =
ε → 0  ε → 0
−∞
0 ∞   1 1  2
= lim  ∫ −e( ε− jω)t dt + ∫ e− ( ε+ jω)t dt  = lim  − + =
ε→0 
 −∞ 0  ε→0  ε − jω ε + jω  jω
Uwaga. Transformata Fouriera sygnału znaku sgn(t) jest równa granicznej transformacie
Fouriera sygnału e − ε t sgn(t ) dla ε dążącego do zera.
0 dla t < 0 1
9) Sygnał skoku jednostkowego: x (t ) = u(t ) =  ↔ X ( jω) = πδ(ω) +
 1 dla t ≥ 0 jω
(4.34)
1 1  1 1 2 
Dowód. F {u(t )} = F  + sgn(t )  = (2πδ( ω) ) +  
2 2  2 2  jω 

2 π −ω2 /( 4 a )
10) Sygnał gaussowski: x (t ) = e −at ↔ e (4.35)
a
Dowód: Stosując podstawienie β = t a + jω /(2 a ) (skąd dβ = a dt ) oraz uwzględnia-

− β2
jąc, że (c+d)2 = c2+d2+ 2cd oraz ∫e dβ = π , otrzymujemy:
−∞

∞ ∞ 2
/( 4 a ) ∞ 2
2
− at − jωt −ω 2
−( t a + jω /( 2 a )) 2 e −ω 2
−β e −ω /( 4 a )
∫ e e dt = e ∫e ∫ e dβ =
/( 4 a )
dt = π
−∞ −∞
a −∞
a

 0 dla t < 0 1
11) Sygnał eksponencjalny: x(t ) =  − at ↔ H ( jω) = , (a>0) (4.36)
e dla t ≥ 0 a + jω
∞ ∞ ∞
− at − jωt − ( a + jω) t 1 1
Dowód. ∫ e e dt = ∫ e dt = e − ( a + jω)t =
0 0
− ( a + jω) 0
a + jω

12) Sygnał sinusoidalny z obwiednią eksponencjalną:


 0 dla t < 0 Aω0
x (t ) =  − at ↔ X ( jω) = , (a>0) (4.37)
 Ae sin ω0 t dla t ≥ 0 (a + jω) 2 + ω20
∞ ∞
1 j ω0t
Dowód. ∫ Ae sin(ω0t )e dt = A∫ e
− at − j ωt − ( a + j ω) t
[e − e− jω0t ]dt =
0 0
2j

A ∞ −[ a + j ( ω−ω0 ) ]t
∞ 
dt − ∫ e [
− a + j ( ω+ω0 ) ]t
= ∫e dt  =
2 j  0 0


A 1 − a + j ( ω−ω0 ) )t ∞ 1 − a + j ( ω+ω0 ) )t ∞ 
=  e ( − e ( =
2 j  − ( a + j (ω − ω0 ) ) 0 − ( a + j (ω + ω0 ) ) 0 

A 1 1  A 2 jω0 Aω0
=  − = =
2 j  a + j ( ω − ω0 ) a + j (ω + ω0 )  2 j (a + j (ω − ω0 ) )(a + j ( ω + ω0 ) ) (a + jω)2 + ω02
Całkowe przekształcenie Fouriera 83

13) Sygnał kosinusoidalny z obwiednią eksponencjalną:


 0 dla t < 0 a + jω
x (t ) =  − at ↔ X ( jω) = A , (a>0) (4.38)
 Ae cos ω0 t dla t ≥ 0 (a + jω) 2 + ω20
Dowód. Analogiczny jak w pkt 12. Podstawienie: cos(ω0t) = 1/2(exp(jω0t)+exp(−jω0t)).
14) Fragment sygnału kosinusoidalnego wycięty przez okno prostokątne :
sin((ω − ω0 )T ) sin (( ω + ω0 )T )
cos(ω0 t ) ⋅ pT (t ) ↔ + (4.39)
ω − ω0 ω + ω0
Dowód: Zależność ta w prosty sposób wynika z właściwości 8 całkowego przekształcenia
Fouriera iloczynu sygnałów (patrz równanie (4.14)) oraz z osobnych widm sygnałów
cos(ω0t) i pT(t). Widmo sygnału pT(t), czyli 2sin(ωT)/ω, zostaje przesunięte do pulsacji ω0
oraz −ω0 oraz wymnożone z deltami Diraca πδ(ω−ω 0) i πδ(ω+ω 0) widma sygnału kosinu-
soidalnego, a następnie podzielone przez 2π (przeskalowanie występujące w całce sploto-
wej).
15) Fala prostokątna unipolarna:
sin( ωT ) 2π ∞  2π  ∞
2 kπ  π 
x (t ) = pT (t ) ⊗ δ 4T (t ) ↔ X ( ω) = 2
ω
⋅ ∑ δ ω − k
4T k = −∞ 
 = ∑ sin δ ω − k
4T  k = −∞ k 2 

2T 
(4.40)
Dowód: Unipolarna fala prostokątna może być przedstawiona jako splot (operacja ⊗) im-
pulsu prostokątnego pT(t) i szeregu impulsów Diraca δ4T(t). Zgodnie z właściwością 7 cał-
kowego przekształcenia Fouriera konsekwencją splotu sygnału w dziedzinie czasu jest ilo-
czyn ich widm w dziedzinie częstotliwości. A widma poszczególnych sygnałów obliczy-
liśmy powyżej. Jak widać widmo fali prostokątnej jest rzeczywiste, czyli do odtworzenia
sygnału wystarczą tylko funkcje kosinus (odwrotne przekształcenie Fouriera):
1 ∞  ∞ 2  kπ   π   jωt 1 ∞ 2  kπ   kπ 
x (t ) = ∫  ∑ sin   δ  ω − k   e dt = ∑ k sin  2  exp  j 2T t  =
2π −∞  k =−∞ k   
2 2T  2 π k =−∞    
∞ 4
1   kπ   π  1 2 ∞ 1  kπ   π 
=  π + ∑ sin   cos  k t   = + ∑ sin   cos  k t
2π  k =1 k  2   2T   2 π k =1 k  2   2T 
Uzyskaliśmy rezultat identyczny jak w tabeli 3-1 pozycja 2 (szereg Fouriera), ponieważ
dla k = 1, 2, 3, 4, 5, 6, 7,... mamy:
1  kπ  1 1 1
sin  = 1, 0, − , 0, , 0, − , ...
k  2  3 5 7
Na podstawie powyższych właściwości można także wyprowadzić równość znaną jako suma
Poissona:

1 ∞ jkω0t 2π
∑ x (t + kT ) = ∑ e X ( jkω0 ) ,
T k = −∞
gdzie ω0 =
T
(4.41)
k = −∞
W szczególności:

1 ∞
∑ x ( kT ) = ∑ X ( jkω0 ) dla t = 0
T k = −∞
(4.42)
k = −∞
84 Całkowe przekształcenie Fouriera

X(ω)
2T
x(t)
1

a)
ω
t

-T 0 T -4π/T -2π/T 0 2π/T 4π/T

x(t)
2Ω
X(ω)

b)
t

-4π/Ω -2π/Ω 0 2π/Ω 4π/Ω -Ω 0 Ω

x(t)
X(ω)
1
1
c)
t ω

0 0

x(t) X(ω)
1 2π
d)
t ω

0 0

x(t) X(ω)
e) 1 2π/T

t ω

-2T -T 0 T 2T -4π/T -2π/T 0 2π/T 4π/T

Rys. 4.4. Wybrane sygnały x(t) z podrozdziału 4.3 i ich widma Fouriera X(ω): a) impuls prostokątny,
b) impuls sinc, c) impuls Diraca, d) sygnał stały, e) szereg impulsów Diraca
Całkowe przekształcenie Fouriera 85

2π/ω0 x(t)

1
X(ω)

t
π π
f)
t

-ω0 0 ω0

2π/ω0 x(t) Imag{X(ω)}

1 π

t ω0 t
g)
-ω0 0

−π

x(t) Imag{X(ω)}

1
t ω
h)
0 0

-1

Real{X(ω)}

x(t) ω
i) 1
t
0 Imag{X(ω)}

x(t) X(ω)
1 π/a
j)
t ω

Rys. 4.4. (cd.) f) sygnał kosinusoidalny, g) sygnał sinusoidalny, h) sygnał znaku, i) sygnał skoku jedno-
stkowego, j) sygnał gaussowski
86 Całkowe przekształcenie Fouriera

1/a
x(t) π/2
1
Re{X(ω)} |X(ω)|
k) ω
ω
a
-a
t
X(ω)
0 -1/(2a) Im{X(ω) -π/2

x(t) -π
|X(ω)|
l) Im{X(ω)} Re{X(ω)}
ω ω
t
ω20 − a 2

≈ ω0 X(ω)
≈ −ω0±a π

x(t)
m) Re{X(ω)} |X(ω)|
X(ω)
t π/2
ω ω
≈ ω0 ω02 + a 2
≈ −ω0±a Im{X(ω)}
-π/2

x(t) X(ω)
1 2πT

n)
2π/T
t

-T T ω

cos(ω0t )
-ω0 ω0

X(ω)
π
x(t)
o)
4T
1

-π/T π/T

t
ω
-5T -3T -T T 3T 5T -2π/T 0 2π/T

Rys. 4.4. (cd.) k) sygnał eksponencjalny, l), m) sygnał sinusoidalny i kosinusoidalny z obwiednią ekspo-
nencjalną (≈ ważne dla ω0 >> α), n) fragment sygnału kosinusoidalnego, wycięty przez okno prostokątne,
o) fala prostokątna unipolarna
Całkowe przekształcenie Fouriera 87

Dowód. Obliczmy transformaty Fouriera obu stron powyższego równania i pokażmy, że są one
takie same (⊗ oznacza operację splotu):
 ∞   ∞   ∞  ∞
F  ∑ x (t + kT )  = F  x (t ) ⊗ ∑ δ(t − kT )  = X ( jω)  ω0 ∑ δ(ω − k ω0 )  = ω0 ∑ X ( jk ω0 )δ( ω − k ω0 )
 k =−∞   k =−∞   k =−∞  k =−∞

1 ∞  X ( jk ω0 ) ∞ X ( jk ω ) ∞ ∞
F  ∑ e jk ω0t X ( jk ω0 )  =
T
 k =−∞  T k =−∞
{ }
∑ F e jk ω0t = T 0 ∑ 2πδ(ω − k ω0 ) =ω0 ∑ X ( jk ω0 )δ(ω − k ω0 )
k =−∞ k =−∞

4.4. Widmo iloczynu i splotu dwóch sygnałów


W podrozdziale tym przyjrzymy się bliżej widmom iloczynu i splotu dwóch sygnałów ciągłych
ze względu na szczególne znaczenie, jakie te dwie operacje odgrywają w przetwarzaniu sygna-
łów.

Widmo iloczynu dwóch sygnałów


Analiza częstotliwościowa sygnałów ciągłych sprowadza się do wykonywania na nich całko-
wego przekształcenia Fouriera. Ponieważ jednak w praktyce nie można zrealizować całko-
wania od minus do plus nieskończoności, sygnał x(t) całkuje się od jakiejś chwili czasowej t0
do chwili t0+T. Jest to równoważne całkowaniu od plus do minus nieskończoności fragmentu
sygnału xw(t), otrzymanego w wyniku wymnożenia sygnału x(t) z funkcją prostokątnego „okna”
czasowego w(t), równego jeden w przedziale [t0, t0+T] oraz zeru poza nim:
t0 +T ∞
x (t )e − jωt dt = ∫ [ x(t ) w(t )] e
− jωt
X w (ω) = ∫ dt (4.43)
t0 −∞

Zgodnie z właściwością iloczynu, otrzymane w ten sposób widmo Xw(ω) jest różne od X(ω)
i równe s p l o t o w i widma X(ω) całego sygnału z widmem funkcji okna W(ω):
1 ∞
X w ( ω) = ∫ X ( ν )W ( ω − ν) d ν
2π −∞
(4.44)

Oczywiście od kształtu W(ω) zależy wielkość „deformacji” widma X(ω). Na rysunku 4.5 prze-
dstawiono graficzną ilustrację rozważanej sytuacji: sygnał kosinusoidalny jest mnożony przez
okno prostokątne. Ponieważ w tym przypadku X(ω) = π[δ(ω−ω0)+δ(ω+ω0)], więc:
1 ∞ 1
X w ( ω) = ∫ π [δ( ν − ω0 ) + δ( ν + ω0 )] W (ω − ν)d ν = 2 [W (ω − ω0 ) + W (ω − ω0 )] (4.45)
2 π −∞

W miejscach, gdzie w X(ω) występowały impulsy Diraca δ(ω), w widmie Xw(ω) występuje
przesunięte widmo okna W(ω). Jako okien „wycinających” można stosować wiele różnych
funkcji, na przykład Bartletta, Blackmana, Dolpha-Czebyszewa, Hamminga, Hanna, Kaisera.
Funkcje okien powinny mieć widmo jak najbardziej zbliżone do delty Diraca: skoncentrowane
wokół pulsacji ω = 0 oraz szybko malejące do zera wraz oddalaniem się od tej pulsacji. W żar-
gonie inżynierskim widmo okna powinno mieć wąski listek główny wokół ω = 0 oraz niski
poziom listków bocznych (oscylacji po obu stronach listka głównego). Jednak jednoczesne
bardzo dobre spełnienie obu tych wymagań nie jest możliwe.
88 Całkowe przekształcenie Fouriera

x(t)=cos(ω0t)
X(ω)

π π
t

-ω0 0 ω0

w(t) W(ω)
2T

2π/T

t ω
-T 0 T

xw(t)=x(t)w(t) Xw(ω)=X(ω)⊗W(ω)
1 2πT

t
2π/T
-T T
ω

-ω0 0 ω0

Rys. 4.5. Ilustracja graficzna „konsekwencji” częstotliwościowych mnożenia przez siebie dwóch sygnałów
czasowych: kosinusoidy i „okna” prostokątnego (patrz (4.14)). Przykład modulacji amplitudy i wpływu
kształtu widma okna czasowego na widmo „wyciętego” fragmentu sygnału

Rysunek 4.6 stanowi ilustrację problemu rozdzielczości częstotliwościowej i amplitudowej


analizy częstotliwościowej realizowanej metodą ciągłego przekształcenia Fouriera. Im listek
główny widma okna jest węższy, tym lepiej są rozróżnialne w Xw(ω) składowe harmoniczne
o pulsacjach leżących blisko siebie (rys. 4.6a: rozdzielczość częstotliwościowa). Natomiast im
poziom listków bocznych widma okna jest mniejszy, tym większa może być różnica amplitud
poszczególnych składowych harmonicznych, które są obserwowane (rozróżnialne) w Xw(ω)
(rysunek 4.6b: rozdzielczość amplitudowa).
Rozdzielczość częstotliwościową analizy można polepszyć zwiększając długość okna, co jest
przedstawione na rysunku 4.7. Z właściwości przeskalowanie (4.9) całkowego przekształcenia
Fouriera wynika bowiem, że kiedy długość okna rośnie (dłuższy jest czas, w którym jest ono
„różne” od zera), jego widmo staje się węższe, czyli szerokość listka głównego maleje
niezależnie od rodzaju okna. Rozdzielczość amplitudową analizy można natomiast zmienić
wybierając okno, charakteryzujące się wymaganym poziomem „oscylacji bocznych” widma.
Poziom ten jest stały i charakterystyczny dla poszczególnych okien.
Szczegóły analizy częstotliwościowej sygnałów będą dokładnie przedstawione w rozdziale 8.
Obecnie zostaną jedynie podane definicje kilku wybranych okien ciągłych w(t), stanowiących
najczęstszą alternatywę dla okna prostokątnego, oraz zależności analityczne ich widm Fouriera
Całkowe przekształcenie Fouriera 89

a) b)
X(ω) X(ω)

ω ω

X(ω) X(ω)

ω ω

X(ω) X(ω)

ω
ω

Rys. 4.6. Ilustracja graficzna problemu rozdzielczości częstotliwościowej (a) i amplitudowej (b) analizy
częstotliwościowej, prowadzonej z wykorzystaniem okna prostokątnego. W przypadku (a) jest analizowana
suma dwóch sygnałów kosinusoidalnych o częstotliwościach leżących coraz bliżej siebie, natomiast w przy-
padku (b) − suma dwóch sygnałów kosinusoidalnych o różnych częstotliwościach i coraz większej różnicy
amplitud. W pierwszym przypadku jest istotna szerokość listka głównego widma okna, a w przypadku
drugim − poziom oscylacji listków bocznych widma okna

w(t) W(ω)
2T
1

t
ω
-T T
w(t) W(ω)
1
T
t
ω
-T/2 T/2

w(t) W(ω)
1

t T/2 ω
-T/4 T/4

Rys. 4.7. Okna prostokątne o różnej długości i ich widma Fouriera. Wraz ze wzrostem długości okna zwię-
ksza się wysokość i zmniejsza szerokość listka głównego jego widma Fouriera, natomiast względny poziom
oscylacji listków bocznych nie ulega zmianie (w odniesieniu do wysokości listka głównego)
90 Całkowe przekształcenie Fouriera

Tab. 4-1. Definicje okien ciągłych w(t) i analityczne wzory ich widm W(ω)

Nazwa okna w(t) W(ω)

 1 dla t ≤ T sin ωT
Prostokątne pT (t ) =  2
 0 dla t > T ω

1 − t / T dla t ≤ T  sin (ωT / 2 ) 


2
Trójkątne (Bartletta) qT (t ) =  T
 0 dla t > T  ωT / 2 

π 2 sin(ωT )
0,5 + 0,5cos ( πt / T ) pT (t )
( )
Hanninga (Hanna)
ω π 2 − T 2 ω2

Hamminga 0,54 + 0,46cos ( πt / T ) pT (t ) (1,08π2 − 0,16T 2ω2 ) sin(ωT )


ω ( π2 − T 2 ω2 )

Blackmana  0,42 + 0,5cos ( πt / T ) + 0,08cos ( 2πt / T ) pT (t ) −−

3T  sin(ωT / 4 ) 
4
3
Parzena qT / 2 (t ) ⊗ qT / 2 (t ) , ⊗ oznacza splot
T 4  ωT / 4 

(tabela 4-1). Widma okien różnych od okna prostokątnego mają o wiele niższe listki boczne,
lecz ich listek główny jest znacznie szerszy. Wszystkie one spełniają następujące warunki:
1) w(t) = 0 dla |t| > T (4.46a)

1
2π −∫∞
2) w(0) = W (ω)dω = 1 (4.46b)

Na rysunku 4.8 są przedstawione kształty okna Hanna i Blackmana oraz ich widm Fouriera.
Rysunek ten ilustruje także zasadę konstrukcji obu okien, charakterystyczną dla wszystkich
okien trygonometrycznych. Aby zminimalizować poziom oscylacji bocznych sumuje się kilka,
odpowiednio poprzesuwanych i przeskalowanych widm okna prostokątnego WR(ω). Na przy-
kład dla okna Hanna mamy:
WH (ω) = 0,5WR (ω) + 0,25WR (ω − π / T ) + 0,25WR (ω + π / T ) (4.47a)

co na podstawie (4.11) odpowiada w dziedzinie czasu dodaniu następujących „okien”:

wH (t ) = 0,5wR (t ) + 0,25wR (t ) e jπt / T + 0,25wR ( t )e − jπt / T (4.47b)

Otrzymujemy stąd zależność:

wH (t ) = [0,5 + 0, 25( e jπt / T + e − jπt / T )] wR (t ) = [0,5 + 0,5cos( πt / T )] wR (t ) (4.47c)

przedstawioną w tabeli 4-1. Do wpływu wyboru okna na kształt „obserwowanego” widma


sygnałów spróbkowanych w czasie wrócimy jeszcze w podrozdziale 4.6 (rysunki 4.16, 4.17
i 4.18).
Całkowe przekształcenie Fouriera 91

a) b)
wH(t) wB(t)

t t
-T T -T T

WH(ω) WB(ω)

ω ω

π 2π π 2π
0 T T 0 T T

Rys. 4.8. Graficzna ilustracja w dziedzinie częstotliwości zasady konstrukcji okien kosinusoidalnych: a) ok-
no Hanna w(t) = [0,5 + 0,5cos(πt/T)]⋅pT(t), b) okno Blackmana w(t) = [0,42 + 0,5cos(πt/T) + 0,08cos(2πt/T)]⋅
⋅pT(t), góra – kształt okna, dół – jego widmo częstotliwościowe jako wynik zsumowania kilku przeskalo-
wanych w amplitudzie i przesuniętych w częstotliwości widm PT(ω) okna prostokątnego pT(t)

Modulacja amplitudowa jest drugim przykładem praktycznego zastosowania mnożenia syg-


nałów. Znając sygnał modulowany x(t) (nośna) i modulujący m(t), widmo Fouriera ich iloczy-
nu wyznaczamy splatając widma X(ω) i M(ω) obu sygnałów. Na rysunku 4.9 przedstawiono
graficzną ilustrację dwóch prostych rodzajów takiej modulacji:
1) d w u w s t ę g o w e j z f a l ą n o ś n ą (ang. AM − Amplitude Modulation lub DSB −
Double Sideband):
x (t ) = cos(ω0t ), m(t ) = 1 + A cos(ωm t ) ( A > 0)

X ( ω) = π [δ(ω − ω0 ) + δ(ω + ω0 ) ], M ( ω) = 2 πδ(ω) + πA[δ( ω − ωm ) + δ(ω + ωm ) ]


2) d w u w s t ę g o w e j b e z f a l i n o ś n e j (ang. AM-SC lub DSB-SC, SC − Suppressed
Carrier): x(t) − jak wyżej, m(t) − dowolny sygnał rzeczywisty o |M(ω)| = 0 dla ω > ωmax.
Modulacja tego typu jest stosowana w radiofonii AM (fale długie, średnie i krótkie), gdzie m(t)
jest sygnałem dźwiękowym (audycja), a x(t) jest sygnałem nośnym, przesuwającym widmo
M(ω) w określony zakres częstotliwości, oddzielny dla każdej radiostacji.

Widmo splotu sygnałów

Własność splotu sygnałów jest szczególnie ważna, ponieważ analogowe układy najczęściej
przetwarzają sygnał wejściowy x(t) splatając go (operacja ⊗) z ich odpowiedzią impulsową
h(t): y(t) = x(t)⊗ h(t). Własność ta dotyczy układów liniowych niezmiennych w czasie (ang.
LTI − Linear Time-Invariant). W dziedzinie częstotliwości operacja splotu sygnałów odpowia-
92 Całkowe przekształcenie Fouriera

M(ω)

m(t)
π/2 π/2

t
-ωm ωm

Xm(ω)=X(ω)⊗M(ω)
xm(t) π

t π/4 π/4
ω

-ω0 ω0
ω0-ωm ω0+ωm

Xm(ω)=X(ω)⊗M1(ω) Xm(ω)=X(ω)⊗M2(ω)
π/2
π/2
ω ω
-ω0 ω0 -ω0 ω0
ω0-ωm ω0+ωm

Rys. 4.9. Modulacja amplitudowa AM i AM-SC (lub DSB i DSB-SC) jako przykład iloczynu dwóch
sygnałów. Oznaczenia: x(t) = cos(ω0t) − nośna, m(t) = 1 + 0,5cos(ωmt) − modulująca, xm(t) − ich iloczyn,
X(ω), M(ω) i Xm(ω) − widma Fouriera nośnej, modulującej i ich iloczynu. Zgodnie z właściwością iloczynu
(4.14), Xm(ω) jest wynikiem splotu widm X(ω) i M(ω):Xm(ω) = X(ω)⊗M(ω). Na samym dole po lewej stronie
pokazano kształt widma Fouriera sygnału, w przypadku kiedy sygnał modulujący jest postaci m1(t) =
= cos(ωmt) (w widmie jest brak prążków sygnału nośnego), po prawej stronie zaś − orientacyjny kształt
widma dla sygnału modulującego m2(t) = ∑(m)cos(ωmt), czyli sumy wielu składowych kosinusoidalnych
o różnych pulsacjach

da iloczynowi widm sygnałów: Y(ω) = X(ω)H(ω). Odpowiednio kształtując funkcję przejścia


układu h(t) wpływamy na H(ω) = |H(ω)|⋅exp(j H(ω)), a ono z kolei decyduje jak w amplitu-
dzie (|H(ω)|) i fazie ( H(ω)) zostaną zmodyfikowane (przefiltrowane) poszczególne częstotli-
wości ω sygnału wejściowego. Przykładowo |H(ω1)| = 0 powoduje, że na wyjściu układu nie
pojawi się składowa sygnału wejściowego o pulsacji ω1, a |H(ω2)| = 1 decyduje o tym, że skła-
dowa o pulsacji ω2 zostanie bez zmian „przeniesiona” przez układ. Z kolei kąty H(ω1)
i H(ω2) informują o przesunięciu fazowym wprowadzanym przez układ dla pulsacji ω1 i ω2.
Na rysunku 4.10 przedstawiono graficzną ilustrację operacji splotu dwóch sygnałów, czyli
filtracji jednego sygnału (x(t) = x1(t)+x2(t) = cos(0,5t)+cos(2t)) przez drugi (h(t)). Ponieważ
y(t) = x(t)⊗h(t) (4.13), stąd Y(jω) = X(jω)H(jω) = [X1(jω)+X2(jω)]H(jω) = X1(jω) i w wyniku
splotu z sygnału zostaje usunięta składowa x2(t).
Całkowe przekształcenie Fouriera 93

h(t) H(ω)
1

t
ω
-1 0 1

x(t)=x1(t)+x2(t) X(ω)
π π
t

ω
-2 -0.5 0.5 2

y(t)=x(t)⊗h(t)=x1(t) Y(ω)=X(ω)H(ω)
π =X1(ω)
t

ω
-0.5 0.5

Rys. 4.10. Przykład filtracji analogowej sygnałów: splot sygnałów h(t) i x(t) = x1(t)+x2(t) = cos(0,5t)+
+cos(2t) w dziedzinie czasu oraz jego konsekwencje częstotliwościowe. Ponieważ y(t) = x(t)⊗h(t) (4.13),
stąd Y(jω) = X(jω)H(jω) = [X1(jω)+X2(jω)]H(jω) = X1(jω), czyli w wyniku splotu z sygnału została usunięta
składowa x2(t)

4.5. Twierdzenie o próbkowaniu


Wyobrażam sobie teraz minę większości Czytelników: z pewnością gości na niej znużenie
i zniechęcenie. Ale mogę Państwa pocieszyć: po wyczerpującej „wspinaczce” (matematycznej)
powoli zbliżamy się „do szczytu” (czyli słodkiej degustacji „owoców” swojej wiedzy). Pier-
wszym przyjemnym „ciasteczkiem”, które „połkniemy” w mgnieniu oka będzie tzw. twierdze-
nie o próbkowaniu. Jak się później okaże, w zasięgu naszej ręki jest teraz o wiele więcej
„przysmaków” cyfrowego przetwarzania sygnałów.
W sposób t e o r e t y c z n y równomierne (okresowe) próbkowanie sygnałów analogowych
może być przedstawione jako ich wymnożenie z sumą impulsów Diraca (pamiętajmy o jedno-
stkowym polu powierzchni tych impulsów):

xδ ( t ) = x ( t ) ∑ δ(t − kT ) (4.48)
k =−∞

Ponieważ iloczyn w dziedzinie czasu jest równoważny splotowi w dziedzinie częstotliwości −


pulsacji (i odwrotnie), więc widmo Fouriera sygnału po spróbkowaniu jest równe:
94 Całkowe przekształcenie Fouriera

∞ ∞
1   1  
X δ ( jω) =  X ( jω) ⊗ ω p ∑ δ(ω − k ω p )  =
2π 
(
ω p ∑ X ( jω) ⊗ δ(ω − k ω p )  = )
k =−∞  2π  k =−∞ 

1  
=
2π  k = −∞
(
 ω p ∑ X j ( ω − kω p )  ) (4.49)

gdzie ωp = 2π/T. W powyższym równaniu skorzystano ze znajomości widma Fouriera szeregu
poprzesuwanych impulsów Diraca (4.30), z liniowości operacji splotu (umożliwiającej przesu-
nięcie operacji sumowania) oraz z faktu, że splot sygnału (widma) z deltą Diraca jest równy
temu sygnałowi (widmu) (konsekwencja właściwości (4.23)):
+∞
f ( v ) ⊗ δ( v ) = ∫ f ( w)δ(v − w)dw = f (v )
−∞
+∞
f ( v ) ⊗ δ( v − v 0 ) = ∫ f ( w)δ(v − v0 − w)dw = f (v − v0 )
−∞

Jak widać widmo sygnału po spróbkowaniu jest równe sumie (rys. 4.11b) poprzesuwanych
widm sygnału oryginalnego (rys. 4.11a). Aby widma te nie „zlały się” i aby było możliwe
odtworzenie widma X(jω) z widma Xδ(jω), sygnał x(t) powinien mieć widmo ograniczone, tzn.
niezerowe tylko dla wybranego przedziału (przedziałów) częstotliwości. Załóżmy na początek,
że X(jω) = 0 dla |ω| ≥ ωm. Jeśli ωm ≤ ωp/2, to powyższy warunek jest spełniony i filtrując sygnał
xδ(t) idealnym filtrem dolnoprzepustowym o pulsacji granicznej (pasma przenoszenia) ωg
(rysunek 4.11c), takiej, że ωm ≤ ωg ≤ ωp−ωm, jesteśmy w stanie odfiltrować z sygnału xδ(t)
widma przesunięte X(j(ω−kω0)), k≠0 (rysunek 4.11d). Jeśli znamy ωm sygnału, to n a j n i ż s z ą
pulsacją próbkowania, nie powodującą utraty informacji „analogowej”, jest ωp = 2ωm.
Wówczas i d e a l n y filtr ma pulsację graniczną ωg = ωm. Oznaczmy przez Π(jω) transformatę
Fouriera tego filtra. Wtedy synteza sygnału za pomocą odwrotnego przekształcenia Fouriera
z odfiltrowanego Xδ (jω) określona jest wzorem:

xˆ (t ) =
2 π −1
ωp
{
F X δ ( jω) ⋅ Π ωg ( jω) } (4.50)

Iloczyn widm jest równoważny splotowi sygnałów czasowych, stąd (przy założeniach:
ωp = 2ωm, ωg = ωm):
π  ∞  sin(ωm t )  ∞
sin (ωm (t − kT ) )
 ∑ x (kT )δ(t − kT )  ⊗ 
xˆ (t ) =
ωm    πt  = ∑ x ( kT ) ω (t − kT ) (4.51)
 k = −∞  k = −∞ m

ponieważ odwrotne przekształcenie Fouriera widma filtra jest równe:


ω
1 ∞ 1 m jωt 1 1 jωt ωm 1 1  jωm t 1 1
 2π jt (
∫ Π ωm ( jω)e jωt d ω = ∫ e d ω = 2π jt e = e − e− jωm t  = 2 j sin( ωm t ) )
2π −∞ 2π −ω −ωm 2π jt 
m

czyli jego odpowiedź impulsowa wynosi (rysunek 4.12):


sin(ωm t )
h (t ) = (4.52)
πt
Filtr (4.52) jest nazywany filtrem rekonstruującym, gdyż jego zastosowanie w (4.51) umoż-
liwia dokładne odtworzenie sygnału analogowego x(t) na podstawie jego próbek x(kT) (wła-
Całkowe przekształcenie Fouriera 95

X(ω)
a)
ω

-ωmax 0 ωmax

Xp1(ω)
b)
ω

-2ωp1 -ωp1 0 ωp1 2ωp1

Hp1(ω)
1
c)
ω

-2ωp1 -ωp1 -ωp1/2 0 ωp1/2 ωp1 2ωp1

Xp1(ω)Hp1(ω
d) )
ω

Xp2(ω)
e)
ω

-3ωp2 -2ωp2 -ωp2 0 ωp2 2ωp2 3ωp2

Xp2(ω)Hp2(ω
)
f)
ω

-3ωp2 -2ωp2 -ωp2 0 ωp2 2ωp2 3ωp2

Rys. 4.11. Ilustracja graficzna konsekwencji częstotliwościowych próbkowania ciągłych sygnałów dolno-
pasmowych i możliwości ich rekonstrukcji z sygnałów dyskretnych w czasie: a) widmo X(ω) sygnału
ciągłego, b) widmo Xp1(ω), sygnału ciągłego po spróbkowaniu z częstotliwością fp1 (pulsacją ωp1), taką że
fp1/2 > fmax, c) idealna charakterystyka częstotliwościowa Hp1(ω) filtra rekonstruującego o częstotliwości
granicznej fg1 = fp1/2 (pulsacji ωg1 = ωp1/2), d) poprawnie „zrekonstruowane” widmo sygnału ciągłego, czyli
iloczyn Xp1(ω)Hp1(ω), e) widmo Xp2(ω), sygnału ciągłego po spróbkowaniu z częstotliwością fp2 (pulsacją
ωp2), taką że fp2/2 < fmax, f) niepoprawnie „zrekonstruowane” widmo sygnału ciągłego, czyli iloczyn
Xp2(ω)Hp2(ω), dla częstotliwości granicznej filtra Hp2(ω) równej fg2 = fp2/2 (ωg2 = ωp2/2)

ściwy dobór pulsacji ωg i ωp dla danego ωm gwarantuje równość xˆ (t ) = x(t ) ). Ze wzoru (4.51)
widać, w jaki sposób przeprowadza się ww. odtwarzanie: przesuwa się sygnały sinc(ωmt) =
= sin(ωmt)/ωmt o czas kT, −∞ ≤ k ≤ ∞, wymnaża się je przez odpowiednie czynniki skalujące
w amplitudzie, czyli przez próbki x(kT), oraz sumuje (patrz rysunek 4.13). Jeśli ωp = 2π/T =
= 2ωm, to
96 Całkowe przekształcenie Fouriera

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Czas [s]
Rys. 4.12. Przykład funkcji rekonstruującej typu sinc, kiedy próbkowanie sygnału ciągłego (analogowego)
jest przeprowadzane z częstotliwością fpr = 10 herców

0.5

-0.5

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Czas [s]
Rys. 4.13. Przykład rekonstrukcji ciągłej sinusoidy (linia pogrubiona) o częstotliwości 1 herca na podstawie
jej próbek (punkty „•”), pobranych z częstotliwością 10 herców. Wykorzystano funkcję rekonstruującą typu
sinc z rysunku 4.12. Sygnał „zrekonstruowany” jest sumą poprzesuwanych funkcji typu sinc, wziętych
z wagami równymi wartościom próbek „•”

 ωp 
sin (t − kT )  sin π (t − kT ) 
sin (ωm (t − kT ) ) 2  = T
sinc( ωm (t − kT )) = =   (4.53)
ωm (t − kT ) ωp π
(t − kT ) (t − kT )
2 T
i dla t = mT, m ≠ k, mamy
sin (π(m − k ) )
sinc(ωm (mT − kT ) ) = =0 (4.54)
π( m − k )

Dla k = m funkcja przyjmuje wartość 1. Wynika stąd, że funkcja rekonstruująca sinc() przesu-
nięta do punktu czasowego kT i wymnożona przez x(kT) w punkcie tym ma wartość x(kT),
a w pozostałych chwilach czasowych próbkowania − zeruje się. Ponieważ jest tak dla wszy-
stkich wartości przesunięć, więc sygnał xˆ (t ) w chwilach czasowyh kT ma dokładnie takie same
wartości jak sygnał x(t), czyli x(kT), natomiast „rekonstrukcja” dotyczy przedziałów pomiędzy
chwilami próbkowania.
W przypadku kiedy częstotliwość próbkowania jest za mała (ωp < 2ωm) wówczas poprzesuwa-
ne „kopie” widma oryginalnego X(jω) „zlewają się” (aliasing) i nie jest możliwe odzyskanie
X(jω) z sumy (4.49) stosując filtrację. Właśnie taka sytuacja jest przedstawiona na rysunkach
4.11e oraz 4.11f.
Całkowe przekształcenie Fouriera 97

Opisane rozważania można w prosty sposób uogólnić na przypadek sygnałów pasmowych.


Zgodnie bowiem z (4.49) jedynym warunkiem rekonstrukcji sygnału analogowego z równo
odległych próbek tego sygnału, jest niewystępowanie „nakładania” się przesuniętych „kopii”
oryginału. A warunek ten można spełnić także dla sygnałów pasmowych, nawet dla przypadku
ωm > ωp/2. Wówczas stosuje się (4.50) i filtrem dolnoprzepustowym wycina się w okolicy
pulsacji zerowej nie widmo oryginalne tylko jego „czystą” kopię. Ale i z niej można odtworzyć
poprawny sygnał analogowy, odpowiednio modulując (wymnażając z odpowiednim sygnałem
harmonicznym) sygnał otrzymany z (4.51) i w ten sposób „przesuwając” go w poprawny
zakres częstotliwości. Oczywiście można także zastosować od razu odpowiednio dobrany filtr
pasmowoczęstotliwościowy w równaniu (4.50), pozostawiający jedynie widmo oryginalne
a usuwający wszystkie „kopie”, i wykorzystać jego odpowiedź impulsową jako ciągłą funkcję
rekonstruującą w (4.51).
Przypadek próbkowania i rekonstrukcji sygnałów pasmowych według pierwszego, dolno-
pasmowego scenariusza jest przedstawiony na rysunkach 4.14 i 4.15. Jedynym niepożądanym
zjawiskiem, które może wystąpić i na które należy zwrócić szczególną uwagę, jest ewentualna
zamiana miejscami widma „ujemnego” i „dodatniego” w okolicy częstotliwości zerowej, tzn.
widmo sygnału pasmowego dla częstotliwości dodatnich po operacji „kopiowania” może
wystąpić w miejscu częstotliwości ujemnych, i odwrotnie (rysunek 4.15c). Zjawisko to zależy
od położenia pasma częstotliwościowego zajmowanego przez sygnał oryginalny oraz od przy-
jętej częstotliwości próbkowania. Jeśli ono występuje, to należy spróbkowany sygnał po-
mnożyć (zmodulować) przez sygnał harmoniczny o częstotliwości równej połowie często-
tliwości próbkowania, czyli przez s(kT) = exp(j(ωp/2)kT) = exp(j(π/T)kT) = ejπk = (−1)k. W ten
sposób przesuwa się jego widmo o ωp/2 i zamienia miejscami widma „ujemne” i „dodatnie”
w okolicy zera, tzn. umieszcza się je na właściwych pozycjach.
Wyciągając wnioski z powyższych rozważań, można stwierdzić, że w ogólnym przypadku
częstotliwość próbkowania powinna być dwa razy większa niż szerokość pasma częstotliwości
dodatnich, zajmowanego przez ten sygnał. Więcej szczegółów poświęconych próbkowaniu
sygnałów pasmowych poznamy w rozdziale 19, poświęconym decymowanym zespołom
filtrów.
Najgorsze już chyba mamy za sobą !

4.6. Widmo sygnału spróbkowanego


Co prawda w rozdziale 8 szczegółowo przedstawiono problem analizy częstotliwościowej
sygnałów zdyskretyzowanych w czasie, ale już teraz możemy się pokusić o pierwsze uwagi
natury jakościowej. W sytuacji kiedy dyskretyzacja sygnałów zostanie przeprowadzona
zgodnie z twierdzeniem o próbkowaniu, to spowoduje jedynie dodatkowe okresowe powtarza-
nie się ciągłych widm sygnałów, na przykład tych przedstawionych na rysunkach 4.5 i 4.6.
Rysunki 4.16 i 4.17 stanowią ilustrację powyższej konstatacji. Na pierwszym z nich przedsta-
wiono widmo fragmentu ciągłego sygnału kosinusoidalnego, wyciętego przez okno prosto-
kątne, i spróbkowanego, na drugim rysunku pokazano przypadek kiedy zastosowano okno
Hanninga. Ponieważ obserwowane widma są okresowe, cała informacja o nich jest zawarta
w ich jednym okresie, przedstawionym na rysunku 4.18. Dodatkowo z (4.4) pamiętamy, że
widmo Fouriera sygnału przyjmującego wartości rzeczywiste ma właściwość (a)symetrii:
XR(−ω) = XR(ω) i XI(−ω) = −XI(ω), z której wynika, że już wartości widma z przedziału
[0, ωp/2] wystarczą do jego pełnej „identyfikacji”.
98 Całkowe przekształcenie Fouriera

X(ω)
a)
ω

-2ω p -ω p 0 ωp 2ω p

Xp(ω)

b)
ω

-2ω p -ω p 0 ωp 2ω p

Hp(ω)
1
c)
ω

-2ωp -ωp -ωp/2 0 ωp/2 ωp 2ωp

Hp(ω)Xp(ω)

d)
ω

-2ω p -ω p 0 ωp 2ω p

Rys. 4.14. Ilustracja graficzna konsekwencji częstotliwościowych próbkowania ciągłych sygnałów pasmo-
wych i możliwości ich rekonstrukcji z sygnałów dyskretnych w czasie: przypadek bez inwersji częstotli-
wości

X(ω)
a)
ω

-2ω p -ω p 0 ωp 2ω p

Xp(ω)

b)
ω

-2ω p -ω p 0 ωp 2ω p

Hp(ω)Xp(ω)

c)
ω

-2ω p -ω p 0 ωp 2ω p

Rys. 4.15. Ilustracja graficzna konsekwencji częstotliwościowych próbkowania ciągłych sygnałów pasmo-
wych i możliwości ich rekonstrukcji z sygnałów dyskretnych w czasie: przypadek z inwersją częstotliwości
Całkowe przekształcenie Fouriera 99

x(t) X(ω)

ω
- ω0 ω0

w(t) W(ω)

-T T ω

xw(t)=x(t)w(t) Xw(ω)=X(ω)⊗W(ω)

-ω0 ω0

Xw(n)(ω)
xw(n)

n
ω

-2ωp -ωp 0 ωp 2ωp

Rys. 4.16. Przykładowe widmo fragmentu sygnału kosinusoidalnego, „wyciętego” przez okno prostokątne
i potem spróbkowanego

W przypadku obliczeń komputerowych wartości widma można wyznaczyć jedynie dla mniej-
szego lub większego, lecz zawsze skończonego zbioru pulsacji. Ciągłe widmo „teoretyczne”
musi więc zostać spróbkowane (zdyskretyzowane), w wyniku czego otrzymuje się skończony
zbiór „prążków” widma. Prążki te są zaznaczone na rysunku 4.18 za pomocą symbolu „•”.
Zbyt rzadkie „próbkowanie” widma ciągłego może doprowadzić do dodatkowych trudności
interpretacyjnych i postawienia błędnej „diagnozy” częstotliwościowej, spowodowanej nietra-
fieniem podczas próbkowania w maksima widma.
Podsumujmy, obserwowane przez nas, zdyskretyzowane widmo sygnału jest odbiciem „ideal-
nego” (teoretycznego) widma nieskończonego sygnału ciągłego, w „krzywym zwierciadle”
niedoskonałości stosowanych metod. Wybór kształtu funkcji okna „obserwacji” i jej długości
oraz sposobu próbkowania widma mają decydujące znaczenie na to co „widzimy”.
100 Całkowe przekształcenie Fouriera

x(t)
X(ω)
t

ω
-ω0 ω0

w(t) W(ω)

-T T ω

xw(t)=x(t)w(t) Xw(ω)=X(ω)⊗W(ω)

-ω0 ω0

xw(n) Xw(n)(ω)

-2ωp -ωp 0 ωp 2ωp

Rys. 4.17. Przykładowe widmo fragmentu sygnału kosinusoidalnego, „wyciętego” przez okno Hanninga
i potem spróbkowanego

Xw(n)(ω) Xw(n)(ω)

a) b)

ω ω

-ω0 ω0 -ω0 ω0
Rys. 4.18. Jeden okres widma sygnału z rysunków 4.16 i 4.17 po spróbkowaniu: a) okno prostokątne, b) ok-
no Hanninga
Całkowe przekształcenie Fouriera 101

4.7. Przykład ćwiczenia komputerowego


W tabeli 4-2 jest przedstawiony kod źródłowy programu w języku Matlab, stanowiący ilustra-
cję twierdzenia o próbkowaniu i rekonstrukcji sygnału na podstawie jego próbek.

Tab. 4-2. Przykład programu, ilustrującego twierdzenie o próbkowaniu

% Ćwiczenie: Twierdzenie o próbkowaniu

% 1. Jeśli maksymalna częstotliwość sygnału jest dwa razy większa niż czętotliwość próbkowania,
% to z sygnału cyfrowego można dokładnie odtworzyć sygnał analogowy
% 2. Przejście z częstotliwości fps (większa) na fpn (mniejsza) i powrót, czyli odtworzenie synału
% fps/fpn = K = liczba całkowita ==> fpn=fps/K > 2

clear all; clf; hold off;

fx = 1; % częstotliwość sygnału [Hz]


fps = 100; % stara częstotliwość próbkowania [Hz]
N = 200; % liczba próbek sygnału spróbkowanego z częstotliwością fps (stara)
K = 10; % ile razy zmniejszyć częstotliwość próbkowania

% Generacja sygnału spróbkowanego z częstotliwością fps

dts = 1/fps; % stary okres próbkowania

ts = 0 : dts : (N-1)*dts;
xs = sin(2*pi*fx*ts);
plot(ts,xs,'r',ts,xs,'o'); grid; title('Sygnał spróbkowany - fp STARE'); pause
% stem(xs,'b'); title('Sygnał spróbkowany - fp STARE'); pause

% Przejście z częstotliwości większej na mniejszą: xs(n) -> xn(n)

fpn = fps/K; % nowa częstotliwość próbkowania = zmniejszona stara częstotliwość

xn = xs( 1 : K : length(xs) );
M = length(xn);
dtn = K*dts;
tn = 0 : dtn : (M-1)*dtn;
plot(ts,xs,'r',tn,xn,'o'); grid; title('Sygnał spróbkowany - fp NOWE'); pause
plot(tn,xn,'b',tn,xn,'o'); grid; title('Sygnał spróbkowany - fp NOWE'); pause
stem(xn,'b'); title('Sygnał spróbkowany - fp NOWE'); pause

% Powrót z częstotliwości mniejszej na większą: xn(n) -> y(n)

% Funkcja aproksymująca

t = -(N-1)*dts : dts : (N-1)*dts; % czas trwania funkcji aproksymującej


f = 1/(2*dtn); % częstotliwość „zer” w funkcji aproksymującej
fa = sin(2*pi*f*t)./(2*pi*f*t); % funkcja aproksymująca
fa(N)=1; % wartość w zerze (dzielenie 0/0)
tz = [ -fliplr(tn) tn(2:M)]; %
z = [zeros(1,M-1) 1 zeros(1,M-1)]; %

plot(t,fa,'b',tz,z,'o'); grid; title('Sinc - funkcja aproksymująca'); pause

% Aproksymacja
y = zeros(1,N);
ty = 0 : dts : (N-1)*dts;
102 Całkowe przekształcenie Fouriera

for k = 1 : M
fa1 = fa( (N)-(k-1)*K : (2*N-1)-(k-1)*K );
y1 = xn(k) * fa1;
y = y + y1;
subplot(311); plot(ty,fa1); grid; title('Kolejna funkcja aproksymująca');
subplot(312); plot(ty,y1); grid; title('Kolejny składnik sumy');
subplot(313); plot(ty,y); grid; title('Suma');
pause
end

subplot(111);

plot(ty,y,'b'); grid; title('Sygnał odtworzony'); pause


plot(ty,xs(1:N)-y(1:N),'b'); grid; title('Różnica między sygnałami'); pause
5
Układy analogowe

Przed przystąpieniem do dyskusji metod analizy i przetwarzania sygnałów cyfrowych, poświę-


cimy obecnie chwilę układom analogowym, tzn. układom przetwarzania sygnałów ciągłych.
Dlaczego? Z dwóch ważnych powodów. P o p i e r w s z e , zazwyczaj przed spróbkowaniem
sygnału analogowego, tzn. przed przetwornikiem analog → cyfra, ogranicza się sztucznie pas-
mo częstotliwościowe sygnału analogowego, dostosowując je do zadanej częstotliwości prób-
kowania. Przypomnijmy, zgodnie z twierdzeniem o próbkowaniu maksymalna częstotliwość
występująca w sygnale analogowym, która ma być przeniesiona przez przetwornik A/C, musi
być więcej niż dwa razy mniejsza od częstotliwości próbkowania. Należy więc zaprojektować
filtr analogowy, który usunie z sygnału niepożądane częstotliwości jeszcze po stronie analo-
gowej. I trzeba praktycznie umieć to robić. P o d r u g i e , jak się później okaże, umiejętność
projektowania filtrów analogowych może być także wykorzystana do projektowania filtrów
cyfrowych. Filtry analogowe (transmitancje Laplace’a H(s) zmiennej zespolonej s) można
bowiem przekształcić na filtry cyfrowe (transmitancje Z H(z) zmiennej zespolonej z) metodą
np. transformacji biliniowej.
Umiejętność projektowania filtrów analogowych jest więc bardzo korzystna: „dwa w jednym”
− metoda jedna, a zastosowania podwójne, w świecie analogowym i cyfrowym.

5.1. Analogowe układy LTI


Układy LTI (ang. Linear Time-Invariant) to układy liniowe niezmienne w czasie. Stanowią one
najprostszą, ale dostatecznie efektywną grupę układów przetwarzania sygnałów, tak analo-
gowych jak i cyfrowych. My zajmiemy się obecnie układami analogowymi.
Niech x(t) oznacza sygnał wejściowy, a y(t) sygnał wyjściowy z układu analogowego. Układ
jest liniowy kiedy:
jeśli x1 (t ) → y1 (t ) i x2 (t ) → y 2 (t ) , to ax1 (t ) + bx2 (t ) → ay1 (t ) + by 2 (t )

czyli odpowiedź układu na sumę wymuszeń jest równa sumie odpowiedzi na poszczególne
wymuszenia, działające osobno. Natomiast jest on niezmienny w czasie (niewrażliwy na prze-
sunięcie w czasie) kiedy dla każdego t0 mamy:
jeśli x (t ) → y (t ) , to x (t − t0 ) → y (t − t0 )
104 Układy analogowe

a) x(t) y(t) b) δ(t) y(t)=h(t)


h(t) h(t)

X(jω) H(jω) Y(jω) ∆(jω) H(jω) Y(jω)=H(jω)

∞ ∞

y (t ) = ∫ h( τ) x(t − τ)dτ y (t ) = ∫ h( τ)δ(t − τ)dτ = h(t )


−∞
−∞

Y(jω)=H(jω)X(jω) Y(jω)=H(jω)∆(jω)=H(jω)

Rys. 5.1. Schemat blokowy i równania liniowego układu analogowego niezmiennego w czasie: x(t) − sygnał
wejściowy, y(t) − sygnał wyjściowy, h(t) − odpowiedź impulsowa układu, δ(t) − impuls Diraca, X(jω), Y(jω),
H(jω) i ∆(jω) − transformaty Fouriera sygnałów czasowych, ∆(jω) = 1

czyli odpowiedź układu na opóźnione pobudzenie jest taka sama jak na oryginalne pobudzenie,
tylko opóźniona.
Układy LTI przetwarzają sygnały wejściowe x(t) na sygnały wyjściowe y(t) z wykorzystaniem
swojej odpowiedzi impulsowej h(t) (rysunek 5.1a):

x (t ) → y (t ) = ∫ h(τ) x(t − τ)dτ (5.1)
−∞

Odpowiedzią impulsową h(t) układu nazywamy, jak sama nazwa wskazuje, jego odpowiedź na
impuls Diraca, czyli sygnał δ(t) (rysunek 5.1b):

δ( t ) → y (t ) = ∫ h(τ)δ(t − τ)dτ = h(t ) (5.2)
−∞
Obecnie spróbujemy wyprowadzić zależność (5.1), charakterystyczną dla układów LTI. W po-
przednim rozdziale bardzo dużo uwagi poświęciliśmy sygnałowi typu impuls (delta) Diraca.
Przypomnijmy, że dla dowolnego sygnału x(t) i dowolnego τ prawdziwe było równanie (4.23):

x (t ) = ∫ x( τ)δ(t − τ)dτ (5.3)
−∞
Załóżmy obecnie, że obie strony powyższego równania podajemy na wejście układu LTI.
Oczywiście, odpowiedzią układu na x(t) jest sygnał y(t), natomiast co z jego prawą stroną? Mo-
żna ją traktować jako „sumę” impulsów Diraca δ(t): opóźnionych o czas τ (czyli δ(t−τ)) i prze-
skalowanych w amplitudzie (wymnożonych przez liczbę x(τ): x(τ)δ(t−τ)). Ponieważ rozpa-
trywany układ jest n i e z m i e n n y w c z a s i e , więc jego odpowiedzią na δ(t−τ) będzie h(t−τ),
a z jego l i n i o wo ś c i wynika, że odpowiedzią na sumę sygnałów typu x(τ)δ(t−τ) będzie suma
(całka) poszczególnych odpowiedzi typu x(τ)h(t−τ). Podsumowując mamy:
δ( t ) → h ( t ) (definicja odpowiedzi impulsowej)
δ( t − τ ) → h ( t − τ ) (opóźnienie o czas τ, niezmienność w czasie)
x ( τ ) δ( t − τ ) → x ( τ ) h ( t − τ ) (skalowanie przez współczynnik x(τ))
+∞ +∞

∫ x(τ)δ(t − τ)d τ → ∫ x(τ)h(t − τ)d τ


−∞ −∞
(sumowanie wielu opóźnień, liniowość)

x(t ) → y (t ) (uogólnienie na podstawie (5.3))


Układy analogowe 105

i ostatecznie:

y (t ) = ∫ x(τ)h(t − τ)dτ ⇔ y ( t ) = x (t ) ⊗ h (t ) (5.4)
−∞
czyli wyjście układu LTI jest równe splotowi jego wejścia z jego funkcją przejścia. Ciekawe!
Jeśli przez Η[.] oznaczymy funkcję przetwarzania układu LTI, to wówczas skrótowo możemy
zapisać:
∞  ∞ ∞
y (t ) = Η [ x (t )] = Η  ∫ x( τ)δ(t − τ)d τ  = ∫ x ( τ) Η [ δ( t − τ)] d τ = ∫ x ( τ )h(t − τ )d τ
 −∞  −∞ −∞

Możliwa jest także zmiana zmiennych: ξ = t−τ (skąd: τ = t−ξ, dτ = dt−dξ = dξ, gdyż t jest usta-
lone wewnątrz całki) i w konsekwencji zmiana kolejności sygnałów w całce splotowej:
∞ ∞ ∞
y (t ) = ∫ x(τ)h(t − τ)dτ = ∫ x(t − ξ)h(ξ)dξ = ∫ h(τ) x(t − τ)dτ ⇔ y ( t ) = h ( t ) ⊗ x (t ) (5.5)
−∞ −∞ −∞

Splot dwóch sygnałów jest równoważny sekwencji następujących operacji: 1) odwróć w czasie
jeden z sygnałów (x(τ) → x(−τ)), 2) przesuń go w czasie o czas t (x(−τ) → x(t−τ)), 3) wymnóż
oba sygnały (h(τ)x(t−τ)), 4) wykonaj operację całkowania iloczynu względem zmiennej τ.
W wyniku otrzymasz wartość sygnału y(.) w chwili t. Graficzną ilustrację operacji splotu
przedstawiono w podrozdziale 1.3.6 na rysunkach 1.7 i 1.9.
Oczywiście, następnym pytaniem jest co z tego wynika dla nas, „projektantów” układów ana-
logowych i w jaki sposób należy dobierać odpowiedź impulsową h(t) układu LTI? Nic
prostszego. Z właściwości splotu przekształcenia Fouriera (4.13) wynika, że splotowi sygnałów
w dziedzinie czasu odpowiada iloczyn ich widm Fouriera w dziedzinie częstotliwości:
∞ ∞
y (t ) = ∫ x(τ)h(t − τ)dτ = ∫ h(τ) x(t − τ)dτ ⇔ Y ( jω) = X ( jω) H ( jω) (5.6)
−∞ −∞

Układ należy więc zaprojektować tak, aby miał odpowiedź impulsową h(t), charakteryzującą
się wymaganym widmem H(jω), tzn. równym jeden dla pulsacji przepuszczanych (przenoszo-
nych) przez układ oraz równym zero dla pulsacji usuwanych (tłumionych). Oczywiście naj-
prościej jest zadać pożądane H(jω), a h(t) obliczyć z H(jω) za pomocą odwrotnego przekształ-
cenia Fouriera, tak jak to robiliśmy w rozdziale poprzednim wyznaczając odpowiedź impulso-
wą h(t) filtra rekonstruującego sygnał analogowy z jego próbek. Na rysunku 1.10 przed-
stawiono interpretację częstotliwościową splotu sygnałów z rysunku 1.9. Jak widać w wyniku
tej operacji w sygnale y(t) zmniejszono „zawartość” składowej sinusoidalnej o częstotliwości
8 herców.
Ze wzoru (5.6) wynika, że filtracja polega na modyfikacji widma sygnału X(jω) za pomocą
H(jω). Obecnie w celach poglądowych załóżmy, że na wejście układu podajemy sygnał harmo-
niczny x(t) = exp(jωt) i interesujemy się jego wyjściem. Zmieniając pulsację ω jesteśmy w sta-
nie przebadać zachowanie się układu dla różnych interesujących nas zakresów częstotliwości.
Oto co otrzymujemy:
∞ ∞ ∞ 
jω( t −τ ) − jωτ
y (t ) = ∫ h ( τ) x ( t − τ ) d τ = ∫ h ( τ ) e d τ =  ∫ h ( τ)e d τ  e jωt = H ( jω)e jωt (5.7)
−∞ −∞  −∞ 
106 Układy analogowe

Sygnał wyjściowy jest równy sygnałowi wejściowemu, pomnożonemu przez konkretną (jedną)
liczbę zespoloną H(jω). Liczbę tę można przedstawić we współrzędnych biegunowych jako
promień i kąt, czyli moduł M(ω) = |H(jω)| i fazę Φ(ω) = )H(jω) = arctg(Im(H(jω))/Re(H(jω)),
gdzie Im(.) oznacza część urojoną, a Re(.) − część rzeczywistą liczby zespolonej:

H ( jω) = M ( ω)e jΦ ( ω) , M ( ω) = H ( jω) , Φ (ω) = )H ( jω) = arctg [ Im( H ( jω) / Re( H ( jω)]
(5.8)
Wówczas z (5.7) otrzymujemy:

{ }
y (t ) = M (ω)e jΦ ( ω) e jωt = M (ω)e j ( ωt +Φ ( ω)) (5.9)

Jak widać M(ω) wpływa na amplitudę sygnału wyjściowego, Φ(ω) przesuwa go zaś w fazie.
Z tego powodu zbiór wszystkich wartości M(ω) dla różnych pulsacji ω nazywa się charaktery-
styką amplitudowo-częstotliwościową układu analogowego, a Φ(ω) − jego charakterystyką fa-
zowo-częstotliwościową. Samo H(jω) często nazywa się odpowiedzią częstotliwościową ukła-
du. Na rysunku 5.2a zostały przedstawione różne typy charakterystyk amplitudowo-często-
tliwościowych M(ω): dolnoprzepustowa LP (ang. LowPass), górnoprzepustowa HP (ang.
HighPass), pasmowoprzepustowa BP (ang. BandPass) i pasmowozaporowa BS (ang. Band-
Stop). Na rysunku 5.2b pokazano natomiast dwie przykładowe charakterystyki fazowo-często-
tliwościowe Φ(ω): liniową (L) i nieliniową (NL).

Φ(ω) ω
M(ω)
BP
LP HP
BS L

NL
ω

Rys. 5.2. Przykład różnych charakterystyk amplitudowo-częstotliwościowych M(ω) i fazowo-częstotliwo-


ściowych Φ(ω) układów analogowych. Oznaczenia: LP − układ dolnoprzepustowy (ang. LowPass), HP −
układ górnoprzepustowy (ang. HighPass), BP − układ pasmowoprzepustowy (ang. BandPass), BS − układ
pasmowozaporowy (ang. BandStop), L − liniowa charakterystyka fazowa, NL − nieliniowa charakterystyka
fazowa

Φatan2(ω) unwrap( Φatan2(ω) )


π
ω
π
ω

Rys. 5.3. Ilustracja problemu wyznaczania charakterystyki fazowo-częstotliwościowej układu ze wzoru


Φ(ω) = arctg( Im(H(jω)) / Re(H(jω)) ) z dodatkowym uwzględnieniem znaku dzielnej i dzielnika (funkcja
atan2( imag(H), real(H)) w języku Matlab)
Układy analogowe 107

Ważną, pożądaną, często podkreślaną właściwością układów jest l i n i o wa c h a r a k t e r y -


s t y k a f a z o wa , tzn. charakterystyka fazowa postaci: Φ(ω) = −αω. Cóż w niej jest takiego
wyjątkowego? Jeśli przez układ jest przetwarzany sygnał harmoniczny x(t) = exp(jωt), taki jak
poprzednio, to na jego wyjściu otrzymujemy:
y ( t ) = M ( ω) e j ( ωt + Φ ( ω)) = M ( ω)e jω( t − α) (5.10a)
czyli sygnał opóźniony w czasie o α sekund. W przypadku sumy dwóch sygnałów o różnych
pulsacjach ω1 i ω2 mamy (liniowość układu):

y ( t ) = M ( ω1 ) e jω1 ( t − α) + M ( ω2 )e jω 2 ( t − α) (5.10b)

Wynika stąd, że liniowość fazy zapewnia j e d n a k o we o p ó ź n i e n i e c z a s o we wszystkich


składowych sygnału na wyjściu, niezależnie od ich częstotliwości. A to z kolei powoduje, że
jeśli tylko M(ω1) = M(ω2) = ... itd., to układ n i e z m i e n i a k s z t a ł t u p r z e n o s z o n e g o
s y g n a ł u . Jest to właściwość bardzo istotna. Przykładowo lekarze kardiolodzy potrafią odczy-
tać bardzo wiele z kształtu sygnału EKG. Przetwarzanie tego sygnału, mające na celu redukcję
ewentualnych zakłóceń sieciowych lub drgań mięśni, a prowadzące dodatkowo do zmiany jego
kształtu, jest więc niedopuszczalne.
Opóźnienie czasowe sygnału o pulsacji ω na wyjściu układu liniowego o transmitancji H(jω) =
= M(ω)ejΦ(ω) jest określone następującym wzorem:
dΦ ( ω)
τ(ω) = − (5.11)

Funkcja τ(ω) jest nazywana funkcją opóźnienia grupowego. Dla Φ(ω) = −αω mamy τ(ω) = α.
W tym miejscu należy zwrócić uwagę na trudności występujące w „pomiarze” charakterystyki
fazowo-częstotliwościowej układów analogowych. Jeśli przesunięcie fazowe jest kątem liczby
zespolonej, to w płaszczyźnie zespolonej jest możliwe tylko rozróżnienie kątów z przedziału
[0,2π) lub (−π,π]. A przecież przesunięcie fazowe układu rzeczywistego może leżeć poza tym
przedziałem, np. w układach z liniowo malejącą charakterystyką fazową ciągle maleje. Jeśli
wyznaczamy charakterystykę fazową takiego układu z funkcji arctg(Im(H(jω)) / Re(H(jω)))
(np. funkcja atan2() w języku Matlab), to wówczas otrzymujemy zawsze wynik z przedziału
(−π,π] i obserwujemy skoki tej charakterystyki o +2π radianów (patrz rysunek 5.3a). Jeśliby
jednak przeprowadzać detekcję natury skoków charakterystyki fazowej i wprowadzać jej
korektę, dodając do obserwowanych zmian skokowe przesunięcie równe k*2π (funkcja
unwrap() w języku Matlab), wówczas charakterystyka ta jest poprawna (patrz rysunek 5.3b).
Problem ten dotyczy także układów cyfrowych i jest także poruszony podczas ich omawiania.

5.2. Transmitancja układu analogowego, zera i bieguny


Układy analogowe LTI najczęściej są opisywane za pomocą zależności wiążącej sygnał wyj-
ściowy y(t) z układu, i jego kolejne pochodne, z sygnałem wejściowym x(t), i jego pochodny-
mi:
d N y (t ) d N −1 y ( t ) dy (t ) d M x (t ) d M −1 x ( t ) dx (t )
aN + a N −1 N −1
+ ... + a1 + a 0 y ( t ) = bM + bM − 1 + ... + b1 + b0 x (t )
dt N
dt dt dt M
dt M −1 dt
N
d n y (t ) M
d m x (t )
∑ an dt n
= ∑ bm dt m
(5.12)
n =0 m=0
108 Układy analogowe

Parametrami układu jest liczba pochodnych wyjścia (rząd równania różniczkowego N), liczba
pochodnych wejścia (rząd równania różniczkowego M) oraz wartości współczynników an i bm,
n = 0, 1, ..., N i m = 0, 1, ..., M. Załóżmy, że rozpatrujemy układy, w których wartości współ-
czynników an i bm są rzeczywiste. Projektowanie układu sprowadza się do przyjęcia konkret-
nych wartości dla wszystkich parametrów. Kryterium doboru tych wartości stanowi wymagana
(pożądana) charakterystyka częstotliwościowa układu. Jeśli tak, to trzeba umieć interpretować
równanie (5.12) w dziedzinie częstotliwości. Z pomocą przychodzi nam tutaj właściwość po-
chodnej przekształcenia Fouriera (rozdz. 4.2). Transformując obie strony równania (5.12) i ko-
rzystając z tej właściwości otrzymujemy:

( a N ( jω) N + aN −1 ( jω)N −1 + ... + a1( jω)1 + a0 )Y ( jω) = ( bM ( jω)M + bM −1( jω)M −1 + ... + b1 ( jω)1 + b0 ) X ( jω)
N M

∑ a ( jω) Y ( jω) = ∑ b
n =0
n
n

m=0
m ( jω) m X ( jω) (5.13)

skąd:
M
M
Y ( jω) bM ( jω) + bM −1 ( jω) M −1
+ ... + b1 ( jω) + b0 1 ∑ bm ( jω) m
m=0
H ( jω) = = −
= (5.14)
X ( jω) a N ( jω) + a N −1 ( jω)
N N 1
+ ... + a1 ( jω)1 + a 0 N
∑ an ( jω) n
n =0
Oczywiście wynikowa odpowiedź impulsowa h(t) układu opisanego równaniem (5.12) jest
równa odwrotnemu przekształceniu Fouriera z H(jω) (5.14):

h (t ) = Fourier −1 (H ( jω) ) (5.15)

Widzimy, że współczynniki an i bm równań różniczkowych są równocześnie współczynnikami


wielomianów zmiennej zespolonej (jω) odpowiedzi częstotliwościowej H(jω): współczynniki
bm pochodnych sygnału wejściowego są współczynnikami wielomianu licznika H(jω), a współ-
czynniki an pochodnych sygnału wyjściowego są współczynnikami wielomianu mianownika.
Dobierając wartości an i bm wpływamy na H(jω).
Obecnie zajmiemy się metodologią projektowania układów analogowych o zadanej odpowie-
dzi częstotliwościowej H(jω). Równanie (5.14) można zapisać jako:
Y ( jω) b ( jω − z1 )( jω − z2 )...( jω − z M )
H ( jω) = = M (5.16)
X ( jω) a N ( jω − p1 )( jω − p2 )...( jω − p N )

gdzie z1, z2, ..., zM oznaczają miejsca zerowe (w ogólności liczby zespolone, parami sprzężone)
wielomianu licznika zmiennej jω, a p1, p2, ..., pN − miejsca zerowe (liczby zespolone, także
parami sprzężone) wielomianu mianownika tej zmiennej. Równanie (5.16) można z kolei
przedstawić w postaci bardziej „zwartej” jako:
M
bM ∏ ( jω − zm )
Y ( jω) m =1
H ( jω) = = (5.17)
X ( jω) N
a N ∏ ( jω − pn )
n =1
gdzie dla konkretnego układu liczby zespolone z1, z2, ..., zM, p1, p2, ..., pN są stałe, pulsacja
ω jest zaś zmienna. Aby wyzerować odpowiedź częstotliwościową H(jω) dla wybranej pulsacji
ω, należy spowodować, aby jedno z wyrażeń (jω−zm) było r ó wn e z e r o dla tej pulsacji, czyli
aby jedno z zer wielomianu licznika było równe zm = jω. Odwrotnie, aby układ wzmacniał
Układy analogowe 109

sygnał wejściowy dla wybranej pulsacji ω, należy spowodować, aby jedno z wyrażeń (jω−pn)
było b l i s k i e z e r u dla tej pulsacji, czyli aby jedno z zer wielomianu mianownika pn było
prawie równe jω.
Wyznaczenie charakterystyki częstotliwościowej dowolnego, analogowego układu LTI spro-
wadza się do obliczenia wartości odpowiedzi częstotliwościowej H(jω) (liczby zespolonej
o module M(ω) i fazie Φ(ω)) dla wybranych wartości pulsacji ω. Ponieważ dla zadanego ω,
(jω−zm) i (jω−pn) są konkretnymi liczbami zespolonymi, oznaczmy je w następujący sposób:
jω − z m = Bm e jθ m , jω − p n = An e jϕ n (5.18)
gdzie
Bm = jω − zm , An = jω − pn , θm = ) ( jω − zm ) , ϕn = ) ( jω − zn ) (5.19)

W (5.19) |.| oznacza moduł liczby zespolonej, a )(.) jej kąt. Wówczas
M M
bM ∏ Bm e jθ m
B ( jω)
bM ∏ Bm M N
H ( jω) = M ( ω)e jΦ ( ω) = m =1
N
=
A( jω)
, M ( ω) = m =1
N
, Φ ( ω) = ∑ θm − ∑ ϕ n
a N ∏ An e jϕ n a N ∏ An m =1 n =1

n =1 n =1
(5.20)
Aby sprawdzić charakterystykę częstotliwościową zaprojektowanego układu należy przesuwać
się z częstotliwością wzdłuż osi urojonej i dla każdego jω (ω jest zmienne) obliczyć wartości
Bm, An, θm, ϕn, n = 0, 1, ..., N i m = 0, 1, ..., M, czyli liczby zespolone (jω−zm) i (jω−pn) oraz
ich moduły (odległości zer licznika i mianownika transmitancji H(jω) od punktu jω) i kąty,
a następnie skorzystać z wzorów (5.20).
Ilustracja graficzna opisanej powyżej metodologii projektowania układów analogowych jest
przedstawiona na rysunku 5.4. Zera {z1, z2, ..., zM} i bieguny {p1, p2, ..., pN} transmitancji H(jω)
są liczbami należącymi do przestrzeni liczb zespolonych s. Przy założeniu, że współczynniki
wielomianów transmitancji {an, n = 0, 1, ..., N} i {bm, m = 0, 1, ..., M} są rzeczywiste, wystę-
pują one zawsze w parach sprzężonych. Zera zk, oznaczone na rysunku przez „•”, mogą leżeć
w dowolnym punkcie przestrzeni s, natomiast bieguny pk, reprezentowane symbolem „³”, ze
względu na stabilność układu powinny leżeć tylko w lewej półpłaszczyźnie tej przestrzeni.
Zero zk = jω0 leżące na osi urojonej, zeruje charakterystykę amplitudowo-częstotliwościową
układu dla pulsacji ω = ω0, natomiast biegun pk = σk+jωk powoduje tym większy wzrost wzmo-
cnienia układu dla pulsacji ωk, im leży bliżej osi urojonej s = jω, czyli im jest mniejsze σk.
Pewnego komentarza wymaga jeszcze interpretacja obserwowanej charakterystyki fazowej
układu, czyli kształt Φ(ω). Jak już było wspomniane w poprzednim podrozdziale z powodów
obliczeniowych (zastosowanie funkcji arctg(.)) w charakterystyce tej są widoczne skoki o +2π
radianów i z tego powodu wymaga ona zastosowania procedury „uciąglenia” (unwrap w języ-
ku Matlab). Jednak w charakterystyce fazowej są obserwowane także skoki o +π, które zazwy-
czaj wywołują dużą konsternację wśród mniej doświadczonych projektantów. Jakie jest źródło
ich pochodzenia? Załóżmy, że mamy zero leżące na osi zespolonej, np. w punkcie jω0,
wówczas dla pulsacji ω = ω0−∆ω nieznacznie mniejszej od ω0 mamy jω−jω0 = −j∆ω, dla
pulsacji ω = ω0+∆ω otrzymujemy zaś jω−jω0 = j∆ω. Jak widać są to liczby zespolone mające
tylko część urojoną i mające przeciwny znak, czyli różniące się właśnie o +π.
110 Układy analogowe

a) Im(s) s b)
Im(s) s
z1 z1
z2 z2
z3 p1
p1 Re(s)
p2 Re(s) p2
p2 *
p 1* *
z3 p1 *
z 2* z 2*
z 1* z 1*
s = jω s = jω

c) jω s d) jω s
z1
jω0 jω0
p1
σ r=A1 σ

ϕ1
p1 * p1 *

z1*

Rys. 5.4. Ilustracja graficzna metodologii projektowania układów analogowych: a) „dozwolone” położenie
zer „z” i biegunów „³” transmitancji układu (bieguny tylko w lewej półpłaszczyźnie), b) przykładowe
położenie zer i biegunów dla układu dolnoprzepustowego (zera − „zerują”, bieguny − „podbijają” od-
powiednie przedziały odpowiedzi częstotliwościowej układu), c), d) przykładowa konstrukcja wektorów
jω0−zk i jω0−pk (wzór (5.18)), wpływających na kształt H(jω) zgodnie z równaniem (5.20). Oznaczenie:
s = Re(s)+jIm(s) = = σ+jω

Projektowanie H(jω) o zadanych właściwościach sprowadza się więc do umieszczenia w odpo-


wiednim miejscu płaszczyzny zespolonej zer i biegunów H(jω), czyli, odpowiednio, zer liczni-
ka i mianownika. Z teorii układów analogowych wynika, że aby układ był stabilny (odpo-
wiedzią na sygnał wejściowy o ograniczonej amplitudzie jest zawsze s y g n a ł wy j ś c i o wy
o o g r a n i c z o n e j a m p l i t u d z i e ) rząd wielomianu mianownika H(jω) musi być co najmniej
taki jak rząd licznika (czyli N ≥ M) oraz bieguny H(jω) (zera mianownika, parami sprzężone
liczby zespolone) mogą leżeć tylko w lewej półpłaszczyźnie płaszczyzny liczb zespolonych.
Zera H(jω) (zera licznika) mogą natomiast leżeć w dowolnym miejscu tej płaszczyzny. Jeśli
jednak i one leżą w lewej półpłaszczyźnie płaszczyzny liczb zespolonych, to układ odwrotny
do H(jω), czyli 1/H(jω), jest także zawsze stabilny, jeśli tylko M = N. Układ taki nazywa się
minimalnofazowym.
Układy analogowe 111

Dla dociekliwych. Obecnie postaramy się uzasadnić przytoczone warunki stabilności układów
analogowych. Załóżmy, że transmitancję (5.16) można przedstawić jako sumę transmitancji
prostych z jednym biegunem:

bM  c1 c2 ck cN 
H ( jω) =  + + ... + + ... +  (5.21)
aN  jω − p1 jω − p2 jω − pk jω − p N 

Jest to możliwe kiedy wszystkie bieguny transmitancji są j e d n o k r o t n e . Ponieważ założyliś-


my, że współczynniki bm i an w transmitancji (5.14) są rzeczywiste, więc bieguny pk są licz-
bami rzeczywistymi lub liczbami zespolonymi parami sprzężonymi. W związku z tym współ-
czynniki ck, k = 1, 2, 3, ..., N, są liczbami rzeczywistymi dla biegunów rzeczywistych oraz licz-
bami zespolonymi dla biegunów zespolonych. Jeśli bieguny są sprzężone, to związane z nimi
współczynniki ck także są sprzężone. Po sprowadzeniu (5.21) do wspólnego mianownika, rząd
wielomianu licznika zmiennej jω jest zawsze mniejszy od rzędu mianownika. Z rozdziału 4.3
wiemy, że każda z transmitancji prostych jest wynikiem całkowego przekształcenia Fouriera
sygnału eksponencjalnego postaci:

 0 dla t < 0
hk (t ) =  pk t (5.22)
ck e dla t ≥ 0

Oczywiście odpowiedź impulsowa układu jest sumą wszystkich sygnałów hk(t):


N
h (t ) = ∑ hk (t ) (5.23)
k =1

Zapiszmy biegun k-tej transmitancji prostej jako:


pk = σ k + jωk (5.24)
gdzie σk i ωk to dowolne liczby rzeczywiste. Wówczas z (5.22) mamy:

 0 dla t < 0
hk (t ) =  ( σk + jωk ) t
(5.25)
 ck e dla t ≥ 0

Ponieważ bieguny zespolone występują w parach sprzężonych, stąd mamy dla nich (dla t≥0):

hk (t ) + hk(*) (t ) = ck e( σk + jωk ) t + ck* e( σk − jωk ) t (5.26)

Rozważmy obecnie możliwe przypadki.

P r z y p a d e k 1 − σk < 0. Jeśli biegun jest r z e c z y wi s t y (ωk = 0), to odpowiedź impulsowa


układu jest równa:
hk (t ) = ck e σ k t (5.27)
i maleje asymptotycznie do zera wraz ze wzrostem czasu. Jeśli biegun jest z e s p o l o n y (ωk≠0),
to dla ck = uk+jvk mamy z (5.26):

v
hk (t ) + hk(*) (t ) = ck e( σk + jωk ) t + ck* e( σk − jωk ) t = 2 uk2 + vk2 ⋅ eσk t ⋅ cos ( ωk t + βk ) , β k = arctg  
u
(5.28)
112 Układy analogowe

czyli odpowiedź impulsowa reprezentuje tłumione kosinusoidalne oscylacje, także malejące


w czasie asymptotycznie do zera. W obu przypadkach odpowiedź impulsowa jest ograniczo-
na, a więc układ jest stabilny.
P r z y p a d e k 2 − σk = 0. Przeprowadzając analizę jak poprzednio otrzymujemy:
ωk = 0 ⇒ hk (t ) = ck

ωk ≠ 0 ⇒ hk (t ) + hk(*) (t ) = ck e( σk + jωk ) t + ck* e( σk − jωk )t = 2 uk2 + vk2 ⋅ cos ( ωk t + β k ) (5.29)

czyli odpowiedź impulsowa jest ograniczona, chociaż oscylacyjna dla ωk≠0, a układ jest okre-
ślany jako stabilny.
P r z y p a d e k 3 − σk > 0. We wzorach (5.27), (5.28) czynnik exp(σkt) rośnie w sposób nie-
skończony, więc odpowiedź impulsowa jest nieograniczona a układ niestabilny.

Podsumowując można powiedzieć, że dla biegunów jednokrotnych układ jest stabilny, jeśli
bieguny te leżą w lewej półpłaszczyźnie zmiennej zespolonej lub na osi urojonej. Jeśli do-
puścimy zaś możliwość występowania biegunów wi e l o k r o t n y c h , bieguny te mogą leżeć
wy ł ą c z n i e w l e we j p ó ł p ł a s z c z y ź n i e . Wynika to z faktu, że w przypadku występowa-
nia biegunów wielokrotnych transmitancja H(jω) nie może być przedstawiona za pomocą wzo-
ru (5.21), tylko w następującej postaci:

bM ( jω − z1 )( jω − z2 )...( jω − zM ) bM  K kK ckn 
H ( jω) = k k k
=  ∑ ∑  (5.30)
a N ( jω − p1 ) ( jω − p2 ) ...( jω − pK )
1 2 K a N  k =1 n =1 ( jω − pk )n 
przykładowo:
jω − z1 c11 c12
H ( jω) = = + (5.31)
( jω − p1 ) 2 jω − p1 ( jω − p1 ) 2

Dodatkowo jest prawdziwa następująca para transformat Fouriera:


1 1
x (t ) = t n −1e − at ⇔ X ( jω) = (5.32)
( n − 1)! ( jω + a ) n
w szczególności dla n = 2 mamy:
1
x (t ) = te − at ⇔ X ( jω) = (5.33)
( jω + a ) 2
W związku z tym z podwójnym biegunem zespolonym pk = σk+jωk jest związana składowa od-
powiedzi impulsowej równa:

( )
hk (t ) = ( ck 1 + ck 2 t ) e( σk + jωk ) t + ck*1 + ck*2 t e( σk − jωk ) t (5.34)

która jest ograniczona tylko dla σk < 0, gdyż tylko wówczas ck(*)2 te σk t asymptotycznie maleje
do zera kiedy czas dąży do nieskończoności.

5.3. Przekształcenie Laplace’a, transmitancja Laplace’a


W literaturze technicznej poświęconej rachunkowi operatorowemu z sygnałem analogowym
x(t) wiąże się jego dwustronną transformatę Laplace’a H(s):
Układy analogowe 113


− st
X ( s) = ∫ x ( t )e dt (5.35)
−∞

Dla sygnałów przyczynowych, czyli takich, że x(t) = 0 dla t < 0, transformacja ta upraszcza się
do jednostronnej transformacji Laplace’a, zdefiniowanej jako:

X ( s ) = ∫ x (t )e − st dt (5.36)
0

gdzie s = σ+jω jest zmienną zespoloną, mającą część rzeczywistą i urojoną. Synteza sygnału na
podstawie znajomości jego X(s) jest dana wzorem:
c + jω
1
2πj c −∫j∞
x (t ) = X ( s )e st ds (5.37)

gdzie (5.37) oznacza całkę w płaszczyźnie zespolonej i c jest liczbą rzeczywistą, leżącą w ob-
szarze bezwzględnej zbieżności X(s) (5.36). Dla s = jω przekształcenie Laplace’a przechodzi
w jednostronne przekształcenie Fouriera:

X ( jω) = ∫ x (t )e − jωt dt (5.38)
0

Jednostronne i dwustronne przekształcenie Fouriera są takie same dla sygnałów przyczyno-


wych (x(t) = 0 dla t < 0). Jednostronne przekształcenie Laplace’a ma wszystkie podstawowe
właściwości jednostronnego przekształcenia Fouriera, w tym właściwości splotu, iloczynu
i pochodnej. Wynika stąd, że:

z(t ) = ∫ x ( τ) y (t − τ) d τ ↔ Z ( s ) = X ( s )Y ( s ) (5.39)
−∞

1 c +∞
z ( t ) = x (t ) y ( t ) ↔ Z ( s ) = ∫ X (r )Y ( s − r ) dr
2πj c −∞
(5.40)

dx(t )
↔ sX ( s ) − x (0+ ) (5.41)
dt

d n x(t )
= s n X ( s ) − s n −1 x (0+ ) − s n − 2 x (1) (0+ ) − ... − x ( n −1) (0+ ) (5.42)
dt n
gdzie x(i)(0+), i = 1, 2, 3, ..., n−1, oznacza i-tą pochodną sygnału x(.) w chwili czasowej 0+.

W tabeli 5-1 przedstawiono transformaty Laplace’a dla kilkunastu wybranych sygnałów.

Zakładając przyczynowość sygnałów x(t) i y(t), występujących w równaniu (5.12), oraz zerowe
warunki początkowe (pochodne) w chwili czasowej 0+, otrzymujemy wzór na transmitancję
Laplace’a układu H(s):

Y ( s ) bM s M + bM −1s M −1 + ... + b1s1 + b0 bM ( s − z1 )( s − z 2 )...( s − z M )


H ( s) = = = (5.43a)
X ( s ) a N s N + a N −1s N −1 + ... + a1 s1 + a 0 a N ( s − p1 )( s − p2 )...( s − p N )
114 Układy analogowe

Tab. 5-1. Przykłady transformat Laplace’a dla wybranych sygnałów



− st
Lp. Sygnał x(t), 0 ≤ t ≤ ∞ Transformata X ( s ) = ∫ x (t ) e dt
−∞
1 δ(t ) 1
0 dla t < 0 1
2 u (t ) = 
1 dla t ≥ 0 s
n!
3 t n dla n > 0 s n +1

1
4 e − at s+a
1
5 te − at ( s + a )2
t n −1e − at 1
6
( n − 1)! ( s + a )n

7
1
b−a
(
e − at − e −bt , a ≠ b ) 1
( s + a )( s + b)

8 −
1
b−a
(
ae − at − be− bt , a ≠ b ) s
( s + a )( s + b)
ω
9 sin ωt
s + ω2
2

s
10 cos ωt
s + ω2
2

ω
11 e − at sin ωt
( s + a ) 2 + ω2
s+a
12 e − at cos ωt ( s + a ) 2 + ω2
s+a
13 a 2 + ω2  ω
sin(ωt + ϕ), ϕ = arctg  s 2 + ω2
ω a

14
ω0
1 − ξ2
(
e −ξω0t sin ω0 1 − ξ2 t , ) ξ <1
ω02
s 2 + 2ξω0 s + ω02

M
bM ∏ ( s − zm )
Y ( s) m =1
H ( s) = = N
(5.43b)
X ( s)
a N ∏ ( s − pn )
n =1

analogiczny do wzoru (5.16). Jednak nie należy zapominać, że zmienna s = σ+jω jest teraz
zmienną zespoloną, mającą także część rzeczywistą. Jednak aby uzyskać interpretację często-
tliwościową H(s) należy zastosować podstawienie s = jω, sprowadzające przekształcenie
(transformację H(s)) Laplace’a w przekształcenie Fouriera (transmitancję H(jω)).
Układy analogowe 115

Dla dociekliwych. W przypadku układów LTI bardzo często stosuje się transformację Lapla-
ce’a i związany z nią rachunek operatorowy do obliczenia odpowiedzi układu na zadane po-
budzenie. Należy wówczas wyznaczyć transformatę Laplace’a X(s) sygnału wejściowego x(t)
i transmitancję układu H(s). Wtedy transformata Laplace’a sygnału wyjściowego z układu jest
równa Y(s) = H(s)X(s), a sam sygnał wyjściowy y(t) jest wynikiem odwrotnej transformacji La-
place’a z Y(s), czyli y(t) = Laplace−1(Y(s)). W ogólnym przypadku Y(s) jest ilorazem dwóch
wielomianów zmiennej zespolonej s. Iloraz ten można przedstawić jako sumę składników
prostszych Yi(s), a następnie znaleźć w tabelach sygnały czasowe yi(t), odpowiadające poszcze-
gólnym składnikom. Oczywiście w takim przypadku poszukiwany sygnał y(t) jest równy sumie
wszystkich sygnałów yi(t). W ten sposób można uniknąć konieczności analitycznego obliczenia
odwrotnego przekształcenia Laplace’a. W celu wyznaczenia transmitancji H(s) układów elek-
trycznych z elementami pasywnymi R, L, C (odpowiednio: rezystancja − opór, indukcyjność
i pojemność) stosuje się następujące podstawienia:
1
R → R, L → sL, C → (5.44)
sC
Obecnie tylko w celu ilustracji powyższych słów, przedstawimy dwa proste przykłady wyko-
rzystania rachunku operatorowego do analizy analogowych układów elektrycznych.

a) R R

1
x(t) C y(t) X(s) Y(s)
sC

b) R L R sL

1
x(t) C y(t) X(s) Y(s)
sC

Rys. 5.5. Analizowane analogowe układy elektryczne

Przykład. Wyznaczmy na podstawie tabel odpowiedź impulsową układu całkującego, przedsta-


wionego na rysunku 5.5a, czyli jego odpowiedź na impuls Diraca δ(t). Załóżmy, że x(t) ozna-
cza napięcie wejściowe, a y(t) − napięcie wyjściowe. Dodatkowo niech impedancja wejściowa
układu obciążającego analizowany czwórnik jest bardzo duża, wówczas układ ten jest prostym
dzielnikiem napięcia:
1
sC 1 1 1
H ( s) = = =
1 sRC + 1 RC s + 1
R+
sC RC
W przypadku kiedy x(t) = δ(t), mamy X(s) = 1 i wówczas (sygnał numer 4 w tabeli 5-1):
1 − t / RC
Y ( s ) = H ( s ), y (t ) = h (t ) = e , t≥0
RC
Analogicznie dla układu rezonansowego z rysunku 5.5b mamy (sygnał numer 14 w tabeli 5-1):
116 Układy analogowe

1 1
sC 1 LC ω02
H ( s) = = = = 2
1 sRC + s LC + 1 s 2 + s R + 1
2
s + 2ξω0 s + ω20
R + sL +
sC L LC
ω0 1 R/L
h (t ) = e − ξω0 t sin ω0 1 − ξ 2 t , ω0 = , ξ= , t≥0
1− ξ 2   LC 2 ω0

Przykład. W przypadku kiedy interesuje nas odpowiedź czwórnika z rysunku 5.5a na skok
jednostkowy, mamy:
1 / RC 1 A B
Y ( s) = H ( s) X ( s) = ⋅ = +
s + 1 / RC s s + 1 / RC s
gdzie

A = Y ( s )( s + 1 / RC ) = −1
s = −1 / RC

B = Y ( s)s =1
s=0

W związku z tym z tabeli 5-1 otrzymujemy (dla t≥0):

y ( t ) = Ae −t / RC + Bu( t ) = u( t )(1 − e − t / RC )

5.4. Wykresy Bodego


W zastosowaniach inżynierskich często stosuje się tzw. wykresy Bodego. Nazywa się w ten
sposób charakterystykę amplitudowo-częstotliwościową M(ω) = |H(jω)| = |H(s)|s=jω układu
(5.43), w której oś pulsacji ω = 2πf (lub częstotliwości f) jest przedstawiona w skali logaryt-
micznej, a wzmocnienie układu jest wyrażone w decybelach:
M
bM ∏ j ω − zm
bM M N
m =1
20log10 H ( jω) = 20log10 N
= 20log10 + ∑ 20log10 jω − zm − ∑ 20log10 jω − pn
a N m =1 n =1
a N ∏ jω − pn
n =1
(5.45)
Jeśli |jω| jest dużo większe od |zm| = |σm+jωm| (czyli |ω| >> |σm| oraz |ω| >> |ωm|), to wówczas
|jω−zm| = |j(ω−ωm)−σm| ≈ |jω| = |ω|. Ta sama zależność zachodzi dla dowolnego bieguna pn =
= σn+jωn. Tak więc dla pulsacji ω, znacznie większej od modułu wszystkich zer i biegunów,
w przybliżeniu otrzymujemy:
bM M N
20log10 H ( jω) ≈ 20log10 + ∑ 20log10 ω − ∑ 20log10 ω (5.46)
a N m =1 n =1

Wówczas, jeśli pulsacja zwiększy się 10 razy (czyli o dekadę), to każde zero transmitancji spo-
woduje przyrost M(ω) o 20 dB, a każdy biegun transmitancji − jej spadek o 20 dB. Ogólnie
możemy stwierdzić, że każde zero zm = σm+jωm powoduje wzrost nachylenia charakterystyki
o 20 dB na dekadę dla ω >> ωm, a każdy biegun pn = σn+jωn − zmniejszenie jej nachylenia
o 20 dB na dekadę dla ω >> ωm. Własność ta jest graficznie przedstawiona na rysunku 5.6b. Po
Układy analogowe 117

każdym zerze nachylenie M(ω) zwiększa się o 20 dB/dekadę, po każdym biegunie zaś maleje
o 20 dB/dekadę.
Jednak aby po wymnożeniu współczynniki wielomianu licznika i mianownika transmitancji
(5.43) były rzeczywiste, zera zm i bieguny pn transmitancji muszą występować w parach sprzę-
żonych, tzn. jeśli zerem wielomianu licznika transmitancji jest liczba zespolona zm, to zerem
tego wielomianu musi być także jej sprzężenie (zm)*. Wówczas mamy bowiem:
*
( s − z m )( s − z m ) = (s − (σ m + jωm ))(s − (σ m − jωm )) = s 2 − 2σ m s + (σ m
2 2
+ ωm ) (5.47)

czyli współczynniki występujące przed potęgami zmiennej s są rzeczywiste. W takim przypad-


ku:
*
20 log10 ( s − z m )( s − z m ) = 20 log10 s 2 − 2σ m s + ( σ m
2 2
+ ωm ) (5.48)

oraz dla s = jω i dostatecznie dużego ω mamy:


* 2
20log10 ( jω − zm )( jω − zm ) ≈ 20log10 ω = 40log10 ω (5.49)

a) 20log10M(ω) [dB]
0

-20

-40

-60
0.001 0.01 0.1 1 10 100 1000
ω [rd/s]

b) 20log10M(ω) [dB]
0 dB/dek
80 +20 dB/dek -20 dB/dek
60
+40 dB/dek -40 dB/dek
40
20 +20 dB/dek
0 -60 dB/dek
-20
log10 ω
-40
z1 z2 p1 p2 p3 p4 p5

Rys. 5.6. Ilustracja wpływu pulsacji zer zm i biegunów pn na nachylenie charakterystyki amplitudowej M(ω)
układów analogowych: a) charakterystyka M(ω) układu o transmitancji H(s) = 1/(s+1), mającego tylko poje-
dynczy biegun rzeczywisty p = −1, b) orientacyjna, p r z y b l i ż o n a l i n i a m i p r o s t y m i charakterystyka
M(ω) układu o transmitancji H(s) z wieloma jednokrotnymi zerami i biegunami zespolonymi, nie wystę-
pującymi w parach sprzężonych (transmitancja o współczynnikach zespolonych). „z” i „³” oznaczają
wartości części urojonych zer i biegunów transmitancji
118 Układy analogowe

Ponieważ zależności (5.47), (5.49) są prawdziwe także dla sprzężonych biegunów pn i (pn)*, na
ich podstawie możemy stwierdzić, że w przypadku transmitancji o współczynnikach rzeczy-
wistych każde sprzężone zero zwiększa nachylenie charakterystyki M(ω) o 40 decybeli na
dekadę, a każdy sprzężony biegun zmniejsza je o 40 decybeli na dekadę.
Na rysunku 5.7 pokazano przykładowe wykresy Bodego dla czterech transmitancji, charakte-
ryzujących się następującymi wartościami zer zm = σm+jωm i biegunów pn = σn+jωn:
1) H1(jω): z1 = −1+j10, p1 = −1+j100, p2 = −1+j1000
2) H2(jω): z1 = −1+j0.1, z2 = −1+j1, p1 = −1+j10, p2 = −1+j100, p3 = −1+j1000, p4 =−1+j10000
3) H1s(jω): zera i bieguny H1(jω) oraz ich sprzężenia zespolone;
4) H2s(jω): zera i bieguny H2(jω) oraz ich sprzężenia zespolone.
Pierwsze dwie z nich mają niesprzężone zera i bieguny, dlatego nachylenie charakterystyki
M(ω) zmienia się o ±20 dB/dekadę w pulsacjach kolejnych zer ωm i biegunów ωn:
H1(jω): ωm = {10}, ωn = {100; 1000}
H2(jω): ωm = {0,1; 1}, ωn = {10; 100; 1000; 10000}
natomiast w transmitancjach H1s(jω) i H2s(jω) wszystkie zera i bieguny tworzą pary sprzężone.
Powoduje to, że w tym przypadku są obserwowane zmiany nachylenia charakterystyki M(ω)
o ±40 dB/dekadę. Charakterystyki unormowano w taki sposób, że maksymalna wartość M(ω)
jest równa 1, czyli 0 dB. W przypadku transmitancji H2(jω) i H2s(jω) po pierwszym zerze
z1 = −1±j0,1 nie obserwuje się wzrostu nachylenia charakterystyki z powodu małej wartości
części urojonej liczby zespolonej (jω−z1) w stosunku do części rzeczywistej tej liczby dla pul-
sacji ω z przedziału [0,1; 1].

5.5. Złożone układy analogowe LTI


Z analizy przedstawionej w tym rozdziale wynika, że prosty układ analogowy LTI ma odpo-
wiedź impulsową h(t), odpowiedź częstotliwościową H(jω), transmitancję H(s) oraz realizuje
funkcję przetwarzania sygnału, określoną splotem (5.6). Z układów prostych można budować
jednak układy bardziej złożone, łącząc je szeregowo, jeden za drugim, lub równolegle. Czy
otrzymane w ten sposób układy są także typu LTI i jaką mają one wypadkową odpowiedź im-
pulsową?
Jako pierwsze rozpatrzmy połączenie równoległe dwóch układów prostych o odpowiedziach
impulsowych h1(t) i h2(t) (rysunek 5.8a). Sygnał wejściowy x(t) wchodzi niezależnie na wejście
każdego z nich, a sygnały wyjściowe z obu układów są sumowane. Wówczas:
∞ ∞ ∞
y ( t ) = y1 (t ) + y2 (t ) = ∫ x ( τ)h1 (t − τ) d τ + ∫ x ( τ)h2 ( t − τ) d τ = ∫ x( τ) [ h1 (t − τ ) + h2 (t − τ) ] d τ
−∞ −∞ −∞
(5.50)
czyli otrzymujemy układ LTI o odpowiedzi h(t), równej sumie odpowiedzi h1(t) i h2(t):
h (t ) = h1 ( t ) + h2 (t ) (5.51)
Ponieważ całkowe przekształcenia Fouriera i Laplace’a są liniowe, stąd:
H ( jω) = H 1 ( jω) + H 2 ( jω), H ( s) = H1 ( s ) + H 2 ( s ) (5.52)
W konsekwencji transmitancja H(s) otrzymanego układu jest równa sumie transmitancji
H1(s) i H2(s) układów składowych.
Układy analogowe 119

a) transmitancja H1(jω) b) transmitancja H2(jω)


0 0

-20 -20

-40
M( ω ) [dB] -40

M( ω ) [dB]
-60
-60
-80
-80
-100
-100 -120
-120 -1 0 1 2 3 4 5 -140 -1 0 1 2 3 4 5
10 10 10 10 10 10 10 10 10 10 10 10 10 10
ω [rd/s] ω [rd/s]

c) transmitancja H1s(jω) d) transmitancja H2s(jω)


0 0
-20 -20
-40
-40
-60

M( ω ) [dB]
M( ω ) [dB]

-60 -80
-80 -100
-120
-100
-140
-120 -160
-140 -1 0 1 2 3 4 5 -180 -1 0 1 2 3 4 5
10 10 10 10 10 10 10 10 10 10 10 10 10 10
ω [rd/s] ω [rd/s]

Rys. 5.7. Wykresy Bodego czterech wybranych transmitancji, charakteryzujących się następującymi war-
tościami zer „● ” (−1+jωm) i biegunów „³” (−1+jωn): H1(jω): ωm = {10}, ωn = {100; 1000}; H2(jω):
ωm = {0,1; 1}, ωn = {10; 100; 1000; 10000}; H1s(jω): ωm = {±10}, ωn = {±100; ±1000}; H2s(jω): ωm =
= {±0,1; ±1}, ωn = {±10; ±100; ±1000; ±10000}

H(s)=H1(s)+H2(s)
x(t) h1(t) y(t) x(t) y(t)
a) h(t)=h1(t)+h2(t)
h2(t)

H(s)=H1(s)H2(s)
x(t) y(t) x(t) y(t)
b) h1(t) h2(t) h(t)=∫ h1(τ)h2(t-τ)dτ

Rys. 5.8. Równoległe (a) i szeregowe (b) połączenie układów LTI

x(t) y(t) X(s) Y(s)


h1(t) H1(s)

h2(t) H2(s)

Rys. 5.9. Przykład układu LTI ze sprzężeniem zwrotnym


120 Układy analogowe

Z kolei dla połączenia szeregowego (kaskadowego) (rysunek 5.8b) wyjście z pierwszego


układu stanowi wejście drugiego układu, czyli jego odpowiedź impulsowa jest równa splotowi
odpowiedzi impulsowych obu układów:

δ(t ) → [ h1 (t )] → h1 ( t ) → [ h2 (t )] → h (t ) = ∫ h1 ( τ)h2 ( t − τ) d τ (5.53)
−∞

Z właściwości splotu całkowego przekształcenia Fouriera i Laplace’a wynika natomiast, że:


H ( jω) = H 1 ( jω) H 2 ( jω), H ( s) = H1 ( s ) H 2 ( s) (5.54)

W wyniku połączenia równoległego i szeregowego układów LTI także uzyskujemy układy


LTI, czyli liniowe i niezmienne w czasie, ponieważ odpowiedź układu złożonego na sumę
dwóch sygnałów jest równa sumie odpowiedzi na każdy z nich z osobna, oraz odpowiedź ukła-
du na sygnał przesunięty w czasie jest równa przesuniętej odpowiedzi na pobudzenie orygi-
nalne (dowód pozostawiamy Czytelnikowi).
Ważną klasę układów LTI stanowią układy ze sprzężeniem zwrotnym. Jeden z najprostszych
jest przedstawiony na rysunku 5.9. Układ ten jest opisany następującą zależnością:
Y ( s ) = H 1 ( s )[X ( s ) − H 2 ( s )Y ( s )]

z której wynika, że jego transmitancja jest równa:


Y ( s) H1 ( s )
H ( s) = =
X ( s ) 1 + H1 ( s ) H 2 ( s )
Odpowiedź impulsową tego układu można wyznaczyć za pomocą odwrotnego przekształcenia
Laplace’a (5.37) z H(s) (np. metodą rezidułów) lub też rozkładając transmitancję H(s) na sumę
transmitancji prostych oraz znajdując w tabelach odpowiedzi impulsowe tych transmitancji.

5.6. Analiza matematyczna wybranych układów elektrycznych


Obecnie jako przykład zastosowania przedstawionego do tej pory aparatu matematycznego
przeanalizujemy dwa proste analogowe układy elektryczne LTI (rysunek 5.10), opisywane za
pomocą równań różniczkowo-całkowych. Pierwszy z nich jest szeregowym połączeniem rezy-
stancji R i pojemności C (układ RC) z wymuszeniem napięciowym, a drugi − szeregowym po-
łączeniem rezystancji R, indukcyjności L i pojemności C (układ RLC) także z wymuszeniem
napięciowym.
Schemat ideowy p i e r w s z e g o u k ł a d u jest przedstawiony na rysunku 5.10a. Jego wejściem
jest napięcie u(t) ze źródła napięciowego (u(t) = 0 dla t < 0), wyjściem zaś − napięcie uC(t) na
pojemności C. Układ ten jest opisany równaniem różniczkowym postaci (i(t) = = C⋅duC(t)/dt):
1
u (t ) = uR (t ) + uC (t ) = Ri (t ) + ∫ i ( t ) dt
C
wynikającym z prawa Kirchhoffa równości napięć w konturze zamkniętym. Po wykonaniu
przekształcenia Fouriera obu stron otrzymujemy:
1  1 
U ( jω) = U R ( jω) + U C ( jω) = RI ( jω) + I ( jω) =  R +  I ( jω)
jωC  jωC 
stąd transmitancja częstotliwościowa H(jω) układu jest równa:
Układy analogowe 121

a) uR(t) b) uR(t) uL(t)


i(t) i(t)
R R L
u(t) C uC(t) u(t) C vC(t)

Rys. 5.10. Schematy analizowanych, szeregowych układów elektrycznych: a) układRC, b) układ RLC

1
I ( jω)
U C ( jω) jωC 1
H ( jω) = = =
U ( jω)  1  1 + jωRC
 R +  I ( jω)
 jωC 

a jego odpowiedź impulsową h(t) można wyznaczyć z H(jω) metodą odwrotnego przekształ-
cenia Fouriera:
∞ ∞ ∞
1 1 1 1 1 / RC
H ( jω)e jωt dω = e jωt dω = e jωt dω
2π −∫∞ 2 π −∫∞ 1 + jωRC 2π −∫∞ 1 / RC + jω
h (t ) =

Uwzględniając równanie (4.36) (przekształcenie Fouriera sygnału eksponencjalnego), otrzy-


mujemy:
1 −t /( RC )
h (t ) = e , t≥0
RC
Na rysunku 5.11 są przedstawione charakterystyki częstotliwościowe rozpatrywanego układu
RC oraz jego odpowiedź impulsowa i skokowa przy założeniu R = 1 [MΩ], C = 1 [µF]. Po-
nieważ jest to układ o transmitancji (5.43b) (s = jω) bez żadnego zera i tylko z jednym biegu-
nem o wartości p = −1/RC = −1, na rysunku obserwujemy spadek charakterystyki amplitudo-
wej o 3 decybele dla ω = 1 (gdyż 20log10(1/ 1 + 1 ) = −3 dB) oraz jej opadanie 20 decybeli na
dekadę dla ω >> 1, zgodnie z rozważaniami przeprowadzonymi w rozdziale 5.4.
Schemat ideowy d r u g i e g o u k ł a d u , szeregowego połączenia elementów RLC, jest
przedstawiony na rysunku 5.10b. Podobnie jak poprzednio wejściem układu jest napięcie ze
źródła napięciowego u(t) (u(t) = 0 dla t < 0), wyjściem zaś − napięcie uC(t) na kondensatorze
C. Z prawa Kirchhoffa równości napięć w konturze zamkniętym otrzymujemy (i(t) =
= C⋅duC(t)/dt):
di (t ) 1
Ri (t ) + L + ∫ i (t ) dt = uR (t ) + uL (t ) + uC (t ) = u( t )
dt C
Zakładając zerowe napięcie początkowe na kondensatorze, po obliczeniu przekształcenia Fou-
riera obu stron powyższego równania uzyskujemy:

 1 
 R + jωL + jωC  I ( jω) = U ( jω)
 
Ponieważ tylko dla napięcia na kondensatorze mamy:
1 1
C∫
i (t )dt = uC (t ) , I ( jω) = U C ( jω)
jωC
122 Układy analogowe

Charakterystyka amplitudowa Charakterystyka fazowa


0 0

20log10|H(jω)| [dB]
-10 -20

Φ(jω) [deg]
-20 -40
-30 -60
-40 -80
-50 -100
0.01 0.1 1 10 100 0.01 0.1 1 10 100
ω [rd/s] ω [rd/s]

Odpowiedź impulsowa Odpowiedź skokowa


1 1
0.8 0.8
0.6 0.6
h(t)

u(t)
0.4 0.4
0.2 0.2
0 0
0 2 4 6 8 10 0 2 4 6 8 10
t [s] t [s]
Rys. 5.11. Charakterystyki częstotliwościowe i czasowe układu RC z rysunku 5.10a. Kolejno od lewej do
prawej: charakterystyka amplitudowa, fazowa, odpowiedź impulsowa oraz odpowiedź skokowa

stąd transmitancja częstotliwościowa rozpatrywanego układu jest dana wzorem:


1 1
U C ( jω) jωC 1 LC
= H ( jω) = = =
U ( jω) 1 LC ( jω) 2
+ RC ( jω) + 1 2 R 1
R + jωL + ( jω) + ( jω) +
jωC L LC
Wprowadzając oznaczenia (pulsacja rezonansowa drgań własnych nietłumionych, tłumienie):

ω0 = 1 LC , ξ = ( R / L) /(2ω0 )

otrzymujemy:
ω02 1
H ( jω) = =
( jω) + j 2ξω0 ω + ω20
2
− (ω / ω0 ) 2 + j 2ξ(ω ω0 ) + 1

czyli transmitancję częstotliwościową klasycznego układu rezonansowego RLC. Transmitancję


tę także można zapisać jako:
Aω1 ω0
H ( jω) = 2
, A= , ω1 = ω0 1 − ξ 2 , a = ξω0
( a + jω) + ω12 1 − ξ2

i jest ona transformatą Fouriera sygnału postaci (patrz równanie (4.37) w podrozdziale 4.3):
Układy analogowe 123

Charakterystyka amplitudowa Charakterystyka fazowa


20 0

20log10|H(jω)| [dB]
0 -40

Φ(jω) [deg]
-20 -80
-40 -120
-60 -160
-80 -200
0.01 0.1 1 10 100 0.01 0.1 1 10 100
ω [rd/s] ω [rd/s]

Odpowiedź impulsowa Odpowiedź skokowa


0.8 1.5
0.6 1.25
0.4 1
h(t)

u(t)
0.2 0.75
0 0.5
-0.2 0.25
-0.4 0
0 10 20 30 40 0 10 20 30 40
t [s] t [s]
Rys. 5.12. Charakterystyki częstotliwościowe i czasowe układu RLC z rysunku 5.10b dla pulsacji drgań
własnych nietłumionych ω0 = 1 oraz stałej tłumienia ξ = 0,3. Kolejno od lewej do prawej: charakterystyka
amplitudowa, fazowa, odpowiedź impulsowa oraz odpowiedź skokowa

 Ae − at sin ω1t dla t ≥ 0


h (t ) = 
 0 dla t < 0

Pulsacja ω1 jest pulsacją drgań tłumionych, różną od ω0 dla ξ≠0. Na rysunku 5.12 są przedsta-
wione przykładowe charakterystyki częstotliwościowe oraz odpowiedzi impulsowe i skokowe
układu RLC dla pulsacji drgań własnych nietłumionych ω0 = 1 oraz stałej tłumienia równej
ξ = 0,3, a na rysunku 5.13 te same charakterystyki i odpowiedzi dla trzech wartości stałej tłu-
mienia równej ξ = 0,1; 0,3; 0,5. Należy zwrócić uwagę na fakt, że maksimum charakterystyki
amplitudowej przypada w każdym przypadku dla ω = ω1. Zgodnie z rozważaniami przeprowa-
dzonymi w rozdziale 5.4, na rysunku 5.12 obserwujemy spadek charakterystyki amplitudowej
o 40 decybeli na dekadę dla ω >> ω1.
Rachunek „transmitancyjny”, oparty na przekształceniu Fouriera, można wykorzystać do
szybkiego wyznaczenia odpowiedzi układu analogowego na zadane pobudzenie. Znając X(jω)
sygnału wejściowego x(t) oraz H(jω) odpowiedzi impulsowej układu h(t), można otrzymać
sygnał y(t) w wyniku odwrotnego przekształcenia Fouriera iloczynu Y(jω) = X(jω)H(jω), a nie
w wyniku bezpośredniego splotu sygnałów x(t) i h(t). Jeśli jednak postać Y(jω) jest typowa,
zależność funkcjonalną na y(t) można znaleźć w tabelach transformat Fouriera wybranych
sygnałów.
124 Układy analogowe

Charakterystyka amplitudowa Charakterystyka fazowa


6 0
5 ξ = 0,1
ξ = 0,1
4 -1 ξ = 0,3

Φ(jω) [rd]
ξ = 0,3
|H(jω)| 3
ξ = 0,5 -2
ξ = 0,5

2
1 -3
0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
ω [rd/s] ω [rd/s]

Odpowiedź impulsowa Odpowiedź skokowa


1 ξ = 0,1
1.8 ξ = 0,1
0.8 1.6
ξ = 0,3
0.6 1.4
ξ = 0,3
0.4 1.2
0.2 1
h(t)

u(t)
0 0.8
-0.2 0.6
-0.4 0.4
-0.6 0.2
-0.8 0
0 10 20 30 40 0 10 20 30 40
t [s] t [s]
Rys. 5.13. Charakterystyki częstotliwościowe i odpowiedzi impulsowe układu oscylacyjnego RLC dla
trzech różnych wartości tłumienia: ξ = 0,1; 0,3; 0,5 (ω0 = 1)

5.7. Przykłady projektowania


Przykład 1: rozmieszczenie zer i biegunów transmitancji

Załóżmy, że chcemy zaprojektować układ analogowy odpowiednio rozmieszczając na płasz-


czyźnie zespolonej jego zera i bieguny. Przyjmijmy, że interesuje nas filtr pasmowoprzepusto-
wy, przenoszący tylko sygnał o pulsacji w przybliżeniu równej 10 radianów na sekundę. Z tego
powodu podejmujemy decyzję, że układ będzie miał trzy bieguny w okolicy tej pulsacji blisko
osi urojonej jω (w lewej półpłaszczyźnie):
p1,2 = −0,5 ± j 9,5; p3,4 = −1 ± j10; p5,6 = −0,5 ± j10,5

Aby stłumić pulsacje mniejsze i większe od 10 rd/s, umieszczamy po jednym zerze po każdej
stronie biegunów, czyli poniżej i powyżej pulsacji 10 rd/s:
z1,2 = ± j5, z3,4 = ± j15

Większa liczba biegunów niż zer zapewnia nam zerowe wzmocnienie układu dla ω → ±∞.
W wyniku powyższych operacji otrzymujemy następującą transmitancję:
( s − j5)( s + j5)( s − j15)( s + j15)
H ( s) =
( s + 0,5 − j 9,5)( s + 0,5 + j 9,5)( s + 1 − j10)( s + 1 + j10)( s + 0,5 − j10,5)( s + 0,5 + j10,5)
Układy analogowe 125

Jej charakterystyki częstotliwościowe i czasowe są przedstawione na rysunku 5.14. Jak widać


założony cel został osiągnięty: otrzymaliśmy filtr pasmowoprzepustowy. Aby układ nie wzma-
cniał silnie pulsacji w pobliżu 10 rd/s, w ostatnim wzorze można wprowadzić czynnik skalują-
cy, np. 1/2.
Jak widać charakterystyka fazowa Φ(ω) uzyskana z (5.8) jest bardzo nieliniowa. Obserwowane
w niej skoki o π radianów występują dla pulsacji zer leżących na osi urojonej, czyli w miej-
scach gdzie „zeruje się” charakterystyka amplitudowa M(ω). Bardziej szczegółowego omówie-
nia zasad interpretacji charakterystyki fazowej dokonamy w następnym przykładzie. Odpo-
wiedź impulsowa układu ma kształt zmodulowanego w amplitudzie sygnału sinusoidalnego
o częstotliwości 10 [rd/s] / 2π [rd] ≈ 1,59 Hz, czyli okresie równym 0,63 sekundy. Zanika ona
stosunkowo wolno do zera. W konsekwencji tego także odpowiedź układu na skok jednostko-
wy 1(t) jest silnie oscylacyjna i powoli się ustala na wartości 0,0056. Jest to zgodne z chara-
kterystyką amplitudową układu, która dla pulsacji ω = 0 jest równa M(ω) = 0,0056 (−45 dB).

Przykład 2: znajdowanie zer i biegunów transmitancji


Załóżmy obecnie, że mamy określoną transmitancję i chcemy wyznaczyć jej zera i bieguny,
czyli miejsca zerowe wielomianu licznika i mianownika.

0,66667 s 2 + 1 0,66667 ⋅ ( s 2 + 1,5000)


H ( s) = = =
4,0001s + 5,0081s + 3,1650s + 1 4,0001 ⋅ ( s + 0,6260)( s 2 + 1,6260s + 0,3994)
3 2

( s + j1,2247)( s − j1,2247)
= 1,667
( s + 0,6260)( s + 0,3130 + j 0,5490)( s + 0,3130 − j 0,5490)

Na rysunku 5.15 przedstawiono położenie zer i biegunów transmitancji H(s) na płaszczyźnie


zespolonej zmiennej s oraz związane z nim charakterystyki częstotliwościowe {M(ω), Φ(ω)}
i czasowe {h(t), u(t)} układu. Jak widać jest to układ dolnoprzepustowy, co jest spowodowane
faktem, że bieguny występują dla pulsacji ω = 0 i ω = ±0,5490, a zera dla ω = ±1,2247.
Z przykładu wynika, że jest wskazane usunięcie skoków charakterystyki fazowej o 360 stopni
(jej „uciąglanie”), uzyskanej ze wzoru Φ(ω) = arctg(Imag(H(jω)), Real(H(jω))) (5.8), na przy-
kład poprzez zastosowanie funkcji unwrap() w programie Matlab. Dopiero po tej operacji
można bez problemów interpretować zachowanie układu jako „przesuwnika” fazowego. Zwró-
cić należy także uwagę, że pozostawiony skok fazy o 180 stopni występuje dla pulsacji, w któ-
rej transmitancja ma zero. Charakterystyka fazowa jest nieliniowa, ale w przedziale „przepusz-
czania” jest najbardziej zbliżona do linii prostej.

Przykład 3: projekt filtra górnoprzepustowego


Obecnie spróbujemy zastosować zdobytą do tej pory wiedzę do zaprojektowania metodą „zer
i biegunów” filtra górnoprzepustowego. Z rozdziału dotyczącego wykresów Bodego wiemy, że
każde zero powoduje zwiększenie nachylenia charakterystyki amplitudowo-częstotliwościowej
o 20 decybeli na dekadę, każdy biegun zmniejsza zaś to nachylenie o 20 decybeli na dekadę.
Jeśli filtr ma być górnoprzepustowy, to dla pulsacji ω dążącej do nieskończoności nachylenie
charakterystyki amplitudowej musi dążyć do zera, skąd wynika, że jego transmitancja powinna
mieć taką samą liczbę zer i biegunów. Jeśli chcemy aby filtr nie przenosił pulsacji
zerowej, jego transmitancja powinna mieć zero z1 w środku układu współrzędnych z1 = 0+j0.
W związku z tym musi mieć ona także biegun p1 „kompensujący” częstotliwościowo zero z1,
na przykład p1 = −1 + j0. Aby „wyzerować” pewien zakres niskich częstotliwości, umiesz-
126 Układy analogowe

20 4

10 2

Φ(jω) [rd]
Imag(s)
0 0

-10 -2

-20 -4
-1 -0.5 0 0 5 10 15 20
Real(s) ω [rd/s]

2.5 20

20log10|H(jω)| [dB]
2 0
-20
1.5
|H(jω)|

-40
1
-60
0.5 -80
0 -100
0 5 10 15 20 0 5 10 15 20
ω [rd/s] ω [rd/s]

1.5 0.15
1 0.1
0.5 0.05
h(t)

u(t)

0 0
-0.5 -0.05
-1 -0.1
-1.5 -0.15
0 4 8 12 16 20 0 4 8 12 16 20
t [s] t [s]
Rys. 5.14. Charakterystyki układu z przykładu 1. Kolejno od lewej do prawej: położenie zer „z” i biegunów
„³” transmitancji, charakterystyka fazowa, charakterystyka amplitudowa w skali liniowej i logarytmicznej
(decybelowej), odpowiedź impulsowa i skokowa

czamy dodatkowo kilka zer na osi urojonej w pobliżu ω = 0: zk+1 = ±jk, k = 1, 2, 3, oraz „kom-
pensujemy” te zera biegunami: pk+1 = −1±jk, k = 1, 2, 3. Ostatecznie otrzymuje się transmitan-
cję o następującej postaci:
s ⋅ ( s + j )( s − j ) ⋅ ( s + j 2)( s − j 2) ⋅ ( s + j 3)( s − j 3)
H ( s) =
( s + 1) ⋅ ( s + 1 + j )( s + 1 − j ) ⋅ ( s + 1 + j 2)( s + 1 − j 2) ⋅ ( s + 1 + j 3)( s + 1 − j 3)

Na rysunku 5.16 przedstawiono położenie zer i biegunów powyższej transmitancji na pła-


szczyźnie zespolonej zmiennej s oraz związane z nim charakterystyki częstotliwościowe
{M(ω), Φ(ω)} oraz czasowe {h(t), u(t)} układu. Jak widać zaprojektowaliśmy filtr górnoprze-
pustowy, którego wzmocnienie dąży do 1 dla pulsacji rosnącej do nieskończoności.

Projektowanie filtrów metodą „zer i biegunów” jest intuicyjnie bardzo proste, ale dosyć czaso-
chłonne, gdyż realizuje się je wielokrotnie powtarzając próby. Uzyskanie tym sposobem fil-
trów, spełniających bardzo ostre wymagania projektowe (duża liniowość pasma przepusto-
Układy analogowe 127

1.5
1
0.5

Imag(s)
0
-0.5
-1
-1.5
-0.8 -0.6 -0.4 -0.2 0 0.2
Real(s)

1 0

20log10|H(jω)| [dB]
0.8
0.6 -20
|H(jω)|

0.4
-40
0.2
0 -60
0 1 2 3 4 5 0 1 2 3 4 5
ω [rd/s] ω [rd/s]

4 0

2 -1
Φ(jω) [rd]

Φ(jω) [rd]

0 -2

-2 -3

-4 -4
0 1 2 3 4 5 0 1 2 3 4 5
ω [rd/s] ω [rd/s]

0.25 1.2
0.2 1
0.15 0.8
h(t)

u(t)

0.1 0.6
0.05 0.4
0 0.2
-0.05 0
0 5 10 15 20 25 0 5 10 15 20 25
t [s] t [s]
Rys. 5.15. Charakterystyki układu z przykładu 2. Kolejno od lewej do prawej: położenie zer „z” i biegunów
„³” transmitancji, charakterystyka amplitudowa w skali liniowej i decybelowej, charakterystyka fazowa
(bez oraz z funkcją unwrap()), odpowiedź impulsowa i skokowa
128 Układy analogowe

3
2
1

Imag(s)
0
-1
-2
-3
-1 -0.8 -0.6 -0.4 -0.2 0
Real(s)

1 0

20log10|H(jω)| [dB]
0.8 -10
0.6
|H(jω)|

-20
0.4 -30
0.2 -40
0 -50
0 4 8 12 16 20 0 4 8 12 16 20
ω [rd/s] ω [rd/s]

4 4

2 2
Φ(jω) [rd]

Φ(jω) [rd]

0
0
-2
-2 -4
-4 -6
0 4 8 12 16 20 0 4 8 12 16 20
ω [rd/s] ω [rd/s]

2 1
0 0.8
0.6
-2
h(t)

u(t)

0.4
-4
0.2
-6 0
-8 -0.2
0 1 2 3 4 5 0 1 2 3 4 5
t [s] t [s]
Rys. 5.16. Charakterystyki układu z przykładu 3. Kolejno od lewej do prawej: położenie zer „z” i biegunów
„³” transmitancji, charakterystyka amplitudowa w skali liniowej i decybelowej, charakterystyka fazowa
(bez oraz z funkcją unwrap()), odpowiedź impulsowa i skokowa
Układy analogowe 129

wego, duże tłumienie w paśmie zaporowym, duża stromość zboczy charakterystyki amplitu
dowo-częstotliwościowej filtra), jest trudne i wymaga od projektanta doświadczenia. W na-
stępnym rozdziale poznamy znane, inżynierskie metody projektowania filtrów analogowych.
„Odczarujemy” w nim w pewnym stopniu magię alokacji zer i biegunów transmitancji układów
analogowych.

5.8. Przykład ćwiczenia komputerowego


W tabeli 5-2 jest przedstawiony przykładowy program napisany w języku Matlab, posłużył on
do wygenerowania wszystkich rysunków zaprezentowanych w przykładach. Zainteresowany
Czytelnik może go wykorzystać do dalszych, samodzielnych eksperymentów.

Tab. 5-2. Przykładowe ćwiczenie komputerowe

% Ćwiczenie: Projektowanie transmitancji H(s) układów analogowych metodą zer i biegunów

przyklad = 1; % Wybór przykładu

% ================================================================
% Przykład 1: projekt filtra pasmowoprzepustowego o wpass1 = 9.5 rd, wpass2 = 10.5 rd
% ================================================================
if (przyklad==1)
z1 = 5; z2 = 15; % ZERA na osi urojonej
z = j*[ -z2, -z1, z1, z2 ]; %
odl = 0.5; p1 = 9.5; p2 = 10.5; % BIEGUNY w pobliżu osi urojonej
p = [ -odl-j*p2, -odl-j*p1, -odl+j*p1, -odl+j*p2 ];%
WMAX=20; TMAX=20; % max pulsacja, max czas obserwacji
end
% ================================================
% Przykład 2: znajdowanie zer i biegunów zadanej transmitancji
% ================================================
if (przyklad==2)
b=[ 0.66667 0 1 ]; % współczynniki licznika transmitancji
a=[ 4.0001 5.0081 3.1650 1 ]; % współczynniki mianownika transmitancji
[z,p,wzm] = tf2zp(b,a); % współczynniki wielomianów -> zera wielomianów
z = z'; p = p'; % wektor pionowy -> wektor poziomy
WMAX=5; TMAX=25; % max pulsacja, max czas obserwacji
end
% ====================================
% Przykład 3: projekt filtra górnoprzepustowego
% ====================================
if (przyklad==3)
z1 = 0; % ZERA na osi urojonej
z2 = 0+j*1; z3 = 0-j*1; %
z4 = 0+j*2; z5 = 0-j*2; %
z6 = 0+j*3; z7 = 0-j*3; %
z = [ z1 z2 z3 z4 z5 z6 z7 ]; %
p1 = -1; % BIEGUNY w pobliżu osi urojonej
p2 = -1+j*1; p3 = -1-j*1; %
p4 = -1+j*2; p5 = -1-j*2; %
p6 = -1+j*3; p7 = -1-j*3; %
p = [ p1 p2 p3 p4 p5 p6 p7 ]; %
WMAX=20; TMAX=5; % max pulsacja, max czas obserwacji
end
130 Układy analogowe

% ===============================
% CZEŚĆ WSPÓLNA - prezentacja wyników
% ===============================

plot(real(z), imag(z), ’or’, real(p), imag(p),’xb’); grid;


title(’Zera (o) i bieguny (x)’); xlabel(’Real’); ylabel(’Imag [rd/s]’);
pause

w = 0 : 0.01 : WMAX; % wybrane pulsacje widma


[b,a] = zp2tf(z',p',1); % zera, bieguny -> wspólczynniki wielomianów
H = freqs(b,a,w); % wyznaczenie widma transmitancji dla zadanego w
Hm = abs(H); HmdB = 20*log10(Hm); % moduł transmitancji
Hf = angle(H); Hfu = unwrap(Hf); % faza transmitancji

plot(w,Hm,'k'); grid; title('Ch-ka amplitudowa'); xlabel('w [rd/s]'); pause


plot(w,HmdB,'k'); grid; title('Ch-ka amplitudowa w dB'); xlabel('w [rd/s]'); pause
plot(w,Hf,'k'); grid; title('Ch-ka fazowa'); xlabel('w [rd/s]'); ylabel('[rd]'); pause
plot(w,Hfu,'k'); grid; title('Ch-ka fazowa unwrap'); xlabel('w [rd/s]'); ylabel('[rd]');
pause

% Odpowiedź impulsowa

h = impulse(b,a,TMAX); % funkcja z przybornika CONTROL


dt = TMAX/(length(h)-1); th = 0 : dt : TMAX;
plot(th,h,'k'); grid; title('Odpowiedź impulsowa'); xlabel('t [s]'); pause

% Odpowiedź na skok jednostkowy

u = step(b,a,TMAX); % funkcja z przybornika CONTROL


dt = TMAX/(length(u)-1); tu = 0 : dt : TMAX;
plot(tu,u,'k'); grid; title('Odpowiedź skokowa'); xlabel('t [s]'); pause
6
Analogowe filtry
Butterwortha i Czebyszewa

W podrozdziale 5.2 wykazaliśmy, że projektowanie analogowych układów liniowych nie-


zmiennych w czasie LTI (ang. Linear Time-Invariant) sprowadza się do wyboru wartości
współczynników an i bm, n = 0, 1, ..., N, m = 0, 1, ..., M, równań różniczkowych, opisujących te
układy. Współczynniki te są równocześnie współczynnikami wielomianu licznika i mianowni-
ka ich transmitancji (5.14), (5.43a) i wpływają na ich właściwości częstotliwościowe. Z kolei
w podrozdziale 5.4 zapoznaliśmy się z najprostszymi pasywnymi układami analogowymi, zbu-
dowanymi z rezystancji, indukcyjności i pojemności oraz stwierdziliśmy, że w praktycznych
realizacjach wartości tych współczynników zależą od konfiguracji układu i wartości użytych
elementów R, L i C. Dalej dokładniej przyjrzymy się problemowi doboru wartości współ-
czynników transmitancji układów LTI, natomiast w ostatnim podrozdziale pokażemy, w jaki
sposób w praktyce realizuje się te transmitancje za pomocą aktywnych układów RLC ze wzma-
cniaczami operacyjnymi.
Nasze rozważania w tym rozdziale będą opierały się na podstawowym twierdzeniu z teorii
obwodów [Papo88], iż dowolną funkcję wymierną o współczynnikach rzeczywistych postaci
(5.43) można zrealizować za pomocą sumatorów, układów mnożących oraz układów różni-
czkujących lub całkujących, one zaś z kolei mogą być zrealizowane za pomocą pasywnych
i aktywnych układów RLC o parametrach skupionych.
Dla dociekliwych. Nie należy jednak zapominać, że filtracja sygnałów analogowych może być
także realizowana innymi metodami. Najlepszym tego przykładam są filtry analogowe z aku-
styczną falą powierzchniową SAW (ang. Surface Acoustics Waves), które zostały wdrożone do
masowej produkcji w połowie lat siedemdziesiątych i znalazły powszechne zastosowanie w to-
rze przetwarzania pośredniej częstotliwości w odbiornikach telewizyjnych [Maja89]. Jako
ciekawostkę, ilustrującą skalę ich zastosowań, można podać, że już w roku 1986 tylko firma
Siemens wyprodukowała ponad 18 milionów filtrów telewizyjnych z akustyczną falą powierz-
chniową SAW w około 40 odmianach. Filtry SAW składają się z nadajnika i odbiornika.
Każdy z nich jest zbudowany z dwóch metalowych elektrod, mających kształt zachodzących na
siebie grzebieni (tzw. przetwornik międzypalczasty), które są naniesione na podłoże piezo-
elektryczne. Przyłożenie zmiennego napięcia elektrycznego do elektrod nadajnika wprawia go
w drgania mechaniczne. W ich wyniku wzdłuż powierzchni materiału rozchodzą się fale aku-
styczne, stanowiące przemieszczające się pole naprężeń i odkształceń. Po dotarciu do od-
biornika powodują one powstanie napięcia elektrycznego na jego elektrodach. Własności fil-
132 Analogowe filtry Butterwortha i Czebyszewa

tracyjne takiego układu zależą od geometrii elektrod obu przetworników, nadawczego i od-
biorczego.
Zagadnienie projektowania transmitancji H(s) (5.43) (czyli dobór jej zer zm i biegunów zn), ta-
kiej aby iloczyn H(jω)H(−jω) był równy zadanemu |H(jω)|2, nosi nazwę faktoryzacji widmo-
wej.

6.1. Ogólne zasady projektowania filtrów analogowych


Projektowanie układów analogowych najczęściej sprowadza się do projektowania filtrów czę-
stotliwościowych, tzn. układów modyfikujących widmo częstotliwościowe przechodzących
przez nie sygnałów. Definiuje się cztery podstawowe typy filtrów, w zależności od pasma czę-
stotliwości, przepuszczanego przez układ (patrz rysunki 6.1a i 6.1.b):
1) filtry dolnoprzepustowe (LP − Low Pass):
1 − δ pass ≤ H LP ( jω) ≤ 1 + δ pass , dla ω ≤ ω pass

 0 ≤ H LP ( jω) ≤ 1 + δ pass , dla ω pass < ω < ωstop (6.1)

 0 ≤ H LP ( jω) ≤ δ stop , dla ωstop ≤ ω

2) filtry górnoprzepustowe (HP − High Pass):


 0 ≤ H HP ( jω) ≤ δ stop , dla ω ≤ ωstop

 0 ≤ H HP ( jω) ≤ 1 + δ pass , dla ωstop < ω < ω pass (6.2)

1 − δ pass ≤ H HP ( jω) ≤ 1 + δ pass , dla ω pass ≤ ω

3) filtry pasmowoprzepustowe (BP − Band Pass):


1 − δ pass ≤ H BP ( jω) ≤ 1 + δ pass , dla ω pass1 ≤ ω ≤ ω pass 2

 0 ≤ H BP ( jω) ≤ δ stop , dla ω ≤ ωstop1 lub ωstop 2 ≤ ω (6.3)
 0 ≤ H BP ( jω) ≤ 1 + δ pass , dla ωstop1 < ω < ω pass1 lub ω pass 2 < ω < ωstop 2

4) filtry pasmowozaporowe (BS − Band Stop):


1 − δ pass ≤ H BS ( jω) ≤ 1 + δ pass , dla ω ≤ ω pass1 lub ω pass 2 ≤ ω

 0 ≤ H BS ( jω) ≤ δ stop , dla ωstop1 ≤ ω ≤ ωstop 2 . (6.4)

 0 ≤ H BS ( jω) ≤ 1 + δ pass , dla ω pass1 < ω < ωstop1 lub ωstop 2 < ω < ω pass 2

W skrótach nazw oraz parametrów wykorzystano terminologię anglojęzyczną, ponieważ przy-


jęto założenie, że środowiskiem programowym, w którym będą przeprowadzane projektowe
eksperymenty symulacyjne, będzie język Matlab, a on niestety nie jest spolszczony i raczej nie
będzie. Powyższe wzory definicyjne dokładnie określają przedział wartości, jakie może przy-
jąć charakterystyka amplitudowa M(ω) = |H(jω)| dla dowolnej pulsacji ω dla każdego typu
filtra. Wynika z nich, że wartości funkcji M(ω) powinny leżeć w „tunelach”, zaznaczonych
białym kolorem na rysunkach 6.1a, 6.1b i określonych przez przyjęte wartości parametrów
ωpass, ωstop, δpass, δstop. Oczywiście, zdefiniowane wyżej charakterystyki filtrów należą do
najbardziej podstawowych. W praktyce często projektuje się i stosuje filtry o innych, bardziej
Analogowe filtry Butterwortha i Czebyszewa 133

MLP(ω) LP

1+δp
1
1-δp

δs

0 ωp ωs ω [rd⋅Hz]
0 fp fs f [Hz]

Rys. 6.1a. Orientacyjny kształt charakterystyki amplitudowo-częstotliwościowej M(ω) = |H(jω)| (biały


„tunel”) dla cyfrowego filtra dolnoprzepustowego (LP). Zastosowano skrócone oznaczenia: „p” − pass, „s”
− stop

MLP(ω) LP MHP(ω) HP

1+δp 1+δp
1 1
1-δp 1-δp

δs δs

0 ωp ωs ω 0 ωs ωp ω

MBP(ω) BP MBS(ω) BS

1+δp 1+δp
1 1
1-δp 1-δp

δs δs

0 ωs1 ωp1 ωp2 ωs1 ω 0 ωp1 ωs1 ωs2 ωp1 ω


Rys. 6.1b. Orientacyjny kształt charakterystyk amplitudowo-częstotliwościowych (białe „tunele”) dla czte-
rech podstawowych typów filtrów: dolnoprzepustowego (LP), górnoprzepustowego (HP), pasmowoprzepu-
stowego (BP) i pasmowozaporowego (BS). Zastosowano skrócone oznaczenia: „p” − pass, „s” − stop
134 Analogowe filtry Butterwortha i Czebyszewa

M(ω) [dB]

0
-10
-20
-30
-40
-50 f [MHz]

24 26 28 30 32 34 36 38 40 42 44

Rys. 6.1c. Przybliżone pole tolerancji charakterystyki amplitudowo-częstotliwościowej dwustandardowego


filtra telewizyjnego pośredniej częstotliwości, pracującego w standardach B/G− D/K [Maje89]

wymyślnych charakterystykach amplitudowo-częstotliwościowych. Dla przykładu na rysunku


6.1c przedstawiono charakterystykę filtra pośredniej częstotliwości, pracującego w dwu-
standardowych odbiornikach telewizyjnych B/G-D/K. Jest to co prawda filtr pasmowoprze-
pustowy, ale pole tolerancji jego charakterystyki nie jest „prostokątne”, „zero-jedynkowe”
(tłumienie, przepuszczanie), tak jak w filtrach z rysunku 6.1b.
Powyższe równania definicyjne filtrów należy interpretować w następujący sposób: w paśmie
przepustowym moduł odpowiedzi częstotliwościowej powinien się mieścić w zakresie [1−δp,
1+δp], w paśmie zaś zaporowym − w zakresie [0, 0+δs]. Im jest mniejsze δp (np. 0,01; 0,001;
0,0001), tym filtr mniej zniekształca amplitudę przenoszonych sygnałów składowych, nato-
miast dla mniejszego δs (np. 0,01; 0,001; 0,0001) − bardziej tłumi sygnały, o częstotliwościach
leżących w paśmie zaporowym. Dla wygody w projektowaniu filtrów stosuje się miarę loga-
rytmiczną wyrażoną w decybelach, tzn. wartości wzmocnienia 1−δp i δs przelicza się z jedno-
stek bezwzględnych (np. 0,7071; 0,1; 0,01; 0,001; 0,0001) na decybele (odpowiednio: −3 dB,
−20 dB, −40 dB, −60 dB, −80 dB), stosując następujący wzór:
G p = 20 log10 (1 − δ p ), Gs = 20 log10 ( δ s ) (6.5)
gdzie Gp i Gs oznaczają wzmocnienie filtra w paśmie przepustowym i zaporowym,
wyrażone w decybelach. Wprowadza się także pojęcie tłumienia układu jako odwrotności
wzmocnienia. W mierze decybelowej tłumienie to jest równe:
1 1
Ap = 20 log10 = −G p , As = 20 log10 = −Gs (6.6)
(1 − δ p ) δs

i wówczas mówimy, że filtr tłumi sygnał, w naszym przykładzie odpowiednio: 3 dB, 20 dB,
40 dB, 60 dB, 80 dB.
W ogólności do przeliczenia na decybele stosunku kwadratów (mocy) dwóch wielkości A i B
(np. napięć, temperatur, prędkości) stosuje się następujący wzór:
A2
X dB = 10log10
B2
( )
= 10log10 X 2 (6.7a)

zapisywany także jako:


A
X dB = 20log10 , X dB = 20log10 ( X ) (6.7b)
B
Analogowe filtry Butterwortha i Czebyszewa 135

Jeśli w równaniach (6.7a) i (6.7b) mnożniki 10 i 20 zastąpimy odpowiednio przez 1 i 2, to trzy-


mamy wynik w belach, a nie w decybelach. Wybór wzoru zależy od tego, czy wartość pod
logarytmem jest „w kwadracie”, czy też nie. Przykładowo jeśli |H(jω)|2 = |B(jω)|2/|A(jω)|2 = 0,5,
to wówczas z (6.7a) otrzymujemy 10log10(0.5) = −3,0103dB ≈ −3dB, czyli −3 decybele odpo-
wiadają k wa d r a t o wi m o d u ł u wz m o c n i e n i a równemu 1/2, czyli samemu wz m o c -
n i e n i u równemu 1 / 2 = 0,7071. Natomiast dla |H(jω)| = |B(jω)|/|A(jω)| = 0,7071 z (6.7b) ma-
my 20log10(0,7071) ≈ −3 dB, czyli tyle samo co poprzednio.
Do realizacji każdego z filtrów LP, HP, BP i BS można zastosować j e d e n z c z t e r e c h
r o d z a j ó w a p r o k s y m a c j i wymaganej charakterystyki amplitudowo-częstotliwościowej. Jej
wybór narzuca określone położenie zer i biegunów ich transmitancji (5.17), (5.43b) (np. na
okręgach lub elipsach), powodujące występowanie lub brak zafalowań w paśmie przepusto-
wym i/lub zaporowym charakterystyk amplitudowych filtrów oraz wpływające na szerokość
zboczy ich pasm przejściowych. Potocznie aproksymacje te nazywa się prototypami. Ich po-
chodzenie wyjaśniono w dalszej części tego rozdziału (podrozdziały 6.3, 6.4 i 6.5). Są to
prototypy: Butterwortha, Czebyszewa typu I i typu II oraz prototyp eliptyczny. Dla filtrów
dolnoprzepustowych, poza wyżej wymienionymi, można także dodatkowo zastosować prototyp
Bessela. Oczywiście istnieją także inne prototypy. Charakterystyki poszczególnych prototypów
są przedstawione w sposób poglądowy na rysunku 6.2, lecz tylko dla filtrów dolnoprze-
pustowych. I tak:
1) prototyp Butterwortha (maksymalnie płaski) − nie ma zafalowań w paśmie przepustowym
i zaporowym oraz ma charakterystykę fazową najbardziej zbliżoną do liniowej, ale za to
odznacza się najmniej stromymi zboczami pasm przejściowych (przy takim samym rzędzie
filtra),
2) prototyp Czebyszewa typu I − ma zafalowania w paśmie przepustowym, nie ma zafalowań
w paśmie zaporowym, ma węższe pasmo przejściowe niż prototyp Butterwortha, lecz oku-
pione bardziej nieliniową charakterystyką fazową,
3) prototyp Czebyszewa typu II − charakteryzuje się zafalowaniami w paśmie zaporowym
a nie przepustowym,
4) prototyp eliptyczny − ma zafalowania w obu pasmach, ale przy takim samym rzędzie filtra
odznacza się największą stromością zboczy pasm przejściowych i najbardziej nieliniową
charakterystyką fazową,
5) prototyp Bessela − może być stosowany tylko dla filtrów dolnoprzepustowych; nie ma zafa-
lowań, ma bardzo szerokie pasmo przejściowe, odznacza się najbardziej liniową fazą ze
wszystkich prototypów.
Wybór prototypu jest podyktowany specyfiką zastosowania i jej wymaganiami: dopuszczalnym
stopniem zafalowań charakterystyki amplitudowej, pożądaną selektywnością filtrów i związaną
z nimi szerokością pasm przejściowych, wymaganym stopniem liniowości charakterystyki
fazowej oraz dopuszczalną złożonością układową (rząd filtra).
Na rysunku 6.2 przedstawiono charakterystyki amplitudowe filtrów prototypowych, zaproje-
ktowanych dla następujących wartości parametrów: ωpass = 1 rd/s, ωstop = 2 rd/s, Apass = 3 dB
(Gpass = −3 dB, 1−δpass = 0,7071), Astop = 40 dB (Gstop = −40 dB, δstop = 0,01). Jak widać róż-
nym kształtom odpowiedzi częstotliwościowych odpowiada różna liczba i położenie zer i bie-
gunów transmitancji H(s). Transmitancje dolnoprzepustowych filtrów prototypowych Butter-
wortha i Czebyszewa nie mają zer. Bieguny pierwszego z nich leżą na okręgu, a drugiego na
elipsie. Z kolei dolnoprzepustowe filtry prototypowe Czebyszewa typu II i eliptyczny mają nie
tylko bieguny, ale także zera.
136 Analogowe filtry Butterwortha i Czebyszewa

Każdy z filtrów LP, HP, BP i BS można zaprojektować z wykorzystaniem dowolnego pro-


totypu. Na rysunku 6.3 przedstawiono rozkład zer i biegunów oraz charakterystyki amplitu-
dowe i fazowe dla przykładowych filtrów LP, HP, BP, BS Czebyszewa typu II (brak zafalowań
w paśmie przepustowym, oscylacje w paśmie zaporowym, nie tylko bieguny ale także zera
transmitancji). Jak widać rozłożenie zer i biegunów transmitancji nie jest trywialne i trudno je
znaleźć metodą „prób i błędów”. Należy zwrócić uwagę, że w każdym przypadku chara-
kterystyka fazowa jest nieliniowa w paśmie przepustowym, ale jej skoki o +π radianów
występują tylko w paśmie zaporowym w miejscu występowania zer leżących na osi urojonej.

a)
1 1 0

20log10|H(jω)| [dB]
0.8 -20
0.5
0.6 -40
Imag(s)

|H(jω)|
0
0.4 -60
-0.5 0.2 -80
-1 0 -100
-1 -0.8 -0.6 -0.4 -0.2 0 0 1 2 3 4 5 0 1 2 3 4 5
Real(s) ω [rd/s] ω [rd/s]

b)
1 1 0

20log10|H(jω)| [dB]
0.8 -20
0.5
0.6 -40
Imag(s)

|H(jω)|

0
0.4 -60
-0.5 0.2 -80
-1 0 -100
-1 -0.8 -0.6 -0.4 -0.2 0 0 1 2 3 4 5 0 1 2 3 4 5
Real(s) ω [rd/s] ω [rd/s]

c)
4 1 0
20log10|H(jω)| [dB]

0.8 -20
2
0.6 -40
Imag(s)

|H(jω)|

0
0.4 -60
-2 0.2 -80
-4 0 -100
-1.6 -1.2 -0.8 -0.4 0 0 1 2 3 4 5 6 0 1 2 3 4 5 6
Real(s) ω [rd/s] ω [rd/s]

d)
3 1 0
20log10|H(jω)| [dB]

2 0.8 -20
1 0.6 -40
Imag(s)

|H(jω)|

0
0.4 -60
-1
-2 0.2 -80
-3 0 -100
-0.4 -0.3 -0.2 -0.1 0 0 1 2 3 4 5 6 0 1 2 3 4 5 6
Real(s) ω [rd/s] ω [rd/s]

Rys. 6.2. Orientacyjny rozkład zer „z” i biegunów „³” oraz kształt odpowiedzi częstotliwościowej (w
skali liniowej i logarytmicznej) dolnoprzepustowego filtra prototypowego: a) Butterwortha, b) Czebyszewa
typu I, c) Czebyszewa typu II, d) eliptycznego (uwaga: oryginalny filtr prototypowy LP Czebyszewa typu II
ma pulsację ωs = 1; u nas przeskalowano ją na ωs = 2, tak aby wszystkie filtry spełniały identyczne wymaga-
nia: ωpass = 1 rd/s, ωstop = 2 rd/s, Apass = 3 dB, Astop = 40 dB)
Analogowe filtry Butterwortha i Czebyszewa 137

a) filtr dolnoprzepustowy (LP) b) filtr górnoprzepustowy (HP)

0 0

20log10|H(jω)| [dB]

20log10|H(jω)| [dB]
-20 -20
-40 -40
-60 -60
-80 -80
-100 -100
10 100 1000 10000 100000 10 100 1000 10000 100000
f [Hz] f [Hz]

0 6
5
-2 4
Φ(jω) [rd]

Φ(jω) [rd]
3
-4 2
1
-6 0
10 100 1000 10000 100000 10 100 1000 10000 100000
f [Hz] f [Hz]

2000 2000

1000 1000
Imag(s/(2π))

Imag(s/(2π))

0 0

-1000 -1000

-2000 -2000
-6000 -4000 -2000 0 -8000 -6000 -4000 -2000 0
Real(s) Real(s)
Rys. 6.3. Przykładowe charakterystyki częstotliwościowe filtrów Czebyszewa typu II oraz odpowiadający
im rozkład zer „z” i biegunów „³” transmitancji (pionowo): a) filtr dolnoprzepustowy (LP), b) filtr
górnoprzepustowy (HP), c) filtr pasmowoprzepustowy (BP), d) filtr pasmowozaporowy (BS)

Projektowanie transmitancji Hxx(s) filtra analogowego przebiega według następującego scena-


riusza (xx = LP, HP, BP lub BS):
1) przeanalizowanie wymagań częstotliwościowych stawianych filtrowi Hxx(s) i wybór odpo-
wiedniego rodzaju filtra prototypowego: Butterwortha, Czebyszewa typu I, Czebyszewa
typu II, eliptycznego lub Bessela;
2) przeliczenie wymagań projektowych stawianych filtrowi Hxx(s) na wymagania, które powi-
nien spełniać odpowiadający mu dolnoprzepustowy filtr prototypowy HLP(p)(s), który
umiemy zaprojektować;
3) zaprojektowanie transmitancji prototypu HLP(p)(s) danego typu;
4) transformacja transmitancji HLP(p)(s) na transmitancję Hxx(s ′), spełniającą wymagania proje-
ktowe, za pomocą tzw. transformacji częstotliwości (transformacja ta polega na podstawie-
niu za s w HLP(p)(s) odpowiedniej funkcji s = f(s ′), w wyniku czego otrzymujemy docelową
transmitancję Hxx(s ′));
138 Analogowe filtry Butterwortha i Czebyszewa

c) filtr pasmowoprzepustowy (BP) d) filtr pasmowozaporowy (BS)

0 0

20log10|H(jω)| [dB]

20log10|H(jω)| [dB]
-20 -20
-40 -40
-60 -60
-80 -80
-100 -100
10 100 1000 10000 100000 10 100 1000 10000 100000
f [Hz] f [Hz]

0 6
-2 4
-4 2
Φ(jω) [rd]

Φ(jω) [rd]
-6 0
-8 -2
-10 -4
-12 -6
10 100 1000 10000 100000 10 100 1000 10000 100000
f [Hz] f [Hz]

20000 15000
10000
10000
Imag(s/(2 π))

Imag(s/(2π))

5000
0 0
-5000
-10000
-10000
-20000 -15000
-32000 -24000 -16000 -8000 0 -60000 -40000 -20000 0
Real(s) Real(s)
Rys. 6.3. (cd.) c) filtr pasmowoprzepustowy (BP), d) filtr pasmowozaporowy (BS)

5) sprawdzenie właściwości zaprojektowanego układu Hxx(s ′): jego charakterystyki amplitu-


dowo-częstotliwościowej M(ω) i fazowo-częstotliwościowej Φ(ω) oraz kształtu odpowiedzi
impulsowej h(t) i skokowej u(t); w przypadku filtrów dolnoprzepustowych z odpowiedzi
skokowej u(t) (odpowiedzi układu na sygnał skoku jednostkowego) wyznacza się także do-
datkowe parametry:
czas ustalania − czas, po którym u(t) nie różni się więcej niż o 5% od wartości ustalonej
(jest równe 0,95 ÷ 1,05 tej wartości),
czas narastania − czas narastania h(t) od 0,1 do 0,9 wartości ustalonej.
W zależności od rodzaju filtra docelowego transformacja transmitancji prototypu HLP(p)(s) na
transmitancję końcową H xx ( s' ) (xx = LP, HP, BP lub BS) jest przeprowadzana za pomocą
następujących podstawień:
1) LP(p) → LP − filtr dolnoprzepustowy: s = s' ω0 , ω0 = ω pass (6.8)
(p)
2) LP → HP − filtr górnoprzepustowy: s = ω0 s' , ω0 = ω pass (6.9)
Analogowe filtry Butterwortha i Czebyszewa 139

s' 2 + ω02
3) LP(p) → BP − f. pasmowoprzepustowy: s = , ω0 = ω p1ω p 2 , ∆ω = ω p 2 − ω p1 (6.10)
∆ω⋅ s'
∆ω⋅ s'
4) LP(p) → BS − filtr pasmowozaporowy: s = , ω0 = ω p1ω p 2 , ∆ω = ω p 2 − ω p1 (6.11)
s' 2 + ω02

W powyższych wzorach podano przykładowe, intuicyjne podstawienia wartości parametrów ω0


i ∆ω. W praktyce podstawienia te zależą od rodzaju użytego filtra prototypowego. W przy-
padku filtrów BP i BS ω0 jest pulsacją środka pasma przepustowego (dla BP) lub zaporowego
(dla BS) (średnia geometryczna pulsacji granicznych), a ∆ω − szerokością pasma przepusto-
wego (BP) lub zaporowego (BS). W ich wyniku wielomiany zmiennej s transmitancji HLP(p)(s)
są zastępowane przez inne wielomiany, w wyniku czego powstaje nowa, docelowa trans-
mitancja Hxx(s ′).
Kończąc to krótkie wprowadzenie należy jeszcze raz podkreślić, że w praktyce często pro-
jektuje się także filtry analogowe, mające inne kształty („tunele”) charakterystyki amplitudo-
wo-częstotliwościowej niż te przedstawione na rysunku 6.1b. Przykładem mogą być filtry,
wstawiane do toru przetwarzania sygnałów, o charakterystyce nieliniowej, których zadaniem
jest korygowanie nieliniowej charakterystyki pasma przepustowego innych elementów tego
toru, na przykład czujników pomiarowych lub kanałów transmisyjnych. Ciekawym przykładem
filtra o innej charakterystyce amplitudowo-częstotliwościowej niż LP, HP, BP i BS jest
wspomniany już filtr pośredniej częstotliwości, stosowany w torze przetwarzania sygnału
w odbiornikach telewizyjnych, który został zaprezentowany na rysunku 6.1c.
Powinniśmy teraz przystąpić do przedstawienia metod projektowania transmitancji dolno-
przepustowego filtra prototypowego HLP(p)(s), stosowanych w punkcie trzecim opisanego po-
wyżej algorytmu. Postąpimy jednak inaczej. Najpierw w rozdziale 6.2 omówimy metodę trans-
formacji częstotliwości, a następnie w kolejnych rozdziałach 6.3, 6.4 i 6.5 przedstawimy różne
metody projektowania dolnoprzepustowego filtra HLP(p)(s) oraz przedstawimy liczne przykłady
jego transformacji w filtr dowolnego typu (LP, HP, BP i BS).

6.2. Transformacja częstotliwości


Postaramy się teraz uzasadnić użyteczność opisanych powyżej transformacji częstotliwości,
stosowanych podczas projektowania filtrów analogowych. Ich idea jest prosta: stosując podsta-
wienie s = f(s ′) w funkcji prototypowej HLP(p)(s), otrzymujemy funkcję Hxx(s ′), xx = LP, HP,
BP lub BS, zmiennej s ′, która przyjmuje takie same wartości w punkcie s ′ jak funkcja HLP(p)(s)
w punkcie s:

( )
H xx ( s' ) = H xx f −1 ( s ) = H LP
( p)
( s) (6.12)

Teraz trzeba tylko w odpowiedni sposób uzależnić zmienne s i s ′, tak aby filtr Hxx(s ′) stał się
filtrem dolnopasmowym (LP), górnopasmowym (HP), pasmowoprzepustowym (BP) lub pas-
mowozaporowym (BS). Przyjmijmy podstawienia:
s = jω, s' = jv (6.13)
oraz rozpatrzmy kolejno wszystkie transformacje. Załóżmy, że wymagania projektowe stawia-
ne filtrowi Hxx(s ′) są określone przez zestaw wartości {vpass, vstop, δpass, δstop} dla filtrów LP
i HP oraz {vp1, vp2, vs1, vs2, δp1, δp2, δs1, δs2} dla filtrów BP i BS. Niech transmitancja unor-
mowanego prototypu dolnoprzepustowego jest dana następującym wzorem:
140 Analogowe filtry Butterwortha i Czebyszewa

M
bM ∏ ( s − zm )
( p) m =1
H LP ( s) = N
(6.14)
a N ∏ ( s − pn )
n =1

1) Transformacja częstotliwości LP → LP (rysunek 6.4a). W tym przypadku otrzymujemy:


s' jv v
s= ⇒ jω = ⇒ ω= (6.15)
ω0 ω0 ω0
czyli zwykłe przeskalowanie pulsacji pokazane na rysunku 6.4a. Jeśli przyjmiemy ω0 = vpass, to
filtr dolnoprzepustowy HLP(s ′) o pulsacjach „granicznych” {vpass, vstop} jest związany z filtrem
dolnoprzepustowym HLP(p)(s) o pulsacjach „granicznych” {ωpass = 1, ωstop = vstop/vpass}. W zwią-
zku z tym projektujemy filtr HLP(p)(s) spełniający wymagania {ωpass = 1, ωstop = vstop/vpass, δpass,
δstop}, czyli znajdujemy jego zera zm i bieguny pk, i stosując podstawienie (6.15) w (6.14) otrzy-
mujemy transmitancję HLP(s ′):
M
bM ω0N − M ∏ ( s' − ω0 zm )
m =1
H LP ( s' ) = N
(6.16)
a N ∏ ( s' − ω0 pn )
n =1

HLP(p)(s)
Jeśli filtr jest stabilny, to także filtr HLP(s ′) ma tę właściwość, gdyż jego bieguny są
przeskalowanymi biegunami prototypu i mają taki sam znak jak one.

2) Transformacja częstotliwości LP → HP (rysunek 6.4b). W tym przypadku stosujemy pod-


stawienie:
ω
s= 0 (6.17)
s'
i po uwzględnieniu (6.13) otrzymujemy:
ω0 ω0 ω0
jω = ⇒ ω=− ⇒ v=− (6.18)
jv v ω
Z zależności (6.18) wynika, że pulsacje ω→0 są przekształcane na pulsacje v→∞. I odwrotnie,
jeśli ω→∞, to v→0, czyli filtr dolnoprzepustowy o pulsacji granicznej ωpass jest transformo-
wany na filtr górnoprzepustowy o pulsacji granicznej vpass = ω0/ωpass. Jeśli przyjmiemy ω0 =
= vpass, to otrzymamy ωpass = 1 i wówczas projektujemy filtr prototypowy HLP(p)(s) spełniający
warunki {ωpass = 1, ωstop = vpass/vstop, δpass, δstop}. W powyższych rozważaniach zaniedbaliśmy
znak minus występujący w równaniu (6.18), ponieważ |HLP(p)(ω)| = |HLP(p)(−ω)| oraz |HHP(v)| =
= |HHP(−v)|.
Łatwo wykazać, że transmitancja filtra po przekształceniu jest dana wzorem:
M M
∏ ( − zm ) ( s' ) N − M ∏ ( s' − ω0 zm−1 )
bM m =1 m =1
H HP ( s' ) = ⋅ ⋅ (6.19)
aN N N
∏ n( − p ) ∏ ( s' − ω0 pn−1 )
n =1 n =1
Analogowe filtry Butterwortha i Czebyszewa 141

a) transformacja LP → LP

ω
LP ⇒ LP

ωs

ωp
|HLP(p)(ω)|

1 v
vp vs

|HLP(v)|

b) transformacja LP → HP

ω
LP ⇒ HP

ωs

|HLP(p)(ω)| ωp

1 v
vs vp

|HHP(v)|
Rys. 6.4. Ilustracja zasady transformacji częstotliwości stosowanej podczas projektowania filtrów analo-
gowych. Transformacja: a) LP → LP, b) LP → HP. W unormowanych prototypach dolnoprzepustowych
HLP(p)( ω) pulsacja ωp jest równa 1
142 Analogowe filtry Butterwortha i Czebyszewa

c) transformacja LP → BP

LP ⇒ BP ω

ωs

ωp
|HLP(p)(ω)|

1 v
vp1 vp2

|HBP(v)|

d) transformacja LP → BS

ω
LP ⇒ BS

ωs

|HLP(p)(ω)| ωp

1 v
vp1 vp2

|HBS(v)|
Rys. 6.4. (cd.) Transformacja częstotliwości: c) LP → BP, d) LP → BS
Analogowe filtry Butterwortha i Czebyszewa 143

ponieważ dowolny składnik wielomianu licznika i mianownika transmitancji (6.14) po podsta-


wieniu (6.17) przyjmuje postać:

− zm ( s' − ω0 zm−1 ) − pn ( s' − ω0 pn−1 )


( s − zm ) = , ( s − pn ) = (6.20)
s' s'
Bieguny transmitancji (6.19) są równe:
ω0 σ n ω0 ωn
ω0 pn−1 = ω0 ( σ n + jωn ) −1 = −j (6.21)
σ 2n + ω2n σ 2n + ω2n

Jeśli więc bieguny pn = σn+jωn leżą w lewej półpłaszczyźnie, to także bieguny ω0 pn−1 tam się
znajdują, czyli ze stabilności filtra HLP(p)(s) wynika stabilność filtra HHP(s ′) (części rzeczywiste
wszystkich biegunów są ujemne).

3) Transformacja częstotliwości LP → BP (rysunek 6.4c). Stosujemy podstawienie:

( s' )2 + ω02
s= , ω0 = v p1v p 2 , ∆ω = v p 2 − v p1 (6.22)
∆ω⋅ s'
które prowadzi do następującej zależności pulsacji układów przed i po transformacji:

( jv ) 2 + ω02 v 2 − ω02
jω = ⇒ ω= (6.23)
∆ω ⋅ jv ∆ω ⋅ v

przedstawionej graficznie na rysunku 6.4c. Jak wynika z tego rysunku − dwie pulsacje vp1 i vp2,
stanowiące „granice” pasma przepustowego filtra HBP(s ′) są związane z tą samą pulsacją
ωpass = 1 filtra HLP(p)(s), gdyż zgodnie zależnością (6.23) mamy:

v 2p1 − ω02 v 2p1 − v p1v p 2 v 2p 2 − ω02 v 2p 2 − v p1v p 2


= = −1, = =1 (6.24)
∆ω ⋅ v p1 ( v p 2 − v p1 ) ⋅ v p1 ∆ω ⋅ v p 2 ( v p 2 − v p1 ) ⋅ v p 2

Analogicznie pulsacje graniczne pasma zaporowego vs1 i vs2 są transformowane na pulsacje:

v s21 − v p1v p 2 v s22 − v p1v p 2


ωs1 = , ωs 2 = (6.25)
( v p 2 − v p1 ) ⋅ v s1 ( v p 2 − v p1 ) ⋅ v s 2

Jako ωstop filtra prototypowego, projektowanego w trzecim kroku algorytmu, przyjmuje się:

ωstop = min{ ωs1 , ωs 2 } (6.26)


czyli bardziej strome zbocze.
W tym przypadku transmitancja filtra po przekształceniu jest dana wzorem:
M
( ∆ω) N − M ( s' ) N − M ∏  ( s' )2 − ( zm ∆ω) s' + ω20 
bM m =1
H BP ( s' ) = ⋅ N
(6.27)
aN
∏  ( s' ) − ( pn ∆ω) s' + ω02 
2
n =1
144 Analogowe filtry Butterwortha i Czebyszewa

ponieważ dowolny składnik wielomianu licznika i mianownika transmitancji (6.14) po podsta-


wieniu (6.22) przyjmuje postać:
( s' )2 + ω20 ( s' ) 2 − (uk ∆ω) s' + ω02
( s − uk ) = − uk = (6.28)
∆ω⋅ s' ∆ω⋅ s'
gdzie uk oznacza dowolne zero zm lub biegun pn transmitancji (6.14).
Jeśli s = σ+jω i s ′ = ρ+jv, to z zależności (6.22) wynika także, że:

s = σ + jω =
(ρ + jv )2 + ω02 =
ρ  ω2 
1+ 2 0 2  + j
v  ω2 
1− 2 0 2  (6.29)
∆ω ⋅ (ρ + jv ) ∆ω  ρ + v  ∆ω  ρ + v 

czyli σ i ρ mają zawsze taki sam znak. Wynika stąd, że części rzeczywiste biegunów trans-
mitancji (6.14) i (6.27) również mają identyczny znak, więc stabilność filtra HLP(p)(s) pociąga
za sobą stabilność filtra HBP(s ′).

4) Transformacja częstotliwości LP → BS (rysunek 6.4d). W ostatnim rozpatrywanym przy-


padku jest stosowane podstawienie:
∆ω⋅ s'
s= , ω0 = v p1v p 2 , ∆ω = v p 2 − v p1 (6.30)
( s' )2 + ω02
prowadzące do następującej zależności pulsacji układów przed i po transformacji:
∆ω ⋅ jv ∆ω ⋅ v
jω = ⇒ ω= (6.31)
( jv ) 2 + ω02 ω02 − v 2
przedstawionej graficznie na rysunku 6.4d. Obecnie pulsacja graniczna ωpass = 1 jest związana
z dwiema pulsacjami vp1 i vp2, stanowiącymi „granice” pasma przepustowego filtra pasmowo-
zaporowego HBS(s ′), gdyż zgodnie z zależnością (6.31) mamy:
∆ω ⋅ v p1 ( v p 2 − v p1 ) ⋅ v p1 ∆ω ⋅ v p 2 (v p 2 − v p1 ) ⋅ v p 2
= = −1, = =1 (6.32)
v 2p1 − ω02 v 2p1 − v p1v p 2 v 2p 2 − ω02 v 2p 2 − v p1v p 2

Analogicznie pulsacje graniczne pasma zaporowego vs1 i vs2 są transformowane na pulsacje:


(v p 2 − v p1 ) ⋅ v s1 ( v p 2 − v p1 ) ⋅ v s 2
ωs1 = , ωs 2 = (6.33)
v s21 − v p1v p 2 v s22 − v p1v p 2

Jako ωstop filtra prototypowego, projektowanego w trzecim kroku algorytmu, przyjmuje się:
ωs = min{ ωs1 , ωs 2 } (6.34)
czyli bardziej strome zbocze.
W tym przypadku transformacji LP→BS transmitancja otrzymanego filtra pasmowozaporo-
wego jest dana wzorem:
M N −M M

b
∏ ( − zm )  ( s' )2 + ω20 
  ∏  ( s' )2 − ( zm−1∆ω) s' + ω20 
H BS ( s' ) = M ⋅ mN=1 ⋅ N
m =1 (6.35)
aN
∏ n ( − p ) ∏  ( s' )2 − ( pn−1∆ω) s' + ω02 
n =1 n =1
Analogowe filtry Butterwortha i Czebyszewa 145

Tab. 6-1. Programy napisane w języku Matlab, przekształcające znany filtr HLP(p)(s) w filtry HLP(s ′),
HHP(s’), HBP(s’) i HBS(s’)

% Ćwiczenie: Transformacje częstotliwości filtrów analogowych

function [zz,pp,wzm] = lp2lpTZ(z,p,wzm,w0)


% LowPass to LowPass TZ
zz = []; pp = [];
for k=1:length(z)
zz = [ zz z(k)*w0 ];
wzm = wzm/w0;
end
for k=1:length(p)
pp = [ pp p(k)*w0 ];
wzm = wzm*w0;
end

---------------------------------------------
function [zz,pp,wzm] = lp2hpTZ(z,p,wzm,w0)
% LowPass to HighPass TZ
zz = []; pp = [];
for k=1:length(z)
zz = [ zz w0/z(k) ];
wzm = wzm*(-z(k));
end
for k=1:length(p)
pp = [ pp w0/p(k) ];
wzm = wzm/(-p(k));
end
for k=1:(length(p)-length(z))
zz = [ zz 0 ];
end

---------------------------------------------
function [zz,pp,wzm] = lp2bpTZ(z,p,wzm,w0,dw)
% LowPass to BandPass TZ
pp = []; zz = [];
for k=1:length(z)
zz = [ zz roots([ 1 -z(k)*dw w0^2])' ];
wzm = wzm/dw;
end
for k=1:length(p)
pp = [ pp roots([ 1 -p(k)*dw w0^2])' ];
wzm = wzm*dw;
end
for k=1:(length(p)-length(z))
zz = [ zz 0 ];
end

---------------------------------------------
function [zz,pp,wzm] = lp2bsTZ(z,p,wzm,w0,dw)
% LowPass to BandStop TZ
zz = []; pp = [];
for k=1:length(z)
zz = [ zz roots([ 1 -dw/z(k) w0^2 ])' ];
wzm = wzm*(-z(k));
end
for k=1:length(p)
pp = [ pp roots([ 1 -dw/p(k) w0^2 ])' ];
wzm = wzm/(-p(k));
end
for k=1:(length(p)-length(z))
zz = [ zz roots([ 1 0 w0^2 ])' ];
end
146 Analogowe filtry Butterwortha i Czebyszewa

ponieważ dowolny składnik wielomianu licznika i mianownika transmitancji (6.14) po podsta-


wieniu (6.30) przyjmuje postać:

∆ω⋅ s ' ( −uk )  ( s ')2 − (uk−1∆ω) s '+ ω02 


( s − uk ) = − uk =   (6.36)
( s ')2 + ω02 ( s ')2 + ω02
gdzie uk oznacza dowolne zero zm lub biegun pn transmitancji (6.14).
Pozostaje nam jeszcze rozpatrzenie problemu stabilności transmitancji HBS(s ′). Jeśli podobnie
jak poprzednio przyjmiemy oznaczenia s = σ+jω i s ′ = ρ+jv, to z zależności (6.30) otrzymamy:
∆ω⋅ (ρ + jv ) ∆ω  2 ∆ω  2
s = σ + jω = = ω0 + (ρ2 + v 2 )  ρ + j ω0 − (ρ2 + v 2 )  v (6.37)
(ρ + jv ) 2
+ ω02 ξ   ξ  

gdzie
2
ξ =  ω02 + ρ2 − v 2  + 4ρ2 v 2 (6.38)
 

czyli σ i ρ mają zawsze taki sam znak. Wynika stąd, że części rzeczywiste biegunów trans-
mitancji (6.14) i (6.35) również mają identyczny znak, więc stabilność filtra HLP(p)(s) pociąga
za sobą stabilność filtra HBS(s ′).

Wzory (6.16), (6.19), (6.27) i (6.35) stanowią podstawę do napisania programów komputero-
wych, przekształcających znany filtr HLP(p)(s) w filtry HLP(s ′), HHP(s ′), HBP(s ′) i HBS(s ′).
Przykładowe programy w języku Matlab, które to realizują, są przedstawione w tabeli 6-1.

Obecnie zajmiemy się problemem projektowania różnych filtrów HLP(p)(s), w szczególności fil-
trów Butterwortha oraz Czebyszewa typu I i II.

6.3. Filtry Butterwortha


Dolnoprzepustowy, znormalizowany (ω3dB = 1 rd/s) filtr Butterwortha rzędu N to filtr mający
transmitancję postaci:
N N
H B, N ( s ) = ∏ ( − pk ) ∏ ( s − pk ) (6.39)
k =1 k =1

która spełnia następujące równanie:


2 1 1 1 1
H B, N ( jω) = H B, N ( jω) H B, N ( − jω) = = = =
A( jω) A( − jω) L( ω2 ) c0 + c1ω2 + ... + c N ω2 N 1 + ω2 N
(6.40)
Uzasadnienie wzoru (6.40) jest następujące [Anto93]. Niech A(jω) = a0+a1(jω)+a2(jω)2+...
+aN(jω)N oznacza wielomian rzędu N o współczynnikach rzeczywistych, będący mianownikiem
transmitancji HB,N(jω). Wówczas A(−jω) = A*(jω) i iloczyn A(jω)A(−jω) = A(jω)A*(jω) = |A(jω)|2
jest zawsze równy wielomianowi L(ω2) = c0+c1ω2+c2ω4+...+cNω2N. Jeśli |HB,N(jω)|2 ma być ma-
ksymalnie płaskie, to wymagamy, aby spełniony był warunek
lim L( ω2 ) = 1 (6.41)
ω2 →0
Analogowe filtry Butterwortha i Czebyszewa 147

w maksymalnie płaskim sensie (wytłumaczenie poniżej). Zapiszmy funkcję L(x+h), gdzie


x = ω2, w postaci szeregu Taylora:
dL( x ) h k d k L( x )
L( x + h ) = L( x ) + h + ... + (6.42)
dx k! dx k
Wielomian L(x) dąży do jedności maksymalnie płasko dla x→0, kiedy jego pierwszych N po-
chodnych (pierwsza, druga, ..., N-ta) względem zmiennej x jest równych zero w punkcie x = 0.
Wymagamy więc od niego spełnienia następujących warunków:
d k L( x )
L(0) = 1, x =0 = 0 dla k≤N (6.43)
dx k
stąd
c0 = 1, c1 = c2 = ... = c N −1 = 0 (6.44)
skąd otrzymujemy
L ( ω2 ) = 1 + c N ω2 N (6.45)
Ponieważ dodatkowo chcemy, aby dla ω = 1 spełniony był warunek L(1) = 2 (trzydecybelowy
spadek |HB,N(jω)|2), mamy cN = 1. Ostatecznie:
L ( ω2 ) = 1 + ω 2 N (6.46)
Podstawiając do powyższego równania ω = s/j możemy go zapisać jako:
2N  e j ( 2 k −1) π / 2 N dla N parzystego
L( − s 2 ) = 1 + ( − s 2 ) N = ∏ ( s − sk ), sk =  j ( k −1) π / N (6.47)
k =1 e dla N nieparzystego

czyli wielomian L(−s2) ma 2N zer, leżących na okręgu jednostkowym |s| = 1. Wynika stąd, że
znormalizowana transmitancja dolnoprzepustowego filtra Butterwortha jest określona równa-
niem (6.39), w którym bieguny pk są równe zerom sk wielomianu L(−s2), leżącym w lewej pół-
płaszczyźnie.

Wzory projektowe
Załóżmy, że chcemy zaprojektować d o l n o p r z e p u s t o wy f i l t r B u t t e r wo r t h a , korzysta-
jąc ze znajomości wzoru na jego dolnoprzepustowy prototyp unormowany. Danymi wejścio-
wymi są wartości parametrów: ωpass, ωstop, δpass, δstop (patrz podrozdz. 6.1). Oznaczmy przez
ω3dB graniczną, trzydecybelową pulsację filtra, spełniającego nasze wymagania. Wówczas
1
H B, N ( j (ω / ω3dB ) ) = (6.48)
1 + ( ω / ω3dB )2 N

jest prototypem o unormowanej pulsacji granicznej równej ω/ω3dB = 1. Aby zaprojektować taki
filtr musimy wyznaczyć jego parametry N i ω3dB z układu równań
 1
 = 1 − δ pass
2N
 1 + ( ω pass / ω3dB )
 (6.49)
1
 = δ stop
 1 + (ω stop / ω3dB ) 2 N

148 Analogowe filtry Butterwortha i Czebyszewa

określających nasze wymagania projektowe, czyli wzmocnienie (1−δpass) dla pulsacji ωpass oraz
wzmocnienie δstop dla pulsacji ωstop. Znając N, czyli liczbę wymaganych biegunów pk, oraz
wiedząc, że leżą one na okręgu o promieniu ω3dB w lewej półpłaszczyźnie liczb zespolonych,
dokładnie znamy ich położenie. Na tej podstawie można łatwo wyznaczyć współczynniki wie-
lomianu mianownika transmitancji filtra, korzystając ze wzoru (6.39).
A więc po kolei. Obliczając 20log 10(.) z obu stron równania (6.49) otrzymujemy:

( )
 −10log10 1 + ( ω pass / ω3dB )2 N = 20log10 (1 − δ pass ) = − Apass

(6.50)

(
 −10log10 1 + ( ωstop / ω3dB )

2N
)
= 20log 10 (δ stop ) = − Astop

Następnie dzielimy obie strony równań przez −10 oraz wykorzystujemy je jako potęgę liczby
10 (10 log10(x) = x):
1 + (ω 2N A / 10
pass / ω0 ) = 10 pass
 Astop / 10
(6.51)
2N
 1 + (ω stop / ω0 ) = 10
Potem przenosimy jedynki na prawą stronę, dzielimy oba równania stronami i logarytmujemy
wynik dzielenia:
 ωstop   Astop / 10 − 1 
2 N log10   = log10  10  (6.52)
 ω pass   10 Apass / 10 − 1 
   
skąd ostatecznie otrzymujemy:
 10 Astop / 10 − 1  ω
N = M  , M = log10  A / 10  2 log (Ω ), Ω = stop
10 (6.53)
 10 pass −1  ω pass

gdzie „x” oznacza najbliższą liczbę naturalną większą od x (lub równą x). Znając N, w prosty
sposób obliczamy wartość parametru ω0, na przykład z równania (6.50):
ωstop
ω3dB = (6.54)
(10 )
Astop /10 1/ 2 N
−1

Ostatecznie bieguny transmitancji dolnoprzepustowego, unormowanego (ω3dB = 1 rd/s) filtra


Butterwortha są dane wzorem:

 π π π 
pk = e jφk = exp  j  + + (k − 1)   , k = 1, 2, 3,..., N (6.55)
  2 2N N 

gdzie: ∆φ = 2π/2N = π/N to kąt między dwoma kolejnymi biegunami, π/2 − pierwsza ćwiartka
okręgu, leżąca w prawej półpłaszczyźnie, ∆φ/2 = π/2N − połowa kąta, ponieważ biegun nie
może leżeć na osi urojonej, k∆φ = kπ/N − kąt k-tego bieguna. Oczywiście bieguny te leżą na
okręgu jednostkowym, ponieważ |pk| = 1. Natomiast bieguny filtra mającego pulsację ω3dB,
daną wzorem (6.54), leżą na okręgu o promieniu ω3dB:

 π π π 
pk = ω3dBe jφk = ω3dB exp  j  + + (k − 1)   , k = 1, 2, 3,...., N (6.56)
  2 2 N N 

W obu przypadkach transmitancja filtrów jest równa:


Analogowe filtry Butterwortha i Czebyszewa 149

N N
H B, N ( s ) = ∏ ( − pk ) ∏ ( s − pk ) (6.57)
k =1 k =1

gdzie stała w liczniku ma zapewnić zerowe wzmocnienie dla pulsacji ω = 0 i jest ona równa
±1, kiedy bieguny pk są dane wzorem (6.55).
Na rysunku 6.5 przedstawiono położenie biegunów unormowanego (ω3dB = 1 rd/s) dolno-
przepustowego filtra Butterwortha trzeciego i czwartego rzędu (N = 3 lub 4). Zmiana wartości
ω3dB wpływa jedynie na zmianę promienia okręgu, na którym są rozłożone bieguny, czyli na
miejsce gdzie bieguny przybliżają się do osi urojonej, natomiast rząd filtra jest związany z licz-
bą biegunów leżących w lewej półpłaszczyźnie zmiennej zespolonej s. Dolnoprzepustowy filtr
Butterwortha, w którym bieguny leżą na okręgu jednostkowym, nazywamy unormowanym.

Imag(s) Imag(s)
1 p1 1
p1

∆φ/2 ∆φ/2
∆φ/2 ∆φ/2
p2

∆φ ∆φ
p2 Real(s) Real(s)
∆φ ∆φ ∆φ/2 ∆φ/2
∆φ ∆φ 1 ∆φ/2 ∆φ/2 1
∆φ ∆φ
p 2*
∆φ/2 ∆φ/2
∆φ/2 ∆φ/2
*
p1
p1 *

Rys. 6.5. Położenie biegunów „³” unormowanego (ω0 = 1 rd/s), dolnoprzepustowego filtra Butterwortha
trzeciego i czwartego rzędu (N = 3 lub 4)

Powyższe rozważania dotyczyły zagadnienia projektowania dolnoprzepustowych (LP) filtrów


Butterwortha, spełniających wymagania {ωpass, ωstop, δpass, δstop}. Obecnie uogólnimy je na
wszystkie typy filtrów, czyli także na filtry górnoprzepustowe (HP), pasmowoprzepustowe
(BP) i pasmowozaporowe (BS). W przypadku filtrów HP również określa się {ωpass, ωstop, δpass,
δstop}, natomiast w przypadku filtrów BP i BS specyfikuje się {ωp1, ωp2, ωs1, ωs2, δp1, δp2,
δs1, δs2}. W celu dopasowania się do konwencji oznaczeń stosowanych w rozdziale 6.2 (trans-
formacje częstotliwości) załóżmy, że użytkownik podaje wartości pulsacji vpass, vstop, vp1, vp2,
vs1, vs2, oznaczenie ω jest zaś zarezerwowane dla pulsacji filtra LP. Kolejność postępowania
dla pozostałych filtrów jest następująca.

ALGORYTM 1. Projektowanie filtrów Butterwortha HP, BP i BS.

Krok 1. Określ swoje wymagania odnośnie filtra: podaj typ oraz pary wartości (vx, δx).
Krok 2. Transformuj wymagania (vx, δx) filtrów HP, BP lub BS na wymagania dla unormowa-
nego (ωpass = 1 rd/s) prototypu LP (ωx, δx), na przykład (vp1, δp1) → (ωp1, δp1) i (vs1,
δs1) → (ωs1, δs1), czyli przelicz zadane pulsacje vx na pulsacje ωx, stosując wzory
(6.18), (6.23), (6.31) odpowiednich transformacji częstotliwości z podstawieniami:
150 Analogowe filtry Butterwortha i Czebyszewa

(HP): ω0 = v pass , (BP)(BS): ω0 = v p1v p 2 , ∆ω = v p 2 − v p1

W wyniku tego pulsacje graniczne pasma przepustowego vpass (lub pasm przepusto-
wych vp1 i vp2) są przekształcane na ωpass = 1.
Krok 3. Przyjmij bardziej krytyczne wymagania projektowe:

( )
δ pass = min δ p1 , δ p 2 , δ stop = min ( δ s1 , δ s 2 ) , ωstop = min ( | ωs1 |, | ωs 2 |)

Przelicz δpass, δstop na Apass, Astop, stosując (6.50).


Krok 4. Zaprojektuj dolnoprzepustowy prototyp LP Butterwortha HLP(p)(s):
a) wykorzystując wyznaczone wartości parametrów, oblicz ze wzoru (6.53) rząd N
filtra HLP(p)(s), gwarantujący spełnienie wymagań {ωpass = 1, ωstop, Apass, Astop};
b) oblicz ze wzoru (6.54) pulsację ω3dB filtra HLP(p)(s);
c) znając N i ω3dB oblicz bieguny pk prototypu na podstawie wzoru (6.56);
d) wyznacz transmitancję filtra HLP(p)(s) ze wzoru (6.57).
Krok 5. Dokonaj transformacji częstotliwościowej filtra HLP(p)(s) na Hxx(s), stosując wzory
(6.19), (6.27), (6.35) z wartościami parametrów ω0 i ∆ω, takimi jak w kroku 2. Bie-
guny pn zostały wyznaczone w kroku 4c, w przypadku zaś prototypu Butterwortha
transmitancja HLP(p)(s) nie ma zer zm.

W programie Matlab istnieje gotowy program butter(...,’s’), służący do projektowania


analogowych filtrów LP, HP, BP i BS typu Butterwortha. Wykorzystuje on programy
buttord(...,’s’) i buttap(). Pierwszym z nich wyznacza się konieczny rząd filtra N,
drugim zaś projektuje analogowy prototyp Butterwortha rzędu N o pulsacji ω3dB = 1 rd/s.
Następnie w programie butter() przekształca się zaprojektowany prototyp LP na filtr LP,
HP, BP lub BS, wykonując transformację częstotliwości programami lp2lp(), lp2hp,
lp2bp() lub lp2bs(). W stosunku do zaprezentowanego wyżej podejścia w Matlabie pro-
jektuje się i dalej przekształca unormowany (ω3dB = 1 rd/s) filtr prototypowy LP Butterwortha
HLP(n)(s). Takie podejście wymaga modyfikacji algorytmu 1.

ALGORYTM 2. Projektowanie filtrów Butterwortha LP, HP, BP i BS w programie Matlab.

Krok 1 ÷ Krok 4b. Jak w algorytmie 1.


Krok 5. Oblicz trzydecydelowe pulsacje v3dB filtra Hxx(s), związane z pulsacją ω3dB filtra
HLP(p)(s), stosując wzory (6.15), (6.18), (6.23), (6.31):
(LP): v3dB = ω3dBv pass
v pass
(HP): v 3dB =
ω3dB

(BP): (1)
v3dB = 0,5  ω3dB ∆ω + (ω3dB )2 ( ∆ω)2 + 4ω02 
 

(2)
v3dB = 0,5  ω3dB ∆ω − (ω3dB )2 ( ∆ω)2 + 4ω02 
 
Analogowe filtry Butterwortha i Czebyszewa 151

(BS): (1)
v3dB =  ∆ω + ( ∆ω)2 + 4( ω3dB )2 ω02  ( −2ω3dB )
 
(2)
v3dB =  ∆ω − ( ∆ω)2 + 4( ω3dB )2 ω02  ( −2ω3dB )
 
Krok 6. Teraz następuje najważniejszy moment algorytmu. Znamy już N i ω3dB filtra prototypo-
wego HLP(p)(s), mającego ωpass = 1 rd/s, oraz pulsacje v3dB projektowanego filtra Hxx(s), odpo-
wiadające ω3dB. Jeśli jako filtr HLP(p)(s) wybierzemy filtr Butterwortha, to będzie on miał
bieguny pk (6.56) rozłożone na okręgu o promieniu ω3dB. Oczywiście filtr ten spełnia wyma-
gania projektowe w odniesieniu do s t r o m o ś c i z b o c z y p a s m p r z e j ś c i o wy c h . Jednak
spełnia je także unormowany (ω3dB = 1 rd/s) filtr Butterwortha HLP(n)(s), w którym bieguny leżą
na okręgu jednostkowym zgodnie ze wzorem (6.55), gdyż jest on liniowo przeskalowaną
w częstotliwości wersją filtra HLP(p)(s). W z wi ą z k u t y m p r o j e k t u j e m y f i l t r H L P ( n ) ( s )
(ω3dB = 1 rd/s), a nie HLP(p)(s) (ω3dB dane wzorem (6.54)), czyli wyznaczamy wartości biegunów
ze wzoru (6.55), a nie ze wzoru (6.56). W dalszej części algorytmu musimy przekształcić filtr
HLP(n)(s) na filtr Hxx(s) w taki sposób, aby jego ω3dB = 1 zostało transformowane na v3dB filtra
Hxx(s) (pulsacje wyznaczone w kroku 5).
Krok 7. W związku z powyższym dokonujemy transformacji częstotliwościowej filtra HLP(n)(s)
na Hxx(s), stosując wzory (6.15), (6.19), (6.27), (6.35) ze zmodyfikowanymi parametrami ω0
i ∆ω:
(LP)(HP): ω0 = v3dB

(BP)(BS): ω0 = | v3(1) (2) (1) (2) (1) (2)


dB || v 3dB |, ∆ω = max(| v 3dB |, | v 3dB |) − min(| v 3dB |, | v 3dB |)

Bieguny pn wyznaczono w kroku 6, a zer zm transmitancja HLP(n)(s) nie ma.

Obecnie zaprojektujemy kilka konkretnych filtrów analogowych wykorzystując algorytm 1


i jego implementację programową, zaprezentowaną w tabeli 6-2. Poświęcimy temu zagad-
nieniu więcej uwagi, ponieważ zdobyte doświadczenia okażą się potem bardzo przydatne pod-
czas projektowania filtrów cyfrowych.

Przykłady

Przykład 1 − Projekt obliczeniowy (bez transformacji częstotliwości − wzory (6.53), (6.54),


(6.56)).
Wymagania: filtr dolnoprzepustowy:
Apass = 2 dB; ωpass = 1 rd/s
Astop = 25 dB; ωstop = 3 rd/s
Obliczenia: N = 2,862530 = 3; R = ω0 = ω3dB = 1,0935045
∆φ = 2π/6; φ1 = π/2+∆φ/2 = 2π/3; φ2 = φ1+∆φ = π; φ3 = φ2+∆φ = 4π/3
bieguny (6.56): p1,2 = −0,546752±j0,947003; p3 = −1,0935045
1,0935045 ⋅ 1,195752
H LP ( s) =
( s + 1,0935045)( s 2 + 1,0935045s + 1,195752)
Rozłożenie biegunów transmitancji jest pokazane na rysunku 6.5a. Promień okręgu powinien
być równy R = ω0 = ω3dB = 1,0935045 a nie 1.
152 Analogowe filtry Butterwortha i Czebyszewa

Przykład 2 − Projekt obliczeniowy (bez transformacji częstotliwości − wzory (6.53), (6.54),


(6.56)).
Wymagania: filtr dolnoprzepustowy:
Apass = 0,5 dB, ωpass = 1 rd/s
Astop = 15 dB, ωstop = 2 rd/s
Obliczenia: N = 3,985681 = 4, R = ω0 = ω3dB = 1,300759
∆φ = 2π/8, φ1 = π/2+∆φ/2, φ2 = φ1+∆φ, φ3 = φ2+∆φ, φ4 = φ3+∆φ
bieguny (6.56): p1,2 = −0,497779±j1,201745, p2,3 = −1,201745±j0,497779
1,691974 ⋅ 1,691974
H LP ( s) = 2
( s + 0,995558s + 1,691974)( s 2 + 2,403489s + 1,691974)
Rozłożenie biegunów transmitancji jest pokazane na rysunku 6.5b, z tą różnicą, że promień
okręgu powinien być równy R = ω0 = ω3dB = 1,300759 a nie 1.

Przykład 3 − Projekt obliczeniowy (z transformacją częstotliwości)


Wymagania: filtr górnoprzepustowy:
Astop=20 dB; vstop= 1 rd/s
Apass=0,5 dB; vpass=2 rd/s
Obliczenia: transformacja częstotliwości: ωpass = 1; ωstop = 2
N = 4,83 = 5; R = ω0 = ω3dB = 1,2632
bieguny (6.55): p1,2 = −0,3090±j0,9511; p3,4 = −0,8090±j0,5878; p5 = −1
(n) 1
H LP ( s) = 5
s + 3,2361s + 5, 2361s + 5,2361s 2 + 3,2361s + 1
4 3

bieguny (6.56): p1,2 = −0,3903±j1,2014; p3,4 = −1,0219±j0,7425; p5 = −1,2632


( p) 3,2161
H LP (s) = 5
s + 4,0877 s + 8,3548s + 10,5537 s 2 + 8,2392s + 3,2161
4 3

filtr docelowy:
zera: z1,2,3,4,5=0
bieguny: p1,2 = −0,4893±j1,5058; p3,4 = −1,2809±j0,9306; p5 = −1,5833
s5
H HP ( s ) = 5
s + 5,1237 s + 13,126 s + 20,7824s 2 + 20,3363s + 9,9499
4 3

Rozłożenie zer i biegunów zaprojektowanej transmitancji HHP(s) oraz jej charakterystyka am-
plitudowo-częstotliwościowa są pokazane na rysunku 6.6a. Punkty zadanych wymagań proje-
ktowych są zaznaczone na charakterystyce za pomocą „o”. Jak widać filtr spełnia przyjęte za-
łożenia.

Przykład 4 − Projekt obliczeniowy (z transformacją częstotliwości)


Wymagania: filtr pasmowoprzepustowy:
vp1 = 2 rd/s; vp2 = 3 rd/s; Apass = 1,5 dB
vs1 = 1,5 rd/s; vs2 = 3,5 rd/s; Astop = 16 dB
Obliczenia: transformacja częstotliwości: ωpass = 1; ωstop = 1,7857
N = 3,92 = 4; R = ω0 = ω3dB = 1,1303
bieguny (6.55): p1,2 = −0,3827±j0,9239; p3,4 = −0,9239±j0,3827
(n) 1
H LP (s) = 4
s + 2,6131s + 3,4142s 2 + 2,6131s + 1
3

bieguny (6.56): p1,2 = −0,4325±j1,0443; p3,4 = −1,0443±j0,4325


Analogowe filtry Butterwortha i Czebyszewa 153

( p) 1,6322
H LP (s) =
s + 2,9536s + 4,3619s 2 + 3,7735s + 1,6322
4 3

filtr docelowy:
zera: z1,2,3,4 = 0
bieguny: p1,2 = −0,1710±j1,9734; p3,4 = −0,2615±j3,0177
p5,6 = −0,4751±j2,1871; p7,8 = −0,5691±j2,6197
H BP ( s ) = 1,6322 s 4 ( s8 + 2,9536s 7 + 28,3619 s 6 + 56,9385s 5 +
+ 269,9751s 4 + 341,6308s3 + 1021,0288s 2 + 637,9801s + 1296)
Rozłożenie zer i biegunów zaprojektowanej transmitancji HBP(s) oraz jej charakterystyka am-
plitudowo-częstotliwościowa są pokazane na rysunku 6.6b. Punkty zadanych wymagań projek-
towych są zaznaczone na charakterystyce za pomocą „o”. Jak widać filtr spełnia przyjęte zało-
żenia.

Przykład 5 − Projekt obliczeniowy (z transformacją częstotliwości)


Wymagania: filtr pasmowozaporowy:
vs1 = 2 rd/s; vs2 = 3 rd/s; Astop = 1,5 dB
vp1 = 1,5 rd/s; vp2 = 3,5 rd/s; Apass = 12 dB
Obliczenia: transformacja częstotliwości: ωpass = 1; ωstop = 1,6
N = 3,81 = 4; R = ω0 = ω3dB = 1,14198
bieguny (6.55): p1,2 = −0,3827±j0,9239; p3,4 = −0,9239±j0,3827
(n) 1
H LP (s) = 4
s + 2,6131s 3 + 3,4142s 2 + 2,6131s + 1
bieguny (6.56): p1,2 = −0,4370±j1,05505; p3,4 = −1,05505±j0,4370
( p) 1,7007
H LP (s) = 4
s + 2,9841s + 4,4525s 2 + 3,8917 s + 1,7007
3

filtr docelowy:
zera: z1,2 = −0,0003±j2,2913; z3,4 = 0,0003±j2,2913
z5,6 = −0,0000±j2,2910; z7,8 = 0,0000±j2,2915
bieguny: p1,2 = −0,2226±j1,6003; p3,4 = −0,4476±j3,2183
p5,6 = −0,6843±j1,8382; p7,8 = −0,9338±j2,5084
H BP ( s ) = ( s8 + 21s 6 + 165,4s 4 + 578,8s 2 + 759,7) ( s8 + 4,5765s 7 + 31,4721s 6 +
+ 86,1167s 5 + 284,74s 4 + 452,1128s3 + 867,4502s2 + 662,232s + 759,6914)
Rozłożenie zer i biegunów zaprojektowanej transmitancji HBS(s) oraz jej charakterystyka am-
plitudowo-częstotliwościowa są pokazane na rysunku 6.6c. Punkty zadanych wymagań proje-
ktowych są zaznaczone na charakterystyce za pomocą „o”. Jak widać filtr spełnia przyjęte za-
łożenia.
W celach poglądowych na rysunku 6.7 pokazano rozłożenie zer i biegunów oraz charaktery-
styki amplitudowe filtrów, zaprojektowanych przy następujących założeniach:
LP: fpass = 2000 Hz, fstop = 3000 Hz, Apass = 0,5 dB, Astop = 60 dB
HP: fstop = 2000 Hz, fpass = 3000 Hz, Apass = 0,5 dB, Astop = 60 dB
BP: fs1 = 1500 Hz, fp1 = 2000 Hz, fp2 = 3000 Hz, fs2 = 3500 Hz, Astop = 60 dB, Apass = 0,5 dB
BS: fp1 = 1500 Hz, fs1 = 2000 Hz, fs2 = 3000 Hz, fp2 = 3500 Hz, Astop = 60 dB, Apass = 0,5 dB
Rzędy N tych filtrów wynoszą odpowiednio: 20, 20, 14 i 17. Wszystkie filtry spełniają zało-
żenia projektowe oznaczone symbolem „o”.
154 Analogowe filtry Butterwortha i Czebyszewa

a) 1.5 0

20log10|H(jω)| [dB]
1
-5
0.5

Imag(s)
0 -10
-0.5
-15
-1
-1.5 -20
-1.6 -1.2 -0.8 -0.4 0 0 1 2 3 4 5
Real(s) ω [rd/s]

b) 3 0

20log10|H(jω)| [dB]
2
-5
1
Imag(s)

0 -10
-1
-15
-2
-3 -20
-0.6 -0.4 -0.2 0 0 1 2 3 4 5
Real(s) ω [rd/s]

c) 4 0
3
20log10|H(jω)| [dB]

2 -5
1
Imag(s)

0 -10
-1
-2 -15
-3
-4 -20
-1 -0.8 -0.6 -0.4 -0.2 0 0 1 2 3 4 5
Real(s) ω [rd/s]
Rys. 6.6. Rozłożenie zer „z” i biegunów „³” oraz charakterystyki amplitudowo-częstotliwościowe trans-
mitancji Hxx(s), zaprojektowanych w przykładach 3, 4 i 5: a) przykład 3 − filtr HP, b) przykład 4 − filtr BP,
c) przykład 5 − filtr BS

Tab. 6-2. Program w języku Matlab, służący do zaprojektowania transmitancji analogowych filtrów LP,
HP, BP i BS Butterwortha

% Ćwiczenie: Projektowanie transmitancji analogowych filtrów LP, HP, BP i BS Butterwortha

clear all; subplot(111);


% Podaj wymagania projektowe
typ = 1; % rodzaj filtra: 1 = LowPass, 2 = HighPass, 3 = BandPass, 4 = BandStop
apass = 1; % nieliniowość pasma przepustowego w dB („zwis”)
astop = 50; % tłumienie w paśmie zaporowym
% Podaj częstotliwości graniczne
if (typ==1) % FILTR DOLNOPRZEPUSTOWY
fpass = 1000; % częstotliwość pasma przepustowego odpowiadająca apass
fstop = 4000; % częstotliwość pasma zaporowego odpowiadająca astop
ws = fstop/fpass; % transformacja częstotliwości: s=s'/w0, w0=2*pi*fpass
end
Analogowe filtry Butterwortha i Czebyszewa 155

a) 3000 0

20log10|H(jω)| [dB]
2000 -20

Imag(s/(2π))
1000
-40
0
-60
-1000
-2000 -80
-3000 -100
-15000 -10000 -5000 0 1000 2000 3000 4000 5000
Real(s) f [Hz]

b) 3000 0

20log10|H(jω)| [dB]
2000 -20
Imag(s/(2π))

1000
-40
0
-60
-1000
-2000 -80
-3000 -100
-20000 -15000 -10000 -5000 0 1000 2000 3000 4000 5000
Real(s) f [Hz]

c) 4000 0
3000
20log10|H(jω)| [dB]

2000 -20
Imag(s/(2π))

1000 -40
0
-1000 -60
-2000 -80
-3000
-4000 -100
-4000 -3000 -2000 -1000 0 1000 2000 3000 4000 5000
Real(s) f [Hz]

d) 4000 0
3000
20log10|H(jω)| [dB]

2000 -20
Imag(s/(2π))

1000 -40
0
-1000 -60
-2000 -80
-3000
-4000 -100
-8000 -6000 -4000 -2000 0 1000 2000 3000 4000 5000
Real(s) f [Hz]
Rys. 6.7. Rozłożenie zer „z” i biegunów „³” oraz charakterystyki amplitudowo-częstotliwościowe przy-
kładowych, zaprojektowanych transmitancji Hxx(s): a) filtr LP, b) filtr HP, c) filtr BP, d) filtr BS

if (typ==2) % FILTR GÓRNOPRZEPUSTOWY


fstop = 2000; % częstotliwość pasma przepustowego odpowiadająca astop
fpass = 3000; % częstotliwość pasma zaporowego odpowiadająca apass
ws = fpass/fstop; % transformacja częstotliwości: s=w0/s', w0=2*pi*fpass
end
156 Analogowe filtry Butterwortha i Czebyszewa

if (typ==3) % FILTR PASMOWOPRZEPUSTOWY


fs1 = 1500; % dolna częstotliwość stop
fp1 = 2000; % dolna częstotliwość pass
fp2 = 3000; % górna częstotliwość pass
fs2 = 3500; % górna częstotliwość stop

ws1t = (fs1^2 - fp1*fp2) / (fs1*(fp2-fp1)); % transformacja częstotliwości


ws2t = (fs2^2 - fp1*fp2) / (fs2*(fp2-fp1)); % transformacja częstotliwości
ws = min( abs(ws1t), abs(ws2t) );
end
if (typ==4) % FILTR PASMOWOZAPOROWY
fp1 = 1500; % dolna częstotliwość filtra pasmowego
fs1 = 2000; % dolna częstotliwość filtra pasmowego
fs2 = 3000; % górna częstotliwość filtra pasmowego
fp2 = 3500; % górna częstotliwość filtra pasmowego

ws1t = (fs1*(fp2-fp1)) / (fs1^2 - fp1*fp2); % transformacja częstotliwości


ws2t = (fs2*(fp2-fp1)) / (fs2^2 - fp1*fp2); % transformacja częstotliwości
ws = min( abs(ws1t), abs(ws2t) );
end

% Przelicz decybele na wartość bezwzględną, np. 40 dB = 0.01


wzm_p = 10^(-apass/20);
wzm_s = 10^(-astop/20);

% Oblicz parametry pomocnicze


if( (typ==1) | (typ==2) )
vp = 2*pi*fpass;
vs = 2*pi*fstop;
f_ps = [fpass, fstop]; wzm_ps = [wzm_p, wzm_s]; wzmdB_ps = [-apass, -astop];
end
if( (typ==3) | (typ==4) )
vp = 2*pi*[ fp1 fp2 ];
vs = 2*pi*[ fs1 fs2 ];
vc = 2*pi*sqrt(fp1*fp2); % pulsacja środka
dv = 2*pi*(fp2-fp1); % szerokość filtra wokół vc
f_ps = [fp1,fp2,fs1,fs2];
wzm_ps = [wzm_p, wzm_p, wzm_s, wzm_s];
wzmdB_ps = [-apass, -apass, -astop, -astop];
end

% Oblicz parametry filtra: N i w0


% MATLAB: [N,w0] = buttord( 2*pi*fpass, 2*pi*fstop, -apass, -astop, 's' );
wp = 1;
N = ceil( log10( (10^(astop/10)-1) / (10^(apass/10)-1) ) / (2*log10(ws/wp)) )
w0 = ws / (10^(astop/10)-1)^(1/(2*N))
pause

% Oblicz bieguny transmitancji dolnoprzepustowego filtra prototypowego i jej współczynniki


% MATLAB: [z,p,k] = buttap(N); [b,a] = zp2tf(z,p,k);
dfi0 = (2*pi)/(2*N); % kąt „kawałka tortu”
fi = pi/2 + dfi0/2 + (0 : N-1)*dfi0; % kąty biegunów
p = w0*exp(j*fi); % bieguny
z = []; % zera
wzm = real( prod(-p) ); % wzmocnienie
a = poly(p); % bieguny --> wsp wielomianu mianownika A(z)
b = wzm; % wielomian licznika B(z)
z, p, b, a, pause
plot( real(p), imag(p), 'x' ); grid; title('Położenie biegunów');
xlabel('real'); ylabel('imag'); pause

% Porównaj z funkcjami Matlaba


[NN,ww0] = buttord( vp, vs, apass, astop, 's' );
blad_N = N-NN
pause
Analogowe filtry Butterwortha i Czebyszewa 157

% Oblicz charakterystykę częstotliwościową H(w)=B(w)/A(w)


w = 0 : 0.005 : 2; % zakres pulsacji unormowanej; pulsacja granicy pasma przepustowego = 1
H = freqs(b,a,w); % alternatywa: H = polyval( b,j*w)./polyval(a,j*w);
plot(w,abs(H)); grid; title('Moduł prototypu LPass'); xlabel('pulsacja [rad/sek]');
pause
plot(w,20*log10(abs(H))); grid; title('Moduł prototypu LowPass w dB');
xlabel('pulsacja [rad/sek]'); ylabel('dB'); pause

% Transformata częstotliwości filtra analogowego: prototyp unormowany --> wynikowy filtr


if (typ==1) [z,p,wzm] = lp2lpTZ(z,p,wzm,vp); end % LowPass to LowPass: s=s/w0
if (typ==2) [z,p,wzm] = lp2hpTZ(z,p,wzm,vp); end % LowPass to HighPass: s=w0/s
if (typ==3) [z,p,wzm] = lp2bpTZ(z,p,wzm,vc,dv); end % LowPass to BandPass: s=(s^2+wc^2)/(dw*s)
if (typ==4) [z,p,wzm] = lp2bsTZ(z,p,wzm,vc,dv); end % LowPass to BandStop: s=(dw*s)/(s^2+wc^2)
b=wzm*poly(z); a=poly(p);

% Pokaż zera i bieguny po transformacji częstoliwości


plot( real(z), imag(z), 'o',real(p),imag(p),'x' ); grid;
title('Położenie biegunów'); xlabel('real'); ylabel('imag'); pause
p, z, pause
a, b, pause
printsys(b,a,'s'); pause

% Końcowa charakterystyka częstoliwościowa


NF = 1000; % ile punktów
fmin = 0; % dolna częstotliwość
fmax = 5000; % górna częstotliwość
f = fmin : (fmax-fmin)/(NF-1) : fmax; % wszystkie częstotliwości
w = 2*pi*f; % wszystkie pulasacje
H = freqs(b,a,w); % alternatywa: H = polyval( b,j*w)./polyval(a,j*w);
plot( f,abs(H), f_ps,wzm_ps,'ro');
grid; title('Moduł'); xlabel('freq [Hz]'); pause
plot(f,20*log10(abs(H)), f_ps,wzmdB_ps,'ro'); axis([fmin,fmax,-100,20]);
grid; title('Moduł dB'); xlabel('freq [Hz]'); ylabel('dB'); pause
plot(f,unwrap(angle(H))); grid; title('FAZA'); xlabel('freq [Hz]'); ylabel('[rad]');
pause

6.4. Filtry Czebyszewa typu I


W przypadku filtra Czebyszewa typu I wymagamy, aby

( )
H CI , N j ( ω / ω 0 ) =
1
(6.58)
1 + ε C N2 (ω / ω 0 )
2

gdzie CN(ω/ω0) oznacza wielomian Czebyszewa N-tego rzędu:

cos[ N cos−1 (ω / ω0 ) ], ω / ω0 ≤ 1
C N ( ω / ω0 ) =  (6.59)
−1
cosh[ N cosh (ω / ω0 ) ], ω / ω0 > 1

Cechą charakterystyczną wielomianów Czebyszewa jest następująca zależność:


C N ( x ) ≤ 1 dla x ≤1

oraz szybki wzrost wartości dla x, leżącego poza przedziałem [−1, 1], co jest spowodowane
występowaniem funkcji exp(x) i exp(−x) w definicji funkcji kosinus hiperboliczny cosh(x). Na
rysunku 6.8a przedstawiono kształt funkcji Czebyszewa CN(x) dla kilku wartości parametru x.
158 Analogowe filtry Butterwortha i Czebyszewa

CN(x) N=3
1.5 N=2
1 N=1
0.5
0
-0.5
x
-1
0 0.2 0.4 0.6 0.8 1 1.2
Rys. 6.8a. Kształt funkcji Czebyszewa CN(x) (6.59) dla parametru N = 1, 2, 3, 4, 6 i 8

Dla dociekliwych. Przykładowo, wielomian Czebyszewa czwartego rzędu ma postać:


C4 ( x ) = 1 − 8 x 2 + 8 x 4
Wielomiany Czebyszewa można wyznaczyć z zależności rekurencyjnej:
C0 (Ω) = 1, C1 (Ω) = Ω, Cn (Ω) = 2ΩCn −1 (Ω) − Cn − 2 (Ω), n ≥ 2
lub analitycznej:
N / 2
N ( −1) k ( N − k − 1)!
C N ( Ω) =
2

k =0 k!( N − 2k )!
( 2Ω ) N − 2 k

We wzorach (6.58), (6.59) ω0 jest graniczną pulsacją pasma przepustowego, parametr ε kontro-
luje zaś oscylacje w paśmie przepustowym, tzn. w przedziale [0, ω0] k wa d r a t c h a r a k t e r y -
s t y k i a m p l i t u d o we j oscyluje pomiędzy wartościami 1/(1+ε2) a 1. Dla ω = ω0 zawsze ma-
my CN2(ω/ω0) = 1 i H(ω/ω0) = 1/(1+ε2), dlatego zazwyczaj zadaje się pożądaną wartość para-
metru ε (nieliniowość pasma przepustowego) i przyjmuje się ω0 = ωpass (czyli szerokość tego
pasma). Jeśli jednak zamiast ε, specyfikuje się wartość parametru δpass, zdefiniowanego w spo-
sób następujący:
1 1
= = 1 − δ pass (6.60)
1 + ε C N ( ω pass / ω pass )
2 2
1 + ε2

to wówczas ε wyraża się za pomocą Apass = 20log10(1−δpass) (obliczamy 20log10(.) z obu stron
powyższego równania i przekształcamy go dalej):

− 10 log10 (1 + ε 2 ) = 20 log10 (1 − δ pass ) = − Apass

log10 (1 + ε 2 ) = Apass / 10
Apass / 10
1 + ε2 = 10
Apass / 10
ε = 10 −1 6.61)

Wymagany rząd filtra oblicza się natomiast, zakładając określoną wartość tłumienia δstop
w wybranym punkcie pasma zaporowego ωstop:
1 1
= = δ stop (6.62)
{ }
2
C N2 (ωstop 2
1+ ε / ω pass )
(
1 + ε2 cosh  N cosh −1 ωstop / ω pass 
 )
Analogowe filtry Butterwortha i Czebyszewa 159

Imag(s) Imag(s)
p1 p1

∆φ/2 ∆φ/2

∆φ/2 ∆φ/2 p2

∆φ ∆φ
p2 ∆φ ∆φ
∆φ Real(s) ∆φ Real(s)

∆φ ∆φ R2 R1 R2 R1
∆φ ∆φ
∆φ/2 ∆φ/2 p2 *

∆φ/2 ∆φ/2
*
p1 p 1*

Rys. 6.8b. Graficzna ilustracja wyznaczania położenia biegunów „³” dolnoprzepustowego filtra Czeby-
szewa typu I trzeciego i czwartego rzędu (N = 3 lub 4)

skąd po uwzględnieniu (6.61) otrzymujemy (−Astop = 20log10(δstop)):


cosh −1 

(10 Astop /10
−1 ) (10 Apass /10
)
−1 

N =  M  , M = (6.63)
(
cosh −1 ωstop ω pass )
gdzie „x” oznacza najbliższą liczbę naturalną większą od x (lub równą x).
Znając ε (6.61), N (6.63) i podstawiając ω0 = ωpass, można zsyntezować transmitancję, mającą
charakterystykę amplitudowo-częstotliwościową, określoną przez parą równań (6.58), (6.59).
Jest to szczególnie proste, jeśli się skorzysta ze znajomości projektowania filtrów Butterwor-
tha. Można bowiem wykazać (my niestety tego nie zrobimy), że bieguny filtra Czebyszewa
typu I leżą na elipsie, powstałej z dwóch okręgów (analogia do filtrów Butterwortha). Promie-
nie tych okręgów wynoszą:
R1 = sinh( D ) (okrąg wewnętrzny) (6.64a)
R2 = cosh( D ) (okrąg zewnętrzny) (6.64b)
gdzie
sinh −1 ( ε −1 )
D= (6.65)
N
Cóż należy zatem zrobić? Nic prostszego. Podobnie jak w przypadku filtrów Butterwortha na-
leży wyznaczyć kąty N biegunów, leżących w lewej półpłaszczyźnie płaszczyzny zespolonej:
π π π
φk = + + k , k = 0,1, 2,..., N − 1 (6.66)
2 2N N
następnie rozłożyć te bieguny na dwóch okręgach, po N na każdym:
pk( R1) = R1e jφk , pk( R 2) = R2 e jφk , k = 0, 1, 2,..., N − 1 (6.67)
(R1) (R2)
a potem na podstawie biegunów pk i pk utworzyć nowe, tym razem „wynikowe” bieguny
pk:
pk = Re{ pk( R1) }+ j Im{ pk( R 2 ) } (6.68)
160 Analogowe filtry Butterwortha i Czebyszewa

czyli z pierwszych „pobrać” tylko część rzeczywistą, a z drugich − część urojoną. Na rysunku
6.8b pokazano sposób konstrukcji biegunów filtra Czebyszewa typu I. Znając położenie biegu-
nów, znamy także postać wielomianu mianownika transmitancji. Kończąc projektowanie filtra,
nie należy zapomnieć o uwzględnieniu w liczniku transmitancji odpowiedniej stałej skalującej,
np. równej iloczynowi N zanegowanych biegunów, czyli ∏(−pk) dla N nieparzystego, oraz
równej 10−0,05Apass⋅∏(−pk) dla N parzystego:
 −0,05 Apass N
 10 ∏ ( − pk ), N parzyste
I H0  k =1
H C ,N ( s) = N , H0 =  (6.69)
N
∏ ( s − pk ) 
 ∏ ( − pk ), N nieparzyste
k =1  k =1

Tab. 6-3. Program w języku Matlab, służący do zaprojektowania transmitancji filtrów LP, HP, BP i BS
Czebyszewa typu I

% Ćwiczenie: Projektowanie transmitancji analogowych filtrów LP, HP, BP i BS Czebyszewa typu I

% ... to samo co w tabeli 6-2 (projektowanie filtrów Butterwortha)

% Wyznacz bieguny dolnoprzepustowego filtra prototypowego

wp = 1;
Nreal = acosh(sqrt((10^(astop/10)-1) / (10^(apass/10)-1))) / acosh(ws/wp)
N = ceil( Nreal )
pause

epsi=sqrt(10^(apass/10)-1);
D=asinh(1/epsi)/N;
R1=sinh(D)
R2=cosh(D)
pause

dfi0 = (2*pi)/(2*N); % kąt „kawałka tortu”


fi = pi/2 + dfi0/2 + (0 : N-1)*dfi0; % kąty biegunów
p1 = R1*exp(j*fi); % bieguny na R1
p2 = R2*exp(j*fi); % bieguny na R2
p = real(p1) + j*imag(p2); % bieguny wypadkowe
z = []; % zera
wzm = prod(-p); % wzmocnienie

a = poly(p); % bieguny --> wsp wielomianu mianownika A(z)


b = wzm; % wielomian licznika B(z)
if (rem(N,2)==0) b = b*10^(-apass/20); end

p, b, a, pause

% Porównaj z funkcjami Matlaba


[NN,ww0] = cheb1ord( vp, vs, apass, astop, 's' );
blad_N = N-NN
pause

% Zera/bieguny prototypu
plot( real(p), imag(p), 'xb' ); grid; title('Położenie biegunów');
xlabel('real'); ylabel('imag'); pause

% ... to samo co w tabeli 6-2 (projektowanie filtrów Butterwortha)


Analogowe filtry Butterwortha i Czebyszewa 161

Przykład
Obecnie zaprojektujemy filtr Czebyszewa typu I, spełniający identyczne wymagania jak filtr
Butterwortha z przykładu 4 w rozdziale 6.3, wykorzystując program z tablicy 6-3. Zastosujemy
identyczną metodologię przekształcenia częstotliwościowego prototypu LP jak poprzednio.
Wymagania: filtr pasmowoprzepustowy
vp1 = 2 rd/s; vp2 = 3 rd/s; Apass = 1,5 dB
vs1 = 1,5 rd/s; vs2 = 3,5 rd/s; Astop =16 dB
Obliczenia: transformacja częstotliwości: ωpass = 1; ωstop = 1,7857
N = 2,504 = 3; R1 = 0,4201; R2 = 1,0847
bieguny R1: p1,2 = −0,2101±j0,3638; p3 = −0,4201
bieguny R2: p1,2 = −0,5423±j0,9393; p3 = −1,0847
bieguny: p1,2 = −0,2101±j0,9393; p3 = −0,4201
( p) 0,38923
H LP (s) = 3
s + 0,84022s 2 + 1,103s + 0,38923
filtr docelowy:
zera: z1,2,3 = 0
bieguny: p1,2 = −0,08523±j2,02230; p3,4 = −0,12482±j2,96165
p5,6 = −0,21006±j2,44047
0,38923s3
H BP ( s ) = 6
s + 0,84022s + 19,103s + 10,4719s3 + 114,6179s 2 + 30,2481s + 216
5 4

Rozłożenie zer i biegunów transmitancji prototypowej HLP(p)(s) i docelowej transmitancji


HBP(s) oraz ich charakterystyki częstotliwościowe są pokazane na rysunku 6.9. Punkty zada-
nych wymagań projektowych są zaznaczone na charakterystyce za pomocą „o”. Jak widać filtr
spełnia przyjęte założenia. Zwróćmy także uwagę na fakt, że zaprojektowany filtr Czebyszewa
typu I ma mniejszy rząd niż filtr Butterwortha spełniający te same wymagania projektowe.

6.5. Filtry Czebyszewa typu II


Filtry Czebyszewa typu II nie mają oscylacji w paśmie przepustowym, tylko w paśmie zaporo-
wym. Ponieważ w paśmie tym sygnał jest silnie tłumiony, kształt tego pasma ma dla nas dru-
gorzędne znaczenie. Dla filtrów tych charakterystyka częstotliwościowa dolnoprzepustowego
prototypu analogowego jest dana równaniem:
1
H CII, N ( j (ω / ω0 ) ) = (6.70)
1
1+
γ 2C N2 ( ω0 / ω)

Jego pasmo zaporowe rozciąga się od Ω = ω/ω0 = 1 do Ω = ∞ oraz


1
γ= (6.71)
Apass / 10
10 −1
Transmitancja tego prototypu jest równa:
N
∏ ( s − 1/ zk ) N zk
k =1
H CII, N ( s ) = H 0 N
, H0 = ∏ (6.72)
p
k =1 k
∏ ( s − 1/ pk )
k =1
162 Analogowe filtry Butterwortha i Czebyszewa

a) filtr prototypowy HLP(p)(s)


1.5 0

20log10|HLP(p)(jω)| [dB]
1 -5
0.5 -10
Imag(s)
0
-15
-0.5
-1 -20
-1.5 -25
-0.5 -0.4 -0.3 -0.2 -0.1 0 0 0.5 1 1.5 2
Real(s) ω [rd/s]

b) filtr HBP(s)
3 0
2 -2
-4

Φ(jω) [rd]
1
Imag(s)

0 -6
-1 -8
-2 -10
-3 -12
-0.25 -0.2 -0.15 -0.1 -0.05 0 0 1 2 3 4 5
Real(s) ω [rd/s]

1 0
20log10|HBP(jω)| [dB]

0.8
-20
|HBP(jω)|

0.6
0.4
-40
0.2
0 -60
0 1 2 3 4 5 0 1 2 3 4 5
ω [rd/s] ω [rd/s]
Rys. 6.9. Rozłożenie zer „z” i biegunów „³” transmitancji prototypowej HLP(p)(s) Czebyszewa typu I
i zaprojektowanej transmitancji HBP(s) oraz ich charakterystyki częstotliwościowe

gdzie N jest dane wzorem (6.63), „bieguny” pk są zdefiniowane wzorem (6.68), „zera” zk są zaś
równe jsin(φk), gdzie kąt φk jest określony wzorem (6.66).

Przykład
Obecnie zaprojektujemy filtr Czebyszewa typu II, spełniający identyczne wymagania jak filtr
Butterwortha z przykładu 5 w rozdziale 6.3. Zastosujemy identyczną metodologię przekształ-
cenia częstotliwościowego prototypu LP jak poprzednio. Zaprezentowane wyniki zostały
wygenerowane przez specjalnie napisany program komputerowy, przedstawiony w tablicy 6-4.
W celach poglądowych pokazano wartości zk, 1/zk i H0 otrzymywane podczas obliczeń.
Wymagania: filtr pasmowozaporowy
vs1=2 rd/s; vs2 = 3 rd/s; Astop = 1,5 dB
vp1 = 1,5 rd/s; vp2 = 3,5 rd/s; Apass = 12 dB
Analogowe filtry Butterwortha i Czebyszewa 163

Obliczenia: transformacja częstotliwości: ωpass = 1; ωstop = 1,6


N = 2,367 = 3; R1 = 0,7413; R2 = 1,2448
bieguny R1: p1,2 = −0,3706±j0,6420; p3 = −0,7413
bieguny R2: p1,2 = −0,6224±j1,0780; p3 = −1,2448
bieguny pk: p1,2 = −0,3706±j1,0780; p3 = −0,7413
zera zk: z1,2 = ±j0,8660; z3 = j1,225*10−16
bieguny 1/pk: p1,2 = −0,28522±j0,82955; p3 = −1,34897
zera 1/zk: z1,2 = ±j1,1547; z3 = −j8,1656*1015
H0 : H0 = −j9,5342*10−17
( p) 0,77853s 2 + 1,038
H LP (s) = 3
s + 1,9194s 2 + 1,539s + 1,038
filtr docelowy:
zera: z1 = ±j2,05446; z2 = ±j2,44949; z3 = ±2,92048
bieguny: p1,2 = −0,1454±j1,96254; p3,4 = −0,22526±j3,04057
p5,6 = −0,37065±j2,42128
s 6 + 18,75s 4 + 112,5s 2 + 216
H BP ( s ) = 6
s + 1,4826s 5 + 19,8491s 4 + 18,7548s 3 + 119,0945s 2 + 53,3742s + 216

Rozłożenie zer i biegunów transmitancji prototypowej HLP(p)(s) i docelowej transmitancji


HBS(s) oraz ich charakterystyki częstotliwościowe są pokazane na rysunku 6.10. Punkty zada-
nych wymagań projektowych są zaznaczone na charakterystyce za pomocą „o”. Jak widać filtr
spełnia przyjęte założenia. Zwróćmy także uwagę na fakt, że zaprojektowany filtr Czebyszewa
typu II ma mniejszy rząd niż filtr Butterwortha spełniający te same wymagania projektowe.

Tab. 6-4. Program w języku Matlab, służący do zaprojektowania transmitancji filtrów LP, HP, BP i BS
Czebyszewa typu II

% Ćwiczenie: Projektowanie transmitancji analogowych filtrów LP, HP, BP i BS Czebyszewa typu II

% ... to samo co w tabeli 6-2 (projektowanie filtrów Butterwortha)


% Wyznacz bieguny dolnoprzepustowego filtra prototypowego

wp=1;
Nreal = acosh(sqrt((10^(astop/10)-1) / (10^(apass/10)-1))) / acosh(ws/wp)
N = ceil( Nreal )
pause

epsi=sqrt( 1 / (10^(astop/10)-1) );
D=asinh(1/epsi)/N;
R1=sinh(D)
R2=cosh(D)
pause

dfi0 = (2*pi)/(2*N); % kąt „kawałka tortu”


fi = pi/2 + dfi0/2 + (0 : N-1)*dfi0; % kąty biegunów
p1 = R1*exp(j*fi); % bieguny na R1
p2 = R2*exp(j*fi); % bieguny na R2
p = real(p1) + j*imag(p2) % bieguny wypadkowe
z = j*sin(fi)
pause

wzm = prod(-z)/prod(-p);
164 Analogowe filtry Butterwortha i Czebyszewa

a) filtr prototypowy HLP(p)(s)


1.5 0

20log10|HLP(p)(jω)| [dB]
1
-20
0.5
Imag(s)
0 -40
-0.5
-60
-1
-1.5 -80
-1.5 -1 -0.5 0 0 0.5 1 1.5 2
Real(s) ω [rd/s]

b) filtr HBS(s)
4 3
3 2
2
1

Φ(jω) [rd]
1
Imag(s)

0 0
-1 -1
-2
-3 -2
-4 -3
-0.4 -0.3 -0.2 -0.1 0 0 1 2 3 4 5
Real(s) ω [rd/s]

1 0
20log10|HBS(jω)| [dB]

0.8 -10
|HBS(jω)|

0.6 -20
0.4 -30
0.2 -40
0 -50
0 1 2 3 4 5 0 1 2 3 4 5
ω [rd/s] ω [rd/s]
Rys. 6.10. Rozłożenie zer „z” i biegunów „³” transmitancji prototypowej HLP(p)(s) Czebyszewa typu II
i zaprojektowanej transmitancji HBS(s) oraz ich charakterystyki częstotliwościowe

z=1./z % podstawowa różnica w stosunku


p=1./p % do filtrów Czebyszewa typu I
pause
b = wzm*poly(z) % wielomian licznika B(z)
a = poly(p) % bieguny --> wsp wielomianu mianownika A(z)
pause
printsys(b,a,'s'), pause

% Porównaj z funkcjami Matlaba


[NN,ww0] = cheb2ord( vp, vs, apass, astop, 's' );
blad_N = N-NN, pause

% Zera/bieguny prototypu)
plot( real(p), imag(p), 'xb' ); grid; title('Położenie biegunów');
xlabel('real'); ylabel('imag'); pause

% ... to samo co w tabeli 6-2 (projektowanie filtrów Butterwortha)


Analogowe filtry Butterwortha i Czebyszewa 165

6.6. Sprzętowa implementacja filtrów analogowych


W tym rozdziale projektowaliśmy już specyficzne transmitancje H(s) układów analogowych.
Jednak jeszcze nie umiemy praktycznie realizować ich „sprzętowo”, to znaczy za pomocą pa-
sywnych lub aktywnych układów RLC. Przykładową analizę transmitancyjną i częstotliwoś-
ciową wybranych, najprostszych układów (filtrów) RLC przeprowadziliśmy już w rozdziale
piątym. Przypomnijmy, w rachunku operatorowym impedancja elementów R, L, C, czyli stosu-
nek transformaty Laplace’a U(s) napięcia u(t) na elemencie do transformaty Laplace’a I(s) prą-
du i(t) płynącego przez ten element, jest następująca:
U R (s) U ( s) U ( s) 1
Z R ( s) = = R, Z L ( s ) = L = sL, Z C ( s ) = C = (6.73)
I R ( s) I L ( s) I C ( s ) sC
Obecnie naszym zadaniem jest takie połączenie różnych elementów R, L, C, aby stosunek
transformaty Uwy(s) napięcia wyjściowego uwy(t) otrzymanego układu do transformaty Uwe(s)
napięcia wejściowego uwe(t) tego układu był równy zaprojektowanej transmitancji H(s):
U wy ( s )
= H ( s ) = f ( R, L, C ) (6.74)
U we ( s )

Zadanie to oraz jego najprostsze rozwiązania przedstawiono na rysunku 6.11. Jak już wiemy
z powyższych przykładów obliczeniowych, w praktyce musimy umieć zrealizować sprzętowo
wielomiany zmiennej s wysokich rzędów. Problem ten rozwiązuje się w ten sposób, że „roz-
pracowuje” się dokładnie układy realizujące wielomiany (transmitancje) niskich rzędów, naj-
częściej pierwszego i drugiego, a następnie łączy się je kaskadowo, zakładając, że poszcze-
gólne stopnie wzajemnie się nie obciążają. Z tego ostatniego powodu preferuje się nie pasywne
układy RLC tylko aktywne układy RC ze wzmacniaczami operacyjnymi. Z zastosowania cewek
(indukcyjności) L rezygnuje się natomiast z powodów technologicznych (duża wielkość,
ograniczony zakres wartości indukcyjności, a przede wszystkim niemożność uniknięcia rezys-
tancji pasożytniczej RL i uzyskania dużej dobroci cewki QL). Znacznie łatwiej jest wytworzyć
miniaturowe kondensatory o szerokich zakresie wartości pojemności. Na rysunku 6.12 są
przedstawione przykładowe struktury aktywnych, analogowych filtrów RC, zaproponowane
przez Sallena-Keya: układ dolnoprzepustowy pierwszego i drugiego rzędu oraz górnoprze-
pustowy pierwszego i drugiego rzędu.
Na rysunku 6.12 pod schematami ideowymi poszczególnych układów zostały podane wyraże-
nia na ich transmitancje, będące funkcjami wartości elementów R, L, C. Dla przykładu
wyprowadzimy teraz wzór na transmitancję H(s) filtra dolnoprzepustowego LP. W analogiczny
sposób otrzymuje się wyrażenie na transmitancję układu HP.
Analizowany układ jest przedstawiony na rysunku 6.13. Napięcia względem masy, występujące
w jego poszczególnych punktach (czyli właściwie ich potencjały elektryczne), są oznaczone
jako U. Dodatkowo niech IX(s) oznacza transformatę Laplace’a prądu płynącego przez element
X. Z prawa zachowania prądów wpływających do dowolnego węzła i z niego wypływających
mamy wówczas:
I R1 ( s ) = I R 2 ( s ) + I C 1 ( s ) (6.75)
gdzie
U we ( s ) − U1 ( s ) U ( s) − U 2 ( s ) U ( s ) − U wy ( s )
I R1 ( s ) = , I R 2 ( s) = 1 , I C1 ( s ) = 1 (6.76)
R1 R2 1 / sC1
166 Analogowe filtry Butterwortha i Czebyszewa

funkcja U wy ( s )
uwe(t) elementów uwy(t) Uwe(s) H ( s) = Uwy(s)
U we ( s )
R, L, C

R R sL

Uwe(s) 1/sC Uwy(s) Uwe(s) 1/sC Uwy(s)

1 sC 1 / RC 1 sC 1 / LC
H ( s) = = H ( s) = = 2
R + 1 sC s + 1 / RC R + sL + 1 sC s + ( R / L ) s + 1 / LC

Rys. 6.11. Graficzna ilustracja problemu projektowania układów analogowych o zadanej transmitancji H(s).
Przedstawione układy są prostymi dzielnikami napięcia

a) filtr LP pierwszego rzędu b) filtr HP pierwszego rzędu


R C

Uwe C Uwy Uwe R Uwy

1 RC s
H ( s) = H ( s) =
s + 1 RC s + 1 RC

c) filtr LP drugiego rzędu d) filtr HP drugiego rzędu


C1 R1

C1 C2
R1 R2

Uwe Uwe R2
C2 Uwy Uwy

RB RB
RA RA

K R1 R2 C1C 2 Ks 2
H ( s) = H (s) =
 1 1 1− K  1  1 1 1− K  1
s2 +  + + s + R R C C s2 +  + + s +
 R1C1 R2 C1 R2 C 2  1 2 1 2  R 2 C 2 R 2 C1 R1C1  R1 R 2 C1C 2

Rys. 6.12. Przykład realizacji układowych filtrów analogowych dolnoprzepustowych (LP) oraz górnoprze-
pustowych (HP) pierwszego i drugiego rzędu (struktury Sallena-Keya). Filtry wyższych rzędów uzyskuje się
poprzez kaskadowe połączenie filtrów rzędów 1 i 2. Impedancja wyjściowa każdego układu jest bardzo mała
(zależna od typu wzmacniacza operacyjnego) i umożliwia łączenie kaskadowe poszczególnych stopni.
W przypadku a) i b) wzmacniacz operacyjny pracuje jako prosty wtórnik napięcia, zapewniający małą
impedancję wyjściową całego układu
Analogowe filtry Butterwortha i Czebyszewa 167

C1

R1 R2 U2
Rx
Uwe U1 C2 '
Uwy Ry Uwy
U3
RB
RA

Rys. 6.13. Schemat układu realizującego filtr dolnoprzepustowy drugiego rzędu z korekcją wzmocnienia

Ponieważ wzmacniacz operacyjny ma bardzo duże wzmocnienie a na jego wyjściu jest skoń-
czone napięcie, to różnica napięć na jego wejściu jest bardzo mała. W związku z tym napięcia
U2 i U3 są równe, skąd wynika, że:
R A + RB
U wy ( s ) = U 2 (s) (6.77)
RA
Dodatkowo napięcia U1 i U2 są ze sobą związane następującą zależnością:
1 / sC2
U 2 ( s) = U1 ( s ) (6.78)
R2 + 1 / sC2
Ze wzorów (6.77) i (6.78) otrzymujemy zależność wiążącą napięcia U2 i U1 z napięciem Uwy:
RA
U 2 ( s) = U wy ( s ) (6.79)
R A + RB
R2 + 1 / sC2 R + 1 / sC2 R A
U1 ( s ) = U 2 ( s) = 2 U wy ( s ) (6.80)
1 / sC2 1 / sC2 R A + RB
Po podstawieniu (6.79) i (6.80) do (6.76) i uwzględnieniu równości (6.75) otrzymujemy
zależność napięcia Uwy od Uwe, a w następnym kroku transmitancję układu H(s):
1
U wy ( s ) R1R2C1C2
H ( s) = =K (6.81)
U we ( s )  1 1 1− K  1
s2 +  + +  s +
 R1C1 R2C1 R2C2  R1R2C1C2

gdzie
R A + RB R
K= = 1+ B (6.82)
RA RA
Po przyjęciu równości R1 = R2 i C1 = C2 transmitancja (6.81) jest równa:
1
H ( s) = K R C2 2
(6.83)
3 − K 1
s2 + s+ 2 2
RC RC
Załóżmy, że za pomocą układu o transmitancji (6.83) chcemy praktycznie zrealizować trans-
mitancję Hteor(s), daną wzorem (b0 = a0):
168 Analogowe filtry Butterwortha i Czebyszewa

b0 a0
H teor ( s ) = G 2
=G 2
(6.84)
a2 s + a1s + a0 a2 s + a1s + a0
wówczas muszą zachodzić następujące równości:
3− K 1
a2 = 1, a1 = , a0 = 2 2 (6.85a, b, c)
RC RC
Jeśli arbitralnie wybierzemy wartość pojemności C, to wówczas z (6.85c) mamy:
1
R= (6.86)
C a0

a z (6.85b) po uwzględnieniu (6.86) otrzymujemy:


3− K 3− K
a1 = = (6.87)
RC 1/ a0
skąd
a1  R  a RB a
3− K = ⇒ 3 − 1 + B  = 1 ⇒ =2− 1 (6.88)
a0  R A a0 RA a0

Z porównania równań (6.81) i (6.84) wynika, że zrealizowany układ ma wzmocnienie K, zde-


terminowane przez warunek (6.88) i zależne od wartości współczynników a0 i a1, podczas gdy
układ teoretyczny ma wzmocnienie G. Należy więc na wyjściu zaprojektowanego układu do-
datkowo dołączyć korektor, składający się z rezystancji Rx i Ry (patrz rysunek 6.13). Wartości
tych rezystancji muszą być tak dobrane, aby:
Ry
K =G (6.89)
Rx + R y

Dodatkowo dołączenie dzielnika napięcia wyjściowego powoduje, że mamy teraz wpływ na


wartość impedancji wyjściowej całego układu (z dzielnikiem). Ponieważ na wyjściu wzma-
cniacza operacyjnego znajduje się „idealne” sterowane źródło napięcia o zerowej impedancji,
dlatego zwiera ono rezystancję Rx do masy i impedancja całego układu jest rezystancją równą:
Rx R y
Rwy = (6.90)
Rx + R y

Po zadaniu wartości K, G i Rwy, z równań (6.89), (6.90) otrzymujemy:


Ry G K
Rwy = Rx = Rx ⇒ Rx = Rwy (6.91)
Rx + R y K G

KR y = G (Rx + R y ) ⇒ R y =
G K
Rx = Rwy (6.92)
K −G K −G
Po przyjęciu wartości pojemności C oraz rezystancji RA i Rwy, równania (6.86), (6.88), (6.82),
(6.91), (6.92) służą nam kolejno do wyznaczenia wartości R, RB, K, Rx i Ry.
Oczywiście, istnieje wiele metod wyznaczania prądów i napięć występujących w układach ele-
ktrycznych, na przykład metoda potencjałów węzłowych. My staraliśmy się wybrać i zasto-
sować metodę najbardziej zrozumiałą dla mało „wtajemniczonych”.
Na koniec dla przykładu, w celach poglądowych, zaprojektujemy układ dolnoprzepustowego
filtra Butterwortha. Jego transmitancję H(s) wyznaczymy na podstawie wzorów z rozdz. 6.3,
Analogowe filtry Butterwortha i Czebyszewa 169

a do jej praktycznej realizacji użyjemy układów z rysunku 6.12a i 6.12c. Załóżmy, że jest to
filtr antyaliasingowy, przeznaczony do współpracy z przetwornikiem A/C dyskretyzującym w
czasie sygnał z częstotliwością fpr = 44100 Hz. Zgodnie z twierdzeniem o próbkowaniu filtr ten
powinien wyeliminować z sygnału składowe o częstotliwości większej lub równej 22050 Hz.
Dążąc do otrzymania filtra niskiego rzędu, nie stawiamy mu bardzo ostrych wymagań.
Obliczenia zrealizowano za pomocą programu komputerowego, przedstawionego w tabeli 6-5.

Przykład
Wymagania : filtr dolnoprzepustowy
Apass = 2 dB; fpass = 8000 Hz
Astop = 40 dB; fstop = 22050 Hz
Obliczenia: bezpośrednio ze wzorów z rozdziału 6.3 bez transformacji częstotliwości:
: ωpass = 2πfpass = 50 265,5 rd/s; ωstop = 2πfstop = 138 544,2 rd/s
N = 4,8066 = 5; ω3dB = R = 55156 rd/s
∆φ = 2π/10; φk = π/2+k∆φ/2; k = 1, 2, 3, 4, 5
bieguny (g): p1,2 = −17 044±j52 456,5; p3,4 = −44 622±j32420; p5 = −55156
3 042 184 930 ⋅ 3 042 184 930 ⋅ 55156
H (s) =
( s 2 + 34088,3s + 3 042 184 930)( s 2 + 89244,3s + 3 042 184 930)( s + 55156)

Na rysunku 6.14 jest pokazany rozkład biegunów oraz charakterystyki częstotli-


wościowe zaprojektowanej transmitancji H(s). Jak widać spełniają one założone
wymagania, oznaczone symbolem „o”. Należy zwrócić uwagę na fakt, że oś
urojona zmiennej zespolonej s została podzielona przez 2π i częstotliwość jest
na niej wyrażona w hercach.
Jak widać do praktycznej realizacji filtra potrzebujemy dwóch sekcji LP drugie-
go rzędu i jednej pierwszego rzędu (rysunek 6.15).
Przyjmujemy:C11 = C12 = C21 = C22 = C3 = C = 1 nF; R1A = R2A = RA = 10 kΩ; Rwy = 10 kΩ
R11 = R12 = R1; R21 = R22 = R2
Obliczenia: sekcja 1 (bieguny p1,2): R1 = 18,13 kΩ; R1B = 3,82 kΩ; K1 = 2,3820
sekcja 2 (bieguny p3,4): R2 = 18,13 kΩ; R2B = 3,82 kΩ; K2 = 1,3820
sekcja 3 (bieguny p5): R3 = 18,13 kΩ; K3 = 1
K = K1⋅K2⋅K3 = 3,2918; G = 1; Rx = 32,92 kΩ; Ry = 14,36 kΩ

Wyznaczone wartości rezystorów R1, R2, R3, R1B, R2B, Rx i Ry zazwyczaj nie należą do tzw.
typoszeregu dostępnego w sklepach RTV i z tego powodu muszą być zastąpione „najbliższy-
mi” rezystancjami, które są w sprzedaży.

Tab. 6-5. Program w języku Matlab, służący do zaprojektowania układu elektronicznego dolnoprze-
pustowego filtra Butterwortha

% Ćwiczenie: Zaprojektowanie układu elektronicznego dolnoprzepustowego filtra Butterwortha

% WYMAGANIA PROJEKTOWE
fpass = 8000; % częstotliwość pasma przepustowego odpowiadająca apass
fstop = 22050; % częstotliwość pasma zaporowego odpowiadająca astop
apass = 2; % nieliniowość pasma przepustowego w dB („zwis”)
astop = 40; % tłumienie w paśmie zaporowym
170 Analogowe filtry Butterwortha i Czebyszewa

12000
8000

Imag(s/(2π))
4000
0
-4000
-8000
-12000
-60000 -40000 -20000 0
Real(s)

0 0
20log10|H(jω)| [dB]

-20 -2

Φ(jω) [rd]
-40
-4
-60
-80 -6

-100 -8
0 20000 40000 0 20000 40000
f [Hz] f [Hz]
Rys. 6.14. Rozkład biegunów „³” oraz charakterystyka amplitudowo-częstotliwościowa i fazowo-często-
tliwościowa zaprojektowanego układu

C11 C21

R11 R12
R21 R22
R3 Rx
Uwe C12
C22
C3 Uwy
Ry
R1B
R1A R2B
R2A

1 pF 1 pF

R1 R1
R2 R2
R3 Rx
Uwe 1 pF
1 pF
1 pF Uwy
Ry
R1B
10 kΩ R2B
10 kΩ

Rys. 6.15. Przykład realizacji filtra dolnoprzepustowego piątego rzędu: (góra) schemat ogólny, (dół) sche-
mat uproszczony po przyjęciu wartości pewnych elementów (do wyznaczenia pozostają: R1, R2, R3, R1B, R2B,
R x, R y)
Analogowe filtry Butterwortha i Czebyszewa 171

% ZASTOSOWANIE FUNKCJI WBUDOWANYCH MATLABA


% [N,w0] = buttord( 2*pi*fpass, 2*pi*fstop, -apass, -astop, 's' );
% [z,p,k] = buttap(N);
% [b,a] = zp2tf(z,p,k);
wzm_p = 10^(-apass/20) % tłumienie pass -> wzmocnienie pass
wzm_s = 10^(-astop/20) % tłumienie stop -> wzmocnienie stop
pause % pauza
ws = fstop/fpass; % transformacja częstotliwości: s=s'/w0, w0=2*pi*fpass
vp = 2*pi*fpass; vs = 2*pi*fstop;
f_ps = [fpass, fstop]; wzm_ps = [wzm_p, wzm_s]; wzmdB_ps = [-apass, -astop];

disp('======= PROTOTYP ANALOGOWY =======')


wp = 1;
Nreal = log10( (10^(astop/10)-1) / (10^(apass/10)-1) ) / (2*log10(ws/wp))
N = ceil( Nreal )
w0 = ws / (10^(astop/10)-1)^(1/(2*N))
pause

% Oblicz bieguny filtra


% Bieguny --> współczynniki wielomianu mianownika A(z)
% Oblicz stałą w liczniku, taką aby H(0)=B(0)/A(0)=1
dfi0 = (2*pi)/(2*N); % kąt „kawałka tortu”
fi = pi/2 + dfi0/2 + (0 : N-1)*dfi0; % kąty biegunów
p = w0*exp(j*fi) % bieguny
z = [] % zera
wzm = real(prod(-p)) % wzmocnienie
pause
plot( real(p), imag(p), 'xb' ); grid; title('Położenie biegunów');
xlabel('real'); ylabel('imag'); pause

b = wzm; % wielomian licznika B(z)


a = poly(p); % bieguny --> wsp wielomianu mianownika A(z)
b, a, pause
printsys(b,a,'s'), pause

% Porównaj z funkcjami Matlaba


[NN,ww0] = buttord( vp, vs, apass, astop, 's' );
blad_N = N-NN, pause

% Oblicz charakterystykę częstotliwościową H(w)=B(w)/A(w)


w = 0 : 0.005 : 2; % zakres pulsacji unormowanej; pulsacja granicy pasma przepustowego = 1
H = freqs(b,a,w); % alternatywa: H = polyval( b,j*w)./polyval(a,j*w);
plot(w,abs(H)); grid; title('Moduł prototypu LP'); xlabel('pulsacja [rad/sek]'); pause
plot(w,20*log10(abs(H))); grid; title('Moduł prototypu LowPass w dB');
xlabel('pulsacja [rad/sek]'); ylabel('dB'); pause

% Transformata częstotliwości filtra analogowego: prototyp unormowany --> wynikowy filtr


[z,p,wzm] = lp2lpTZ(z,p,wzm,vp); % LowPass to LowPass: s=s/w0
b=wzm*poly(z); a=poly(p);

% Pokaż zera i bieguny po transformacji częstoliwości


plot( real(z), imag(z), 'or',real(p),imag(p),'xb' ); grid;
title('Położenie biegunów'); xlabel('real'); ylabel('imag');
pause

disp('======= FILTR DOCELOWY PO TRANSFORMACJI FREQ =======')


z, p, pause
b, a, pause
printsys(b,a,'s'), pause

% Końcowa charakterystyka częstoliwościowa


NF = 1000; % ile punktów charakterystyki
fmin = 0; % dolna częstotliwość
fmax = 50000; % górna częstotliwość
172 Analogowe filtry Butterwortha i Czebyszewa

f = fmin : (fmax-fmin)/(NF-1) : fmax; % wszystkie częstotliwości


w = 2*pi*f; % wszystkie pulasacje
H = freqs(b,a,w); % alternatywa: H = polyval( b,j*w)./polyval(a,j*w);
plot( f,abs(H), f_ps,wzm_ps,'ro');
grid; title('Moduł'); xlabel('freq [Hz]'); pause
plot(f,20*log10(abs(H)), f_ps,wzmdB_ps,'ro'); axis([fmin,fmax,-100,20]);
grid; title('Moduł dB'); xlabel('freq [Hz]'); ylabel('dB'); pause
plot(f,unwrap(angle(H))); grid; title('FAZA'); xlabel('freq [Hz]'); ylabel('[rd]');
pause

disp('======= WZMACNIACZ RLC =======')


% Oblicz elementy układu ze wzmacniaczami operacyjnymi
p(1), p(2), p(4), pause
p1 = [ p(1) conj(p(1)) ];
p2 = [ p(2) conj(p(2)) ];
p3 = p(4);
aw1 = poly(p1), aw2 = poly(p2), aw3 = poly(p3), pause
C = 10^(-9); RA=10^4; Rwy = 10^4;

disp('=== Układ 1===')


a = aw1;
a2=a(1); a1=a(2); a0=a(3);
R = 1/(C*sqrt(a0))
RB = (2-a1/sqrt(a0)) * RA
K1 = 1+RB/RA
pause

disp('=== Układ 2 ===')


a = aw2;
a2=a(1); a1=a(2); a0=a(3);
R = 1/(C*sqrt(a0))
RB = (2-a1/sqrt(a0)) * RA
K2 = 1+RB/RA
pause

disp('=== Układ 3 ===')


a = aw3;
a1=a(1); a0=a(2);
R=1/(C*a0)
K3=1
pause

disp('=== Obciążenie ===')


K=K1*K2*K3
G=1
Rx = (K/G)*Rwy
Ry = (G/K)/(1-G/K)*Rx
pause
7
Dyskretyzacja
sygnałów analogowych

W rozdziale siódmym skrótowo przedstawiono zagadnienia związane z dyskretyzacją sygna-


łów analogowych. Ponieważ większość z nich jest szeroko opisana w powszechnie dostępnej
literaturze, skupiono się tylko na rzeczach najistotniejszych. Rozdział ten ma jedynie charakter
poglądowy i ma stanowić pomost pomiędzy światem „analogowym” i „cyfrowym”.

7.1. Podstawy
W związku z tym, że wartości parametrów elementów elektronicznych układów analogowych
(np. rezystancji i pojemności) zależą od wielu czynników (np. temperatury i wilgotności)
i zmieniają się w czasie (żargonowo: „starzeją się” materiałowo), funkcje realizowane przez te
układy nie są stałe w czasie. Obecnie więc powszechnie obserwuje się tendencję do coraz
szybszego „przechodzenia” z sygnałem do postaci cyfrowej i realizowanie funkcji przetwarza-
nia metodami cyfrowego przetwarzania sygnałów. Nie bez znaczenia jest także mniejszy
wpływ zakłóceń na sygnały przesyłane w postaci cyfrowej.
W tym miejscu pozwolę sobie na małą dygresję. Jako młody asystent, pracujący na uczelni
technicznej, wielokrotnie prowadziłem zajęcia laboratoryjne ze studentami i do pomiaru prze-
sunięcia fazowego metodą krzywych Lissajous wykorzystywałem wzorcowy generator RC. Sęk
w tym, że „wzorcowym” był on tylko z nazwy, gdyż po kilkunastu latach pracy wartości jego
elementów RC i generowane częstotliwości były już zupełnie inne.
Jak już było powiedziane w rozdziale pierwszym, wszystkie sygnały w uproszczeniu dzieli się
na sygnały: ciągłe i dyskretne („w czasie” i „w wartościach”) oraz na sygnały deterministyczne
i losowe. W dalszej części książki zajmować się będziemy wyłącznie analizą i przetwarzaniem
sygnałów dyskretnych „w czasie” o dowolnych wartościach, czyli sygnałów ciągłych czasu
dyskretnego. W ogólności proces przetwarzania sygnałów ciągłych na dyskretne składa się
z trzech operacji: próbkowania w czasie, kwantowania wartości oraz kodowania. Zwycza-
jowo sygnały, które są tylko spróbkowane w czasie, są nazywane sygnałami dyskretnymi (ang.
discrete-time), sygnały zaś dyskretne, które dodatkowo są poddane kwantyzacji przyjmowa-
nych wartości i kodowaniu − sygnałami cyfrowymi. Przybliżmy obecnie dokładniej zagadnie-
nia próbkowania w czasie i kwantyzacji sygnałów analogowych.
Operacja próbkowania (dyskretyzacji) sygnału w czasie polega na pobraniu z sygnału ciągłe-
go x(t) jego „próbek” w wybranych, najczęściej równoodległych, chwilach czasowych. Opera-
174 Dyskretyzacja sygnałów analogowych

a) ciągły b) spróbkowany (dyskretny w czasie)


1
1
x(t) x(n⋅∆t)
0,5 0,5

0 0

−0,5 −0,5 ∆t

−1 −1
0 0,1 0,2 0,3 0,4 0 0,1 0,2 0,3 0,4
t [s] t [s]

c) skwantowany (dyskretny w wartościach) d) spróbkowany i skwantowany (cyfrowy)


1 1
xq(n⋅∆t)
0,5 xq(t) 0,5

0 0

−0,5 −0,5
∆t

−1 −1
0 0,1 0,2 0,3 0,4 0 0,1 0,2 0,3 0,4
t [s] t [s]

Rys. 7.1. Przykład graficzny deskretyzacji sygnałów: a) sygnał ciągły „w czasie” i „w wartościach” x(t),
b) sygnał dyskretny „w czasie” i ciągły „w wartościach” x(n⋅∆t) = x(n) (spróbkowany „w czasie”), c) sygnał
ciągły „w czasie” i dyskretny „w wartościach” xq(t) (spróbkowany „w wartościach”, czyli skwantowany),
d) sygnał dyskretny „w czasie” (spróbkowany) i dyskretny „w wartościach” (skwantowany) xq(n⋅∆t), czyli
sygnał cyfrowy xq(n)

cja ta jest przedstawiona na rysunku 7.1b, który stanowi powtórzenie części rysunku 1.2.
Odległość „czasową” pomiędzy dwoma kolejnymi próbkami nazywa się okresem próbkowania
∆t, a jego odwrotność 1/∆t − częstotliwością próbkowania. Jeśli przez t0 oznaczymy dowolną
chwilę czasową, w której „spróbkowano” sygnał, wówczas zbiór próbek sygnału jest równy
{x(t0+n∆t), −∞ ≤ n ≤ ∞}. Dla t0 = 0 mamy {x(n∆t), −∞ ≤ n ≤ ∞}. Ponieważ okres próbkowania
jest znany, więc w praktyce najczęściej stosuje się zapis: {x(n)}, domyślnie zakładając, że
„indeks” czasu n zmienia się od minus do plus nieskończoności. Dalej upraszczając, często
opuszcza się oznaczenie „zbioru próbek” i mówi się o sygnałach dyskretnych x(n), y(n) czy
s(n). Z kontekstu wynika wówczas, czy mamy na myśli sygnał „w ogóle” jako zbiór jego
wszystkich próbek, czy konkretną próbkę sygnału w chwili czasowej o indeksie n. Oczywiście,
jeśli napiszemy x(n) = sin(2πf(n∆t)), wówczas x(n) może być utożsamiane z „przepisem” fun-
kcyjnym na wartość sygnału w dowolnej chwili czasowej n.
Z kolei kwantyzacja to sprowadzenie zbioru wartości, przyjmowanych przez sygnał x(t),
najczęściej nieskończonego zbioru liczb rzeczywistych, do jego skończonego podzbioru.
W jej wyniku powstaje sygnał xq(t), czyli sygnał ciągły przyjmujący tylko wartości z określo-
nego zbioru (rysunek 7.1c i 7.2). Kwantyzacja sygnału wynika z konieczności zastosowania
Dyskretyzacja sygnałów analogowych 175

xq xq

x x

Rys. 7.2. Charakterystyka przykładowego kwantyzatora sygnału analogowego: x(t) → xq(t): po lewej − ide-
alnego, po prawej − nieidealnego (występowanie nieliniowości i histerezy). Całe przedziały wartości przyj-
mowanych przez zmienną x mają tylko jednego reprezentanta xq

przetwornika analogowo-cyfrowego przed wprowadzeniem „danych” do komputera oraz z fak-


tu, że w komputerze wszystkie liczby, a więc także i „próbki” sygnału, są przechowywane
w określonej liczbie bitów (8, 16, 24, 32, 48, 64) w jednym z możliwych formatach zapisu.
Formaty te zaś mają ograniczoną precyzję i nie umożliwiają przedstawienia dowolnej liczby
rzeczywistej. Wybór określonego formatu oraz zapis liczby skwantowanej w tym formacie
nazywa się kodowaniem.
Jak już było powiedziane, sygnał ciągły równocześnie zdyskretyzowany „w czasie” i skwanto-
wany „w wartości” nosi nazwę sygnału cyfrowego xq(n) (rysunek 7.1d).

Dla dociekliwych. W tym miejscu należy zwrócić uwagę, że w powszechnym zastosowaniu


znajdują się także układy operujące na sygnałach zdyskretyzowanych tylko w osi argumentu
(przestrzennie), a nie w osi wartości. Ich przedstawicielem są przyrządy z przenoszeniem
ładunku (ang. CTD − Charge Transfer Devices), w szczególności przyrządy ze sprzężeniem
ładunkowym (ang. CCD − Charge-Coupled Devices). Przyrządy te stanowią realizację pamięci
analogowej izolowanych próbek sygnału (analogowych, a więc o wartościach nieskwantowa-
nych), z możliwością ich przesuwania metodą linii opóźniającej oraz przetwarzania. Najbar-
dziej znanym przyrządem CCD są kamery amatorskie i telewizyjne.

Wszystkie liczby w komputerze są zapisywane w dwóch formatach: stałoprzecinkowym lub


zmiennoprzecinkowym.
W formacie stałoprzecinkowym na dodatnią liczbę całkowitą przeznacza się określoną liczbę
bitów i zapisuje ją w systemie dwójkowym pozycyjnym bez znaku w następujący sposób:
N −1
x = bN −1 2 N −1 + ... + b2 2 2 + b1 21 + b0 = ∑ bi 2i ⇔ x = bN −1bN −2 ...b2 b1b0 (7.1)
i =0

gdzie bity bN−1, ..., b1, b0, przyjmują tylko dwie wartości ze zbioru {0, 1}. Wynika stąd, że na
N bitach można zapisać tylko 2N różnych liczb o wartościach od 0 do 2N−1 (przykładowo na
dwóch bitach b1b0 możemy zapisać tylko cztery liczby: 00, 01, 10, 11, czyli 0, 1, 2, 3), a więc
nieskończona liczba wszystkich możliwych wartości przyjmowanych przez sygnał musi być
przedstawiona za pomocą tylko 2N reprezentantów. Przyjmuje się wówczas, że reprezentanci ci
„pokrywają” cały zakres zmienności sygnału, czyli od xmin do xmax, wtedy „kwant” zakresu jest
równy ∆x = (xmax−xmin)/2N i numer przedziału k = 0, 1, 2, ..., N−1, oznacza, że wartość sygnału
znajduje się w przedziale k-tym, tzn. x∈[xmin+k∆x, xmin+ (k+1)∆x ). Oczywiście wartość x musi
176 Dyskretyzacja sygnałów analogowych

być liczbą naturalną (tzn. liczbą całkowitą nieujemną: 0, 1, 2,...), aby można ją było zapisać
według wzoru (7.1). A co z liczbami całkowitymi ujemnymi? Dla nich czasami stosuje
się konwencję zapisu: znak-moduł, poświęcając najstarszy bit bN−1 na reprezentację znaku:
bN−1 = 0 − oznacza liczbę dodatnią, bN−1 = 1 − liczbę ujemną:
0bN −2 ...b2b1b0 − liczba dodatnia lub zero
1bN −2 ...b2 b1b0 − liczba ujemna

W konwencji tej wartość liczby całkowitej (ujemnej lub dodatniej) jest dekodowana według
równania:
N −2
x = ( −1)bN −1 [bN − 2 2 N − 2 + ... + b2 22 + b1 21 + b0 ] = ( −1)bN −1 ⋅ ∑ bi 2i (7.2)
i =0

Przykład. Jeśli N = 8, to w zapisie znak-moduł liczby całkowite 5 i −6 oraz ich suma są odpo-
wiednio równe:
00000110 = (−1)0 ⋅ [ 22 + 21 ] = 6
+ 10000101 = (−1)1 ⋅ [ 22 + 20 ] = −5
------------------------------------------------------
10001011 = (−1)1 ⋅ [ 23 + 21 + 20 ] = −11
Jak widać problem z reprezentacją liczb całkowitych typu znak-moduł polega na tym, że suma
i różnica dwóch liczb tak zapisanych nie zawsze daje poprawny wynik, jeśli liczba wynikowa
jest także interpretowana jako znak-moduł. Aby zapis uwzględniał także liczby całkowite
ujemne i nie stwarzał kłopotów obliczeniowo-interpretacyjnych, najczęściej stosuje się tzw.
kod uzupełnień do dwóch U2. W kodzie tym liczby nieujemne są zapisywane na dolnych N−1
bitach a bN−1 = 0:
0bN −2 ...b2b1b0 − liczba dodatnia lub zero

natomiast liczby ujemne są otrzymywane przez zanegowanie wszystkich bitów odpowiadającej


im liczby dodatniej (największa negowana liczba dodatnia to 2N−1, czyli 1000...000) oraz doda-
~
nie binarne liczby 1 do ostatniej, tj. „najmłodszej”, pozycji wyniku negacji ( bk oznacza nega-
cję bitu bk):
~ ~ ~ ~~
bN −1bN −2 ...b2 b1b0 + 00.. 001 − liczba ujemna

Alternatywnie „kod” binarny liczby ujemnej można także wyznaczyć na podstawie kodu liczby
dodatniej. Należy wówczas przesuwać się od prawej do lewej strony zapisu bitowego aż do
pierwszej jedynki, a następnie zanegować wszystkie bity, które występują po niej. Liczby
ujemne w kodzie U2 także zawsze mają jedynkę na najstarszym bicie i po tym są odróżniane
od liczb dodatnich. Liczby zapisane w kodzie U2 są dekodowane w sposób następujący:
N −2
x = −bN −1 2 N −1 + bN −2 2 N −2 + ... + b2 2 2 + b1 21 + b0 = −bN −1 2 N −1 + ∑ bi 2i (7.3)
i =0

Przykład. Jeśli N = 8, to w kodzie U2 liczby całkowite 6 i −5 oraz ich suma są odpowiednio


równe:
Dyskretyzacja sygnałów analogowych 177

00000110 = 6 00000101 = 5 00000110 = 6


------------ + 11111011 = −5
11111010 ----------------------
+ 1 1|00000001 = −1
-----------------
11111011 = −5
Sekwencję bitów, odpowiadającą liczbie ujemnej −5, można zdekodować na podstawie (7.3)
w następujący sposób:
11111011 = −27 + 26 + 25 + 24 + 23 + 21 + 20 = −128 + (64+32+16+8+2+1) = −128+123 = −5
W końcowym wyniku dodawania liczb 6 i −5 nie uwzględnia się najstarszego bitu przeniesie-
nia (ang. carry).
Liczby całkowite zapisane w kodzie znak-moduł i U2 można także interpretować jako liczby
ułamkowe (ang. fractional):
b b b b b 
(ZM) x = bN −1bN −2 ...b2 b1b0 = ( −1)bN −1  N −2 + N −3 + N −4 ... + N1−2 + N0−1  (7.4)
 2 4 8 2 2 
bN −1 bN −2 bN −3 bN −4 b b
(U2) x = bN −1bN −2 ...b2 b1b0 = − + + + ... + N1−2 + N0−1 (7.5)
1 2 4 8 2 2
Liczby ułamkowe zapisane w kodach ZM i U2 leżą odpowiednio w przedziałach:

 1 1   1 
(ZM)  − 1 + N −1 , 1 − N −1  , (U2)  − 1, 1 − 2 N −1 
 2 2 

i są kwantowane z krokiem 1/(2N−1). Interpretacja ułamkowa liczb zapisanych w kodzie U2 jest


stosowana powszechnie w stałoprzecinkowych procesorach sygnałowych firmy Analog Devi-
ces, Motorola i Texas Instruments. W wyniku mnożenia dwóch takich liczb otrzymujemy licz-
bę, która nie ma większej wartości bezwzględnej niż liczby mnożone, nie wystąpi więc prze-
pełnienie akumulatorów. W ogólności można za pomocą N = K+M bitów zakodować w trybie
ZM lub U2 liczbę ułamkową mającą także część całkowitą:
M −2
x = ( −1)bM −1 [bM −2 2 M −2 + ... + b2 2 2 + b1 21 + b0 + b−1 2 −1 + b−2 2−2 + ... + b− K 2− K ] = (−1)bM −1 ⋅ ∑ bi 2i
i =− K
M −2
x = −bM −1 2 M −1 + bM −2 2 M −2 + ... + b1 21 + b0 + b−1 2 −1 + b−2 2 −2 + ... + b−K 2 −K = −bM −1 2 M −1 + ∑b 2
i=− K
i
i

Wartości parametrów K i M (czyli położenie przecinka) wybiera się w zależności od potrzeb


(przyjętej arytmetyki). Podczas dekodowania muszą być one znane.
Przykład. Jeśli N = 8, to zapisane w kodzie U2 (7.5) liczby ułamkowe 00000110 oraz
11111011 są odpowiednio równe:

 1 1  3
00000110 = 0 +  +  = +
 32 64  64
1 1 1 1 1 1  123 5
11111011 = −1 +  + + + + +  = −1 + =−
 2 4 8 16 64 128  128 128
178 Dyskretyzacja sygnałów analogowych

W drugim przypadku mamy także:


 1 1 1 1 1 1 1  5
11111011 = −00000101 = − 0 + 0 ⋅ + 0 ⋅ + 0 ⋅ + 0 ⋅ + 1 ⋅ + 0 ⋅ + 1 ⋅ =−
 2 4 8 16 32 64 128  128
Z kolei w zapisie zmiennoprzecinkowym, liczby rzeczywiste są przedstawiane jako:

x = ( −1) z ⋅ 2 c ⋅ m

gdzie „z” oznacza znak (równy 0 lub 1), „c” jest cechą (wykładnikiem, eksponentą), będącą bi-
narną liczbą całkowitą (ujemną lub dodatnią), a „m” reprezentuje mantysę, zapisywaną jako
dodatnia liczba ułamkowa (2−1 ≤ m <1). W standardzie IEEE SP (ang. Single Precision), czyli
w pojedynczej precyzji, na zapis liczby w pamięci komputera przeznacza się 32 bity, z których
pierwszy jest bitem znaku, następnych osiem stanowi p r z e s u n i ę t ą cechę, ostatnie 23 bity
reprezentują zaś mantysę:

x = z1 | c8( p ) | m23 ≡ bz | b7( c ) b6( c ) ...b0( c ) | b−( 1m ) b−( m2 ) ...b−( m23)


gdzie
c8( p ) = c + 127, − 126 ≤ c ≤ 127

Największa i najmniejsza liczba, które można w ten sposób zakodować, wynoszą 3,4⋅1038 oraz
1,18⋅10−38. W standardzie IEEE DP (ang. Double Precision), czyli w podwójnej precyzji, na
liczbę przeznacza się 64 bity: 1 na znak, 11 na cechę i 52 na mantysę. Wówczas:

c11( p ) = c + 1023, − 1022 ≤ c ≤ 1023

Przykład. Załóżmy, że następująca sekwencja 32 bitów reprezentuje liczbę zmiennoprzecin-


kową zakodowaną zgodnie ze standardem IEEE SP (podkreślono bity cechy oraz wytłuszczono
bity mantysy):
10110000 | 010100000 | 00000000 | 00000000
Wynika stąd, że:
z =1
c ( p ) = 01100000 = 2 6 + 25 = 64 + 32 = 96, c = c ( p ) − 127 = −31
1 1 1 1 5
m = 10100000000000000000000 = 1 + 3 = + = = 0,625
2 2 2 8 8
czyli zakodowana w ten sposób liczba to:
5
x = (−1)1 ⋅ 2−31 ⋅ = −0,625 ⋅ 2−31 ≈ −2,91038305 ⋅ 10−10
8
Dla dociekliwych. Precyzję komputerowych obliczeń zmiennoprzecinkowych określa maksy-
malna wartość liczby P, dla której wartość wyrażenia (1+10−P), wyznaczona przez jednostkę
arytmetyczno-logiczną procesora, jest jeszcze różna od 1 (lub 10−P jest jeszcze różne od zera).
Decyduje o tym liczba bitów mantysy. Dla obliczeń prowadzonych z pojedynczą precyzją (23
bity mantysy) P jest równe 6 (czyli sześć cyfr jest znaczących), a dla podwójnej precyzji (52
bity mantysy) − P jest równe 12. Wynikiem dodawania przez procesor dwóch liczb różniących
się o mniej niż o 10−P będzie zawsze większa z tych liczb. Tragedia!
Dyskretyzacja sygnałów analogowych 179

Oczywiście nas interesują sygnały, które występują na samym początku toru przetwarzania,
czyli sygnały ciągłe i „ciągły” stan diagnozowanych obiektów, które je generują. Przykładowo
ciągły zapis sygnału elektrokardiogramu serca i stan pacjenta oraz ciągły zapis sygnału mowy
i „ciągła” treść wypowiedzi. Jednak jeśli do analizy i przetwarzania tych sygnałów (monitoro-
wania obiektów) chcemy zastosować procesor cyfrowy lub komputer, jest oczywistym, że
każdy sygnał musi zostać zastąpiony przez zbiór związanych z nim liczb: stałoprzecinkowych
(zapisanych w dwójkowym systemie pozycyjnym) lub zmiennoprzecinkowych (cecha i man-
tysa). W tym momencie każdy „sen o potędze” musi się skończyć i o sygnale analogowym
(ciągłym) pozostaje już tylko wspomnienie. Jest jednak ważne, aby wspomnienie to było
„wiecznie żywe”, tzn. aby sygnał dyskretny miał jak „najwięcej” właściwości (cech) sygnału
analogowego, tzn. aby dyskretyzacja prowadziła do jak najmniejszej utraty informacji. Z twier-
dzenia o próbkowaniu, przedstawionego w jednym z poprzednich rozdziałów, wynika, że jeśli
pasmo częstotliwościowe sygnału jest ograniczone, to wystarczy go próbkować z częstotliwoś-
cią co najmniej dwa razy większą niż szerokość tego pasma, a jesteśmy w stanie w pełni
zrekonstruować sygnał analogowy x(t) z jego próbek x(n). Oczywiście przy założeniu, że nie
„zaokrąglamy” wartości próbek sygnału. A przecież takie „zaokrąglanie” w komputerze zaw-
sze występuje. Dodatkowo, w przypadku liczb zmiennoprzecinkowych, błąd bezwzględny za-
okrąglenia nie jest stały i zależy od wartości liczby. Wynika to z faktu, że liczba bitów mantysy
jest skończona, a więc jest ograniczona także liczba cyfr znaczących liczby binarnej w niej
zapisanej, niezależnie od jej wartości. Przykładowo dla pojedynczej precyzji błąd zaokrąglenia
liczby jest równy 2c⋅2−23 i zależy od wartości jej cechy c. Dodatkowo nie należy zapominać o
tym, że przetworniki analogowo-cyfrowe, dostarczające do procesora (komputera) próbki
sygnału, mają skończoną liczbę bitów (Nb = 8, 10 12, 14, 16, ...), czyli są w stanie rozróż-
nić skończoną liczbę przedziałów wartości sygnału (Np = 2Nb, odpowiednio: 256, 1024, 4096,
16384, 65536, ...). Tak więc już na wstępie, w sposób bezpowrotny jest tracona informacja
zawarta w sygnale.
Oczywiście, nie należy się załamywać. W telefonii cyfrowej spróbkowany sygnał mowy jest
przechowywany (transportowany) tylko na ośmiu bitach i wszyscy są zadowoleni. Podobnie
„muzyka z komputera” wykorzystuje „tylko” 16 bitów i w dużej mierze zaspokaja wymagania
melomanów początku XXI wieku. A temperatura pacjentów w szpitalach jest odczytywana
i zapisywana w karcie chorego tylko dwa razy na dobę, i to wystarcza do celów diagnostycz-
nych. Wniosek: decyzję o liczbie bitów oraz o częstotliwości próbkowania należy podjąć w za-
leżności od właściwości sygnału i celów analizy.
Obecnie skrótowo, tylko w celu zaznajomienia mniej „wtajemniczonego” Czytelnika, przedsta-
wimy praktyczną stronę konwersji sygnałów analogowych na cyfrowe, czyli budowę typowych,
najczęściej stosowanych przetworników analogowo-cyfrowych i cyfrowo-analogowych.

7.2. Przetworniki analogowo-cyfrowe


Przetworniki analogowo-cyfrowe (A/C) zamieniają wejściowe napięcie analogowe na odpo-
wiadającą mu liczbę całkowitą ze znakiem, która jest zapisana na określonej liczbie bitów
w wybranym formacie, np. w kodzie uzupełnień do dwóch (7.3). W uproszczeniu można przy-
jąć, że liczba ta stanowi numer przedziału kwantowania, do którego należy aktualna wartość
napięcia wejściowego Ux, zawierająca się w przedziale [−Uzakres, Uzakres]. Ujemne wartości
oznaczają numery przedziałów, odpowiadające napięciom ujemnym. Jak już wiemy liczbę
zapisaną w kodzie U2 można także odczytywać w sposób ułamkowy (7.5) i wówczas zawiera
się ona zawsze w przedziale [−1, 1). Z kolei przetwornik cyfrowo-analogowy (C/A) zamienia
numer przedziału kwantowania (liczbę zapisaną bitowo) na odpowiadające mu napięcie
180 Dyskretyzacja sygnałów analogowych

analogowe, czyli napięcie „reprezentanta” całego przedziału. Zwykle jest to wartość napięcia
środka przedziału kwantowania. N-bitowy przetwornik A/C ma dwa „sygnały” wejściowe (mie-
rzone napięcie analogowe oraz napięcie referencyjne) oraz N „sygnałów” wyjściowych
(poszczególne bity numeru przedziału kwantowania), a N-bitowy przetwornik C/A odwrotnie:
ma N+1 „sygnałów” wejściowych (N bitów numeru przedziału oraz napięcie referencyjne)
i jeden analogowy sygnał wyjściowy. Oczywiście przetworniki te mogą mieć jeszcze inne wej-
ściowe i wyjściowe sygnały sterujące. Interpretacja „sygnałowa” działania przetworników A/C
i C/A jest przedstawiony na rysunku 7.3.

UREF UREF

b3={0,1} b3={0,1}
Ux Przetwornik Przetwornik U
A/C b2={0,1} b2={0,1} C/A
b1={0,1} b1={0,1}
b0={0,1} b0={0,1}

Rys. 7.3. Sygnały wejściowe i wyjściowe przetworników A/C i C/A

Uzakres Ux Uzakres Uzakres


a) b)
Nr=7 A/C=111
K 0
R ∆U Nr=6 A/C=110

K 0 Nr=5 A/C=101
Ux Ux
R Nr=4 A/C=100
K 1
R U3 Nr=3 A/C=011
K 1
U2 Nr=2 A/C=010
R
K 1 U1 Nr=1 A/C=001
R
U0 Nr=0 A/C=000
0

Rys. 7.4. Ilustracja zasady pracy przetwornika A/C z bezpośrednim porównaniem napięć: a) schemat ukła-
dowy, b) schemat logiczny

Przetwornikiem A/C, który realizuje operację kwantowania sygnału w sposób najbardziej natu-
ralny, jest przetwornik A/C „bezpośredniego porównania”, przedstawiony na rysunku 7.4a.
Przetwornik ten otrzymuje z zewnątrz stabilne napięcie referencyjne, z którego wytwarza
w swoim wnętrzu napięcie zakresowe. Napięcie to jest podawane na drabinę M rezystorów
o takiej samej wartości rezystancji R (dzielnik napięcia). Napięcie na każdym rezystorze wyno-
si ∆U = Uzakres/M (szerokość przedziału kwantowania), napięcie zaś po k-tym rezystorze jest
równe Uk = k∆U, k = 0,1,2,..., M. Za każdym rezystorem znajduje się komparator, czyli układ
porównujący dwa napięcia: napięcie przetwarzane Ux oraz konkretne napięcie z dzielnika Uk.
Jeśli napięcie Ux jest większe od napięcia Uk (Ux > Uk), to wyjście z k-tego komparatora jest
Dyskretyzacja sygnałów analogowych 181

wysokie (logiczna „jedynka”), kiedy zaś Ux < Uk, to jest ono niskie (logiczne „zero”). Na wyj-
ściu układu komparatorów otrzymujemy więc wskaźnik liniowy: sekwencję jedynek, po której
następuje sekwencja zer (analogia do słupka rtęci w termometrze). Liczba jedynek określa
numer przedziału kwantowania, w którym znajduje się przetwarzane napięcie Ux. Znajdujący
się w przetworniku transkoder zamienia ten numer na binarny kod dwójkowy, naturalny lub
z uzupełnieniem do dwóch. Na rysunku 7.4b przedstawiono sytuację, kiedy przetwornik ma
M = 8 rezystorów, czyli 8 przedziałów kwantowania ponumerowanych od 0 do 7. Wystarczy
więc Nb = 3 bitów, aby zapisać ten numer w kodzie naturalnym dwójkowym. Przykładowo
wynikiem przetwarzania napięcia Ux przypadającego na czwarty przedział kwantowania
(Nr = 4) jest liczba binarna b2b1b0 = 100.
Wielką zaletą przedstawionych powyżej przetworników A/C z bezpośrednim porównaniem
napięć jest ich bardzo krótki czas przetwarzania, związany jedynie z czasem przełączania się
komparatorów oraz szybkością pracy transkodera sposobu zapisu numeru przedziału kwanto-
wania. Podstawową ich wadą jest jednak duży błąd rozdzielczości oraz wysoka cena, wyni-
kająca z konieczności użycia dużej liczby komparatorów dla przetworników wielobitowych
(dokładnie 2Nb−1 komparatorów dla przetwornika Nb-bitowego, co dla przetwornika 12-bito-
wego daje 4095 takich układów). W praktyce stosuje się 8-bitowe przetworniki tego typu
w układach przetwarzania obrazu.
Do innej grupy należą kompensacyjne przetworniki A/C, zdecydowanie tańsze niż przetwor-
niki bezpośredniego porównania, ale wolniejsze od nich. Ich budowa i zasada działania jest
przedstawiona na rysunku 7.5. Układ A/C z kompensacją liniową (rysunek 7.5a) składa się
z komparatora, przetwornika C/A, licznika binarnego i generatora. Zewnętrzny sygnał Start
uruchamia generator, którego impulsy zaczyna zliczać licznik binarny. Na jego wyjściu kolejno
pojawiają się liczby: 0000, 0001, 0010, 0011, ... które są podawane na wejście przetwornika
C/A. Następnie jest syntezowane napięcie analogowe Ulicznik porównywane przez komparator
z przetwarzanym napięciem Ux. Wyście z komparatora jest równe 1 dopóki Ux jest większe od
Ulicznik. Jednak w pewnym momencie liniowo narastające napięcie Ulicznik staje się większe od
Ux, w związku z czym na wyjściu komparatora pojawia się sygnał 0 blokujący impulsy
generatora. „Zatrzaśnięty” stan licznika jest wynikiem przetwarzania C/A.
Wielką zaletą opisanego powyżej rozwiązania jest jego prostota, a główną wadą − potencjalnie
bardzo długi czas przetwarzania. Dla napięcia Ux nieznacznie mniejszego od napięcia
zakresowego, muszą bowiem zostać sprawdzone napięcia „reprezentantów” wszystkich prze-
działów kwantowania. Przykładowo dla przetwornika 12-bitowego jest to 4096 napięć. Każde
z nich musi zostać ustawione oraz porównane, dlatego układ przetwornika A/C z kompensacją
liniową (równomierną) w praktyce nie znajduje zastosowania. Wypiera go zdecydowanie szyb-
szy układ z kompensacją wagową. Opiera się on na znanej od starożytności metodzie „poło-
wienia przedziału”, w informatyce nazywanej szybką metodą przeszukiwania (porządkowania)
„dwójkowego”. Załóżmy, że mamy uporządkowany rosnąco zbiór liczb {u1, u2, u3, ...,uM} oraz
jakąś liczbę ux. Naszym zadaniem jest znalezienie pierwszej liczby uk mniejszej od ux. Oczy-
wiście, możemy po kolei porównywać z ux wartości liczb u1, u2, u3, ..., czyli zastosować
metodę przeszukiwania liniowego (równomiernego). Ale możemy także wybrać liczbę uk leżą-
cą w środku naszego zbioru i sprawdzić, czy tak wybrane uk jest mniejsze od ux. Jeśli jest
mniejsze, to dalej należy kontynuować poszukiwania w górnej części zbioru, w przeciwnym
przypadku − w dolnej. Oczywiście ponownie można zastosować technikę podziału wybranego
podzbioru na część „dolną” i „górną”. Operację tę powtarza się aż do momentu, kiedy
sprawdzi się wszystkie liczby zbioru.
Załóżmy obecnie, że zbiór {uk} składa się z 2Nb elementów. W takim przypadku w metodzie li-
niowej maksymalnie wykonuje się 2Nb porównań, a w metodzie „dwójkowej” (decyzja „na
182 Dyskretyzacja sygnałów analogowych

dole” lub „na górze”) zawsze tylko Nb porównań. Dla Nb = 12 w drugiej metodzie wykonuje-
my tylko 12 porównań zamiast 4096. Zysk jest kolosalny!
Na rysunku 7.5b przedstawiono schemat blokowy i przykładową zmienność napięcia UC/A dla
przetwornika A/C z kompensacją wagową. Układ logiki ustawia kolejno bity od „najstarszego”
(ang. MSB − Most Significant Bit), leżącego po lewej stronie, do „najmłodszego” (ang. LSB −
Least Significant Bit), znajdującego się po prawej stronie, i pozostawia je lub kasuje w zależ-
ności od sygnału decyzyjnego z komparatora. Kolejność operacji jest następująca:
1) inicjalizacja: wyzerowanie wszystkich bitów wychodzących z układu logiki oraz ustawienie
indeksu pierwszego ustawianego bitu k = Nb;
2) zsyntezowanie napięcia UC/A przez przetwornik C/A, odpowiadającego ustawionej kombi-
nacji bitów;
3) porównanie napięcia UC/A z Ux przez komparator: jeśli Ux > UC/A, to wyjście z komparatora
jest równe 1, w przeciwnym przypadku zero;
4) weryfikacja ostatnio ustawionego bitu: pozostawienie jeśli stan komparatora jest równy
1 oraz wyzerowanie w przeciwnym razie;
5) ustawienie indeksu kolejnego bitu k = k−1; skok do punktu 2).
Na rysunku 7.5b jest pokazana przykładowa zmienność napięcia UC/A dla przetwornika cztero-
bitowego (Nb = 4). Na początku jest ustawiany najstarszy bit (czyli liczba 1000) i syntezowane
napięcie równe 1/2 zakresu przetwornika A/C. W związku z tym, że napięcie to jest mniejsze
od Ux, najstarszy bit nie zostaje wyłączony przez komparator. Następnie jest ustawiany drugi
od lewej strony, związany z napięciem 1/4 zakresu (czyli jest ustawiana liczba 1100) i jest
syntezowane napięcie odpowiadające 1/2+1/4 = 3/4 zakresu. Ale to napięcie jest już większe
od Ux, dlatego ostatnio włączony bit zostaje wyzerowany. Potem zostają włączone bity odpo-
wiadające 1/8 i 1/16 zakresu, które nie zostają wyłączone, ponieważ sumaryczne napięcie UC/A
w obu przypadkach nie przekracza napięcia Ux. Wynikiem przetwarzania jest więc liczba bi-
narna 1011.
Opisany powyżej przetwornik A/C powszechnie jest nazywany przetwornikiem kompensacyj-
no-wagowym, ponieważ w trakcie procesu przetwarzania napięcie UC/A stara się zrównać z na-
pięciem Ux, czyli − innymi słowy − skompensować go. Sam algorytm kompensacji nie jest
natomiast liniowy tylko wagowy („dwójkowy”). Jeśli założymy, że przetwornik potrzebuje
czas tb na ustawienie 1 bitu, to ustawienie Nb bitów zajmuje zawsze Nb⋅tb sekund. W trakcie
tego czasu napięcie Ux nie powinno się zmieniać.
Z powodu trudności w uzyskaniu napięcia referencyjnego o bardzo dużej dokładności i stabil-
ności, realizacja dużej liczby bitów jest podstawowym problemem we wszystkich typach prze-
tworników A/C.

Poza wymienionymi powyżej powszechne zastosowanie znajdują także przetworniki typu sig-
ma-delta (zwłaszcza w sprzęcie audio i wibroakustyce) oraz podwójnie całkujące (w cyfro-
wych przyrządach pomiarowych). W związku z dostępnością literatury na ich temat, nie omó-
wiono ich dalej szczegółowo, tylko skrótowo scharakteryzowano. Należy zwrócić szczególną
uwagę na fakt, że przetworniki całkujące są przetwornikami wartości średnich a nie chwilo-
wych napięcia, które umożliwiają eliminację (odfiltrowanie) analogowych zakłóceń okreso-
wych podczas samego przetwarzania A/C.

Podsumujmy nasze dotychczasowe rozważania, na temat przetworników A/C, uwzględniając


w poniższych wnioskach nie opisane w tym rozdziale przetworniki typu sigma-delta oraz
przetworniki całkujące:
Dyskretyzacja sygnałów analogowych 183

a) A/C z kompensacją liniową b) A/C z kompensacją wagową

Ux 0/1
Ux 0/1 K
K UC/A
Ulicznika
C/A UREF
C/A UREF
0 0 1 1 Stop
0 0 1 1 Stop Układ logiki
Licznik/Generator Start
Start UC/A
Ulicznika Uzakres Uzakres

3/4Uz Ux
Ux
1/2Uz

1/4Uz
stan licznika

0000 0001 0010 0011 0100 ••• 0 1 2 3 nr bitu C/A

Rys. 7.5. Ilustracja budowy i zasady działania kompensacyjnych przetworników A/C

• przetworniki bezpośredniego porównania („drabinka” rezystorów = 2Nb, drabinka „kompa-


ratorów = 2Nb −1, porównanie równoległe): są bardzo szybkie, lecz dość drogie, gdyż wyma-
gają dużej liczby komparatorów;
• przetworniki kompensacyjne równomierne (jeden komparator, l i n i o wo przestrajane na-
pięcie porównywane z napięciem przetwarzanym): są bardzo wolne, gdyż wymagają aż
2Nb −1 porównań, ale za to są bardzo tanie (praktycznie nie są stosowane);
• przetwornik kompensacyjne wagowe (jeden komparator, wa g o wo przestrajane napięcie
porównywane z napięciem przetwarzanym): są bardzo szybkie, gdyż potrzebują tylko Nb
porównań, oraz względnie tanie;
• przetworniki typu sigma-delta (w u p r o s z c z e n i u : próbkowanie jednobitowe o bardzo
dużej częstotliwości np. 6,4 MHz, a potem uśrednianie/całkowanie i pozostawianie co M-tej
próbki, co prowadzi do wzrostu liczby bitów przypadających na jedną próbkę i do zmniej-
szenia częstotliwości próbkowania sygnału): są bardzo szybkie i tanie; umożliwiają budowę
przetworników o dużej liczbie bitów; ich podstawową wadą jest zdecydowanie mniejsza
dokładność przetwarzania składowej stałej sygnału;
• przetworniki całkujące, w szczególności podwójnie całkujący (całkowanie sygnału wej-
ściowego na kondensatorze w zadanym czasie T, równym wielokrotności okresu zakłóceń
nTz, a następnie rozładowywanie kondensatora stałym prądem; powoduje to, że czas rozła-
dowania jest proporcjonalny do poziomu naładowania kondensatora, czyli do wa r t o ś c i
ś r e d n i e j sygnału wejściowego; wynik przetwarzania jest liczbą impulsów generatora
wzorcowego zliczonych w czasie rozładowywania kondensatora): są wolne, przeznaczone
do przetwarzania napięć wolnozmiennych, ale mają bardzo istotną zaletę − znacznie elimi-
nują zakłócenia z sygnału już na etapie konwersji analogowo-cyfrowej, poprzez „scałko-
wanie” zakłóceń okresowych w fazie ładowania kondensatora.
184 Dyskretyzacja sygnałów analogowych

a) LSB
k=0 i/8 1 8R

k=1 i/4 1 4R

0 2R
is Rs
k=2 i/2

k=3 i 0 R

MSB Wzm
UREF
Uwy

2R
b) LSB

i/8 2R 1

R i/4 2R 1

R 2R is Rs
i/2 0

R i 2R 0

Wzm
UREF MSB
Uwy

Rys. 7.6. Przykładowe schematy blokowe przetworników C/A z sumowaniem prądów. Układ z drabinką
rezystorów: a) Rk = 2kR, b) R-2R

7.3. Przetworniki cyfrowo-analogowo


Nadszedł teraz czas na przyjrzenie się „drugiej stronie medalu”, czyli budowie przetworników
cyfrowo-analogowych (C/A). Istnieje wiele różnych typów przetworników C/A, lecz my za-
poznamy się tylko z wybranymi układami z sumowaniem prądów. Schemat najprostszego
takiego układu jest pokazany na rysunku 7.6a. Rezystory o wartościach Rk = 2kR są po prawej
stronie połączone z wejściem odwracającym wzmacniacza operacyjnego, po lewej stronie zaś
ze stabilnym źródłem napięcia referencyjnego UREF. W gałęzi każdego rezystora znajduje się
klucz, który jest otwarty lub zamknięty, w zależności od wartości związanego z nim bitu liczby
binarnej, przetwarzanej na napięcie analogowe. Na rysunku jest przetwarzana liczba binarna
0011, czyli liczba 3 w systemie dziesiętnym, dlatego dwa górne klucze są zamknięte, a dwa
dolne − otwarte. Napięcie na wejściu odwracającym („−”) wzmacniacza jest w przybliżeniu
równe napięciu na jego wejściu nieodwracającym („+”), czyli ma wartość w przybliżeniu
równą zero, dlatego prądy płynące w poszczególnych gałęziach „zwartej” drabinki są równe
UREF/R, UREF/2R, UREF/4R i UREF/8R, czyli w kolejnych gałęziach są o połowę mniejsze i od-
powiednio równe i, i/2, i/4, i/8. Napięcie na wyjściu wzmacniacza ma więc następującą
wartość:
Dyskretyzacja sygnałów analogowych 185

 Nb −1   Nb −1 U 
U wy = −is Rs = −  ∑ bk ik  Rs = −  ∑ bk REF  Rs (7.6)
 k =0   k =0 2k R 
gdzie bk jest wartością k-tego bitu przetwarzanej liczby binarnej, która decyduje o zamknięciu
(„1”) lub otwarciu („0”) klucza w k-tej gałęzi.
Przedstawiony powyżej układ przetwornika A/C jest bardzo prosty i intuicyjnie zrozumiały, ale
ma bardzo poważną wadę: w przypadku dużej liczby bitów w drabince będą występowały
rezystory o bardzo dużej różnicy rezystancji: R0 = 2Nb−1R i RNb−1 = R. Ponieważ każdy z nich
jest wykonany z określoną tolerancją może się okazać, że błąd wartości rezystora dużego prze-
kracza wartość rezystora małego. W praktyce preferuje się więc przetworniki C/A z sumowa-
niem prądów, w których występuje drabinka rezystorów mających tylko dwie wartości: R i 2R.
Schemat blokowy takiego układu jest pokazany na rysunku 7.6b. Rezystancje o wartości 2R
znajdujące się w poziomych gałęziach są połączone po prawej stronie zawsze do „masy” albo
bezpośrednio (dla bitu „0”), albo „poprzez” wzmacniacz operacyjny (dla bitu „1”), dlatego
zawsze płynie przez nie prąd, ustawienie przełącznika zaś decyduje jedynie o tym, czy prąd ten
będzie wpływał na rezystor Rs czy też nie. Wartości prądów w poziomych gałęziach równe
i, i/2, i/4 oraz i/8 wynikają natomiast z wartości poszczególnych rezystorów i struktury ich
połączenia. Idąc od góry, r ó w n o l e g ł e połączenie rezystora 2R, zwartego bezpośrednio do
masy po lewej stronie, z rezystorem 2R górnej gałęzi poziomej daje wypadkową rezystancję
równą R. W wyniku s z e r e g o w e g o połączenia tej rezystancji z rezystorem R, znajdującym
się w górnej gałęzi pionowej, ponownie otrzymujemy rezystancję 2R i cała operacja się
powtarza: następuje kolejne łączenie równoległe a po nim szeregowe. Jeśli tak, to wypadkowa
rezystancja części układu znajdującej się powyżej każdego rezystora 2R, leżącego w dowolnej
gałęzi poziomej, jest równa także 2R. Jeśli więc przez dolny rezystor 2R płynie jakiś prąd i, to
taki sam prąd wpływa do górnej części układu. W pierwszym węźle dzieli się on na połowę
(otrzymujemy i/2), w następnym dzieli się ponownie (i/4) itd., czyli otrzymujemy takie same,
„ważone” wartości prądów jak w układzie z rysunku 7.6a, jednak przy zastosowaniu tylko
dwóch wartości rezystorów: R i 2R. Problem dokładności ich wykonania jest więc zdecydowa-
nie mniejszy niż wykonania rezystancji dla układu Rk = 2kR. Poza tym układ R-2R wykonuje
się w jednej strukturze, w której są istotne jedynie stosunki rezystancji.

7.4. Tor przetwarzania analogowo-cyfrowego i cyfrowo-analogowego


Na koniec tego krótkiego wprowadzenia do praktycznych rozwiązań stosowanych w torach
przetwarzania A/C i C/A, m.in interfejsów komputerowych, dokonamy jeszcze niezbędnego
podsumowania oraz zwrócimy uwagę na kilka bardzo istotnych faktów, godnych zapamiętania.
Z dotychczasowych rozważań, przeprowadzonych w tym rozdziale oraz rozdziałach poprzed-
nich, jasno wynika, że (patrz rysunek 7.7):
1) przed przetwornikiem A/C powinien się znajdować dolnoprzepustowy (DP) filtr analogo-
wy, który dostosowywałby pasmo częstotliwościowe sygnału próbkowanego do częstotli-
wości próbkowania zgodnie z twierdzeniem o próbkowaniu − częstotliwość próbkowania
musi być co najmniej dwa razy większa niż maksymalna częstotliwość występująca w syg-
nale. Projektowanie i sprzętową realizację filtrów tego typu omówiono w poprzednim
rozdziale. W układach uniwersalnych istnieje możliwość przestrajania częstotliwości prób-
kowania oraz analogowych filtrów antyaliasingowych, w tym przypadku zbudowanych
z przełączanych pojemności (ang. SCC − Switched Capacitor Circuits). Jest też możliwe
nieprzestrajanie przetwornika, nadpróbkowanie sygnału i przeprowadzenie decymacji syg-
nału (usunięcie części próbek) już po stronie cyfrowej (patrz podrozdział 12.6.3);
186 Dyskretyzacja sygnałów analogowych

x(n) y(n)
x(t) Filtr xf(t) Układ xp(t) yq(t) Układ yp(t) Filtr y(t)
DP P&P
A/C µP C/A
P&P DP
Gotów Gotów

Układ logiki Układ logiki


Start Start

Rys. 7.7. Jeden kanał A/C − C/A toru przetwarzania analogowo-cyfrowego (A/C) i cyfrowo-analogowego
(C/A) sygnałów: filtr dolnoprzepustowy DP, układ próbkowania z podtrzymaniem P&P, przetwornik A/C,
mikroprocesor µP, przetwornik C/A, układ próbkowania z podtrzymaniem, filtr dolnoprzepustowy (rekon-
struujący)

a) faza próbkowania b) faza podtrzymania


R1 R2 R1 R2

Uwe C Uwy Uwe C Uwy

c) d) dwa układy P&P ze wzmacniaczami operacyjnymi


C

Uwe Uwy Uwe Uwy


C

Rys. 7.8. Przykłady najprostszych rozwiązań układów próbkowania z podtrzymaniem P&P: a) szybkie
ładowanie kondensatora C, czyli próbkowanie chwilowej wartości napięcia Uwe (bardzo mała rezystancja R1,
uwzględniająca rezystancję zamkniętego klucza), b) bardzo wolne rozładowanie kondensatora C poprzez
bardzo dużą rezystancję R2 − podtrzymanie na wyjściu spróbkowanej wartości napięcia, „zapisanej” na
kondensatorze, c) układ P&P wykorzystujący wzmacniacze operacyjne, mające bardzo dużą impedancję
(rezystancję) wejściową oraz bardzo małą impedancję (rezystancję) wyjściową

2) dodatkowo przed przetwornikami kompensacyjnymi należy stosować układy próbkowania


z podtrzymaniem (P&P) (ang. S&H − Sample and Hold), które mają zapewnić niezmien-
ność przetwarzanego napięcia podczas procesu kompensacji. Najczęściej napięcie chwilowe
„zapisuje się” na kondensatorze. Bardzo szybko ładuje się go w fazie „próbkowania”
i bardzo wolno rozładowuje w fazie „podtrzymania” (patrz rysunek 7.8);
3) po przetworniku C/A również powinien znajdować się układ próbkowania z podtrzyma-
niem P&P, „przechwytujący” i podtrzymujący napięcie analogowe wytwarzane przez prze-
twornik C/A, jeśli on sam tego nie robi. W związku z próbkowaniem w czasie i ze skoń-
czoną liczbą bitów tego przetwornika napięcie to ma kształt „schodkowy”, podobny do
przedstawionego na rysunku 7.3c;
4) w związku z tym za wyjściowym układem P&P należy umieścić dolnoprzepustowy filtr
rekonstruujący, który „wygładzi” sygnał yp(t). Przykładowo po tej operacji sygnał „schod-
kowy” z rysunku 7.1c przechodzi w prawie gładki sygnał sinusoidalny.
Dyskretyzacja sygnałów analogowych 187

a) kilka kanałów A/C − wersja 1

x1(t) Filtr Układ


A/C
DP P&P

xx(t) Multi
2(t) Filtr Układ x(n)
A/C plekser µP
DP P&P cyfrowy

x3(t) Filtr Układ


A/C
DP P&P

Start
Układ logiki

b) kilka kanałów A/C − wersja 2

x1(t) Filtr Układ


DP P&P

Multi
xx(t)
2(t) Filtr Układ plekser x(n)
DP P&P
A/C µP
analogowy

x3(t) Filtr Układ


DP P&P

Start
Układ logiki

Rys. 7.9. Różne warianty wielokanałowych układów przetwarzania A/C (a, b, c) oraz układ do wielofa-
zowego próbkowania jednego sygnału, który podwyższa maksymalną częstotliwość próbkowania całego
systemu i z tego powodu jest stosowany w oscyloskopach cyfrowych (d)

Często występuje konieczność przetwarzania na postać cyfrową wielu sygnałów równocześnie.


Przykładem może być wielokanałowy rejestrator sygnałów elektrograficznych EKG. Powstaje
pytanie jak należy to robić? Alternatywne rozwiązania są przedstawione na rysunkach 7.9a,
7.9b i 7.9c. Oczywiście, najprościej jest „zrównoleglić” tor wejściowy z rysunku 7.7
i zastosować przed mikroprocesorem cyfrowy układ przełączający (czyli multiplekser cyfrowy)
(rysunek 7.9a). Wadą takiego rozwiązania jest jego wysoka cena, a zaletą − duża szybkość
działania, umożliwiająca zastosowanie dużej częstotliwości próbkowania. W takim układzie
jest także możliwe równoczesne „zbieranie” próbek sygnałów w poszczególnych kanałach,
czyli niewprowadzanie przez układ przesunięć fazowych pomiędzy rejestrowanymi sygnałami.
Brakiem ww. przesunięcia charakteryzuje się także nieco tańsze rozwiązanie, przedstawione na
rysunku 7.9b, w którym zastosowano analogowy układ przełączający (multiplekser analogo-
wy) i tylko jeden przetwornik A/C. Wadą takiego rozwiązania są niższe częstotliwości próbko-
188 Dyskretyzacja sygnałów analogowych

c) kilka kanałów A/C − wersja 3

x1(t) Filtr
DP
Multi x(n)
Układ
x2(t) Filtr plekser A/C µP
P&P
DP analogowy

x3(t)
Filtr
DP

Start
Układ logiki

d) wielofazowe próbkowanie jednego sygnału

x(t)
Filtr Układ
A/C
DP P&P

Multi x(n)
Układ plekser
P&P
A/C µP
cyfrowy

Układ
A/C
P&P

Start
Układ logiki

Rys. 7.9. (cd.)

wania możliwe do osiągnięcia. Ostatnia rozpatrywana możliwość realizacji układowej wielo-


kanałowego próbkowania A/C jest pokazana na rysunku 7.9c. Jest to najtańszy wariant. Przełą-
czanie napięć odbywa się w niej na samym początku toru. Oczywistym więc jest, że wszystkie
napięcia są próbkowane w różnych chwilach czasowych. Sygnały cyfrowe xk(n) są więc opóź-
nione względem siebie o stałą jednostkę czasu. Na rysunku 7.9d przedstawiono z kolei schemat
blokowy układu do wielofazowego próbkowania jednego sygnału, który jest stosowany w os-
cyloskopach cyfrowych, gdyż podwyższa maksymalną częstotliwość próbkowania całego
systemu.
Oczywiście na rysunku 7.7 zakładamy, że interesujący nas sygnał x(t) jest napięciem analogo-
wym. Ale przecież wcale tak być nie musi. Może to być temperatura powietrza, naprężenie
w metalu, prędkość samochodu. Dlatego przed przystąpieniem do realizacji toru przetwarzania
sygnałów, przedstawionego na rysunku 7.7, musimy zaprojektować i wykonać układ „wstęp-
nego” przetwarzania, czyli układ pomiaru interesującej nas wielkości fizycznej oraz jej zamia-
ny na napięcie elektryczne (wybór: czujnika, układu pomiarowego, wzmacniacza). Przykładem
niech będzie pomiar temperatury, realizowany za pomocą czujnika termorezystancyjnego, oraz
pomiar naprężenia, wykonany za pomocą tensometru znajdującego się w układzie mostkowym
(patrz rysunek 7.10).
Dyskretyzacja sygnałów analogowych 189

a) b) UREF

Rtemp Rtensometr Rc

Uwy Ra Rb Uwy
UREF RREF
i wzmacniacz
pomiarowy

Rys. 7.10. Przykład akwizycji dwóch wielkości fizycznych: a) pomiar temperatury za pomocą termore-
zystora, b) pomiar naprężenia za pomocą tensometru w układzie mostkowym

UREF
Uz czujnik A/C

Rys. 7.11. Przykładowy układ („z wyjściem ilorazowym”) próbkowania napięcia z czujnika, który nie jest
wrażliwy na zmianę napięcia zasilającego Uz

W pierwszym układzie pod wpływem temperatury zmienia się rezystancja czujnika Rtemp, co
powoduje zmianę wartości prądu i, płynącego w obwodzie (i = UREF/(Rtemp+RREF)). Z kolei
przepływ tego prądu przez rezystancję RREF daje zmienne napięcie Uwy = iRREF, które jest poda-
wane na wejście toru przetwarzania A/C. Dla uproszczenia założyliśmy, że impedancja wej-
ściowa toru przetwarzania A/C jest bardzo duża w porównaniu z RREF i można zaniedbać prąd
wpływający do tego toru.
W drugim układzie czujnikiem jest zaś tensometr, czyli rezystor zmieniający swoją wartość
podczas rozciągnięcia. Załóżmy, że jest on naklejony na części układu mechanicznego. Pod
wpływem naprężenia część ta ulega deformacji (zmienia się jej kształt). W wyniku tego zmie-
nia się także długość tensometru i jego rezystancja. Ponieważ tensometr znajduje się w ukła-
dzie mostka wstępnie zrównoważonego (RtensometrRb = RaRc), zmiana jego rezystancji powoduje
pojawienie się napięcia „niezrównoważenia” na przekątnej „sygnałowej” mostka. Napięcie to
jest podawane poprzez wzmacniacz różnicowy na wejście toru A/C. Oczywiście pomiar tem-
peratury może być także wykonywany w układzie mostkowym.
W obu omawianych przypadkach należy zadbać o to, aby napięcie wyjściowe zależało tylko od
wielkości mierzonej lub zminimalizować wpływ innych czynników. Na rysunku 7.11 jest
przedstawiony przykładowy układ („z wyjściem ilorazowym”) próbkowania napięcia z czuj-
nika, który nie jest wrażliwy na zmianę napięcia zasilającego Uz. Osiągnięto to poprzez wyko-
rzystanie napięcia Uz jako napięcia referencyjnego UREF przetwornika A/C.
Najlepiej jest gdy zależność napięcia od wielkości mierzonej jest liniowa. Równocześnie
maksymalna zmiana napięcia, odpowiadająca maksymalnej zmianie wartości wielkości fizycz-
nej, powinna zajmować prawie cały zakres przetwornika A/C. Dzięki temu po skwantowaniu
kształt sygnału jest odtworzony wiernie. Aby tak było, sygnał z układu czujnika musi być
odpowiednio wzmocniony.
Najczęściej stosuje się wzmacniacze wykorzystujące scalone wzmacniacze operacyjne. Mają
one impedancję wejściową rzędu 106÷1012 Ω pomiędzy wejściami „+” i „−” , czyli bardzo
dużą, oraz wzmocnienie rzędu 105÷106 dla częstotliwości 1 Hz (wzmocnienie to spada do je-
dności dla częstotliwości 300 kHz ÷ 100 MHz, w zależności od modelu). Z powodu bardzo du-
190 Dyskretyzacja sygnałów analogowych

a) wzmacniacz odwracający b) wzmacniacz nieodwracający

Wzm=-R2/R1 R2

R1 Uwe Uwy
R2
Uwe Uwy
R3 R1
Wzm=1+R2/R1

c) wzmacniacz różnicowy d) pomiarowy wzmacniacz różnicowy

Wzm=R2/R1 Wzm=R4/R3⋅(1+2R2/R1)

R2 R3 R4

R1
Uwe R2
R1 Uwy Uwe R1
R2 R2
Uwy
R3 R4

Rys. 7.12. Stosowane układy wzmacniaczy, wykorzystujące wzmacniacze operacyjne: a) wzmacniacz od-
wracający napięcie, b) wzmacniacz nieodwracający napięcia, c) wzmacniacz różnicowy, d) pomiarowy
wzmacniacz różnicowy

żej rezystancji wejściowej zakłada się, że do wzmacniacza operacyjnego nie wpływa prąd,
czyli napięcia na obu jego wejściach są identyczne.
Na rysunku 7.12 są przedstawione cztery podstawowe rodzaje wzmacniaczy, zbudowane na
wzmacniaczach operacyjnych. Ich wzmocnienia są określone przez sposób połączeń i wartości
zastosowanych rezystorów. Wzmocnienia te są także podane na rysunku 7.12. Dla przykładu
wyprowadzimy wzmocnienie dla wzmacniacza odwracającego. Ponieważ do wzmacniacza
operacyjnego nie wpływa prąd, więc na wejściu „+” i „−” mamy napięcie masy. W związku
z tym przez rezystor R1 płynie prąd i o wartości Uwe/R1. Prąd ten płynie dalej przez rezystor R2,
powodując na nim spadek napięcia równy R2i. W związku z tym, że na wejściu „−”
wzmacniacza mamy „masę”, więc Uwy = = −R2i = −(R2/R1)Uwe, czyli wzmocnienie układu wy-
nosi −R2/R1. W podobny sposób wyprowadza zależności określające wzmocnienia pozostałych
wzmacniaczy. W tabeli 7-1 zebrano właściwości wszystkich układów. Zastosowanie wejścia
różnicowego jest korzystne ze względu na niewrażliwość układu na „zakłócenia” addytywne,
dodające się równocześnie do obu „gałęzi” wejściowych. Wzmacniacz różnicowy jest także
niewrażliwy na zmianę temperatury, gdyż w taki sam sposób zmieniają się rezystory podłączo-
ne do jego wejścia „+” i „−”. Na szczególną uwagę zasługuje układ wzmacnicza pomiarowego,
który ma zarówno wejście różnicowe, jak i dużą impedancję wejściową. W porównaniu ze
zwykłym wzmacniaczem różnicowym jest zminimalizowany w nim także „przesłuch” z wejścia
dodatniego do ujemnego oraz jest zwiększone tłumienie zakłóceń „wspólnych”, występujących
na obu wejściach.
Dyskretyzacja sygnałów analogowych 191

Tab. 7-1. Charakterystyka właściwości układów wzmacniaczy operacyjnych

Wzmacniacz Wzmacniacz Wzmacniacz Wzmacniacz Wzmacniacz


Właściwość
operacyjny odwracający nieodwracający różnicowy pomiarowy
Duża impedancja
TAK NIE TAK NIE TAK
wejściowa
Wejście
TAK NIE NIE TAK TAK
różnicowe
Określone
NIE TAK TAK TAK TAK
wzmocnienie

Wróćmy na koniec jeszcze raz do rysunku 7.7. Terminem „cyfrowe przetwarzanie sygnałów”
(lub „przetwarzanie sygnałów cyfrowych”) nazywa się przetwarzanie sekwencji próbek sygna-
łu x(n) na sekwencję próbek sygnału y(n). Stosowne obliczenia są realizowane przed dowolny
mikroprocesor (mikrokontroler, procesor, komputer). Najpopularniejsze metody analizy i prze-
twarzania sygnałów cyfrowych x(n) będą przedmiotem naszego zainteresowania w następnych
rozdziałach.
8
Analiza częstotliwościowa
sygnałów dyskretnych

Analiza sygnałów najczęściej sprowadza się do ich analizy częstotliwościowej. Częstotliwości


zawarte w sygnałach występujących samoistnie w przyrodzie wiele nam mówią o właściwoś-
ciach lub stanach obiektu, który je wygenerował. Przykładem mogą być różne sygnały biome-
dyczne, np. elektrokardiograficzne, świadczące o aktualnym stanie pacjenta.
W wielu urządzeniach technicznych, np. służących do transmisji sygnałów za pomocą fal
elektromagnetycznych, człowiek sam dzieli dostępne pasmo częstotliwościowe na podpasma
oraz generuje w nich sygnały użytkowe o różnych częstotliwościach, np. radiowe, telewizyjne
i telefoniczne.
W niniejszym rozdziale zajmiemy się problemem właściwego przeprowadzania analizy często-
tliwościowej sygnałów dyskretnych (spróbkowanych) z wykorzystaniem transformacji Fouriera
oraz poprawnej interpretacji uzyskiwanych wyników.

8.1. Widmo Fouriera sygnałów dyskretnych


W rozdziale czwartym oznaczaliśmy sygnały dyskretne (spróbkowane) przez xδ(t), natomiast
w rozdziale siódmym − jako x(n) (n − indeks lub numer próbki). Na początku załóżymy, że
sygnały te powstały z sygnałów ciągłych x(t) zgodnie z regułami sztuki „kulinarnej” (inży-
nierskiej), przedstawionymi w podrozdziale 4.5 (4.48)(4.49):

xδ (t ) = x ( n ) = x (t ) ⋅ ∑ δ(t − n∆t ) (8.1)
n = −∞

∞ ∞
1   ωp
X δ ( jω) =  X ( jω) ⊗ ω p ∑ δ(ω − kω p ) =
2π 
∑ X ( j ( ω − kω p ) ) (8.2)
k = −∞  2π k = −∞

tzn. że częstotliwość próbkowania fp = 1/∆t dobrano zgodnie z tzw. twierdzeniem o próbkowa-


niu (Nyquista, Shannona, Kotielnikowa), czyli minimum dwa razy większą od maksymalnej
częstotliwości występującej w sygnale. W równaniach (8.1) i (8.2) ∆t oznacza okres próbko-
wania, δ(t) jest impulsem Diraca, a ωp = 2πfp. Widmo częstotliwościowe Xδ(jω) sygnału sprób-
kowanego xδ(t) jest więc sumą poprzesuwanych w częstotliwości „kopii” widma sygnału
ciągłego X(jω). Dysponując jedną z tych kopii oraz znając pasmo częstotliwościowe oryginału
Analiza częstotliwościowa sygnałów dyskretnych 193

jesteśmy w stanie zsyntezować z niej ciągły sygnał oryginalny x(t). W tym celu należy wyzna-
czyć odwrotne przekształcenie Fouriera „kopii” i zmodulować częstotliwościowo uzyskany
wynik, tzn. wymnożyć go z odpowiednim sygnałem harmonicznym exp(jkωpt)) (patrz podroz-
dział 4.5).
W poprzednim rozdziale wykazywaliśmy że sygnał, analizowany numerycznie na cyfrowych
procesorach uniwersalnych (np. komputer) lub sygnałowych (np. telefon komórkowy) musi być
dyskretny (cyfrowy) z racji ograniczeń sprzętowych. Przypomnijmy: w komputerze sygnał to
zbiór liczb x(n), czyli ciąg „pobranych” (w równych odstępach czasu) wartości próbek sygnału,
zapisanych ze skończoną precyzją. Jakie jest widmo częstotliwościowe takiej dyskretnej
reprezentacji sygnału ciągłego? Teoretycznie jest ono ciągłe. Jednak kiedy jesteśmy zmuszeni
wyznaczać je numerycznie, to czynimy to dla wybranych, konkretnych, interesujących nas
wartości częstotliwości, czyli je dyskretyzujemy w osi częstotliwości. „Próbkujemy” więc wid-
mo sygnału X(f) (lub X(jω)), podobnie jak próbkowaliśmy sam sygnał x(t).
W ogólnym przypadku rozważając problem analizy widmowej sygnałów mamy do czynienia
z czterema różnymi metodami (odmianami) zastosowania analizy fourierowskiej. A mianowi-
cie rozróżniamy:
• przekształcenie Fouriera dla sygnałów ciągłych (ciągły czas i częstotliwość),
• szereg Fouriera dla sygnałów ciągłych (ciągły czas i dyskretna częstotliwość),
• przekształcenie Fouriera dla sygnałów dyskretnych (dyskretny czas i ciągła częstotliwość),
• szereg Fouriera dla sygnałów dyskretnych (dyskretny czas i częstotliwość).
Obecnie omówmy poszczególne przypadki. W celu zachowania kompletności wywodów po-
wtórzymy także definicję całkowego przekształcenia Fouriera.

8.1.1. Przekształcenie Fouriera dla sygnałów ciągłych

Para prostego i odwrotnego ciągłego przekształcenia Fouriera zdefiniowana jest następującym


układem równań (exp(jωt) = cos(ωt)+jsin(ωt), ω = 2πf, ω − pulsacja, f − częstotliwość):
+∞ +∞
1
X ( jω) = ∫ x(t )e
− jωt
x (t ) = X ( jω)e jωt dω
2π −∫∞
dt , (8.3a, b)
−∞

Sygnał x(t) ma transformatę Fouriera X(ω) wtedy i tylko wtedy, kiedy spełnia on określone
warunki (tzw. warunki Dirichleta), które gwarantują określoność całki, występującej w równa-
niu (8.3a). Wzory (8.3) mogą być także interpretowane jako całki z iloczynów dystrybucji
(funkcji uogólnionych), których wynikiem może być także dystrybucja. Sygnał x(t) jest przed-
stawiony jako suma nieskończonej liczby blisko siebie leżących drgań zespolonych o ampli-
tudzie dA = X(ω)dω, stąd X(ω) = dA/dω i w związku z tym X(ω) może być interpretowane jako
„gęstość amplitudy” lub „gęstość spektralna” widma sygnału x(t). Ciągłe przekształcenie Fou-
riera jest granicznym przypadkiem szeregu Fouriera ciągłego sygnału okresowego. Własności
przekształcenia Fouriera, zdefiniowanego przez parę równań (8.3), zostały szczegółowo omó-
wione w rozdziale czwartym.

8.1.2. Szereg Fouriera dla sygnałów ciągłych

Kiedy analizowany sygnał jest sygnałem okresowym o okresie T, mogą w nim występować tyl-
ko pulsacje o określonej częstotliwości, tzn. składowa stała oraz pulsacja podstawowa ω0 i jej
wielokrotności (harmoniczne) kω0:
194 Analiza częstotliwościowa sygnałów dyskretnych

T /2 ∞
1 2π
X (kω0 ) = x (t )e − jkω0t dt , ∑ X (kω0 )e jkω t ,
T −T∫/ 2
x (t ) = 0 ω0 = , k = 0, ± 1, ± 2, ... (8.4a, b)
k = −∞ T

Można wykazać, iż dla T→∞ równania (8.4) sprowadzają się do (8.3). Szczegóły dotyczące
szeregu Fouriera (8.4) przedstawiono w rozdziale trzecim.

8.1.3. Przekształcenie Fouriera dla sygnałów dyskretnych

W praktycznych zastosowaniach numerycznych (obliczeniowych) analizy częstotliwościowej


nie dysponujemy sygnałem ciągłym x(t) tylko ciągiem jego próbek x(n), powstałych w wyniku
zdyskretyzowania w czasie i skwantowania w poziomie sygnału analogowego za pomocą
przetwornika analogowo-cyfrowego. Załóżmy, że sygnał x(t) został spróbkowany zgodnie
z twierdzeniem Nyquista (Kotielnikowa-Shannona) z częstotliwością fp (czyli z okresem ∆t =
= 1/fp) i jest to częstotliwość dwa razy większa od maksymalnej częstotliwości występującej
w sygnale. Równania ciągłego przekształcenia Fouriera (8.3) można zapisać dla „spróbkowa-
nych” sygnałów analogowych xδ(t) (8.1) w następującej postaci (wykorzystujemy właściwość
(4.23) funkcji delta Diraca):
∞ ∞ ∞
 
X δ ( j ω) = ∫ xδ ( t ) e ∫  x ( t ) n∑
− j ωt − j ωt
dt = δ(t − n∆t )  e dt =
−∞ −∞ =−∞ 
T N  − jωt N  T 
= lim
T →∞ ∫  x ( t ) ⋅ lim
N →∞
∑ δ( t − n ∆ t ) e dt = lim
N →∞
∑  lim
 T →∞ ∫ x (t )δ(t − n∆t )e− jωt dt  =

−T  n =− N  n =− N  −T 
∞  ∞  ∞
= ∑  ∫ x(t )δ(t − n∆t )e− jωt dt  = ∑ x(n∆t )e − jωn∆t = X (e jω ) (8.5a)
n = −∞  − ∞  n = −∞

lub alternatywnie jako



X ( e jΩ ) = ∑ x ( n ∆t ) e − j Ω n (8.5b)
n =−∞

W równaniu (8.5b) Ω oznacza ciągłą pulsację unormowaną względem częstotliwości próbko-


wania:
Ω = ω∆t = ω / f p = 2πf / f p (8.6)

która jest przykładowo równa 2π dla f = fp oraz −π i π dla −fp /2 i fp /2. Zastosowanie oznacze-
nia X(ejω ) w (8.5a) dla widma dyskretnego sygnału x(n) ma go odróżnić od widma X(jω)
ciągłego sygnału x(t). Konwencja ta będzie stosowana w całej dalszej części książki. Podobnie,
pulsacja Ω będzie konsekwentnie dalej oznaczała pulsację unormowaną względem częstotli-
wości próbkowania fp.
W celu wyprowadzenia wzoru odwrotnej transformacji Fouriera dla sygnałów dyskretnych,
umożliwiającego syntezę sygnału x(n∆t) na podstawie jego widma X(ejΩ), przypomnijmy, że
zgodnie z rozważaniami przeprowadzonymi w rozdziale czwartym (twierdzenie o próbkowa-
niu) X(ejΩ) jest funkcją okresową o okresie 2π, a my syntezujemy sygnał tylko z dolnopasmo-
wej części tego widma (oryginał lub jedna z „kopii”). W związku z tym wymnóżmy obie strony
równania (8.5b) przez e jΩm i scałkujmy je granicach od −π do π względem Ω:
Analiza częstotliwościowa sygnałów dyskretnych 195

π π ∞
 
∫ X ( e jΩ ) e jΩ m d Ω = ∫  n∑
=−∞
x( n∆t )e − jΩ n  e jΩ m d Ω =

−π −π

π N  π 
 N
− jΩ n  jΩ m
=  lim ∑
∫  N →∞ n =− N x ( n ∆ t )e  e d Ω = lim
N →∞
∑ 

x ( n ∆ t ) ∫ e jΩ ( m − n ) d Ω  =

−π  n =− N  −π 

∞  π 
= ∑  x ( n∆t ) e jΩ ( m − n )dΩ  = 2 πx (m∆t )
 ∫ 
(8.7a)
n = −∞  −π 
skąd otrzymujemy:
1 π jΩ jΩ m
x ( m ∆t ) = ∫ X (e ) e d Ω
2π −π
(8.7b)

W przekształceniach równania (8.7a) założyliśmy, że widmo XN(ejΩ):


N
X N (e jΩ ) = ∑ x(n)e − jΩn
n=−N

jest jednostajnie zbieżne do widma X(ejΩ) (8.5b) dla N dążącego do nieskończoności, co umoż-
liwiło nam zmianę kolejności całkowania i sumowania. Wykorzystaliśmy także właściwość
ortogonalności funkcji harmonicznych (bazy fourierowskiej):
π
jΩ ( m − n ) 2π, m = n
∫e dΩ = 
 0, m ≠ n
.
−π

Upraszczając ∆t we wzorach (8.5b)(8.7b), otrzymujemy dobrze znaną z literatury parę równań


transformacji Fouriera dla sygnału dyskretnego x(n):
+∞ 1 +π
( )
X e jΩ = ∑ x ( n ) e− j Ω n ,
n =−∞
x (n) =
2π −π
jΩ j Ωn
∫ X (e ) e d Ω (8.8a, b)

Jak widać sygnał dyskretny x(n) można zawsze odtworzyć z jego widma X(ejΩ), natomiast od-
tworzenie sygnału x(t) na podstawie x(n) jest możliwe tylko wtedy, kiedy częstotliwość prób-
kowania została odpowiednio dobrana (zgodnie z twierdzeniem Nyquista).
P r z y p o m n i j m y, baza fourierowska ejΩn = cos(Ωn)+jsin(Ωn), występująca w równaniu
(8.8a), jest taka sama dla Ω i Ω+k⋅2π, gdyż:
cos[( Ω + k 2 π)n ] = cos(Ωn + k 2πn ) = cos(Ωn ) cos(k 2πn ) − sin(Ωn ) sin(k 2πn ) = cos(Ωn )
sin[(Ω + k 2π)n ] = sin(Ωn + k 2πn ) = sin(Ωn ) cos( k 2πn ) + cos(Ωn ) sin( k 2πn ) = sin(Ωn )

W związku z tym widmo X(ejΩ) powtarza się okresowo co 2π. W praktyce wyznacza się jego
okres „podstawowy” dla [−π, π) lub [0, 2π). Jeśli podczas próbkowania spełnione było twier-
dzenie Kotielnikowa-Shannona („o próbkowaniu”), to z każdego z tych okresów można od-
tworzyć sygnał x(n). Otrzymujemy w ten sposób granice całkowania w równaniu (8.8b).
Zgodnie ze wzorem (8.7) zmienności Ω w przedziałach [−π, π) lub [0, 2π) odpowiada więc
zmienność częstotliwości sygnału x(n) w przedziałach [−fp/2, fp/2) lub [0, fp).
196 Analiza częstotliwościowa sygnałów dyskretnych

Przekształcenie Fouriera sygnałów dyskretnych ma kilka fundamentalnych właściwości, które


są dla nas bardzo ważne i z których wkrótce skorzystamy. Po pierwsze, jest to przekształcenie
liniowe, gdyż (x1(n)↔X1(ejΩ), x2(n)↔X2(ejΩ)):

∑ [ax1 (n) + bx2 (n )]e − jΩn = a ∑ x1 (n )e − jΩn + b ∑ x2 (n)e − jΩn = aX 1 (e jΩ ) + bX 2 (e jΩ )


∞ ∞ ∞
(8.9)
n = −∞ n = −∞ n = −∞

Po drugie, w module (wartości bezwzględnej) jest ono „niewrażliwe” na przesunięcie sygna-


łu, ponieważ (x(n) ↔ X(ejΩ), m = n−n0):

( )
∞ ∞ ∞
∑ x(n − n0 )e − jΩn = ∑ x(m)e − jΩ( m + n 0) = e − jΩn 0 ∑ x(m)e − jΩm = e − jΩn 0 X e jΩ (8.10)
n = −∞ n = −∞ n = −∞

Ze wzoru (8.10) wynika, że transformata Fouriera sygnału dyskretnego opóźnionego o n0 pró-


bek jest równa transformacie sygnału bez opóźnienia, pomnożonej przez e−jΩn0, czyli nie zmie-
nia się moduł transformaty tylko jej faza. Dodatkowo przekształcenie Fouriera sygnałów dys-
kretnych charakteryzuje się właściwością splotu (m = n−k):
∞  ∞  ∞  ∞ 
∑∑ x ( k ) y ( n − k )  e − j Ωn = ∑  ∑ x ( k ) y ( m)  e − j Ω ( m + k ) =
n =−∞  k =−∞  m =−∞  k =−∞ 
 ∞  ∞ 
 k =−∞   m =−∞ 
( ) ( )
=  ∑ x ( k ) e − j Ωk   ∑ y ( m ) e − j Ωm  = X e j Ω Y e j Ω (8.11)

i właściwością iloczynu:
∞ ∞   1 +π 
∑ [ x ( n ) y ( n ) ] e − j Ωn = ∑  x (n ) 
  2π ∫ ( )
Y e jΘ e j Θn d Θ   e− jΩn =

n =−∞ n =−∞   −π 

1 +π  ∞ − j ( Ω−Θ) n  jΘ 1 +π j ( Ω−Θ)
= ∫  ∑ x (n)e  Y (e ) d Θ = ∫ X (e ) Y ( e jΘ ) d Θ
2 π −π  n =−∞  2π −π
(8.12)
czyli podobnie jak dla całkowego przekształcenia Fouriera sygnałów ciągłych konsekwencją
splotu w jednej dziedzinie jest iloczyn w drugiej dziedzinie. Na koniec przypomnijmy jeszcze
raz: widmo X(ejΩ) zawsze powtarza się okresowo co 2π, czyli co częstotliwość próbkowania fp
(wniosek z rozdziału 4), oraz w przypadku sygnału rzeczywistego jego część rzeczywista jest
symetryczna, część urojona zaś − asymetryczna względem punktu Ω = 0, gdyż:

( )
+∞ ∞ ∞
X e j( +Ω0 ) = ∑ x(n )e − j Ω 0n = ∑ x(n) cos(Ω0n) − j ∑ x(n) sin(Ω0n) = X Re (Ω 0 ) − jX Im (Ω 0 )
n = −∞ n = −∞ n = −∞

( )
+∞ ∞ ∞
X e j ( −Ω 0 ) = ∑ x(n )e j Ω 0n = ∑ x(n) cos(Ω0n) + j ∑ x(n) sin(Ω0n) = X Re (Ω 0 ) + jX Im (Ω 0 )
n = −∞ n = −∞ n = −∞

Teraz zostaną przedstawione ilustracje graficzne widm X(ejΩ). W pokazywanych przypadkach


założono, że jest spełnione twierdzenie o próbkowaniu, tzn. że częstotliwość próbkowania jest
więcej niż dwa razy większa od maksymalnej częstotliwości występującej w sygnale. W takim
przypadku poprzesuwane widma X(j(ω−kωp)) (4.49) nie zachodzą na siebie. Szczegóły twier-
Analiza częstotliwościowa sygnałów dyskretnych 197

dzenia o próbkowaniu zostały przedstawione w rozdziale czwartym i tam odsyłamy Czytelnika,


który zaczął lekturę od tego rozdziału.

Przykład 1

Załóżmy, że zespolony sygnał x(t) ma widmo X(jω) przedstawione na rysunku 8.1a. Ponieważ
sygnał przyjmuje wartości zespolone, jego widmo jest niesymetryczne względem pulsacji
ω = 0. W związku z tym, po spróbkowaniu sygnały xδ(t) i x(n) mają widma Xδ(jω) i X(ejΩ),
które są także przedstawione na rysunku 8.1a. Obserwujemy w nich powtarzające się okresowo
co ωp (lub 2π) widmo X(jω). Zgodnie z (8.2) widma te są sumą poprzesuwanych widm X(jω):
∑X(j(ω−kωp)). Ponieważ założyliśmy spełnienie twierdzenia o próbkowaniu, poszczególne
widma X(j(ω−kωp)) nie zachodzą na siebie. Każde z nich daje więc nam pełną informację
o „oryginale”, czyli widmie X(jω). Wystarczy więc wyznaczyć widmo X(ejΩ) dla 0 ≤ Ω < 2π,
co odpowiada zmienności częstotliwości 0 ≤ f < fp. Na rysunku 8.1a interesujący nas „zakres”
widma (jego jeden okres) przedstawiono na szarym tle.
Sytuacja się upraszcza, kiedy analizowany sygnał przyjmuje wyłącznie wartości rzeczywiste.
Przypadek ten jest pokazany na rysunku 8.1b. Wówczas widmo X(jω) jest symetryczne wzglę-
dem ω = 0 i wystarczy wyznaczyć widmo X(ejΩ) tylko dla 0 ≤ Ω ≤ π, co odpowiada zmienności
częstotliwości 0 ≤f ≤ fp/2.

a) X(jω) Xδ(jω)=X(ejΩ)

0 -ωp 0 ωp ω
-2π 0 2π Ω

b) X(jω) Xδ(jω)=X(ejΩ)

0 -ωp 0 ωp/2 ωp ω
-2π 0 π 2π Ω

Rys. 8.1. Przykładowe widma X(jω), Xδ(jω) i X(ejΩ) (równania (8.3a), (8.2), (8.8a) sygnału x() o wartoś-
ciach: a) zespolonych (brak symetrii widma X(jω) względem ω = 0), b) rzeczywistych (występowanie syme-
trii widma X(jω) względem ω = 0)

Przykład 2

Na rysunku 8.2a jest przedstawione widmo Fouriera X(jω) (8.3a) ciągłego sygnału kosinuso-
idalnego:
198 Analiza częstotliwościowa sygnałów dyskretnych

(
x (t ) = cos( ω0t ) = 0,5 e jω0t + e − jω0t )
natomiast rysunek 8.2b prezentuje widmo Fouriera Xδ(jω) (8.2) sygnału x(t) po spróbkowaniu
go z częstotliwością fp (okresem ∆t = 1/fp, pulsacją ωp = 2πfp) szeregiem impulsów Diraca δ(t)
i równego:

xδ (t ) = cos(ω0t ) ⋅ ∑ δ(t − n∆t )
n = −∞

Jak widać w widmie Xδ(jω) co ωp powtarza się okresowo widmo X(jω), gdyż zgodnie z (8.2)
jest ono sumą poprzesuwanych widm ∑X(j(ω−kωp)). Z kolei widmo X(ejΩ) (8.8a) sygnału:
 f 
x (n ) = cos(ω0 ( n∆t ) ) = cos 2π 0 n  = cos(Ω 0n )
 f p 

jest identyczne jak Xδ(jω), tylko jego argumentem jest pulsacja unormowana. Ponieważ jest
analizowany sygnał rzeczywisty i jego widmo jest symetryczne, wystarczy wyznaczyć widmo
X(ejΩ) w przedziale [0, π).

a) X(jω) b) Xδ(jω)=X(ejΩ)

ω
-ω0 ω0
-ωp -ω0 ω0 ωp/2 ωp ω
-2π -Ω0 Ω0 π 2π Ω

Rys. 8.2. Widma: a) Fouriera X(jω) (8.3a) ciągłego sygnału kosinusoidalnego o pulsacji ω0, b) Xδ(jω) (8.2)
i X(ejΩ) (8.8a) tego samego sygnału po spróbkowaniu z częstotliwościąfp (pulsacją ωp), gdzie Ω = 2πf/fp

8.1.4. Szereg Fouriera dla sygnałów dyskretnych, czyli dyskretne


przekształcenie Fouriera

W praktycznych zastosowaniach numerycznych metod analizy fourierowskiej nie jest możliwe


zrealizowanie nieskończonych granic sumowania w równaniu (8.8a). Granice te są zawsze
skończone, w związku z czym w rzeczywistości nie jest transformowany cały sygnał tylko jego
fragment, np. o długości N próbek:
N −1 1 +π ( N ) jΩ jΩn
( )
X ( N ) e jΩ = ∑ x ( n ) e− j Ωn ,
n =0
x (n ) = ∫X
2π −π
( )
e e dΩ (8.13a, b)

Jest to równoznaczne z wyznaczaniem transformaty Fouriera iloczynu sygnału i okna prosto-


kątnego. Okno to „wycina” z sygnału jego fragment, który jest poddawany analizie. Zgodnie
z właściwością „iloczynu” sygnałów ciągłego przekształcenia Fouriera (4.14), w wyniku ana-
lizy jest wyznaczane nie widmo Fouriera sygnału, tylko splot widma sygnału i okna. Dodat-
kowo pulsacja Ω we wzorach (8.8b), (8.13b) przyjmuje wartości rzeczywiste z przedziału
(−π, π). Ponieważ jest ich nieskończenie wiele, z powodu ograniczeń praktycznej imple-
mentacji komputerowej, należy dokonać wyboru skończonej liczby wartości Ω, dla których
Analiza częstotliwościowa sygnałów dyskretnych 199

obliczone będą wartości widma X(N)(ejΩ). Teoretycznie wybór jest dowolny. Jednak im więcej
prążków (próbek) widma się wyznacza, tym lepiej będzie oddany rzeczywisty kształt „ciągłej”
funkcji X(N)(ejΩ) w przedziale −π ≤ Ω < π i tym łatwiejsza będzie jego interpretacja (zagad-
nienie to będziemy szerzej dyskutować w dalszej części tego rozdziału). Najczęściej oblicza
się tylko N prążków widma, czyli dokładnie tyle ile jest próbek sygnału. Prążki te próbkują
ciągłe widmo X(N)(ejΩ). Dla uproszczenia zakłada się, że analizowany sygnał jest sygnałem
okresowym o okresie N i że oblicza się jego N składowych harmonicznych. W związku z tym
równania w pełni dyskretnej, realizowalnej obliczeniowo, transformacji Fouriera (dyskretny
czas, dyskretna częstotliwość, skończona liczba próbek sygnału), wyprowadza się dyskretyzu-
jąc równania szeregu Fouriera dla sygnałów ciągłych. Wyprowadzenie to zostało przedstawio-
ne w rozdziale trzecim. W jego wyniku otrzymuje się następującą parę równań:
N −1 2π
1 −j kn
X (k ) =
N
∑ x (n)e N , k = 0, 1, 2, , , , N − 1 (8.14a)
n =0

N −1 2π
j kn
x (n) = ∑ X ( k )e N , n = 0, 1, 2,..., N − 1 (8.14b)
k =0

W literaturze transformacja (8.14) jest powszechnie nazywana dyskretną transformacją Fou-


riera (DFT). Liczni autorzy przenoszą dzielenie przez N z równania (8.14a) do równania
(8.14b):
N −1 2π
−j kn
X (k ) = ∑ x ( n )e N , k = 0, 1, 2, , , , N − 1 (8.15a)
n=0

N −1 2π
1 j kn
x (n) =
N
∑ X ( k )e N , n = 0, 1, 2,..., N − 1 (8.15b)
k =0

Jak wiemy już z rozdziału 2.4, DFT jest transformacją ortogonalną w przestrzeni wektorowej
N-wymiarowej.
Dyskretna transformacja Fouriera (8.14), (8.15) jest szczególnym przypadkiem przekształcenia
(8.8) w sytuacji, kiedy jest analizowany sygnał dyskretny x(n) o okresie N:
x (n ) = x( n + mN )
gdyż wówczas wystarczy przeanalizować częstotliwościowo tylko jeden okres tego sygnału, na
przykład:
x N (n ) = x ( n ), n = 0, 1, 2,..., N − 1 (8.16)
i to tylko względem wybranych pulsacji Ωk, związanych z wielokrotnością jego okresu:
1 2π
f k = kf 0 = k , Ω k = ωk ∆t = 2πf k ∆t = k , k = 0, 1, 2, ..., N−1 (8.17)
N∆t N
Po wyznaczeniu widma X N ( e jΩk ) = DFT ( x N (n )) , k = 0, 1, ..., N−1, ze wzoru (8.14a) można na
podstawie (8.14b) odtworzyć N próbek sygnału x N (n ) = IDFT ( X N (e jΩk )) , n = 0, 1, 2, ..., N−1,
a po uwzględnieniu okresowości − cały sygnał x(n). W takim przypadku naturalnym wydaje się
wniosek, że w przypadku dyskretnych sygnałów okresowych DFT powinno mieć wszystkie
właściwości przekształcenia Fouriera (8.8), z tą różnicą, że miejsce ciągłego, okresowego wid-
ma X(ejΩ) zajmie w tym przypadku dyskretne („prążkowe”), także okresowe widmo X (e jΩk ) .
200 Analiza częstotliwościowa sygnałów dyskretnych

Niezależnie od tego spostrzeżenia, wyprowadzimy obecnie podstawowe właściwości DFT


(8.15).
1) Liniowość:
 2π   2π   2π 
N −1 − j k  n N −1 − j k  n N −1 − j k  n
∑ [ax( n ) + by (n )] e N  = a ∑ x( n) e N  + b ∑ y (n ) e N  = aX (k ) + bY (k ) (8.18)
n =0 n =0 n =0

2) Niewrażliwość na przesunięcie w module (m = n−n0):


N −1  2π  N −1  2π   2π 
− j k  n − j  k  (m + n0 ) − j  k  n0
∑ x ( n − n0 )e  N  = ∑ x ( m )e  N  =e  N  X (k ) (8.19)
n =0 m=0

3) Własność splotu. Załóżmy, że X(k) i Y(k) oznaczają DFT sygnałów x(n) i y(n). Niech Z(k) =
= X(k)Y(k). Wyznaczmy obecnie sygnał z(l), l = 0...N−1, jako IDFT widma Z(k):
N −1 2π N −1 2π
1 j kl 1 j kl
z (l ) =
N
∑ Z (k ) e N =
N
∑ [ X (k )Y ( k )] e N = (8.20)
k =0 k =0

N −1  N −1 −j
2 π   N −1
− j km   j kl
2π 2π N −1 N −1  N −1 j 2 π k (l − m − n ) 
1 kn 1
= ∑  ∑ x(n)e N 
  m∑
y ( m) e N   e N

= ∑ ∑ x ( n ) y ( m ) ∑ e N 
N k =0 
 n = 0   =0 
N n=0 m=0  k = 0 
Wyrażenie w nawiasie kwadratowym jest sumą skończonego szeregu potęgowego, która jest
równa:
N −1  N dla a = 1

∑ a k = 1 − a N dla a ≠ 1
(8.21)
k =0  1 − a

ponieważ:
N −1 N −1
1− aN
∑ak = S ⇒ a ∑ a k = aS = S + a N − a 0 ⇒ S=
1− a
(8.22)
k =0 k =0

W naszym przypadku:

j (l − m −n )
a=e N , aN = 1
W związku z tym mamy:
N −1 N gdy l − m − n = pN , p ∈ Z
∑ ak = (8.23)
k =0 0 w przeciwnym przypadku

i w konsekwencji z (8.20) otrzymujemy:


N −1
z(l ) = ∑ x(n) y(l − n), l = 0, 1, 2,..., N − 1 (8.24)
n =0

ponieważ sygnał y(m) jest okresowy (y(l−n−pN) = y(l−n)). Ze wzorów (8.20) i (8.24) wynika,
że splotowi (8.24) dwóch sygnałów w dziedzinie czasu odpowiada iloczyn ich widm DFT
w dziedzinie częstotliwości. Podczas analizy DFT zakładamy jednak okresowość sygnałów
Analiza częstotliwościowa sygnałów dyskretnych 201

(okres równy N próbek), dlatego sygnały x(n) i y(n) we wzorze (8.24) są okresowe. Załóżmy,
że dysponujemy próbkami: xN(n) = x(n), yN(n) = y(n), n = 0...N−1. Mamy wówczas y(l−n) =
= yN((l−n)N), gdzie (n)N oznacza indeks modulo-N. Próbka o numerze leżącym poza „zakre-
sem” jest więc zastępowana przez odpowiadającą jej próbkę o indeksie z przedziału 0...N−1.
Cyklicznie odnosimy się więc do próbek yN(n), n = 0...N−1. Z tego powodu splot sygnałów
okresowych (8.24) jest nazywany splotem cyklicznym.
4) Własność iloczynu. W analogiczny sposób jak wyżej można wykazać, że iloczynowi dwóch
sygnałów okresowych:
z (n ) = x(n ) y (n ), n = 0, 1, 2,..., N − 1 (8.25)
odpowiada c y k l i c z n y splot ich widm DFT:
N −1
1
Z (k ) =
N
∑ X ( p )Y (k − p), k = 0, 1, 2,..., N − 1 (8.26)
p=0

gdyż
N −1 −j
2π N −1 −j
2π N −1  N −1 2π  1 N −1 2π   − j 2 π kn
kn kn 1 j pn j qn
Z (k ) = ∑ z ( n )e N = ∑ [ x ( n) y ( n) ] e N = ∑  N ∑ X ( p)e N 
N ∑ Y ( q )e N  e N =

n =0 n= 0 n =0  p =0  q=0 

1 N −1 N −1  N −1 j 2 π n ( p + q − k )  1 N −1
=
N2
∑ X ( p ) ∑  ∑ e N
Y ( q ) =
 N
∑ X ( p)Y (k − p ) (8.27)
p =0 q=0  n = 0  p =0

Splot (8.26) jest cykliczny, ponieważ widmo Y (e jΩk ) dyskretnego sygnału x(n) powtarza się
okresowo co 2π. W związku z czym analogicznie jak poprzednio mamy Y(k−p) = YN( (k−p)N ).
5) (A)symetria DFT sygnału rzeczywistego. Dla sygnału rzeczywistego x(n) mamy:
2π N  2π 2π
N  N −1 − j  +k  n N −1 − j kn N −1 − j kn
X  + k  = ∑ x ( n ) e N  2  = ∑ x ( n )e − jπn e N = ∑ [ x( n )( −1)n ] e N (8.28)
2  n =0 n =0 n =0

Analogicznie wykazujemy, że:



N  N −1 j kn
X  − k  = ∑ [ x ( n )( −1)n ] e N (8.29)
2  n =0
skąd wynika równość
N  N 
X  + k  = X * − k  (8.30)
2  2 
N/2-ty prążek widma X(k), k = 0, 1, 2, ..., N−1 leży więc na osi symetrii: względem niego część
rzeczywista jest symetryczna (Real(X(N/2+k) = Real(X(N/2−k)), a część urojona − asymetrycz-
na (Imag(X(N/2+k) = −Imag(X(N/2−k)), czyli użyteczna informacja jest zawarta tylko w pier-
wszych N/2+1 prążkach (k = 0, 1, 2, ..., N/2), odpowiadających częstotliwościom fk (8.17),
zmieniającym się od zera do fp/2 z krokiem fp/N. Jeśli dodatkowo zauważymy, że zawsze
Imag(X(0)) = 0 oraz Imag(X(N/2)) = 0, to okazuje się, że widmo DFT N próbek sygnału
rzeczywistego jest w pełni określone przez N liczb rzeczywistych: Real(X(k)) dla k = 0, 1, 2,
..., N/2 oraz Imag(X(k)) dla k = 1, 2, 3, ..., N/2−1.
202 Analiza częstotliwościowa sygnałów dyskretnych

Istnieje wiele metod optymalizacji numerycznej równań (8.14)(8.15), prowadzących do mini-


malizacji liczby wykonywanych operacji arytmetycznych. W ich wyniku otrzymuje się algoryt-
my tzw. szybkich transformacji Fouriera (ang. FFT − Fast Fourier Transform). To one są
najczęściej stosowane w praktyce do analizy częstotliwościowej sygnałów. Problem efekty-
wnego wyznaczania numerycznego transformacji (8.14), (8.15) będzie przedmiotem naszego
zainteresowania w następnym, dziewiątym rozdziale.

8.2. Przykłady dyskretnych transformat Fouriera sygnałów


Obecnie jako ilustrację powyższych rozważań przedstawimy przykłady widm X(N)(ejΩ)/N =
= X(N)(ej2πf/fpr)/N (8.13a) i X(k) (8.14a) dla dwóch sygnałów dyskretnych: x1(n) = pT(n∆t−T)
(4.26) oraz x2(n) = cos(2πf1(n∆t))+0,5sin(2πf2(n∆t)) = cos(2π(f1/fpr)n)+0,5sin(2π(f2/fpr)n), n =
= 0, 1, 2, ..., N−1, okres próbkowania ∆t = 1/fpr. Przyjmijmy następujące wartości parametrów:
f1 = 1 Hz, f2 = 2 Hz, fpr = 16 Hz, skąd ∆t = 1/fpr = 1/16 s, N = 16, T = 4∆t = 1/4 s. Przypomnij-
my, zmienności k = 0, 1, 2, ..., N−1 odpowiadają częstotliwości określone wzorem (8.17).
Wyniki analizy są przedstawione na rysunku 8.3, po lewej stronie dla sygnału x1(n), po prawej
zaś − dla sygnału x2(n). W pionie kolejno są zaprezentowane: analizowane sygnały x1(n) i x2(n)
oraz części rzeczywiste, urojone, moduły i fazy ich widm (odpowiednio funkcje: Re(.), Im(.), |.|
oraz φ(.)). Za pomocą symboli „•” oznaczono pobrane próbki sygnałów oraz „prążki” chara-
kterystyk częstotliwościowych dyskretnych widm X1(k) i X2(k), natomiast linią ciągłą na ry-
sunkach zaznaczono odpowiednie charakterystyki widm X1(N)(ej2πf/fpr)/N i X2(N)(ej2πf/fpr)/N, obli-
czone dla częstotliwości f z przedziału [0, fpr). Charakterystyki ciągłe stanowią odniesienie dla
charakterystyk dyskretnych. W przypadku charakterystyki fazowej symbolem „³” oznaczono
punkty, w których obliczenie wartości kąta liczby zespolonej nie było możliwe, ponieważ
moduł tej liczby był równy zero. W takim przypadku za wynik analizy przyjmowano średnią
wartość kątów „lewego” i „prawego” sąsiada punktu nieciągłości „ciągłej” charakterystyki
fazowej. Ponieważ w eksperymencie przyjęto N = 16 i fpr = 16 Hz, oś pozioma charakterystyk
częstotliwościowych jednocześnie „pokazuje” numery kolejnych prążków widm dyskretnych
X1(k) i X2(k) (k = 0, 1, 2, ..., 5) oraz ciągłą częstotliwość f w hercach z zakresu [0, 16 Hz) dla
widm ciągłych X(N)(ejΩ)/N i Y(N)(ejΩ)/N (Ω = 2πf/fpr).
Na podstawie rysunku 8.3 można wyciągnąć następujące wnioski.
1) „Prążki” X(k) dyskretnej transformacji Fouriera „próbkują” ciągłe widmo X(N)(ejΩ)/N w za-
kresie częstotliwości [0, fpr). Zgodnie z (8.17) „próbek” widma jest dokładnie tyle samo ile
próbek sygnału wejściowego, czyli N. W związku z tym należy zachować dużą ostrożność
„interpretacyjną”, gdyż próbkowanie widma może być dla nas mniej lub bardziej korzystne.
Ilustrację zupełnie nieoczekiwanych problemów interpretacyjnych, mogą stanowić widma
dwóch „krystalicznie czystych”, pojedynczych sygnałów sinusoidalnych x3(t) = sin(2π(f3/fpr)n)
oraz x4(t) = sin(2π(f4/fpr)n) dla f3 = 2 Hz i f4 = 2,5 Hz, przedstawione na rysunku 8.4. Parametr
fpr oznacza jak poprzednio częstotliwość próbkowania równą 16 herców. Pierwsze z widm, po-
kazane na rysunku 8.4a, jest zgodne z naszymi oczekiwaniami: ponieważ w sygnale występuje
tylko jedna „częstotliwość”, więc tylko jeden prążek widma jest niezerowy. Natomiast drugie
widmo, zaprezentowane na rysunku 8.4b, zawsze wprawia nowicjuszy w zakłopotanie i pro-
wadzi do komentarza: „dlaczego tak wiele prążków jest różnych od zera? przecież w sygnale
występuje tylko jedna (ko)sinusoida!” Idealne widma, podobne do tego z rysunku 8.4a, są
otrzymywane tylko wtedy, kiedy za pomocą N-punktowego DFT analizowany jest dyskretny
Analiza częstotliwościowa sygnałów dyskretnych 203

1 x1(t) 2
x2(t) x2(n)
0.8 1
0.6
x2(n) 0
0.4
0.2 -1
0 -2
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
t [s] t [s]

Re( X1(ej2πf /fpr) ) Re( X2(ej2πf /fpr) )


0.5 0.5
0.4 0.4
0.3 0.3
0.2 0.2
0.1 0.1
0 0
-0.1 -0.1
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]

Im( X1(ej2πf /fpr) ) Im( X2(ej2πf /fpr) )


0.4 0.4
0.2 0.2
0 0
-0.2 -0.2
-0.4 -0.4
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]

|X1(ej2πf /fpr)| |X2(ej2πf /fpr)|


0.5 0.5
0.4 0.4
0.3 0.3
0.2 0.2
0.1 0.1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]

)( X1(ej2πf /fpr) ) )( X2(ej2πf /fpr) )


3 3
2 2
1 1
0 0
-1 -1
-2 -2
-3 -3
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]
Rys. 8.3. Widma X(N)(ej2πf/fpr)/N (8.13a) (linia ciągła) i X(k) (8.14a) (punkty „•”) dla dwóch sygnałów
dyskretnych: x1(n) = pT(n∆t−T) oraz x2(n) = cos(2πf1(n∆t))+0,5sin(2πf2(n∆t)), n = 0, 1, 2,..., N−1. Wartości
parametrów: N = 16, fpr = 16 Hz, skąd ∆t = 1/fpr = 1/16 s, T = 4∆t = 1/4 s, f1 = 1Hz, f2 = 2 Hz
204 Analiza częstotliwościowa sygnałów dyskretnych

a) fx = 2 Hz b) fx = 2,5 Hz
|X3(N)(ej2πf /fpr)| |X4(N)(ej2πf /fpr)|
0.5 0.5
0.4 0.4
0.3 0.3
0.2 0.2
0.1 0.1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]

|X3(k)| |X4(k)|
0.5 0.5
0.4 0.4
0.3 0.3
0.2 0.2
0.1 0.1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
k k
Rys. 8.4. Moduł transformaty Fouriera dwóch N = 16-punktowych sygnałów sinusoidalnych: a) x3(n) =
= sin(2π(f3/fpr)n), f3 = 2 Hz, b) x4(n) = sin(2π(f4/fpr)n), f4 = 2,5 Hz, spróbkowanych z częstotliwością fpr =
= 16 Hz. Linią ciągłą zaznaczono widmo ciągłe X(N)(ej2πf/fpr)/N (8.13a), a kropkami „•” wynik z N-pun-
ktowego DFT X(k) (8.14a)

sygnał powtarzający się okresowo co N próbek (x(n) = x(n+N)). Wówczas występują w nim
wyłącznie „częstotliwości” sprawdzane przez DFT, czyli określone przez wzór (8.17). Ale
przecież wcale tak być nie musi: częstotliwość pracy przetwornika analogowo-cyfrowego
i liczba próbek poddawanych analizie najczęściej nie jest „zsynchronizowana” z okresem syg-
nału, którego nie znamy. Bardzo często analizowane sygnały w ogóle nie są okresowe. Dlatego
od razu przygotujmy się przede wszystkim do analizy widm „rozmytych” (rysunek 8.4b).
W tym miejscu należy także zwrócić uwagę na fakt, że w DFT jest analizowany fragment syg-
nału „wycięty” przez okno prostokątne (a więc sygnał nie jest modyfikowany w amplitudzie).
Podczas analizy częstotliwościowej często DFT poddaje się fragment sygnału „wycięty” przez
inne funkcje okien, np. Blackmana, Dolpha-Czebyszewa, Hamminga, Hanninga, Kaisera. I to
nie bez powodu (o tym w dalszej części rozdziału). Ale w takiej sytuacji „idealnego” widma
z rysunku 8.4a nigdy się nie osiągnie, gdyż zmniejszenie amplitudy „oscylacji” widma jest
uzyskiwane kosztem „rozmycia” jego „prążków”.
I jeszcze jedna, ostatnia dygresja. Dyskretna transformacja Fouriera (8.14)(8.15) jest transfor-
macją zawsze odwracalną. Stanowi ona zawsze w stu procentach udaną aproksymację N-ele-
mentowego wektora próbek analizowanego sygnału (nawet impulsowego) za pomocą N orto-
gonalnych wektorów bazowych N-elementowych (przykład N-wymiarowej przestrzeni wekto-
rowej − patrz rozdział 2). Ale w sytuacji kiedy w sygnale występuje składowa sinusoidal-
na, która nie jest „obecna” w zbiorze wektorów bazowych, to musi ona zostać przedstawiona
Analiza częstotliwościowa sygnałów dyskretnych 205

jako suma większej liczby sygnałów „bazowych”, czyli jej widmo ulega „rozmyciu” (patrz ry-
sunki 2.4 i 2.5).
2) Część rzeczywista widma Fouriera reprezentuje „zawartość” w sygnale składowych kosinu-
soidalnych, a część urojona − składowych sinusoidalnych.
3) Dla sygnałów rzeczywistych część rzeczywista oraz moduł widma są symetryczne względem
prążka N/2, a część urojona i faza widma są asymetryczne względem tego punktu. W roz-
patrywanym przypadku N/2 równa się 8. Dlatego w praktyce wystarczy wyznaczać „prążki”
widma X(k) o indeksach k = 0, 1, 2, ..., N/2.
4) Z powodu (a)symetrii każda częstotliwość „występuje” w widmie dwa razy. W związku
z czym jej amplituda jest dwukrotnie mniejsza. Przykładowo wysokość prążka widma Re(Y(k))
i |Y(k)| dla częstotliwości równej 1 herc wynosi 0,5, pomimo tego, że składowa sygnału
cos(2πf1(n∆t)), f1 = 1 Hz, ma amplitudę równą 1. Podobnie Im(Y(k)) i |Y(k)| dla częstotliwości
równej 2 herce wynosi 0,25, choć amplituda składowej 0,5sin(2πf2(n∆t)), f2 = 2 Hz, jest równa
0,25.
5) W widmie ciągłym X(N)(ejΩ)/N (Ω = 2πf/fpr) (8.13a) niektóre częstotliwości mogą się „zle-
wać”. Taka sytuacja występuje dla składowych 1 i 2 herce w analizowanym sygnale x2(n). Re-
ceptą na to jest zwiększenie rozdzielczości częstotliwościowej analizy poprzez zwiększenie
liczby analizowanych próbek. Przykładowo na rysunku 8.5 po lewej stronie przedstawiono mo-
duł widma |X2(N)(ej2πf/fpr)/N| w sytuacji, kiedy analizujemy coraz dłuższy fragment sygnału x2(n)
jak poprzednio, czyli kolejno dla N = 16, 32 i 64 próbek. Jak widać powoduje to „odseparo-
wanie” od siebie składowych 1 Hz i 2 Hz w widmie ciągłym, tym lepsze im więcej próbek
analizujemy. Ponieważ równocześnie widmo jest próbkowane coraz gęściej, także w widmie
dyskretnym separacja ta jest także coraz lepiej widoczna.
W sytuacji kiedy nie jest możliwe „wydłużenie” fragmentu analizowanego sygnału, można do
posiadanych N próbek sygnału dodać na końcu M próbek o wartościach zerowych i obliczyć
DFT tak „spreparowanych” danych. W takim przypadku spróbkujemy przedział częstotliwości
[0, fpr) w N+M punktach, czyli gęściej niż poprzednio. Najczęstszym źródłem krótkich „zapi-
sów” danych są macierze, składające się ze względnie małej liczby równoodległych czujników.
Analizowany wektor danych otrzymuje się w nich poprzez jednoczesne „zatrzaśnięcie” sygna-
łów chwilowych na wszystkich czujnikach. Taka sytuacja ma miejsce podczas estymacji „kie-
runku przybycia” (ang. DOA − Direction of Arrival) wroga w pasywnych systemach rada-
rowych.
Na rysunku 4.5b (prawa strona) przedstawiono wyniki zastosowania przedstawionej metody
w stosunku do sygnału x2b(n) = cos(2π(f1/fpr)n)+0,5sin(2π(f2/fpr)n), f1 = 1 Hz, f2 = 2,2 Hz, n = 0,
1, 2, ..., 15. Do N = 16 próbek sygnału dodajemy na końcu kolejno 16, 48 i 112 wartości
zerowych. Jak widać w przypadku dodania zer widmo ciągłe ma ciągle taki sam kształt. Nie
powinno to dziwić, ponieważ za każdym razem jest ono wyznaczane na podstawie takiej samej
„wiedzy” o sygnale (tylko 16 próbek). Natomiast wraz ze wzrostem liczby zer widmo dys-
kretne coraz „gęściej” próbkuje widmo ciągłe i coraz lepiej trafia w jego lokalne maksima.
6) Dla częstotliwości, w których zeruje się charakterystyka amplitudowa, w charakterystyce fa-
zowej występuje skok o +π radianów. W rozdziale 12.1 pokażemy, że przedstawienie widma
Fouriera sygnału w postaci X(ejΩ) = A(Ω)ejΨ(Ω) i dopuszczenie ujemności funkcji A(Ω) (jej
przejść przez zero) powoduje, że funkcja Ψ(Ω) będzie ciągła (patrz rysunek 12.1).
206 Analiza częstotliwościowa sygnałów dyskretnych

a) b)
|X2a(N)(ej2πf /fpr)| |X2b(N)(ej2πf /fpr)|
0.5 0.6
0.4
0.4
0.3
0.2
0.2
0.1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]

|X2a(N)(ej2πf /fpr)| |X2b(N)(ej2πf /fpr)|


0.5 0.3
0.4
0.2
0.3
0.2
0.1
0.1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]

|X2a(N)(ej2πf /fpr)| |X2b(N)(ej2πf /fpr)|


0.5 0.15
0.4
0.1
0.3
0.2
0.05
0.1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
f [Hz] f [Hz]
Rys. 8.5. Ilustracja metod zwiększania rozdzielczości analizy częstotliwościowej realizowanej metodą DFT:
a) analiza większej liczby próbek sygnału: x2a(n) = cos(2π(f1 / fpr)n)+0,5sin(2π(f2 / fpr)n), f1 = 1 Hz, f2 = 2 Hz,
n = 0, 1, 2, ..., N−1, dla N = 16, 32 i 64 próbek (kolejno od góry do dołu); b) uzupełnienie N próbek sygnału
na końcu M zerami: x2b(n) = cos(2π(f1 / fpr)n)+0,5sin(2π(f2 / fpr)n), f1 = 1 Hz, f2 = 2,2 Hz, n = 0, 1, 2, ..., 15,
dodanie M = 0, 16, 48 wartości zerowych (kolejno od góry do dołu)

8.3. Interpretacja dyskretnego przekształcenia Fouriera


Obecnie zajmiemy się zagadnieniem właściwej interpretacji dyskretnego widma sygnału dys-
kretnego jako estymaty ciągłego widma sygnału ciągłego. W praktycznych zastosowaniach
analizy częstotliwościowej interesuje nas bowiem widmo ciągłego sygnału rzeczywistego,
generowanego przez obserwowany obiekt fizyczny, a nie jego „odbicie” uzyskane „w krzywym
zwierciadle” metod komputerowych. W związku z tym przyjrzymy się obecnie bliżej
Analiza częstotliwościowa sygnałów dyskretnych 207

związkom pomiędzy widmami X(jω), X(ejΩ), X(N)(ejΩ) i X(k) zdefiniowanymi przez równania
(8.3), (8.8), (8.13) i (8.14).
Przed przystąpieniem do dalszej lektury niniejszego podrozdziału jest wskazane przypomnie-
nie sobie materiału zaprezentowanego w podrozdziałach 4.3 − 4.6. Metodologia analizy czę-
stotliwościowej sygnałów dyskretnych jest bowiem nierozerwalnie związana z metodologią
analizy częstotliwościowej sygnałów ciągłych. Nie powinno to dziwić, ponieważ sygnały dys-
kretne powstają w wyniku spróbkowania sygnałów ciągłych. Równocześnie interesują nas ce-
chy „oryginałów”, a nie ich „kopii”. Teraz szczególnie są istotne dla nas rysunki 4.16 − 4.18.
W celu zachowania kompletności rozważań prowadzonych w tym rozdziale część z tych
rysunków powtórzymy w nieco zmienionej formie. Obecnie zostaną przedstawione jedynie
moduły wszystkich widm.
Na rysunku 8.6 jest zaprezentowany przypadek analizy częstotliwościowej spróbkowanego fra-
gmentu sygnału kosinusoidalnego xw(n) (rysunek 8.6g). Moduł jego ciągłego widma Fouriera
jest pokazany na rysunku 8.6h. Po „spróbkowaniu” jednego okresu tego modułu otrzymujemy
„prążki” widma „•” przedstawione na rysunku 8.6i. Ale dlaczego moduł widma z rysunku 8.6h
ma właśnie taką postać? Prześledźmy po kolei rysunki. Na rysunku 8.6a widzimy „cały” anali-
zowany ciągły sygnał x(t), a na rysunku 8.6b − moduł jego widma |X(jω)|, zgodny ze wzorem
(4.31a). Niestety analizie częstotliwościowej możemy poddać tylko fragment sygnału. „Wyci-
namy” go w najprostszy sposób za pomocą prostokątnego okna „obserwacji” w(t) (funkcja
pT(t−T) (4.26)), pokazanego na rysunku 8.6c. Moduł widma funkcji „okna” |W(jω)| jest przed-
stawiony na rysunku (8.6d) i zgodny z (4.26), ponieważ przesunięcie w czasie powoduje tylko
przesunięcie fazowe widma (4.10). Wynik działania funkcji „okna” jest zaprezentowany na
rysunku 8.6e. Jest to sygnał xw(t) = x(t)w(t), czyli fragment sygnału ciągłego x(t). W związku
z tym, że jest on wynikiem iloczynu dwóch sygnałów, jego widmo Xw(jω) jest równe splotowi
widm sygnałów mnożonych (4.14), czyli X(jω) i W(jω). Dodatkowo X(jω) = 0,5δ(ω−ω0)+
+0,5δ(ω+ω0), stąd Xw(jω) = W(j(ω−ω0))+W(j(ω+ω0)). Mając na uwadze rysunki 8.6a i 8.6d,
akceptujemy kształt modułu widma |Xw(jω)|, przedstawiony na rysunku 8.6f. Teraz pozostaje
tylko spróbkować sygnał xw(t) z częstotliwością fp (fp > 2fmax sygnału), czyli z pulsacją
ωp = 2πfp. W wyniku tej operacji otrzymujemy zbiór próbek xw(n), oznaczonych za pomocą
symbolu „•” na rysunku 8.6g. Zgodnie z twierdzeniem o próbkowaniu i równaniem (4.49),
moduł widma |Xw(jω)| sygnału dyskretnego xw(n), n = 0, 1, 2, ..., N−1, powinien być równy
sumie przeskalowanych w amplitudzie i przesuniętych o kωp modułów widm |Xw(j(ω+ωp)|
sygnału ciągłego xw(t). Potwierdza to rysunek 8.6h. Widmo |Xw(jω)| powtarza się co ωp, dlatego
wystarczy, że zainteresujemy się tylko jednym jego okresem i go „spróbkujemy”. Uzyskamy
wówczas prążki widma, oznaczone symbolem „•” na rysunku 8.6i. Jak widać otrzymaliśmy
„jakościowo” taki sam rezultat jak ten przedstawiony na rysunku 8.4. Wiemy więc już do-
kładnie jakie jest jego pochodzenie.
Rysunek 8.6 powinien nas jednoznacznie przekonać, że opłacała się matematyczna „wspi-
naczka” przeprowadzona w rozdziale czwartym.
Na rysunku 8.7 pokazano przypadek analizy fragmentu sygnału kosinusoidalnego „wyciętego”
przez „okno” Hanninga (tabela 4-1) i spróbkowanego. Całe rozumowanie przeprowadzane jest
analogicznie jak powyżej. Inne jest jedynie okno (rysunek 8.7c) i moduł jego widma (rysunek
8.7d). Widmo |W(jω)| jest szersze, ale za to charakteryzuje się zdecydowanie mniejszymi oscy-
lacjami. Co to powoduje? W widmie sygnału, który będzie się składał z kilku składowych
kosinusoidalnych o różnych częstotliwościach, szybciej mogą się „zlać” wierzchołki, należą-
ce do częstotliwości leżących blisko siebie. Ale równocześnie łatwiej będzie można za-
uważyć wierzchołek składowej kosinusoidalnej o odległej częstotliwości i małej amplitudzie,
208 Analiza częstotliwościowa sygnałów dyskretnych

a) x(t) b) X(ω)

t
ω
-ω0 ω0

c) w(t) d)
|W(ω)|

t
ω
0 T

e) xw(t)=x(t)w(t) f)
|Xw(ω)|=|X(ω)⊗W(ω)|

0 T ω
-ω0 ω0

|Xw(n)(ω)|
g) xw(n) h)

0 N
ω

-2ωp -ωp 0 ωp 2ωp

|Xw(n)(ω)|
i)

0 ω0 ωp-ω0 ωp

Rys. 8.6. Przykładowe widmo fragmentu sygnału kosinusoidalnego, „wyciętego” przez okno prostokątne
i potem spróbkowanego
Analiza częstotliwościowa sygnałów dyskretnych 209

a) x(t) b) X(ω)

t
ω

-ω0 ω0

c) w(t) d) |W(ω)|

t
ω
0 T

e) xw(t)=x(t)w(t) f)
|Xw(ω)|=|X(ω)⊗W(ω)|

0 T ω
-ω0 ω0

|Xw(n)(ω)|
g) xw(n) h)

0 N ω

-2ωp -ωp 0 ωp 2ωp

|Xw(n)(ω)|
h)

ω
0 ω0 ωp-ω0 ωp
Rys. 8.7. Przykładowe widmo fragmentu sygnału kosinusoidalnego, „wyciętego” przez okno Hanninga i po-
tem spróbkowanego
210 Analiza częstotliwościowa sygnałów dyskretnych

ponieważ nie będzie już on ginął w „gąszczach” oscylacji bocznych składowych o dużej amp-
litudzie. Kształt widma okna ma więc decydujący wpływ na rozdzielczość częstotliwościową
i amplitudową analizy, przeprowadzanej za pomocą DFT. Dla sygnałów ciągłych i okna pro-
stokątnego problem rozdzielczości częstotliwościowej i amplitudowej był pokazany na rysunku
4.6. Z rysunków 8.6 i 8.7 wynika, że po spróbkowaniu sygnałów fragmentów ciągłych problem
rozdzielczości będzie w analogiczny sposób dotyczył analizy częstotliwościowej fragmentów
sygnałów dyskretnych.
W żargonie specjalistów transformata Fouriera okna, czyli jego widmo, ma „listek” główny
oraz „listki” boczne. Im węższy jest listek główny, tym łatwiej można rozróżnić dwie często-
tliwości leżące blisko siebie. Im większe tłumienie mają listki boczne, tym wyraźniej „widać”
w widmie sygnał o małej amplitudzie, występujący w listkach bocznych składowej o większej
amplitudzie. Zamiast okna prostokątnego do wycięcia fragmentu sygnału z sygnału nieskoń-
czonego można użyć innej funkcji, np. Hanna, Hamminga, Blackmana, Kaisera. Powoduje to
rozszerzenie listka głównego i równoczesne obniżenie poziomu oscylacji listków bocznych.
Wielkość tych zmian można kontrolować odpowiednio zmieniając kształt okna. Widmo okna
powinno być jak najwęższe (wąski „listek główny”), a jego oscylacje boczne powinny być jak
najmniejsze (niskie „listki boczne”).
Co z tego wynika? Bardzo wiele. Jeśli wykorzystujemy DFT do analizy częstotliwościowej, nie
możemy zapomnieć o wpływie wyboru okna na kształt otrzymanego widma i oferowaną przez
niego rozdzielczość częstotliwościową i amplitudową. „Bezkrytyczne” stosowanie wzorów
(8.14) i (8.15) jest równoznaczne z użyciem okna prostokątnego.

Dalszą część tego rozdziału w całości poświęcimy „magii” wybranych funkcji okien.

Na koniec tego podrozdziału wykorzystamy jeszcze zdobytą w nim wiedzę do wytłumaczenia


dwóch technik polepszania rozdzielczości częstotliwościowej analizy, które były przedstawio-
ne na rysunku 8.5. W pierwszym przypadku (rysunek 8.5a) zwiększano liczbę analizowanych
próbek sygnału. Jest to równoznaczne ze zwiększeniem długości okna prostokątnego analizy,
a to prowadzi do zawężenia widma okna (patrz rysunek 4.7). W wyniku tego ciągłe widma
X(N)(ej2πf/fpr)/N składowych sygnału przestały się „zlewać”. Równocześnie widmo było prób-
kowane gęściej, gdyż N rosło. W drugim przypadku (rysunek 8.5b) analizowano stałą liczbę
próbek sygnału, która była w sztuczny sposób uzupełniona coraz większą liczbą zer. Długość
okna prostokątnego „wycinającego” analizowany fragment sygnału była więc stała, a to powo-
dowało, że kształt ciągłego widma X(N)(ej2πf/fpr)/N także był niezmienny. Dodawanie zer powo-
dowało jedynie gęściejsze próbkowanie tego widma, czyli znalezienie jego potencjalnych
załamków wskazujących na istnienie większej liczby składowych częstotliwościowych. Jak
widać ponownie dobra znajomość „świata” sygnałów analogowych pozwala na łatwą inter-
pretację zjawisk obserwowanych w „świecie” cyfrowym.

8.4. Tor przetwarzania sygnałów podczas analizy


częstotliwościowej
Na rysunku 8.8 przedstawiono tor przetwarzania sygnałów, który jest w praktyce realizowany
podczas analizy częstotliwościowej sygnałów. Celem analizy jest „estymacja” (oszacowanie)
widma X(jω) (8.3a) ciągłego sygnału x(t), który znajduje się na początku tego toru, na pod-
stawie widma X(k) (8.14a) dyskretnego sygnału x(n), powstałego w wyniku kolejnych operacji,
wykonywanych na sygnale x(t). Operacjami tymi są:
Analiza częstotliwościowa sygnałów dyskretnych 211

1) filtracja dolnoprzepustowa sygnału x(t) filtrem „antyaliasingowym” o odpowiedzi impul-


sowej h(t), która ma zapewnić, aby podczas próbkowania sygnału x(t) spełnione było twier-
dzenie Kotielnikowa-Shannona:
+∞
x ( LP ) ( t ) = ∫ x ( τ) h (t − τ) d τ , X ( LP) ( jω) = H ( jω) ⋅ X ( jω) (8.31)
−∞

Przypomnijmy częstotliwość próbkowania ma być więcej niż dwa razy większa od największej
częstotliwości występującej w sygnale. Ponieważ w praktyce filtr nie ma idealnej charakte-
rystyki w dziedzinie częstotliwości (prostokątnej, zero-jedynkowej charakterystyki amplitudo-
wej i zerowej charakterystyki fazowej), widmo X(LP)(ω) różni się od widma X(ω).

x(t) x(LP)(t) x(n) xw(n) Xw(k)


Filtr Układ
A/C DFT
LP P&P

w(n)
Rys. 8.8. Schemat blokowy toru przetwarzania sygnałów podczas analizy częstotliwościowej ciągłego syg-
nału x(t) za pomocą dyskretnej transformacji Fouriera DFT

2) dyskretyzacja w czasie, kwantyzacja i kodowanie sygnału przez układ próbkowania z pod-


trzymaniem (P&P) i przetwornik analogowo-cyfrowy (A/C). Jak pamiętamy z rozdziału czwar-
tego próbkowanie sygnału powoduje, że widmo Xδ(jω) sygnału „idealnie” spróbkowanego xδ(t)
(8.1) jest sumą (8.2) poprzesuwanych w częstotliwości (co częstotliwość próbkowania fp lub
pulsacja ωp = 2πfp) widm X(jω) sygnału ciągłego x(t). W wyniku spróbkowania sygnału x(LP)(t)
(po filtrze LP) zależności „widmowe” są analogiczne:

( )

1  
x (n ) = xδ( LP ) (t ) = A / C x ( LP ) (t ) , X (e jΩ ) = X δ( LP ) ( jω) = ( )
ω p ∑ X f j ( ω − kω p )  (8.32)
2π  k = −∞ 
W równaniu (8.32) Ω oznacza pulsację unormowaną względem częstotliwości próbkowania fp,
równą Ω = ωp/fp = 2πf/fp. Widmo X(ejΩ) jest wyznaczane ze wzoru (8.8a). Kwantyzacja nie jest
obecnie przez nas uwzględniana (wprowadza ona do sygnału tzw. szum kwantyzacji, który jest
także widoczny w widmie).
3) wymnożenie sygnału z oknem czasowym
x w ( n ) = x ( n ) ⋅ w( n ), − ∞ < n < ∞ (8.33)
jest związane z faktem, że analizie DFT poddajemy tylko N próbek sygnału. W równaniu
(8.33) w(n) oznacza dowolne okno czasowe, prostokątne lub inne, które przyjmuje wartości
różne od zera tylko dla n = 0, 1, 2, ..., N−1. Konsekwencją iloczynu (8.33) jest zgodnie
z (8.12) splot widm sygnału i okna:
1 π
( )
X w e jΩ = jΘ
∫ X (e ) W ( e
2π −π
j ( Ω−Θ)
) dΘ (8.34)

4) wyznaczenie dyskretnej transformaty Fouriera, czyli w praktyce spróbkowanie widma


Xw(ejΩ) w punktach Ωk = k⋅2π/N, k = 0, 1, 2, ..., N−1:
212 Analiza częstotliwościowa sygnałów dyskretnych

N −1
X w (k ) = DFT ( x w (n ) ) = ∑ x w (n )e − j (2π / N )k n , k = 0, 1, 2,..., N − 1 (8.35a)
n =0

X w ( k ) = X ( e jΩ ) (8.35b)
Ω=Ω k = 2 πk / N

odpowiadających częstotliwościom fk = kfp/N, k = 0, 1, 2, ..., N−1.


Rysunki 8.6 i 8.7 mogą stanowić ilustrację konsekwencji kolejnych operacji przeprowadzanych
w torze przetwarzania sygnałów podczas analizy częstotliwościowej realizowanej metodą
DFT. Nie została na nich jedynie „skomentowana” operacja filtracji dolnoprzepustowej, ogra-
niczającej pasmo częstotliwościowe sygnału. Jak widać końcowe widmo Xw(k) zdecydowanie
się różni od interesującego nas widma X(jω). Nie możemy więc bezkrytycznie wierzyć w „od-
bicie w lustrze”. Jak widać duże znaczenie ma właściwy dobór filtra LP o odpowiednio stromej
charakterystyce częstotliwościowej, właściwy dobór funkcji okna o wąskim „listku głównym”
widma i nisko leżących „listkach bocznych” widma oraz odpowiednio gęste spróbkowanie
widma Xw(ejΩ), czyli analizowanie odpowiednio dużej liczby próbek sygnału.
Przystąpimy teraz do omówienia problemu wyboru funkcji okna obserwacji w(n), za pomocą
którego „wycinamy” fragment sygnału poddawany analizie.

8.5. Dyskretne okna czasowe

8.5.1. Okna nieparametryczne

W tabeli 8-1 zostały podane równania oraz parametry najpopularniejszych okien dyskretnych
w(n), które są stosowane podczas analizy częstotliwościowej. Są to okna czasowe, których ko-
lejne próbki są wymnażane z kolejnymi próbkami analizowanego sygnału, zgodnie z (8.33).
Ponieważ kształt ich widma w sposób zdecydowany wpływa na właściwości przeprowadzanej
analizy, są one często nazywane także oknami widmowymi. Okna te przyjmują wartości nie-
zerowe wyłącznie dla n = 0, 1, 2, ..., N−1, gdzie parametr N oznacza dowolną długość okna,
parzystą lub nieparzystą. W tabeli 8-1 nie podano definicji dyskretnego okna Gaussa, ponieważ
jego parametry zależą od parametru a, podobnie jak dla okna ciągłego (4.35). Na rysunku 8.9
przedstawiono kształt funkcji okien Hanninga, Hamminga i Blackmana dla N = 100, a na
rysunku 8.10 porównano widma Fouriera tych okien z widmem okna prostokątnego.
W tabeli 8-1 podano definicje tzw. okien symetrycznych (w(n) = w(N−1−n)). Na ich podstawie
generuje się tzw. okna okresowe, które z przodu mają dodatkowo jedną próbkę o wartości
równej zero. Przykładowo, okno tego typu jest stosowane w standardzie MPEG audio.
Obecnie wyprowadzimy wzór na widmo Fouriera dyskretnego okna prostokątnego:

1, n = 0, 1, 2,..., N − 1
wR (n) =  (8.36)
0, pozostałe n
Stosując wzór (8.8a) otrzymujemy:

( ) ∑ wR (n)e − jΩn = ∑ wR (n)e − jΩn = ∑ e − jΩn


∞ N −1 N −1
W R e jΩ = (8.37)
n = −∞ n =0 n =0

gdzie Ω jest pulsacją unormowaną równą:


Analiza częstotliwościowa sygnałów dyskretnych 213

Tab. 8-1. Wybrane dyskretne, nieparametryczne okna czasowe w(n) i ich parametry: ∆ml − szerokość listka
głównego oraz Asl − względne (w stosunku do W(0)) tłumienie najwyższego listka bocznego

Nazwa okna Definicja okna w(n), 0 ≤ n ≤ N−1 ∆ml Asl


Prostokątne 1 4π/N 13,3 dB
2 n − ( N − 1) / 2
Trójkątne (Bartletta) 1− 8π/N 26,5 dB
N −1
1  2 πn  
Hanninga (Hanna) 1 − cos  8π/N 31,5 dB
2  N −1

 2πn 
Hamminga 0,54 − 0, 46 cos   8π/N 42,7 dB
 N −1
 2πn   4πn 
Blackmana 0, 42 − 0,50 cos   + 0, 08cos   12π/N 58,1 dB
 N −1  N −1

1
w(n)
0.8
0.6
0.4
0.2 n
0
0 10 20 30 40 50 60 70 80 90 100
Rys. 8.9. Kształt funkcji okien Hamminga, Hanninga i Blackmana (kolejno od góry do dołu), zdefiniowa-
nych w tabeli 8-1, dla N = 100

Ω = 2πf / f p (8.38)
Jeśli wprowadzimy oznaczenie:

WR (e jΩ ) = S

to wówczas z (8.37) wynika, że:


N N −1
e − jΩ S = ∑ e − jΩn = ∑ e − jΩn + e − jΩN − e − jΩ0 = S + e − jΩN − 1
n =1 n =0

− jΩ − j ΩN
S (1 − e ) = 1− e

skąd otrzymujemy:

1 − e − jΩ N (
e − j Ω N / 2 e j Ω N / 2 − e − jΩ N / 2 ) = e− jΩ( N −1) / 2 sin(ΩN / 2)
( )
WR e jΩ = S =
1− e − jΩ
=
e − j Ω / 2 ( e j Ω / 2 − e − jΩ / 2 ) sin(Ω / 2)
(8.39a)
214 Analiza częstotliwościowa sygnałów dyskretnych

a) okno prostokątne
0

-20
|W(ejΩ)/N|
-40

-60
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
b) okno Hanninga
0
-20
|W(ejΩ)/N|

-40
-60
-80
-100
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
c) okno Hamminga
0
-20
|W(ejΩ)/N|

-40
-60
-80
-100
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
d) okno Blackmana
0
-20
|W(ejΩ)/N|

-40
-60
-80
-100
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]

Rys. 8.10. Moduły widm |W(ejΩ)/N| (8.8a) wybranych okien w(n) z tabeli 8-1 dla N = 10, 20 i 40 (gdy
wartość N rośnie, to widma stają się coraz węższe). Zgodnie z (8.38) zmienność pulsacji unormowanej
−0,5 ≤ Ω/(2π) ≤ 0,5 odpowiada zmienności częstotliwości −fp/2 ≤ f ≤ fp/2 (fp − częstotliwość próbkowania)
Analiza częstotliwościowa sygnałów dyskretnych 215

Wzór ten można także otrzymać bezpośrednio wykorzystując zależność (8.21) w równaniu
(8.37).
W analogiczny sposób wykazuje się, że widmo okna prostokątnego wRS(n), n = −M, ...,−1, 0,
1, ..., M, symetrycznego względem punktu n = 0, jest równe:
sin (Ω( 2 M + 1) / 2 )
( )
WRS e jΩ =
sin(Ω / 2 )
(8.39b)

Oczywiście |WR(ejΩ)| = |WRS(ejΩ)|. Szerokość „listka głównego” okna prostokątnego (czyli od-
ległość pomiędzy pierwszymi przejściami przez zero po obu stronach pulsacji Ω = 0) jest
równa 4π/N, ponieważ:
Ω1 N / 2 = π ⇒ Ω1 = 2π / N
Ω 2 N / 2 = − π ⇒ Ω 2 = −2 π / N
∆Ω R = Ω1 − Ω 2 = 4π / N (8.40)

Na rysunku 8.10a pokazano moduł widma |WR(ejΩ)/N| (8.8a) okna prostokątnego wR(n), n =
= 0, 1, 2, ..., N−1, dla N = 10, 20 i 40 oraz dla −0,5 ≤ Ω/(2π) ≤ 0,5, co zgodnie z (8.38) odpo-
wiada zmienności częstotliwości −fp/2 ≤ f ≤ fp/2. Jak widać wzrost N powoduje zmniejszenie
szerokości listka głównego widma ∆ml, natomiast nie ma on wpływu na poziom tłumienia list-
ków bocznych Asl, który pozostaje stały. Jest to konsekwencją wzorów (8.39). Jednak w funkcji
częstotliwości listki boczne dłuższego okna szybciej zanikają. Z kolei na rysunkach 8.10b −
8.10d są przedstawione moduły widm |W(ejΩ)/N | (8.8a) okien Hanninga, Hamminga i Black-
mana z tabeli 8-1 (także dla N = 10, 20 i 40). Ponieważ funkcje okien przyjmują wyłącznie
wartości rzeczywiste, więc ww. moduły są zawsze symetryczne względem punktu Ω = 0. Dla-
tego wystarczyłoby przedstawić wykres ich zmienności tylko dla 0 ≤ Ω ≤ π (0 ≤ f ≤ fp/2). Nie
zrobiliśmy tak na rysunku 8.10, aby pokazać pełny kształt głównego listka widmowego.
Zwróćmy także uwagę na różny poziom widm dla pulsacji unormowanej Ω = 0. Na rysunku
8.11 porównano natomiast właściwości częstotliwościowe wybranych okien dla N = 40 tylko
w zakresie 0 ≤ Ω ≤ π (0 ≤ f ≤ fp/2). W tym przypadku widma zostały unormowane w wyniku
podzielenia przez wartość przyjmowaną przez W(ejΩ)/N dla Ω = 0 i oznaczone jako
Wnorm(ejΩ)/N.

0
-20
|Wnorm(ejΩ)/N|

-40
-60
-80
-100
0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
Rys. 8.11. Porównanie właściwości częstotliwościowych okna prostokątnego, Hamminga i Blackmana, zde-
finiowanych w tabeli 8-1, na podstawie modułów ich widm |W(ejΩ)/N| (8.8a) dla N = 40. W tym przypadku
widma zostały unormowane (podzielone przez wartość przyjmowaną przez W(ejΩ)/N dla Ω = 0)
216 Analiza częstotliwościowa sygnałów dyskretnych

Z rysunków 8.10 i 8.11 wynika, ze wzrost N powoduje zmniejszenie szerokości listka główne-
go widma ∆ml niezależnie od rodzaju okna, natomiast nie ma on wpływu na poziom tłumienia
kolejnych listków bocznych Asl, który jest stały dla każdego z okien. Wybór okna determinuje
więc rozdzielczość amplitudową analizy częstotliwościowej, przeprowadzanej z jego pomocą,
a rozdzielczość częstotliwościową zawsze można zwiększyć zwiększając wartość N.
Okna Hanna, Hamminga i Blackmana z tabeli 8-1 są ważoną sumą składowych kosinusoidal-
nych postaci:
 2 πk 
wC( k ) ( n ) = wR (n ) cos n , − ∞ ≤ n ≤ ∞ (8.41)
 N −1 
Widma tych składowych powstają w wyniku splotu widma okna prostokątnego (8.39) z wid-
mem funkcji kosinus. Ponieważ

 2 πk  e jΩk n + e − jΩk n 2 πk
cos n  = cos(Ω k n ) = , Ωk = (8.42)
 N −1  2 N −1

więc widmo okna wC(k)(n) jest sumą dwóch przeskalowanych (przez 1/2) widm okna prosto-
kątnego, przesuniętych o +Ωk i −Ωk:

1 − j ( Ω −Ωk )( N −1) / 2 sin ((Ω − Ω k ) N / 2 ) 1 − j ( Ω +Ω k )( N −1) / 2 sin ((Ω + Ω k ) N / 2 )


( )
WC( k ) e jΩ =
2
e
sin ((Ω − Ω k ) / 2) 2
+ e
sin ((Ω + Ω k ) / 2 )
(8.43)

Ponieważ dla k = 1 mamy Ω1 = 2π/(N−1), więc dla dużego N możemy przyjąć Ω1 ≈ 2π/N. Wy-
nika stąd, że szerokość listka głównego okna Hanna i Hamminga z tabeli 8-1 jest w przybli-
żeniu równa:
∆ ml = ∆Ω R + 2Ω1 ≈ 4π / N + 2 ⋅ 2π / N ≈ 8π / N (8.44)

W sposób analogiczny można wykazać, że szerokość okna Blackmana wynosi:

∆ ml = ∆Ω R + 4Ω1 ≈ 4π / N + 4 ⋅ 2π / N ≈ 12π / N (8.45)

Konstrukcja widm ciągłych okien Hanna i Blackmana jako sumy poprzesuwanych widm okna
prostokątnego została przedstawiona w podrozdziale 4.4 (patrz rysunek 4.8). W przypadku
okien dyskretnych sytuacja jest analogiczna.
Uogólniając powyższe rozważania można stwierdzić, że jeśli okno ma postać:
K
 2 πk 
w( n ) = ∑ a (k ) cos N − 1 n  , n = 0, 1, 2,..., N − 1 (8.46)
k =0

to jego widmo jest równe:


K a(k ) 
W (e jΩ ) = a (0)WR (e jΩ ) + ∑ W ( e jΩ− 2 πk / N ) + WR ( e jΩ+ 2 πk / N )  (8.47)
 R 
k =1 2

Przykładowo dla okna Hanna postaci:

 2 πk 
w(n ) = 0,5 + 0,5cos  n (8.49)
 N −1 
Analiza częstotliwościowa sygnałów dyskretnych 217

mamy:
W (e jΩ ) = 0, 5WR (e jΩ ) + 0, 25WR (e jΩ− 2 π / N ) + 0, 25WR (e jΩ+ 2 π / N ) (8.50)
Wynika stąd wniosek, że w przypadku okien postaci (8.46) operację „okienkowania” można
także przeprowadzić w dziedzinie pulsacji (częstotliwości). W takim przypadku należy naj-
pierw wyznaczyć DFT XR(k) sygnału z oknem prostokątnym xR(n) = x(n)wR(n), a następnie za-
stąpić każdy prążek widma średnią ważoną tego prążka i jego sąsiadów zgodnie z (8.47),
podstawiając Ω = Ωk = 2πk/N. W przypadku okna Hanna mamy:

X (e jΩk ) = 0, 5 X R (e jΩk ) + 0, 25 X R (e jΩk − 2 π / N ) + 0, 25 X R (e jΩk + 2 π / N ) (8.51a)


czyli
X (k ) = 0,5 X R (k ) + 0, 25 X R (k − 1) + 0, 25 X R (k + 1) (8.51b)

Przykładowo dla k = 5, otrzymujemy:


X (5) = 0,5 X R (5) + 0, 25 X R (4) + 0, 25 X R (6)

Jest to swoista demonstracja zasady superpozycji (liniowości) dyskretnej transformacji Fou-


riera: jeśli okno składa się z kilku składowych, to widmo sygnału po operacji „okienkowania”
jest sumą kilku widm, z których każde jest wynikiem splotu widma sygnału z widmem po-
szczególnej składowej okna. W wyniku dodawania poprzesuwanych widm okna prosto-
kątnego szerokość listka głównego sumarycznego widma się zwiększa, poziom jego list-
ków bocznych zaś maleje (rysunek 4.8).
Oczywiście rodzina nieparametrycznych okien czasowych jest o wiele większa. Jednak oknom
nieparametrycznym nie poświęcimy więcej czasu, ponieważ istnieją okna parametryczne, któ-
rych właściwości można elastycznie kształtować w zależności od potrzeb. Do najbardziej zna-
nych okien parametrycznych należą okna Dolpha-Czebyszewa i Kaisera.

8.5.2. Okna parametryczne


Okno Dolpha-Czebyszewa
Okno Dolpha-Czebyszewa jest wynikiem optymalizacji, w której minimalizuje się szerokość
listka głównego widma przy założeniu określonej długości okna oraz przy ograniczeniu dopu-
szczalnej wysokości maksymalnego listka bocznego. Jest to okno optymalne, ponieważ cha-
rakteryzuje się ono listkiem głównym widma o najmniejszej szerokości ze wszystkich okien
o identycznej długości. Ograniczenie wysokości maksymalnego listka bocznego, leżącego
w paśmie „zaporowym”, a nie energii widma w tym paśmie, prowadzi do „spłaszczenia”
(„wyrównania” wysokości, równomiernego zafalowania) wszystkich listków bocznych. Energia
widma okna w paśmie zaporowym jest więc duża, a energia w paśmie przepustowym − mała.
Dzięki temu listek główny ma małą energię i jest wąski. Z tego powodu okno Dolpha-Cze-
byszewa jest szczególnie predestynowane do „wysokorozdzielczej” analizy częstotliwościowej.
Definicja okna Dolpha-Czebyszewa wDC(n), n = 0, 1, 2, ..., N−1, o parzystej lub nieparzystej
długości N jest następująca (M = (N−1)/2):
1 M
 πk  2πkm 
wDC (m + ( M + 1)) = C  + 2 ∑ TN −1  β cos  cos , − M ≤ m ≤ M (8.52)
γ k =1  N  N 
218 Analiza częstotliwościowa sygnałów dyskretnych

gdzie γ określa względną wysokość maksymalnego listka bocznego w stosunku do wysokości


listka głównego (np. γ = 0,01 lub 0,001, co odpowiada względnemu tłumieniu Asl = −20⋅
⋅log10(γ) = 40 dB lub 60 dB), parametr β jest zdefiniowany jako:
 1 1  1 
β = cosh cosh −1  = cosh cosh −1 (10 Asl / 20 )  (8.53)
 N − 1 γ   N − 1 
a TN−1(x) jest wielomianem Czebyszewa (N−1)-tego rzędu:
( )
 cos ( N − 1) cos −1 x , x ≤ 1
TN ( x ) = 
( −1
cosh ( N − 1) cosh x , x > 1 ) (8.54)

Nieco więcej informacji o wielomianach Czebyszewa można znaleźć w podrozdziale 6.4. Stałą
C przeskalowuje się okno w amplitudzie w zależności od potrzeb. Najczęściej przyjmuje się ta-
ką wartość, aby środkowa próbka okna była równa 1.
Na rysunku 8.12a zaprezentowano okna czasowe Dolpha-Czebyszewa o długości N = 40 dla
γ = 0,01; 0,0001 i 0,000001 (Asl = 40, 80 i 120 dB), a na rysunku 8.12b − moduły widm tych
okien. Jak widać zmniejszanie wartości parametru γ (zwiększanie Asl) powoduje zawężanie
okna w dziedzinie czasu oraz obniżenie poziomu listków bocznych w dziedzinie częstotli-
wości. Zwiększając długość okna N przy ustalonym parametrze γ, powodujemy natomiast
zmniejszenie szerokości listka głównego widma okna. Sytuacja ta jest przedstawiona na ry-
sunku 8.13. Widzimy na nim moduły widm okien o długości N = 40 oraz N = 120 dla
γ = 0,000001 (Asl = 120 dB).

Okno Kaisera

Okno Kaisera jest wynikiem optymalizacji, podczas której minimalizuje się szerokość listka
głównego widma przy założeniu jego określonej długości oraz procentowego udziału energii
listków bocznych w całkowitej energii widma. Energię listków bocznych definiuje się jako
różnicę pomiędzy całkowitą energią widma okna |W(ejΩ)|2 w przedziale [−π, π] a energią
samego listka głównego. W związku z tym, w porównaniu z oknem Dolpha-Czebyszewa,
energia i szerokość listka głównego jest większa, a energia listków bocznych − mniejsza. Listki
boczne mają jednak różną wysokość i najwyższy z nich ma mniejsze tłumienie niż to w oknie
Dolpha-Czebyszewa.
Definicja okna Kaisera jest następująca (dla N parzystego lub nieparzystego):
 2
  n − ( N − 1) / 2  
I 0  β 1 −   
  ( N − 1) / 2  
wK (n ) =  , 0 ≤ n ≤ N−1 (8.55)
I 0 (β )

gdzie I0(β) oznacza funkcję Bessela zerowego rzędu, określoną wzorem:


2
∞  ( x / 2 )k 
I0 ( x ) = 1 + ∑   (8.56)
 k ! 
k =1 

Ponieważ wraz ze wzrostem k kolejne składniki sumy szybko maleją, dobre przybliżenie fun-
kcji Bessela stanowi już suma 20 pierwszych wyrazów (niektórzy autorzy podają liczbę 32).
Dla β = 0 otrzymujemy okno prostokątne, natomiast wraz ze wzrostem wartości β jest gene-
Analiza częstotliwościowa sygnałów dyskretnych 219

1 0
0.8

|Wnorm(ejΩ)/Ν|
-40
0.6
w(n) 0.4 -80

0.2 -120
0
0 10 20 30 40 -0.5 -0.25 0 0.25 0.5
n Ω/2π [Hz/Hz]
Rys. 8.12. Okna Dolpha-Czebyszewa (po lewej) oraz moduły ich widm (po prawej). N = 40 oraz γ = 0,01;
0,0001 i 0,000001 (Asl = 40, 80 i 120 dB). Zmniejszanie wartości parametru γ (zwiększanie Asl) powoduje
zawężanie okna w dziedzinie czasu oraz obniżenie poziomu listków bocznych w dziedzinie częstotliwości

0 0
|Wnorm(ejΩ)/Ν|

|Wnorm(ejΩ)/Ν|
-40 -40

-80 -80

-120 -120

0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 8.13. Moduły widm dwóch okien Dolpha-Czebyszewa o długości N = 40 (po lewej) oraz N = 120 (po
prawej) dla γ = 0,000001 (Asl = 120 dB). Zwiększając długość okna N przy ustalonym parametrze γ, powo-
dujemy zmniejszenie szerokości listka głównego widma okna

rowane okno coraz szybciej opadające do zera (rysunek 8.14a). W dziedzinie widmowej towa-
rzyszy temu rozszerzenie szerokości listka głównego widma i obniżenie poziomu listków
bocznych (rysunek 8.14b). Oczywiście podczas zwiększania długości okna przy stałej wartości
parametru β, listki boczne pozostają na niezmienionym poziomie, ale szerokość listka głów-
nego staje się mniejsza (rysunek 8.15).
W literaturze podaje się wzory, wiążące wymagane parametry analizy częstotliwościowej ∆ml
i Asl z parametrami projektowymi okna β i N:

0, dla Asl < 13,26 dB



β = 0,76609 ( Asl − 13,26 ) + 0,09834 ( Asl − 13,26 ) ,
0,4
dla 13,26 < Asl < 60 dB
0,12438 ( A + 6,3) , dla 60 < Asl < 120
 sl

(8.57)

24π( Asl + 12)


N = K , K = +1 (8.58)
155 ⋅ ∆ ml

gdzie K oznacza najmniejszą liczbę naturalną równą lub większą od K.


220 Analiza częstotliwościowa sygnałów dyskretnych

1 0
0.8

|Wnorm(ejΩ)/Ν|
-40
0.6
w(n)
-80
0.4
-120
0.2
0 -160
0 10 20 30 40 -0.5 -0.25 0 0.25 0.5
n Ω/2π [Hz/Hz]
Rys. 8.14. Dwa okna Kaisera (po lewej) oraz moduły ich widm (po prawej). N = 40 oraz β = 8 i 16. Zwię-
kszanie wartości parametru β powoduje zawężanie okna w dziedzinie czasu oraz obniżenie poziomu listków
bocznych w dziedzinie częstotliwości

0 0
|Wnorm(ejΩ)/Ν|

|Wnorm(ejΩ)/Ν|
-40 -40

-80 -80

-120 -120

-160 -160
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 8.15. Moduły widm dwóch okien Kaisera o długości N = 40 (po lewej) oraz N = 120 (po prawej) dla
β = 16. Zwiększając długość okna N przy ustalonym parametrze β, powodujemy zmniejszenie szerokości
listka głównego widma okna

8.6. Przykłady analizy częstotliwościowej z wykorzystaniem


funkcji okien
Teraz postaramy się wykorzystać wiedzę zdobytą w tym rozdziale do zaprojektowania „na-
rzędzia” analizy częstotliwościowej, opartego na przekształceniu Fouriera (8.8a) sygnałów
dyskretnych i mającego z góry przez nas zadane właściwości, tzn. charakteryzującego się okre-
śloną rozdzielczością częstotliwościową i amplitudową. Wysoka rozdzielczość częstotliwo-
ściowa pozwoli nam rozróżniać w widmie częstotliwości leżące blisko siebie, natomiast roz-
dzielczość amplitudowa umożliwi detekcję w widmie zarówno składowych o dużych amplitu-
dach, jak i o małych. Wybór funkcji okna czasowego pozwala nam decydować o zadanej roz-
dzielczości amplitudowej analizy, natomiast zmiana jego długości pozwala wpływać na roz-
dzielczość częstotliwościową.

Przykład 1 - wybór okna i jego parametrów


W celach poglądowych zaprojektujemy okno Kaisera, które pozwoli na detekcję składowych
sygnału x(n) = A1cos(2πf1(n∆t)) + A2sin(2πf2(n∆t)) (n = 0, 1, 2, ..., N−1, ∆t = 1/fpr = 1/16 se-
kundy, A1 = 1; A2 = 0,5; f1 = 1 Hz; f2 = 2 Hz; fpr = 16 Hz), analizowanego w rozdziale 8.2.
Ponieważ chcemy rozróżnić dwie częstotliwości różniące się o ∆f = 1 Hz, dlatego przyjmu-
jemy ∆ml = 2π(∆f/fpr) = 0,3926. Dodatkowo założymy, że amplituda składowej o częstotliwości
Analiza częstotliwościowa sygnałów dyskretnych 221

f2 się zmienia i może być 1000 razy mniejsza od amplitudy składowej o częstotliwości f1
(A1 = 1, A2 = 0,001), co odpowiada jej stłumieniu o 60 dB. Chcąc w sposób wyraźny zauważyć
wierzchołek słabszej składowej w listkach bocznych składowej silniejszej, przyjmujemy
Asl = 80 dB. W związku z tym ze wzorów (8.57) i (8.58) otrzymujemy: β = 10,734, N = 115.
Znając wartości tych parametrów, możemy wyznaczyć na podstawie (8.55) i (8.56) dyskretne
okna Kaisera wK(n), gwarantujące spełnienie zadanych wymagań projektowych. W wyniku
zastosowania wzoru (8.8a) lub (8.13a) w stosunku do sygnału xw(n) = x(n)wK(n), 0 ≤ n ≤ N−1,
otrzymujemy interesujące nas widmo Xw(ej2πf/fpr).
Rysunek 8.16 stanowi ilustrację kolejnych, przeprowadzanych operacji dla sygnału, w którym
druga składowa ma amplitudę równą A2 = 0,5. Na rysunku 8.16a jest przedstawiony zbiór
N = 115 próbek dyskretnego sygnału x(n), 0 ≤ n ≤ N−1, który poddajemy analizie. Z kolei na
rysunku 8.16b są zaprezentowane próbki dyskretnego okna Kaisera o długości N = 115
i β = 10,734. Okno to zostało pomnożone przez współczynnik skalujący będący ilorazem pól
powierzchni okna prostokątnego i okna Kaisera. Operacja ta ma zapobiec zjawisku zaniżaniu
wartości wynikowego widma, spowodowanemu przez ograniczenie energii fragmentu ana-
lizowanego sygnału w wyniku operacji okienkowania. Wynik iloczynu xw(n) = x(n)wK(n),
0 ≤ n ≤ N−1, sygnału i okna, czyli ww. okienkowania, jest przedstawiony na rysunku 8.16c.
Widmo W(ej2πf/fpr) (8.8a), (8.13a) okna Kaisera jest zaprezentowane na rysunku 8.16d, a widma
Xw(ej2πf/fpr) (8.8a), (8.13a) oraz Xw(k) (8.14a) sygnału xw(n) są pokazane na rysunku 8.16e. Pier-
wsze z nich jest zaznaczone linią ciągłą, a drugie − za pomocą symboli „•”. Jak widać od-
nieśliśmy sukces: obie składowe są w widmie wystarczająco „odseparowane”.
W związku z tym przeprowadzimy bardziej wymagający eksperyment: poddajmy analizie syg-
nał, w którym amplituda drugiej składowej jest bardzo mała i równa A2 = 0,001. Otrzymany
wynik jest przedstawiony na rysunku 8.17. Jak widać w analizowanym fragmencie sygnału po
operacji okienkowania druga składowa w ogóle nie jest zauważalna (rys. 8.17a), natomiast
w widmie jest bardzo dobrze widoczna (rys. 8.17b). Teraz nie mamy już wątpliwości: zaproje-
ktowane narzędzie obliczeniowe do przeprowadzania analizy częstotliwościowej sygnałów ma-
ją założoną przez nas rozdzielczość częstotliwościową i amplitudową. W celach porównaw-
czych na rysunku 18.17c przedstawiono widmo analizowanego sygnału, uzyskane w przypad-
ku zastosowania okna Hamminga. Co prawda prążek „silnej” składowej pierwszej sygnału
(A1 = 1) jest węższy niż poprzednio, ale za to prążek „słabej” składowej drugiej (A2 = 0,001)
zupełnie nie jest widoczny, „utonął” w wysokich listkach bocznych składowej pierwszej.

Przykład 2 - szybka interpolacja widma


W poprzednim przykładzie do wyznaczenia „ciągłych” (lub gęsto spróbkowanych) widm
Xw(ej2π f / fpr) wykorzystywaliśmy wzór (8.8a) lub (8.13a), natomiast wyrażenie (8.14a), definiu-
jące dyskretną transformację Fouriera DFT, stosowaliśmy do obliczania wybranych próbek
widma Xw(k). W pierwszym przypadku otrzymujemy bardzo dobrą aproksymatę widma ciągłe-
go, ale kosztem dużej złożoności obliczeniowej. Natomiast w drugim przypadku liczba wyzna-
czanych próbek widma jest zawsze równa liczbie próbek analizowanego sygnału, bardzo
często za mała, ale za to wyznaczana w sposób szybki za pomocą szybkich algorytmów FFT,
efektywnie implementujących DFT (8.14a). Algorytmy te poznamy w następnym rozdziale.
Mamy więc problem: albo wolno i dokładnie, albo szybko i pobieżnie. Istnieje jednak
interesująca możliwość kompromisowa, którą wcześniej już omówiono i zaprezentowano na
rysunku 8.5. Polega ona na uzupełnieniu na końcu zerami analizowanego, zokienkowanego
222 Analiza częstotliwościowa sygnałów dyskretnych

a) analizowany fragment sygnału dyskretnegox(n)


1.5
1
0.5
x(n)
0
-0.5
-1
0 10 20 30 40 50 60 70 80 90 100 110 120
n

b) dyskretne okno Kaisera w(n) dla β = 10,734


3
2.5
2
w(n)

1.5
1
0.5
0
0 10 20 30 40 50 60 70 80 90 100 110 120
n

c) sygnał xw(n) = x(n)w(n), czyli iloczyn analizowanego sygnału i funkcji okna


4
3
2
xw (n)

1
0
-1
-2
0 10 20 30 40 50 60 70 80 90 100 110 120
n

d) widmo W(ej2π f / fpr) okna Kaisera z rysunku b)


0
|W(ej2 πf / fpr )/N |

-40

-80

-120

-160
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8
f [Hz]
Rys. 8.16. Przykład analizy częstotliwościowej sygnału x(n) = A1cos(2πf1(n∆t))+A2sin(2πf2(n∆t)), n = 0, 1,
2, ..., N−1, N = 115, o następujących parametrach: A1 = 1, A2 = 0,5, f1 = 1 Hz, f2 = 2 Hz, fpr = 16 Hz (skąd
∆t = 1/fpr = 1/16 sekundy i ∆f = fpr/N herca)
Analiza częstotliwościowa sygnałów dyskretnych 223

e) widmo Xw(ej2π f / fpr) (linia ciągła) oraz Xw(k) („•”) sygnału xw(n) z rysunku c)
0
-20

|Xw (ej2 πf / fpr )/N|


-40
-60
-80
-100
-120
0 1 2 3 4 5 6 7 8
f [Hz]
Rys. 8.16. (cd.) Przykład analizy częstotliwościowej sygnału x(n) = A1cos(2πf1(n∆t))+A2sin(2πf2(n∆t))

a) fragment sygnału xw(n) = x(n)w(n) „wycięty” przez okno w(n) Kaseira (β = 10,734)
3
2
1
xw (n)

0
-1
-2
-3
0 10 20 30 40 50 60 70 80 90 100 110 120
n

b) widmo Xw(ej2π f / fpr) (linia ciągła) oraz Xw(k) („•”) sygnału xw(n) (z rys. 8.17a) dla okna Kaisera
0
-20
|Xw (ej2 πf / fpr )/N|

-40
-60
-80
-100
-120
0 1 2 3 4 5 6 7 8
f [Hz]

c) widmo Xw(ej2π f / fpr) (linia ciągła) oraz Xw(k) („•”) sygnału xw(n) dla okna Hamminga
0
|Xw (ej2 πf / fpr )/N|

-20

-40

-60

0 1 2 3 4 5 6 7 8
f [Hz]
Rys. 8.17. Przykład analizy częstotliwościowej sygnału x(n) = A1cos(2πf1(n∆t))+A2sin(2πf2(n∆t)), n = 0, 1,
2, ..., N−1, N = 115, o następujących parametrach: A1 = 1, A2 = 0,001, f1 = 1 Hz, f2 = 2 Hz, fpr = 16 Hz
224 Analiza częstotliwościowa sygnałów dyskretnych

0
-20

|Xw (ej2 πf / fpr )/N|


-40
-60
-80
-100
-120
0 1 2 3 4 5 6 7 8
f [Hz]
0
-20
|Xw (ej2 πf / fpr )/N|

-40
-60
-80
-100
-120
0 1 2 3 4 5 6 7 8
f [Hz]
0
-20
|Xw (ej2 πf / fpr )/N|

-40
-60
-80
-100
-120
0 1 2 3 4 5 6 7 8
f [Hz]
0
-20
|Xw (ej2 πf / fpr )/N|

-40
-60
-80
-100
-120
0 1 2 3 4 5 6 7 8
f [Hz]
Rys. 8.18. Przykład analizy częstotliwościowej fragmentu zokienkowanego sygnału z rysunku 8.17a z wy-
korzystaniem szybkiego algorytmu FFF implementującego DFT (8.14a), po uzupełnieniu ww. fragmentu na
końcu zerami do długości NFFT = 128, 256, 1024 i 4096 (kolejno od góry)

fragmentu sygnału, np. do długości NFFT = 2p, oraz zastosowaniu szybkiego algorytmu FFT.
Krok próbkowania widma w częstotliwości zależy wówczas od liczby dodanych zer i jest
równy df = fpr / NFFT. Na rysunku 8.18 przedstawiono wyniki analizy sygnału z przykładu 1 dla
A1 = 1 i A2 = 0,001 (rys. 8.17), w sytuacji kiedy N = 115 próbek zokienkowanego sygnału,
przedstawionego na rysunku 8.17a, uzupełniono zerami do długości 128, 256, 1024 i 4096. Jak
widać uzyskujemy gęściejsze próbkowanie widma przy zdecydowanie mniejszych nakładach
obliczeniowych.
Analiza częstotliwościowa sygnałów dyskretnych 225

Wyniki analizy częstotliwościowej przedstawione w tym rozdziale uzyskano za pomocą pro-


gramu komputerowego przedstawionego w tabeli 8-2.

Tab. 8-2. Przykład programu do przeprowadzania analizy częstotliwościowej sygnałów za pomocą dyskret-
nego przekształcenia Fouriera (8.8a) i (8.13a)

% Ćwiczenie: Analiza częstotliwościowa sygnałów metodą dyskretnego przekształcenia Fouriera

clear all; clf;

% Podaj wartości parametrów analizy


fp = 16; % częstotliwość próbkowania
df = 1; % rozdzielczość częstotliwościowa analizy w Hz
Asl = 80; % rozdzielczość amplitudowa analizy w dB (tłumienie listka bocznego)
dfn = df/fp; % unormowana rozdzielczość analizy w Hz/Hz
Dml = 2*pi*dfn; % szerokość listka głównego unormowana względem cz. próbkowania

% Obliczenie parametrów okna Kaisera: beta i N


if (Asl <= 13.26) beta = 0; end
if (13.26 < Asl & Asl <= 60) beta = 0.76609*(Asl-13.26)^0.4 + 0.09834*(Asl-13.26); end
if (60 < Asl & Asl <= 120) beta = 0.12438*(Asl+6.3); end
N = ceil( 24*pi*(Asl+12)/(155*Dml) ) + 1
beta
pause

% Generacja sygnału − dwie sinusoidy


% N = 200; % długość sygnałów: przyjmij arbitralnie lub zastosuj N wyznaczone powyżej
ax1 = 1; % amplituda sygnału 1
ax2 = 0.001; % amplituda sygnału 2
fx1 = 1; % częstotliwość sygnału 1 w Hz
fx2 = 2; % częstotliwość sygnału 2 w Hz
fm = 32; % maksymalna częstotliwość w Hz rysunku widma „okresowego”
NF = 1000; % liczba punktów charakterystyki częstotliwościowej

dt = 1/fp; t = 0 : dt : (N-1)*dt; % chwile próbkowania


x1 = ax1 * cos( 2*pi*fx1*t ); % sygnał 1
x2 = ax2 * cos( 2*pi*fx2*t ); % sygnał 2
x12 = x1 + x2; % suma sygnałów 1 + 2

x = x12; % wybierz sygnał: x1, x2 lub x12


stem(t,x,'-ko','filled'); axis tight; grid;
title('Sygnał analizowany'); xlabel('czas [s]'); pause

% Generacja okna
w1 = boxcar(N); % różne okna
w2 = bartlett(N); %
w3 = hanning(N); %
w4 = hamming(N); %
w5 = blackman(N); %
w6 = kaiser(N,beta); %
w = w6; % wybierz okno: wskazane okno Kaisera
w = w'; % zamień wektor pionowy na poziomy

skala = sum(boxcar(N))/sum(w); w = skala*w; % normowanie

plot(w,'-k'); grid; axis tight;


title('Funkcja okna'); xlabel('nr próbki'); pause

% Widmo okna − własna implementacja równania (8.8a), (8.13a)


226 Analiza częstotliwościowa sygnałów dyskretnych

df=fp/(NF-1); f = -fp/2:df:fp/2; % próbkowanie częstotliwości


omega=2*pi*f/fp; % pulsacja unormowana
n = 0 : N-1; % indeks czasu
for k=1:NF %
W(k)=sum( w .* exp(-j*omega(k)*n) ); % widmo Fouriera (8.8a) dla k-tego omega
end %
W = abs(W)/N; W = 20*log10(W); % wartość bezwzględna i normowanie
plot(f,W,'-k'); grid; axis tight;
title('Moduł widma okna w dB'); xlabel('f [Hz]'); pause

% x = hilbert(x); % opcjonalnie zastosuj transformację Hilberta

xw = x .* w; % wymnóż sygnał z oknem

% Widmo „niespróbkowane” (8.8a) , (8.13a), okresowe − funkcja Matlaba freqz()


df = 2*fm/(NF-1); f = -fm:df:fm;
X = freqz(xw,1,f,fp); X = 2*abs(X)/N; X = 20*log10(X);
plot(f,X,'-k'); grid; xlabel('f [Hz]'); axis tight;
title('Widmo (8.8a) "niespróbkowane" okresowe'); pause

% Widmo „niespróbkowane” (8.8a), (8.13a), jeden okres − funkcja Matlaba freqz()


[X1,f1] = freqz(xw,1,NF,'whole',fp); X1 = 2*abs(X1)/N; X1 = 20*log10(X1);
plot(f1,X1,'-k'); grid; xlabel('f [Hz]');
title('Widmo (8.8a) "niespróbkowane - jeden okres"'); pause

% Widmo „spróbkowane” DFT (8.14a), tylko jeden okres − program własny


n=0:N-1;
for k=0:N-1
X2(k+1)=sum( xw.* exp(-j*2*pi*k*n/N) );
end
f0 = 1/(N*dt); f2 = 0:f0:(N-1)*f0; X2 = 2*abs(X2)/N; X2 = 20*log10(X2);
plot(f1,X1,'-k',f2,X2,'ko','MarkerFaceColor','k');
grid; xlabel('f [Hz]'); title('Widma - porównanie freqz() i moje dft()'); pause

% Widmo „spróbkowane” DFT (8.14a), tylko jeden okres − funkcja Matlaba fft()
X2 = fft(xw); X2 = 2*abs(X2)/N; X2 = 20*log10(X2);
plot(f1,X1,'-k',f2,X2,'ko','MarkerFaceColor','k');
grid; xlabel('f [Hz]'); title('Widma - porównanie freqz() i fft() Matlaba'); pause

% Demonstracja interpolacji widma metodą dodawania zer i wyznaczania DFT (FFT)


Nx = N; x = x(1:Nx); % wybierz fragment sygnału (Nx<=N)
w = kaiser(Nx,beta); % wygeneruj dla niego okno
skala = sum(boxcar(Nx))/sum(w); w = skala*w'; % przeskaluj okno
xw = x.*w; % wymnóż fragment sygnału z oknem
Niter = 8; Nfft = 128; % liczba iteracji, początkowa długość DFT (FFT)
for iter = 1 : Niter % w pętli uzupełnianie zerami do długości Nfft
X = 20*log10( 2*abs( fft(xw,Nfft) )/Nx ); % i wyznaczanie DFT (FFT)
df = fp/Nfft; f = 0:df:(Nfft-1)*df; k = 1:Nfft/2+1;
plot(f(k),X(k),'ko',f(k),X(k),'b-');
xlabel('f [Hz'); grid; title('Interpolowanie widma: zera + DFT(FFT)'); pause
Nfft = 2 * Nfft;
end

8.7. Szybkie wyznaczanie funkcji autokorelacji i funkcji gęstości


widmowej mocy
Do tej pory koncentrowaliśmy się na analizie częstotliwościowej sygnałów bezszumowych.
W przypadku występowania addytywnego szumu sprawy się nieco komplikują. Jak pamiętamy
z rozdziału 1 do analizy częstotliwościowej losowych sygnałów ciągłych stosuje się funkcję
Analiza częstotliwościowa sygnałów dyskretnych 227

gęstości widmowej mocy Pxx(f) (1.45), definiowanej jako wynik przekształcenia Fouriera
funkcji autokorelacji sygnału Rxx(τ). Dla dyskretnych sygnałów losowych analiza widmowa
może być w szczególności przeprowadzana metodą Blackmana-Tukeya za pomocą następują-
cej pary równań (1.48a), (1.49b):
N −1− |m |
1
Rˆ xx (m) =
N
∑ x (n ) x ∗ (n − m), m = 0, 1, 2, ..., M − 1 (8.59)
n =0
fk
M −1 − j 2π m

f pr
PˆN ( f k ) = w( m) Rˆ xx (m) e (8.60)
m = − ( M −1)

gdzie w(m) oznacza wybraną funkcję okna czasowego. Ponieważ splot (korelacja) dwóch
sygnałów w dziedzinie czasu jest równoważny iloczynowi ich widm (patrz (4.13), (4.15),
(8.20) − (8.24)), istnieje efektywny algorytm obliczeniowy, służący do wyznaczenia estymat
Rˆ xx ( m) oraz PˆN ( f ) , w którym stosuje się szybkie wersje (FFT) algorytmów dyskretnej
transformacji Fouriera DFT, omówione w rozdziale następnym. Ma on postać przedstawioną
w tabeli 8-3.

Tab. 8-3. Algorytm szybkiego wyznaczania estymaty funkcji autokorelacji oraz estymaty funkcji gęstości
widmowej mocy Blackmana-Tukeya (1.49a)

N − liczba próbek sygnału wejściowego


M − liczba wyznaczanych współczynników funkcji autokorelacji
K = N+(M−1), m = 0, 1, 2, ..., M−1, fk = (k/K)fpr, k = 0, 1, 2, ..., K−1)

1. Pobierz N próbek sygnału: x(n), n = 0, 1, 2, ..., N−1.


2. Uzupełnij ten sygnał na końcu M−1 zerami do długości K = N+(M−1).
3. Oblicz K-punktowe DFT (FFT) (8.15a) sygnału:
K −1
X (k ) = ∑ x(n)e − j( 2π / K )kn , k = 0, 1, 2, ..., K − 1
n=0

4. Oblicz K-punktowe odwrotne IDFT (IFFT) (8.15b) z |X(k)|2 = X(k)X*(k) (iloczyn widm X(k)X*(k) w dzie-
dzinie częstotliwości jest równoważny operacji autokorelacji sygnału w dziedzinie czasu, zgodnie
z (4.15)):
1 K −1
∑ X (k ) e j (2 π / K )kn , n = 0, 1, 2, ..., N − 1
2
R xx ( n ) =
K k =0

Poprawnych jest pierwszych M wartości wektora Rxx(n), n = 0, 1, 2, ..., M−1.


5. Utwórz sygnał s(n) dla n = 0, 1, 2, ..., K−1 (w(m) oznacza funkcję okna czasowego):
 R xx (n ) w( n ), 0 ≤ n ≤ M −1

s( n ) =  0, M ≤n≤K −M
 R ( K − n ) w( K − n ), K − M +1 ≤ n ≤ K −1
 xx
6. Oblicz K-punktowe DFT (IDFT) (8.15a) sygnału s(n):
K −1
Pxx ( k ) = ∑ s(n)e − j (2π / K )nk , k = 0, 1, 2, ..., K − 1
n =0
228 Analiza częstotliwościowa sygnałów dyskretnych

Dodanie w powyższym algorytmie M−1 zer na końcu sygnału x(n) ma na celu wymuszenie
jego liniowego przesuwania maksymalnie o M−1 próbek i wynika z faktu, że za pomocą DFT
jest realizowane kołowe a nie liniowe przesuwanie sygnałów (patrz rozdziały 13.4 i 13.5).
W przypadku wyznaczania funkcji autokorelacji nie występuje odwracanie żadnego sygnału
w czasie: uzupełniony zerami sygnał x(n) jest nieruchomy, a jego kopia (także z zerami) jest
przesuwana w sposób kołowy (cykliczny, rotacyjny). Dla każdej wartości przesunięcia z za-
kresu od 0 do M−1 oba sygnały są ze sobą wymnażane.
Tworzenie natomiast „dziwnego” sygnału s(n) jest spowodowane chęcią uzyskania rzeczy-
wistych wartości funkcji Pxx(k). A tak będzie jeśli sygnał poddawany DFT w kroku 6 będzie
miał symetrię właściwą dla DFT (symetria względem próbki o indeksie k = K/2).
Przykładowy program w języku Matlab, realizujący i testujący w praktyce wyżej opisany
szybki algorytm wyznaczania estymaty Blackmana-Tukeya funkcji gęstości widmowej mocy,
jest przedstawiony w tabeli 8-4. Na rysunku 8.19 zaprezentowano wyniki analizy zaszumio-
nego sygnału sinusoidalnego o częstotliwości 100 herców, uzyskane z jego pomocą. W celach
porównawczych skonfrontowano je z uśrednionym periodogramem (1.51), (1.52). Przypomnij-
my, periodogram jest kwadratem transformaty Fouriera iloczynu fragmentu analizowanego
sygnału z wybraną funkcją okna. W obu metodach estymacji zastosowano okno Hanninga.
Jak już było podkreślone w rozdziale 1, zazwyczaj stosuje się uśrednianie kilku widm zaszu-
mionego sygnału (1.52) w celu zmniejszenia wariancji estymaty funkcji gęstości widmowej
mocy. Wybrane przykłady analizy częstotliwościowej sygnałów losowych z wykorzystaniem
uśrednionego periodogramu (metoda Welcha (1.52)) były przedstawione w rozdziale 1 na ry-
sunkach 1.13 i 1.14.

Tab. 8-4. Przykład programu do szybkiego wyznaczania estymaty funkcji autokorelacji oraz estymaty
funkcji gęstości widmowej mocy Blackmana-Tukeya (1.49b)

% Ćwiczenie: Szybkie wyznaczanie funkcji autokorelacji i funkcji gęstości widmowej mocy

clear all; subplot(111);

% Generacja sygnału analizowanego


N=256; fpr = 1000; fx = 100; dt=1/fpr; t=0:dt:(N-1)*dt; tR=-(N-1)*dt:dt:(N-1)*dt;
x = sin(2*pi*fx*t) + randn(1,N); xc = x;
plot(t,x); grid; axis tight; title('Sygnał analizowany'); xlabel('czas [sek]'); pause

% Obliczenie funkcji autokorelacji sygnału procedurą Matlaba


R1 = xcorr(x,x,'biased');
subplot(211); plot(tR,R1); title('Funkcja autokorelacji wyznaczona procedurą Matlaba');
grid; axis tight;

% Obliczenia „ręczne” bezpośrednio z definicji


R2 = [];
for k=0:N-1
R2(k+1)= sum( x(1:N-k).*x(1+k:N) ) / N;
end
R2 = [ R2(N:-1:1) R2(2:N) ];
subplot(212); plot(tR,R2); title('Funkcja autokorelacji wyznaczona "ręcznie"');
xlabel('czas [sek]'); grid; axis tight; pause

% Obliczenia „szybkie” M-pierwszych współczynników funkcji autokorelacji za pomocą FFT


M = N/8; % podaj liczbę współczynników
x = [x zeros(1,M-1)]; % dodaj M−1 zer na końcu sygnału
X = fft(x); % oblicz FFT (N+M−1)-punktowe
X = X.*conj(X); % oblicz |X(k)|^2
R3 = ifft(X); % oblicz odwrotne FFT (N+M−1)-punktowe
R3 = real(R3(1:M))/N; % pobierz poprawne wartości, przeskaluj
Analiza częstotliwościowa sygnałów dyskretnych 229

a) 3
2
1

x(t)
0
-1
-2
-3
0 0.05 0.1 0.15 0.2 0.25
t [s]
b) 1.5
1
0.5
Rxx(τ)

0
-0.5
-1
-0.25 -0.2 -0.15 -0.1 -0.05 0 0.05 0.1 0.15 0.2 0.25
τ [s]

c) 1.5
1
0.5
Rxx(τ)

0
-0.5
-1
0 0.005 0.01 0.015 0.02 0.025 0.03
τ [s]
d) 12
10
8
Pxx(f)

6
4
2
0
0 50 100 150 200 250 300 350 400 450 500
f [Hz]
e) 8

6
Pxx (f)

0
0 50 100 150 200 250 300 350 400 450 500
f [Hz]

Rys. 8.19. Przykład zastosowania algorytmu szybkiego wyznaczania estymat funkcji autokorelacji i funkcji
gęstości widmowej mocy (patrz tabele 8-3 i 8-4): a) analizowany sygnał x(n) = sin(2πfx(n∆t)) + szum
gaussowski: fx = 100 Hz, n = 0, 1, 2, ..., 255, ∆t = 0,001 sekundy (fpr = 1000 Hz), b) jego funkcja autoko-
relacji, c) fragment funkcji autokorelacji (8.59) wyznaczony metodą szybką (M = 32), d) funkcja gęstości
widmowej mocy Blackmana-Tukeya (8.60) wyznaczona na podstawie ww. fragmentu, e) periodogram
(1.51), (1.52) obliczony w celach porównawczych
230 Analiza częstotliwościowa sygnałów dyskretnych

subplot(111); k=1:M; plot(t(k),R1(N:N+M-1),'r',t(k),R3(k),'b'); grid;


title('Metoda "szybka" - Matlab (red), My (blue)'); xlabel('czas [sek]'); pause

% Wyznacz estymatę funkcji gęstości widmowej mocy procesu losowego, czyli transformatę Fouriera
% funkcji autokoralacji tego procesu − metoda Blackmana-Tukeya (1.49b)
L = N; % liczba prążków widma
w = hanning(2*M-1); w=w(M:2*M-1); w=w'; % wybierz okno widmowe, np. Hanninga
Rw = R3 .* w; % wymnóż funkcję autokorelacji z oknem
s = [ Rw(1:M) zeros(1,L-2*M+1) Rw(M:-1:2)]; % symetria wejścia FFT --> wyjście rzeczywiste
S = real(fft(s)); % transformacja Fouriera
df = 1/(L*dt); f=0:df:(L-1)*df; k=1:L/2+1;
subplot(311); plot(f(k),S(k),'b'); grid;
title('Funkcja gęstości widmowej mocy'); xlabel('f [Hz]'); pause

% Porównaj ją z nieuśrednionym periodogramem (1.51) całego sygnału


w = hanning(N)'; % wybór funkcji okna
S1 = abs( fft( xc.*w ) ).^2; % periodogram
S1 = S1/(sum(w.*w)); % normowanie
df = fpr/N; f=0:df:(N-1)*df; k=1:N/2+1;
subplot(312); plot(f(k),S1(k)); grid; title('Periodogram całego sygnału');
xlabel('f [Hz]'); pause

% Porównaj ją z uśrednionym periodogramem (1.52) wielu fragmentów sygnału


Nfft = N; Nwind = M; Noverlap = M/2; % długość FFT, długość okna, liczba próbek nakładania się okien
Nshift = Nwind-Noverlap; % przesunięcie pomiedzy kolejnymi fragmentami sygnału
K=floor((N-Nwind)/Nshift)+1; % liczba analizowanych fragmentów sygnału
w = hanning(Nwind)'; % wybór okna
S2 = zeros(1,Nfft); % inicjalizacja wektora uśrednionego periodogramu
for k=1:K % numer fragmentu sygnału
n = 1+(k-1)*Nshift : Nwind+(k-1)*Nshift; % indeksy analizowanych próbek
bx = x(n); bx = bx.*w; bxz = [bx zeros(1,Nfft-Nwind)]; % bufor, nałożenie okna, dodanie zer
X = fft(bxz,Nfft); % transformata Fouriera
S2 = S2 + abs(X).^2; % akumulowanie periodogramów
end
S2 = S2/(K*sum(w.*w)); % normowanie
df = fpr/Nfft; f2=0:df:(Nfft-1)*df; k=1:Nfft/2+1;
% [S2, f2] = psd(xc,Nfft,fpr,w,Noverlap); % to samo co wyżej, tylko za pomocą funkcji Matlaba
subplot(313); plot(f2(k),S2(k)); grid;
title('Uśredniony periodogram fragmentów sygnału'); xlabel('f [Hz]'); pause
9
Algorytmy wyznaczania
dyskretnej transformacji Fouriera

W poprzednim rozdziale zajmowaliśmy się problemem interpretacji dyskretnego widma X(k)


sygnału x(n) i zagadnieniem doboru parametrów (liczba próbek sygnału, rodzaj użytego okna
czasowego, ewentualne uzupełnienie sygnału zerami), gwarantujących wystarczającą rozróż-
nialość (rozdzielczość) częstotliwościową i amplitudową analizy częstotliwościowej sygnałów,
wykonywanej za pomocą dyskretnej transformacji Fouriera DFT (ang. Discrete Fourier Trans-
form). Obecnie skoncentrujemy się na aspektach numerycznych tej analizy. Przeanalizujemy
strukturę obliczeniową algorytmu DFT i pokażemy istniejące możliwości jego przyspieszenia.
W wyniku ich zastosowania otrzymuje się algorytmy tzw. szybkich transformacji Fouriera FFT
(ang. Fast Fourier Transform), czyli transformacji dających wynik identyczny jak DFT, ale
wyznaczanych w sposób „szybki”, prostszy obliczeniowo.

9.1. Metoda bezpośrednia


Przypomnijmy równania dyskretnej transformacji Fouriera (WN = exp(j2π/N)):
N −1
1
X (k ) = ∑ x(n )WN− kn , k = 0, 1, 2,..., N − 1 (analiza) (9.1)
N n =0
N −1
x (n ) = ∑ X (k )WNkn , n = 0, 1, 2,..., N − 1 (synteza) (9.2)
k =0

uzyskane w rozdziale trzecim w wyniku dyskretyzacji wzorów szeregu Fouriera dla sygnałów
ciągłych. Równania te można zapisać w następującej postaci:
N −1
1
X (k ) = ∑ x(n ) f k* (n ), k = 0, 1, 2, ..., N − 1 (9.3)
N n =0
N −1
x (n ) = ∑ X (k ) f k (n ), n = 0, 1, 2, ..., N − 1 (9.4)
k =0

Przypomnijmy: na podstawie N próbek sygnału x(n) wyznaczamy N wartości („próbek”,


„prążków”) widma Fouriera X(k) (9.1). Z kolei dysponując tymi prążkami jesteśmy w stanie
232 Algorytmy wyznaczania dyskretnej transformacji Fouriera

zsyntezować z nich sygnał (9.2). Dlaczego tak się dzieje? Ponieważ zbiór N harmonicznych
funkcji bazowych fk(n) (k = 0, 1, 2, ..., N−1):
 2π 
j  k n
f k (n) = e N  , n = 0, 1, 2, ..., N − 1 (9.5)
jest ortonormalny w N-wymiarowej przestrzeni wektorowej z iloczynem skalarnym:
N −1
1 0, k ≠ l
f k , fl =
N
∑ f k (n ) f l* (n ) = 1, k =l
(9.6)
n =0 
Zależność (9.6) otrzymujemy podstawiając (9.3) do (9.4). Matematyczne aspekty powyższych
stwierdzeń zostały przedyskutowane w rozdziale drugim. Podsumowując je można stwierdzić,
że równania dyskretnej transformacji Fouriera (9.1), (9.2) i (9.3), (9.4) (X(k) = Xk):
N −1 N −1
1
x (n ) = ∑ X k f k (n) , X k = x, f k l N2
= ∑ x(n ) f k* (n ) (9.7)
k =0 N n =0

są dyskretnymi odpowiednikami zależności (2.14), (2.10) z rozdziału drugiego:


N T
1
x (t ) = ∑ α k xk (t ) , α k = x, x k L2T
=
T ∫ x(t ) xk (t )dt
*
(9.8)
k =1 0

w sytuacji kiedy rozważamy N-wymiarową przestrzeń wektorową dyskretnych sygnałów okre-


sowych x(n). Jest to przestrzeń N-wymiarowa, ponieważ jej elementy są N-wymiarowe (sygna-
ły przestrzeni mają N próbek, czyli N „stopni swobody”).
Równania (9.1) i (9.2) można zapisać macierzowo:

 X ( 0)  1 1 1 " 1   x ( 0) 
 X (1)  1 WN−1 WN− 2 " WN− ( N −1)   x (1) 
  1   
 X ( 2)  = 1 WN− 2 WN− 4 " WN− 2( N −1)  ⋅  x(2)  (9.9)
  N # # # % #
  
 #     # 
 X ( N − 1) 1 WN− ( N −1) WN− 2( N −1) " WN− ( N −1)( N −1) 
  x ( N − 1)

 x ( 0)  1 1 1 " 1   X ( 0) 
 x (1)  1 WN1 WN2 " WNN −1   X (1) 
     
 x ( 2)  = 1 WN2 WN4 " WN2( N −1)  ⋅  X ( 2)  (9.10)
     
 #  # # # % #   # 
 x ( N − 1) 1 WNN −1 WN2( N −1) " WN( N −1)( N −1) 
  X ( N − 1)

Wykładniki WN są iloczynami numeru k prążka widma X(k) oraz numeru n próbki sygnału x(n).
Przykładowo w trzecim wierszu macierzy równania (9.9) mamy k = 2, gdyż obliczamy X(2),
więc wykładniki te są równe −kn = 0, −2, −4, −6, ..., −2(N−1), ponieważ k = 2 i n = 0, 1, 2, ...,
N−1. Zapiszmy równania (9.9) i (9.10) jako:
1 *
X= W x (analiza) (9.11)
N
x = WX (synteza) (9.12)
Algorytmy wyznaczania dyskretnej transformacji Fouriera 233

gdzie „*” oznacza zespolone sprzężenie elementów macierzy. Zwróćmy uwagę na fakt, że
w kolejnych kolumnach macierzy W (równanie syntezy (9.10)) znajdują się kolejne harmo-
niczne funkcje bazowe fk(n), k = 0, 1, 2, ..., N−1, a w kolejnych wierszach macierzy W* (rów-
nanie analizy (9.9)) − te same funkcje, tylko sprzężone. Łatwo wykazać, że jest to „zgodne”
z ideą przedstawienia sygnału jako ważonej sumy funkcji bazowych fk(n). Podczas syntezy
każda n-ta próbka sygnału x(n) jest bowiem uzyskiwana jako suma wszystkich n-tych próbek
sygnałów bazowych fk(n), k = 0, 1, 2, ..., N−1, wziętych z „wagami” X(k), podczas analizy zaś
k-ty prążek widma jest otrzymywany jako suma iloczynów wszystkich próbek sygnału i sprzę-
żonej k-tej funkcji bazowej.
Wyznaczenie dyskretnej transformaty Fouriera X(k) sygnału x(n) sprowadza się więc do rea-
lizacji numerycznej równania macierzowego (9.9), synteza zaś sygnału x(n) z jego X(k) jest
przeprowadzana na podstawie równania macierzowego (9.10). Oba równania różnią się jedynie
znakiem wykładnika liczby WN. Zakładając, że sygnał wejściowy jest zespolony, w obu z
nich trzeba wykonać N2 mnożeń zespolonych (N wierszy po N mnożeń) oraz N(N−1) dodawań
zespolonych (N wierszy po N−1 dodawań). Przykładowo dla N = 256 mamy 65 536 mnożeń
i 65 280 dodawań, a dla N = 1024: 1 048 676 mnożeń i 1 047 552 dodawań, czyli ponad
milion mnożeń i dodawań zespolonych. Jak widać liczba operacji arytmetycznych nie jest mała
i szybko rośnie wraz ze wzrostem długości wektora danych. Na szczęście istnieją jednak
„szybkie” algorytmy FFT, które w prosty sposób radykalnie zmniejszają tę liczbę, a oferują
identyczny wynik. Należy jednak wyraźnie podkreślić, że identyczność ta jest tylko teoretycz-
na, gdyż w realizacji komputerowej obliczenia są zawsze przeprowadzane ze skończoną
precyzją, a kolejność operacji arytmetycznych na danych wejściowych w algorytmach DFT
i FFT jest różna, więc otrzymane wyniki także będą nieznacznie różne od siebie i różne od
wyniku „idealnego”, teoretycznego. Stąd się bierze błąd względny wyniku rzędu 10−7 dla ob-
liczeń o pojedynczej precyzji (liczby zmiennoprzecinkowe 32-bitowe w standardzie IEEE SP)
oraz błąd rzędu 10−14 dla obliczeń o podwójnej precyzji (liczby zmiennoprzecinkowe 64-bito-
we w standardzie IEEE DP). Dla N będącego potęgą liczby 2, czyli N = 2p, algorytmy FFT
typu radix-2 oferują złożoność obliczeniową rzędu (N/2)log2N mnożeń i Nlog2N dodawań ze-
spolonych. Przykładowo dla N = 256 mamy 1024 mnożenia i 2048 dodawań, a dla N = 1024
− 5120 mnożeń i 10 240 dodawań, czyli ponad 100 razy mniej. Jak widać oszczędności są
olbrzymie, a więc „gra jest warta świeczki” niezależnie od tego jak szybki procesor oblicze-
niowy ma się do dyspozycji.
W dalszej części rozdziału przedstawimy jeden z algorytmów szybkiego DFT, czyli algorytm
FFT. Ze względu na podobieństwo równań (9.9) i (9.10) algorytm ten może być wykorzysty-
wany do wyznaczania prostej i odwrotnej transformacji Fouriera, należy tylko uwzględnić inny
znak wykładnika WN (dodatni zamiast ujemnego). Jak się później okaże dwywymiarowa tran-
sformacja Fouriera może być przedstawiona jako złożenie dwóch transformacji jednowymia-
rowych, dlatego „szybki” algorytm może być także stosowany przy wyznaczaniu transformacji
dwywymiarowej.
Zaproponowanie „szybkich” algorytmów wyznaczania DFT w latach sześćdziesiątych XX
wieku stanowiło milowy krok w rozwoju cyfrowego przetwarzania sygnałów. Zmniejszyło ono
bowiem radykalnie wymagania sprzętowe, niezbędne do obliczania DFT w „rozsądnym”
czasie i w konsekwencji umożliwiło jego szerokie zastosowanie.
234 Algorytmy wyznaczania dyskretnej transformacji Fouriera

9.2. Algorytm Goertzela


W wielu zastosowaniach nie jest konieczne wyznaczenie wszystkich prążków widma Fouriera
X(k) analizowanego sygnału x(n). Sytuacja taka występuje przykładowo w telefonach z wybie-
raniem tonowym, w których naciśnięcie jakiejś cyfry jest sygnalizowane za pomocą sumy
dwóch sygnałów sinusoidalnych. Załóżmy, że możemy generować osiem sygnałów sinusoidal-
nych o częstotliwościach występujących w dyskretnym szeregu Fouriera, należących do dwóch
zbiorów A = {f1, f2, f3, f4} i B = {f5, f6, f7, f8}. Są to następujące częstotliwości (w hercach): 697,
770, 852, 941, 1209, 1336, 1477, 1633. Jak widać nie są to sygnały harmoniczne. Wybranie
określonej cyfry na klawiaturze telefonu jest równoznaczne wygenerowaniu sygnału analogo-
wego, będącego sumą tylko dwóch sygnałów składowych, po jednym z każdego zbioru. Mamy
więc do wyboru 16 możliwości, gdyż do każdego z sygnałów pierwszego zbioru możemy
dodać tylko jeden z czterech sygnałów zbioru drugiego. Po co w związku z tym po sprób-
kowaniu sygnału analogowego wyznaczać wszystkie prążki szeregu Fouriera, kiedy tylko
osiem z nich jest dla nas istotnych? Oczywiście, nie jest to rozsądne. Wobec tego wyznaczamy
tylko tych osiem prążków, jednocześnie minimalizując pamięć potrzebną na przechowywanie
próbek ośmiu wybranych baz fourierowskich. Należy w tym miejscu jeszcze raz zwrócić szcze-
gólną uwagę na fakt, że częstotliwości fk nie są harmoniczne, a więc nie mogą być one idealnie
„odtworzone” przez prążki DFT. W praktyce stosuje się częstotliwość próbkowania 8000 Hz
i DFT o długości N = 205, oraz wyznacza następujące prążki widma DFT, odpowiadające
ośmiu poszukiwanym częstotliwościom: 18, 20, 22, 24, 31, 34, 38, 42.
Schemat blokowy zaproponowanego w tym przypadku algorytmu obliczeniowego, tzw. algo-
rytmu Goertzela, jest przedstawiony na rysunku 9.1, gdzie „z−1” oznacza jednostkowe opóźnie-
nie (czyli opóźnienie o jedną próbkę). Z każdej z ośmiu funkcji bazowych pozostaje jedyne
różne WN−k. Wyjście układu jest wstępnie wyzerowane. Próbki sygnału wchodzą do układu
w odwrotnej kolejności. Pierwsza z nich, czyli x(N−1), jest opóźniana o jedną próbkę, mnożo-
na przez WN−k i dodawana do następnej, czyli do x(N−2). Potem suma tych próbek jest opóź-
niana, mnożona po raz kolejny przez WN−k i dodawana do x(N−3) itd. N-ta próbka, która pojawi
się na wyjściu, jest k - t y m p r ą ż k i e m w i d m a , czyli X(k). Rzeczywiście, jeśli przyjrzymy
się k-temu wierszowi macierzy w równaniu (9.9):

( )( ) ( )
N −1
X (k ) = x(0) + x (1)WN− k + x(2) WN− k WN− k + ... + x ( N − 1) WN− k (9.13)

to okazuje się, że podczas wyznaczania X(k) (N−1)-sza próbka sygnału jest mnożona (N−1)
razy przez WN−k, (N−2)-ga próbka sygnału jest mnożona (N−2) razy przez WN−k, ..., a próbka
zerowa wcale nie jest mnożona. Taka sytuacja zachodzi właśnie w układzie przedstawionym na
rysunku 9.1. W każdej iteracji algorytmu układ wykonuje jedno mnożenie zespolone (przez
WN−k) oraz jedno dodawanie rzeczywiste (sumator „⊕”), czyli łącznie cztery mnożenia i trzy
dodawania rzeczywiste. Ponieważ odwrotna kolejność podawania próbek może być nie-
wygodna, można w pętli sprzężenia zwrotnego zastosować mnożnik WNk i kolejność naturalną,
a wynik dodawania pomnożyć przez WN−k(N−1). Sprawdzenie poprawności tej modyfikacji
pozostawiamy Czytelnikowi.

Dla dociekliwych (po lekturze rozdziału 10 i 11). Układ przedstawiony na rysunku 9.1 jest re-
kursywnym układem (filtrem) ze sprzężeniem zwrotnym, opisanym przez równanie:
y k (n ) = x (n ) + WN− k y k ( n − 1) (9.14)
Algorytmy wyznaczania dyskretnej transformacji Fouriera 235

x(0), x(1), ..., x(N−2), x(N−1) yk(N)=X(k)

z−1
WN = e j 2π / N

WN− k

Rys. 9.1. Wyznaczanie rekurencyjne DFT metodą Goertzela. „z−1” − opóźnienie o jedną próbkę

Transmitancja Z tego układu jest równa:


1
H k ( z) = (9.15)
1 − WN− k z −1

( )
Pomnóżmy licznik i mianownik tej transmitancji przez 1 − WNk z −1 . Otrzymujemy wówczas:

1 − WNk z −1
H k ( z) = (9.16)
1 − 2 cos(2πk / N )z −1 + z − 2

Transmitancji tej odpowiada układ przedstawiony na rysunku 9.2a, będący kaskadowym połą-
czeniem dwóch dyskretnych układów LTI. Po zamianie ich kolejności otrzymujemy układ, po-
kazany na rysunku 9.2b, opisany następującymi równaniami czasowymi

wk (n ) = x (n ) + 2 cos(2πk / N )wk (n − 1) − wk ( n − 2) (9.17)

y k (n ) = wk (n ) − WNk wk (n − 1) (9.18)

W celu wyznaczenia k-tego prążka widma Fouriera X(k) należy iterować równanie (9.17) dla
n = 0, 1, 2, ..., N, a równanie (9.18) wyznaczyć tylko dla n = N. W ten sposób redukuje się licz-
bę mnożeń do tylko N+1 mnożeń rzeczywistych, czyli uzyskuje się znaczne zmniejszenie zło-
żoności obliczeniowej układu w porównaniu z realizacją z rysunku 9.1.

a) b)
x(n) yk(n) x(n) wk(n) yk(n)

z−1 z−1 z−1

WN− k 2cos(2πk/N) 2cos(2πk/N) WN− k


z−1 z−1
WN = e j 2π / N
−1 −1
Rys. 9.2. Realizacja metody Goertzela, optymalna pod względem złożoności obliczeniowej. „z−1” − opóź-
nienie o jedną próbkę
236 Algorytmy wyznaczania dyskretnej transformacji Fouriera

9.3. Rekurencyjne wyznaczanie sekwencji dyskretnych


transformat Fouriera
Zdarza się, że dyskretną transformację Fouriera wyznacza się cyklicznie dla kolejnych frag-
mentów jakiegoś sygnału dyskretnego i fragmenty te różnią się tylko o jedną próbkę. Ponieważ
próbki transformowane różnią się nieznacznie, to samo powinno dotyczyć i wyniku trans-
formacji. Spróbujmy przyjrzeć się temu zagadnieniu bliżej.
Załóżmy, że X0(k) jest widmem N próbek sygnału x(n), n = 0, 1, 2, ..., N−1, czyli zaczyna-
jących się od próbki zerowej:
N −1
1
X 0 (k ) =
N
∑ x(n )e − j( 2π / N )kn , k = 0, 1, 2,..., N − 1 (9.19)
n =0

a X1(k) − widmem N próbek sygnału x(n), n = 1, 2, 3, ..., N, czyli zaczynających się od próbki
pierwszej:
N
1
X 1 (k ) =
N
∑ x(n)e − j (2 π / N )k ( n −1) , k = 0, 1, 2,..., N − 1 (9.20)
n =1

Przekształćmy równanie (9.20) e − j 2 πk = 1 : ( )


1   N −1 − j (2π / N ) kn  j (2π / N ) k 
X 1 (k ) =
N   ∑ x ( n )e e + x ( N )e − j (2π / N ) k ( N −1)  =
  n =1  

1  N −1
 
=   x (0) − x (0) + ∑ x ( n ) e − j (2π / N ) kn  e j (2π / N ) k + x ( N )e − j 2π k e j (2π / N ) k )  =
N  n =1  

e j (2π / N ) k   N −1 − j (2π / N ) kn  
=
N  ∑ x (n)e  − x (0) + x ( N )  =
  n =0  
 1 N −1
 1 
= e j (2π / N ) k   ∑ x ( n )e − j (2π / N ) kn
 + N ( x ( N ) − x (0) )  =
 N n =0  
 1 
= e j ( 2 π / N ) k  X 0 (k ) + ( x ( N ) − x (0) ) (9.21)
 N 

Z ostatniego wzoru widać, jak należy zmodyfikować k-ty prążek widma X(k), k = 0, 1, 2, ...,
N−1, jeżeli usuwamy z analizowanego wektora danych próbkę x(0) („najstarszą”) i dodajemy
próbkę x(N) („najświeższą”). Schemat blokowy odpowiedniego algorytmu obliczeniowego jest
przedstawiony na rysunku 9.3.
Powtórzmy powyższe przekształcenia w sytuacji kiedy transformowany sygnał jest wymnażany
z oknem eksponencjalnym:

w( n ) = e α n (9.22)

Wówczas otrzymujemy:
N −1
1
X 0w ( k ) =
N
∑ eαn x(n)e − j ( 2π / N )kn , k = 0, 1, 2, ..., N − 1
n =0
Algorytmy wyznaczania dyskretnej transformacji Fouriera 237

x(n) x(n−1) x(n−2) x(n−N)


z−1 z−1 z−1

1 −1

1/N
X(k−1)

e j ( 2 πk / N ) z−1

X(k)
Rys. 9.3. Schemat blokowy algorytmu wyznaczania sekwencji dyskretnych transformat FourieraX(k)

N
1
X 1w ( k ) =
N
∑ e α( n −1) x(n)e − j (2 π / N )k ( n −1) , k = 0, 1, 2,..., N − 1
n =1

1  N −1 α ( n −1)  
X 1w ( k ) =
N  ∑ e x ( n )e − j (2π / N ) kn  e j (2π / N ) k + eα ( N −1) x ( N ) e− j (2π / N ) k ( N −1)  =
 n =1  

e −α   N −1 α n − j (2π / N ) kn  j ( 2π / N ) k 
=
N   ∑ e x( n )e e − x (0)e j (2π / N ) k + eα N x ( N )e j (2π / N ) k )  =
  n =0  

 1 N −1
 1 
= e −α e j (2π / N ) k  ∑ eα n
x ( n )e − j (2π / N ) kn  + ( eα N x ( N ) − x (0) )  =
 N n =0  N 


= e − α e j ( 2 π / N )k  X 0w ( k ) +

1 αN
N
( 
e x ( N ) − x (0) 

) (9.23)

Jeszcze nie dajemy za wygraną. Przecież:

( )
cos( ωn ) = 0,5 e jωn + e − jωn = 0,5 e αn + e −αn , α = jω ( ) (9.24)

A istnieje wiele okien czasowych zbudowanych z sumy funkcji kosinusoidalnych:


M
 2 πm 
w( n ) = a 0 + ∑ am cos n , n = − N / 2,...,−1, 0, 1,..., N / 2
N 
(9.25)
m =1

które w związku z powyższym mogą być przedstawione jako:


M am   2 πm   2 πm  
w(n ) = a0 + ∑ exp  − j N n  + exp  j N n   (9.26)
m =1 2     

Przykładowo dla okna Hamminga (−43 dB) oraz Blackmana-Harrisa (−67 dB) odpowiednio
mamy:
238 Algorytmy wyznaczania dyskretnej transformacji Fouriera

a0 = 0, 54; a1 = 0, 46; a2 = 0

a0 = 0, 42323; a1 = 0, 49755; a2 = 0, 07922

W związku z tym podstawmy α = j(2πm/N) do równań (9.22), (9.23):


X 1w (k ) = e − j ( 2 π / N ) m e j ( 2 π / N ) k  X 0w (k ) +
 N
(
1 j ( 2 π / N ) mN
e ) 
x ( N ) − x (0) 

 1 
X 1w (k ) = e j ( 2 π / N )( k − m )  X 0w (k ) + ( x ( N ) − x (0) ) (9.27)
 N 
Jeśli natomiast okno nie jest dane wzorem (9.22) tylko inaczej zapisanym wzorem (9.26):
M M  2π 
  2π   2π   j mn
w(n ) = b0 + ∑ b− m exp  − j m  + bm exp  j m   = ∑ bm e N  (9.28)
m =1   N   N   m =− M

to wówczas ostatnie wyrażenie przyjmuje postać:


M
 j ( 2 π / N )( k − m )  w 1 
X 1w (k ) = ∑ bm e  X 0 (k ) + N ( x ( N ) − x (0) )  (9.29)
m=−M  
Tak więc w przypadku typowych okien kosinusoidanych z powodzeniem można także stoso-
wać rekurencyjne wyznaczanie sekwencji dyskretnych widm Fouriera. Schemat blokowy takie-
go algorytmu dla M = 1 jest przedstawiony na rysunku 9.4. Przykładowo dla okna Hamminga
mamy:
a1 a
b−1 = = 0, 23; b0 = a0 = 0, 54; b1 = 1 = 0, 23
2 2

x(n) x(n−1) x(n−2) x(n−N)


z−1 z−1 z−1

1 −1

1/N

e j ( 2 π( k −1) / N ) z−1 e j ( 2 πk / N ) z−1 e j ( 2 π( k +1) / N ) z−1

b−1 b0 b1

X(k)
Rys. 9.4. Schemat blokowy algorytmu wyznaczania rekurencyjnego prążka X(k) widma Fouriera w przy-
padku zastosowania okien kosinusoidalnych (wzór (9.29))
Algorytmy wyznaczania dyskretnej transformacji Fouriera 239

9.4. Transformacja świergotowa − lupa w dziedzinie


częstotliwości
Dyskretna transformata świergotowa CZT (ang. Chirp-Z Transform) jest wykorzystywana do
obliczania widma Fouriera analizowanego sygnału w interesującym nas paśmie częstotli-
wościowym z rozdzielczością określoną przez użytkownika. Spełnia ona jakby rolę „mikro-
skopu” w analizie widmowej. Załóżmy, że chcemy obliczyć dyskretną transformatę Fouriera
N-elementowego ciągu czasowego próbek sygnału x(n), 0 ≤ n ≤ N−1, dla następujących M+1
częstotliwości u n o r m o w a n y c h (tzn. podzielonych przez częstotliwość próbkowania fp):

f k = f 0 + k ⋅ ∆f , k = 0, ..., M (9.30)

Wówczas M+1 składowych dyskretnej transformaty Fouriera jest danych wyrażeniem


N −1
X (k ) = ∑ x ( n ) e − j 2π fk n , k = 0, ..., M (9.31)
n =0

Po wprowadzeniu dwóch nowych stałych A i W:

A ≡ e − j 2 π f 0 , W ≡ e − j 2 π ∆f / 2 (9.32)
(9.31) przyjmuje następującą postać
N −1
X (k ) = ∑ x ( n ) AnW 2 kn , k = 0, ..., M (9.33)
n =0

która z kolei po uwzględnieniu równości 2kn = n2+k2−(k−n)2 może być przedstawiona jako:
N −1
∑  x(n ) AnW n  W − ( k − n )2 ,
2 2
X (k ) = W k k = 0, 1, ..., M (9.34)

n =0

Równanie (9.34) reprezentuje splot dwóch sygnałów „czasowych”:


2 2
y1 ( n ) = x(n ) AnW n , y 2 (n ) = W − n

W dziedzinie częstotliwości odpowiada tej operacji iloczyn widm Y1(k) i Y2(k) obu sygnałów.
Wynika stąd, że równanie (9.34) może być także zrealizowane za pomocą wykonania trzech
dyskretnych transformacji Fouriera DFT, dwóch prostych i jednej odwrotnej. W przypadku
zastosowania szybkiej wersji DFT, tzw. FFT (ang. Fast Fourier Transform), otrzymuje się al-
gorytm potocznie nazywany „szybkim” splotem. Schemat blokowy programowej implemen-
tacji równania (9.34) jest przedstawiony na rysunku 9.5. Wyznaczanie widma X(k) z (9.34)
metodą świergotową jest efektywniejsze niż bezpośrednio z (9.31) dla odpowiednio dużych
wartości parametrów N i M. Algorytm szybkiej transformacji Fouriera FFT poznamy w następ-
nym podrozdziale.
Podczas programowej implementacji algorytmu transformacji świergotowej należy pamiętać,
że „szybki” splot dwóch sygnałów, realizowany za pomocą sekwencji trzech FFT, jest splotem
kołowym a nie liniowym. Muszą być więc podjęte specjalne zabiegi programowe, aby uzyskać
splot liniowy. Sprowadzają się one do uzupełnienia zerami „splatanych” sygnałów. Więcej in-
formacji o problemach implementacji splotu liniowego sygnałów dyskretnych za pomocą FFT
podamy w rozdziale 13, poświęconym szybkim algorytmom filtracji cyfrowej.
240 Algorytmy wyznaczania dyskretnej transformacji Fouriera

W tabeli 9-1 jest przedstawiony program, implementujący opisany powyżej szybki algorytm
transformacji świergotowej. Wyznacza on M prążków widma w zadanym przedziale często-
tliwościowym (fd − częstotliwość dolana, fg − częstotlowość górna) dla sygnału x(n), mającego
N próbek. Zgodnie z rozważaniami przeprowadzonymi w rozdziałach 13.4 i 13.5 (rysunki
2
13.13 i 13.14), sygnał y1 ( n ) = x(n ) AnW n z rysunku 9.5 jest uzupełniony na końcu M−1 zerami,
2
natomiast sygnał y2 (n ) = W − n , −(N−1) ≤ n ≤ (M−1), jest ukształtowany w taki sposób, aby po
jego odwróceniu w czasie, wykonywanym podczas operacji splotu, próbki o indeksach n = 1,
..., M−1 „trafiły” w zera dodane na końcu sygnału y2(n).
2
AnW n
2
y1(n) Y1(k) Wk
x(n) FFT

IFFT X(k)
2
W −n FFT
y2(n) Y2(k)

Rys. 9.5. Schemat blokowy wyznaczania wybranych prążków widma Fouriera X(k) za pomocą dyskretnej
transformacji świergotowej

Tab. 9-1. Program w języku Matlab, implementujący dyskretną transformację świergotową sygnału

% Ćwiczenie: Dyskretna transformacja świergotowa sygnału (ang. chirp-Z)

clear all; subplot(111);

% Generacja sygnału analizowanego


N = 128; % liczba próbek sygnału
fpr = 128; % częstotliwość próbkowania
ax1 = 0.2; fx1 = 10.00; % amplituda i częstotliwość składowej 1
ax2 = 2.0; fx2 = 30.50; % amplituda i częstotliwość składowej 2
ax3 = 1.0; fx3 = 33.25; % amplituda i częstotliwość składowej 3
dt=1/fpr; t = 0 : dt : (N-1)*dt; % wartości chwil czasowych próbkowania
x = ax1*sin(2*pi*fx1*t) + ax2*sin(2*pi*fx2*t) + ax3*sin(2*pi*fx3*t);

% FFT sygnału
Xfft=fft(x)/(N/2);
df=1/(N*dt); f=0:df:(N-1)*df;
plot(f,abs(Xfft)); grid; title('Abs(FFT)'); xlabel('f [Hz]'); pause

% Wolna LUPA DFT - obliczenia bezpośrednio z definicji DFT


fd = 25; % częstotliwość dolna "lupy"
fg = 40; % częstotliwość górna "lupy"
M = 256; % liczba prążków widma w tym przedziale
df = (fg-fd)/(M-1); f = fd : df : fg; % intersujące nas częstotliwości
for k=1:M
Xlupa(k)=sum( x .* exp(-j*2*pi*f(k)*t) )/(N/2); % suma iloczynów wszystkich próbek
end
plot(f,abs(Xlupa)); grid; title('LUPA DFT bezpośrednio'); xlabel('f [Hz]'); pause

% Szybka LUPA DFT - transformacja chirp-Z MATLABA


A = exp( j*2*pi * fd/fpr ); % punkt startowy
W = exp( -j*2*pi * ((fg-fd)/(M-1))/fpr ); % krok
XcztM = czt( x, M, W, A)/(N/2); % wywołanie funkcji chirp-Z Matlaba
Algorytmy wyznaczania dyskretnej transformacji Fouriera 241

plot(f,abs(XcztM)); grid; title('LUPA chirp-Z MATLABA'); xlabel('f [Hz]'); pause

% Szybka LUPA - transformacja chirp-Z NASZA


NM1 = N+M-1;
A = exp( -j*2*pi * fd/fpr ); % punkt startowy
W = exp( -j*2*pi * ((fg-fd)/(2*(M-1))/fpr) ); % krok
for k=0:NM1-1 % inicjalizacja wartości wektorów y1, y2
if(k<N) y1(k+1) = (A*W^k)^k * x(k+1); else y1(k+1) = 0; end
if(k<M) y2(k+1) = W^(-k^2); else y2(k+1) = W^(-(NM1-k)^2); end
end
% to samo co w powyższej pętli, tylko szybciej
% y1 = zeros(1,NM1); k=0:N-1; y1(k+1)= ((A*W.^k).^k) .* x(k+1);
% k=0:M-1; y2(k+1)= W.^(-k.^2); k=M:NM1-1; y2(k+1)= W.^(-(NM1-k).^2);
Y1 = fft(y1); % # algorytm szybkiego splotu kołowego
Y2 = fft(y2); % # sygnałów x1 i x2
Y = Y1.*Y2; %#
y = ifft(Y)/(N/2); % #
for k=0:M-1, XcztN(k+1) = y(k+1) * (W^(k^2)); end % korekcja fazowa wyniku splotu
% k=0:M-1; XcztN(k+1) = y(k+1) .* (W.^(k.^2)); % to samo co w powyższej pętli, tylko szybciej
plot(f,abs(Xczt(1:M))); grid; title('LUPA chirp-Z NASZA'); xlabel('f [Hz]'); pause

9.5. Szybka transformacja Fouriera − algorytmy radix-2

9.5.1. Podział w dziedzinie czasu − DIT (ang. Decimation in Time)

Ideę, którą się stosuje w algorytmach typu DIT FFT jest podział próbek transformowanego sy-
gnału na te o indeksach parzystych (0, 2, 4, ...) i nieparzystych (1, 3, 5, ...), wykonanie DFT
na każdym z tych zbiorów, a następnie odtworzenie widma „całego” sygnału z dwóch widm
„cząstkowych”. Ponieważ DFT charakteryzuje się złożonością obliczeniową rzędu N 2, dzieląc
sygnał na dwie części i transformując je osobno, musimy wykonać dwa razy po (N/2)2 operacji
plus niewielką liczbę operacji, potrzebnych na „sklejenie” widm częściowych. Przykładowo
dla N = 1024, zamiast wykonywać N 2 = 1 048 676 mnożeń wykonuje się 2(N/2)2 = N 2/2 =
= 524 288 mnożeń, czyli dwa razy mniej. Nawet jeśli operacja „sklejania” widm nie jest „bez-
bolesna”, podejście takie i tak zdecydowanie się opłaca. A przecież operacją podziału można
kontynuować dalej, tzn. dalej dzielić podzbiory próbek na parzyste i nieparzyste, dochodząc
w końcu do zbiorów dwuelementowych. I tak jest w istocie. W algorytmie radix-2 (podział na
„dwa” podzbiory) DIT (decymacja w czasie, czyli próbek sygnału) FFT wymaga się, aby
transformowany sygnał składał się z N = 2p próbek, a następnie:
1) dokonuje się zmiany kolejności próbek, dzieląc je rekurencyjnie na próbki o indeksach pa-
rzystych i nieparzystych, aż do uzyskania zbiorów dwuelementowych;
2) wykonuje się serię N/2 dwupunktowych DFT;
3) następnie składa się widma dwuprążkowe w widma czteroprążkowe, czteroprążkowe
w ośmioprążkowe itd., aż do momentu odtworzenia widma N-prążkowego, czyli widma
całego sygnału.
Dla danego N mamy log2N etapów obliczeń, przykładowo dla N = 8 mamy log28 = 3 etapy:
musimy wykonać serię czterech dwupunktowych transformacji DFT (etap 1), następnie cztery
widma dwupunktowe złożyć w dwa widma czteropunktowe (etap 2) i dwa widma cztero-
punktowe złożyć w jedno widmo ośmiopunktowe (etap 3). Ponieważ w najprostszej wersji
algorytmu w każdym etapie obliczeń wykonuje się N mnożeń i N dodawań zespolonych (N/2
motylki po dwa mnożenia i dwa dodawania zespolone), całkowita złożoność obliczeniowa
szybkiego algorytmu radix-2 DIT FFT wynosi Nlog2N mnożeń i Nlog2N dodawań zespolonych.
W wersji jeszcze „szybszej” redukuje się liczbę mnożeń do (N/2)log2N.
242 Algorytmy wyznaczania dyskretnej transformacji Fouriera

Dygresja. Dawniej kiedy procesory wykonywały operację mnożenia o wiele dłużej niż doda-
wanie i odejmowanie, korzystna była minimalizacja liczby mnożeń, nawet kosztem zwiększe-
nia liczby dodawań i odejmowań. Jednak obecnie tak nie jest. Procesory sygnałowe potrzebują
tyle samo cykli zegarowych na każdą z tych operacji. Co więcej tyle samo co operacje aryt-
metyczne (poza dzieleniem) trwa także przesyłanie liczb pomiędzy rejestrami procesora a pa-
mięcią. Optymalizacja programu sprowadza się więc obecnie do minimalizacji wszystkich
operacji programowych związanych z realizacją konkretnego algorytmu.

Jak widać podstawą całej piramidy jest dwupunktowa transformacja DFT.

Obecnie szczegółowo przeanalizujemy ten algorytm. Na początku założymy, że dzielenie przez


N, występujące w równaniu (9.1) wykonamy na samym końcu, dlatego zainteresujemy się tylko
równaniem:
N −1
X (k ) = ∑ x(n )WN− kn , k = 0, 1, 2, ..., N − 1, WN = e j 2 π / N (9.35)
n =0

Podzielmy próbki sygnału na „parzyste” i „nieparzyste”. Wówczas:


N / 2 −1 N / 2 −1
X (k ) = ∑
n =0
x (2n )WN− k (2 n ) + ∑
n =0
x(2n + 1)WN− k (2 n +1) , k = 0, 1, 2, ..., N − 1 (9.36)

Ponieważ
 2π   2π 
WN− 2 kn = exp ( −2kn )  = exp ( −kn )  = WN− kn
/2
N   N /2 
stąd
 N / 2−1   N / 2−1 
X (k ) =  ∑ x (2n )WN− /kn2  + WN− k  ∑ x (2n + 1)WN− /kn2  , k = 0, 1, 2, ..., N − 1 (9.37)
 n =0   n =0 
W dwóch sumach występujących w nawiasach kwadratowych rozpoznajemy N/2-punktowe
równania DFT próbek parzystych i nieparzystych. Jednak z pewnymi różnicami: w N/2-pun-
ktowym DFT indeks k zmienia się od 0 do N/2−1, a w równaniu (9.37) zmienia się od 0 do
N−1. Dodatkowo brak jest dzielenia sum przez N/2. Dzielenie nie stanowi problemu, gdyż i tak
w algorytmach DFT operacja ta jest na zewnątrz rdzenia obliczeniowego i dzieli się tylko raz
cały wynik dekompozycji. Również zmniejszenie górnego indeksu k nie stanowi problemu,
ponieważ funkcje WN/2−kn mają okres N/2 ze względu na k:

 2π 
WN− (/k2+ N / 2) n = WN− kn / 2 exp(− 2 πn ) = WN / 2
− ( N / 2 )n
/ 2WN / 2 = WN− kn
/ 2 exp − ( N / 2)n  = WN− kn − kn
 N / 2 

Dlatego dla k = 0, 1, 2, ..., N/2−1 równanie (9.37) można zapisać w następującej postaci:

X (k ) = X 2n (k ) + WN− k X 2n +1 ( k ), k = 0,1, 2, ..., N / 2 − 1 (9.38)

gdzie X2n(k) i X2n+1(k) oznaczają N/2-punktowe, nieunormowane (brak dzielenia przez N/2)
transformaty DFT próbek parzystych (2n) i nieparzystych (2n+1). Prążki X(k) dla k = N/2, ...,
N−1 oblicza się natomiast z zależności:
 N
X  k +  = X 2 n ( k ) + WN− ( k + N / 2) X 2 n +1 ( k ) , k = 0,1, 2,..., N / 2 − 1 (9.39)
 2
Algorytmy wyznaczania dyskretnej transformacji Fouriera 243

a) b)
1 1
X(k) X(k) X(k) X(k)
−k 1
W N
etap (i) etap (i+1) etap (i) etap (i+1)
1 1
X(k+N/2) X(k+N/2) X(k+N/2) X(k+N/2)
− WN− k WN− k −1
Rys. 9.6. Struktura obliczeniowa podstawowego bloku obliczeniowego algorytmu DIT FFT radix-2, czyli
tzw. „motylka”. a) wersja „pełna”, b) wersja „prostsza” o zredukowanej liczbie operacji arytmetycznych, po
przesunięciu (wyłączeniu) czynnika WN− k . Przypomnijmy: − WN− k = WN− ( k + N / 2 )

Ponieważ
WN− ( k + N / 2) = WN− kWN− N / 2 = WN− k e − jπ = −WN− k

więc równanie (9.39) można zapisać jako:


 N
X  k +  = X 2 n ( k ) − WN− k X 2 n +1 ( k ) , k = 0,1, 2,..., N / 2 − 1 (9.40)
 2
Wzory (9.38) i (9.40) można łącznie przedstawić w następującej postaci:

 X (k )  1 WN− k   X 2 n ( k ) 
 X ( k + N / 2)  = 1 −W − k   X ( k )  , k = 0,1, 2,..., N / 2 − 1 (9.41)
   N   2 n +1 

Wzór (9.41) jest prawdziwy na wszystkich etapach dekompozycji. Na każdym kolejnym etapie
stosuje się podstawienie N = N/2, czyli połowę N z etapu poprzedniego, aż uzyska się N = 2.
Jeśli wektory złożone z prążków widmowych X2n(k) i X2n+1(k) złożymy razem, jeden za drugim,
i wynikowy wektor nazwiemy X(k), to wówczas (9.41) przyjmuje formę rekurencyjną:

 X (k )  1 WN− k   X (k ) 
 X ( k + N / 2)  = 1 −W − k   X ( k + N / 2)  , k = 0,1, 2,..., N / 2 − 1 (9.42)
   N  

Graficzna ilustracja równania (9.42) jest pokazana na rysunku 9.6a i ze względu na kształt nosi
nazwę „motylka”. Na najniższym poziomie wektor X(k) jest inicjalizowany wektorem xp(n),
składającym się z odpowiednio poprzestawianych próbek sygnału wejściowego x(n) (wynik
końcowy rekurencyjnego podziału próbek na parzyste i nieparzyste). Wówczas równanie
(9.42) odpowiada algorytmowi dwupunktowego DFT (N = 2, k = 0, bez skalowania, czyli dzie-
lenia przez 2)

 X (0) 1 1   x p (0) 1 1   x p (0) 1 1   x p (0)


 X (1)  = 1 W − (1) ⋅(1)   x (1)  = 1 exp( − π)  x (1)  = 1 − 1  x (1)  (9.43)
   2  p    p    p 

Równanie (9.42) można przedstawić w postaci mniej złożonej obliczeniowo:

 X (k )  1 1   X (k ) 
 X ( k + N / 2)  = 1 −1 W − k X ( k + N / 2) , k = 0,1, 2,..., N / 2 − 1 (9.44)
    N 
244 Algorytmy wyznaczania dyskretnej transformacji Fouriera

która wymaga tylko jednego mnożenia zespolonego i dwóch dodawań zespolonych, zamiast
dwóch mnożeń i dwóch dodawań. Prostszy „motylek”, odpowiadający równaniu (9.44), jest
przedstawiony na rysunku 9.6b. W przypadku jego zastosowania w a l g o r y t m i e r a d i x - 2
DIT FFT liczba mnożeń zespolonych maleje z Nlog2N do (N/2)log2N
(log2N etapów po N/2 mnożeń, czyli po jednym mnożeniu w N/2 motylkach).
Do omówienia pozostaje jeszcze metoda przestawiania próbek. Metoda bezpośrednia polegają-
ca na wielokrotnym podziale próbek na parzyste i nieparzyste jest poprawna, ale niezbyt
szybka, gdyż dane są wielokrotne sortowane (przestawiane). Metodą często proponowaną w li-
teraturze jest metoda „numeracji o odwróconej kolejności bitów”, w której próbka wejścio-
wego wektora danych od razu jest umieszczana na właściwej pozycji przed serią „motylków”
FFT. Wynika ona w sposób bezpośredni z operacji wielokrotnego podziału próbek na parzyste
i nieparzyste.
Załóżmy, że chcemy wykonać FFT wektora danych (próbek sygnału) o długości N = 8. Po
pierwszym podziale na próbki parzyste i nieparzyste otrzymujemy:
{x (0), x(2), x(4), x(6)}, {x(1), x(3), x(5), x(7)}
Do drugim podziale mamy:
{x (0), x(4)}, {x (2), x(6)}, {x(1), x(5)}, {x(3), x(7)}
Ponieważ dostaliśmy już zbiory dwuelementowe, „tasowanie” próbek się kończy. Porównajmy
kolejność próbek na początku i po przestawieniu:
przed: x (0), x(1), x( 2), x(3), x (4), x (5), x(6), x (7 )
po: x (0), x(4), x(2), x(6), x (1), x (5), x(3), x (7 )

A teraz zapiszmy indeksy próbek w systemie binarnym (dwójkowym pozycyjnym):


przed (dziesiętnie): 0, 1, 2, 3, 4, 5, 6, 7
przed (binarnie): 000, 001, 010, 011, 100, 101, 110, 111
po (binarnie): 000, 100, 010, 110, 001, 101, 011, 111
po (dziesiętnie): 0, 4, 2, 6, 1, 5, 3, 7
Cóż widać? Nietrudno zauważyć, że nową kolejność próbek uzyskuje się poprzez lustrzane
odbicie bitów początkowych numerów próbek. Nie powinno to dziwić. Jeśli wejściowy numer
próbki w naszym przykładzie zapiszemy binarnie jako nwe = b2b1b0 (b2*4+b1*2+b0), to bit b0
odpowiada za to, czy po pierwszym przestawieniu próbka znajdzie w dolnej (b0 = 0) czy
w górnej (b0 = 1) połowie „nowego” wektora. W pierwszym przypadku próbka otrzyma nowy
numer od 0 do 3, a w przypadku drugim − od 4 do 7. Następnie bit b1 decyduje o tym, czy po
drugim przestawieniu próbka znajdzie się w dolnej (numery 0 i 1) czy w górnej (numery 2 i 3)
połowie odpowiedniego „podwektora” czteroelementowego, otrzymanego w poprzednim kro-
ku itd. Końcowa pozycja próbki więc wynika właśnie z odczytania „wspak” bitów jej numeru
w wejściowym wektorze danych (tzn. {dół, góra}, {dół, góra}, ...).
Programowa implementacja metody „przestawiania bitów” nie nastręcza problemów. Wię-
kszość procesorów sygnałowych ma nawet wbudowany sprzętowy mechanizm adresowania
komórek pamięci z „odwróceniem” części bitów. Przykładem może być procesor Motorola
DSP56xxx i DSP563xx.
Jeśli byśmy dalej kontynuowali nasz przykład w następnym kroku powinniśmy wykonać cztery
dwupunktowe transformacje DFT:
Algorytmy wyznaczania dyskretnej transformacji Fouriera 245

 X (0) 1 1   x (0)  X (4) 1 1   x (1)


1)  =  0 , 3)   =   0 
 X (1)  1 − 1 W2 x ( 4)  X (5)  1 − 1 W2 x (5) 

 X (2)  1 1   x ( 2)  X (6)  1 1   x (3)


2)  =  0 , 4)  =  0 
 X (3)  1 − 1 W2 x (6)  X (7)  1 − 1 W2 x (7)

A potem połączyć ich wyniki w dwie transformaty czteropunktowe:

 X (0)  1 1   X (0)  X (4) 1 1   X (4) 


1)  =  0 , 2)  =  0 
 X (2) 1 − 1 W4 X ( 2)  X (6)  1 − 1 W4 X (6)

 X (1)  1 1   X (1)  X (5)  1 1   X (5)


 X (3) = 1 − 1 W 1 X (3) ,  X (7)  = 1 − 1 W 1 X (7)
    4      4 

Na końcu odtwarzamy transformatę całego sygnału:

 X (0)  1 1   X (0)  X (2) 1 1   X (2)


a)  =  0 , c)  =  2 
 X (4) 1 − 1 W8 X ( 4)  X (6)  1 − 1 W8 X (6)

 X (1)  1 1   X (1)  X (3)  1 1   X (3) 


b)  =  1 , d)  =  3 
 X (5) 1 − 1 W8 X (5)  X (7)  1 − 1 W8 X (7) 

oraz dzielimy wszystkie elementy przez N.

Uproszczony diagram szybkiego algorytmu Fouriera DIT FFT radix-2 dla N = 8 jest przed-
stawiony na rysunku 9.7. Jak widać na początku przestawiamy próbki sygnału wejściowego,
następnie wykonujemy serię DFT dwupunktowych, a potem już tylko składamy widma: dwu-
punktowe w czteropunktowe, czteropunktowe w ośmiopunktowe i tak dalej (w ogólności). Jak
widać prążki kolejnego widma zastępują („nadpisują”) prążki widm poprzednich i nie jest
potrzebna dodatkowa pamięć na przechowywanie wyników przejściowych. Pełny schemat
omawianego algorytmu prezentuje rysunek 9.8, na rysunku 9.9 przedstawiono zaś kolejne
etapy jego wyprowadzenia. „Sercem” numerycznym programu, implementującego algorytmu
radix-2 DIT FFT, jest wykonanie obliczeń związanych z jednym „motylkiem”. A cała reszta to
kontrolowanie położenia i szerokości motylka na poszczególnych etapach. W tabeli 9-2
przedstawiono wartości parametrów programu na poszczególnych etapach obliczeń. W kolej-
nych etapach wartości próbek bazy Fouriera są uzyskiwane poprzez wielokrotne mnożenie
przez siebie „mnożnika” bazy, różnego na każdym etapie, np.

W16−3 = 1 ⋅W16−1 ⋅W16−1 ⋅W16−1

Aby uniknąć wielokrotnego wyznaczania tych samych wartości próbek baz Fouriera w kolej-
nych etapach obliczeń, np. W4−1 z etapu 2, W8−2 z etapu 3 oraz W16−4 z etapu 4 są identyczne
(patrz tabela 9-3), może je wyznaczyć tylko jeden raz na początku dla bazy o największej
długości, a potem pobierać co którąś próbkę z tego wektora.
Kod źródłowy programu FFT, napisanego w języku Matlab, a wynikający z tabeli 9-2, jest
przedstawiony w tabeli 9-3. Jeśli zmienimy znak przed funkcją sinus w zmiennej W z „−” na
„+”, program ten oblicza odwrotną transformację Fouriera.
246 Algorytmy wyznaczania dyskretnej transformacji Fouriera

x(0) DFT Złożenie X(0)


x(4) N=2 dwóch DFT X(1)
dwupunktowych
x(2) DFT w jedno DFT X(2)
Złożenie
x(6) N=2 czteropunktowe dwóch DFT X(3)
czteropunktowych
x(1) DFT Złożenie w jedno DFT X(4)
x(5) N=2 dwóch DFT ośmiopunktowe X(5)
dwupunktowych
x(3) DFT w jedno DFT X(6)
x(7) N=2 czteropunktowe X(7)

Rys. 9.7. Uproszczony schemat blokowy algorytmu DIT FFT radix-2 dla N = 8

1 1 1
x(0) X(0)
1 1 1
1 1 1
x(4) X(1)
0
W 2 −1 1 1
1 1
1
x(2) X(2)
0
1 W 4 −1 1
1 1 1
x(6) −1
X(3)
W 0
−1 W −1
2
4
1
1
1 1
x(1) X(4)
1 1 W80 −1
1
11 1
x(5) −1
X(5)
W20 −1 1 W 8 −1

1 1 1
x(3) X(6)
1 W40 −1 W8−2 −1
1 1 1
x(7) −1 W −3 X(7)
W20 −1 W 4 −1 8
−1

Rys. 9.8. Pełny schemat blokowy algorytmu DIT FFT radix-2 dla N = 8

Oczywiście algorytm radix-2 DIT FFT nie jest jedynym szybkim algorytmem typu DIT, istnie-
jącym do wyznaczania DFT. Rodzina „szybkich” algorytmów jest o wiele większa. Po pier-
wsze, dlaczego dekomponować sygnał tylko na dwa „podsygnały” (próbki parzyste i nie-
parzyste), a nie na więcej składowych, jeśli tylko wiemy w jaki sposób należy „składać” widma
DFT „części” do widma „całości”. W literaturze szeroko są dyskutowane nie tylko szybkie
algorytmy typu radix-2 (dwie „części”), ale także jeszcze efektywniejsze obliczeniowo
algorytmy radix-4 (cztery „części”). Jedno DFT N-punktowe zastępują się w nich czterema
Algorytmy wyznaczania dyskretnej transformacji Fouriera 247

X2n(0)
x(0) X(0)
X2n(1)
x(2) DFT X(1)
N=4 X2n(2)
x(4) X(2)
X2n(3)
x(6) X(3)
X2n+1(0) W 80
x(1) X(4)
X2n+1(1) W8−1 −1
x(3) DFT X(5)
N=4 X2n+1(2) W8−2 −1
x(5) X(6)
X2n+1(3) W8−3 −1
x(7) X(7)
−1

x(0) DFT X(0)


N=2
x(4) X(1)
W 40
x(2) DFT X(2)
N=2 W4−1 −1
x(6) X(3)
−1
0
W8
x(1) DFT X(4)
N=2 W8−1 −1
x(5) X(5)
W 40 W8−2 −1
x(3) DFT X(6)
N=2 W4−1 −1 W8−3 −1
x(7) X(7)
−1 −1

x(0) X(0)
W20
x(4) X(1)
−1 W 40
x(2) X(2)
W20 W4−1 −1
x(6) X(3)
−1 −1
0
W8
x(1) X(4)
W20 W8−1 −1
x(5) X(5)
−1 W 40 W8−2 −1
x(3) X(6)
W20 W4−1 −1 W8−3 −1
x(7) X(7)
−1 −1 −1

Rys. 9.9. Wyprowadzenie schematu blokowego DIT FFT radix-2 z rysunku 9.8
248 Algorytmy wyznaczania dyskretnej transformacji Fouriera

Tab. 9-2. Wartości parametrów programu, implementującego algorytm radix-2 DIT FFT, w kolejnych eta-
pach obliczeń

Etap 1 Etap 2 Etap 3 Etap 4 Etap k


Liczba bloków N/2 N/4 N/8 N/16 N/(2k)
Długość bloków
21 = 2 22 = 4 23 = 8 24 = 16 2k
(L)
Przesunięcie bloków
21 = 2 22 = 4 23 = 8 24 = 16 2k
(L)
Liczba motylków 20 = 1 21 = 2 22 = 4 23 = 8 2(k−1)
w bloku (M)
Szerokość motylków 20 = 1 21 = 2 22 = 4 23 = 8 2(k−1)
w bloku (M)
W20 W40 , W4−1 W80 , W8−1 W160 , W16−1 , W16−2 , W16−3 W −kl
Baza Fouriera 2
W8−2 , W8−3 W16−4 , W16−5 , W16−6 , W16−7 l = 0, 1, 2,..., 2 k −1
Mnożnik bazy W4−1 W8−1 W16−1 W2−k1
1
Fouriera

Tab. 9-3. Program implementujący algorytm radix-2 DIT FFT w języku Matlab

% Ćwiczenie: Algorytm szybkiej transformacji Fouriera FFT typu radix-2 DIT

clera all;

% GENERACJA SYGNAŁU
N=8; % liczba próbek sygnału
x=0:N-1; % przykładowe wartości próbek
typBitReverse=1; % 1 lub 2 - wybór algorytmu przestawiania próbek (wolna, szybka)
typFFT=1; % 1 lub 2 - wybór właściwej pętli FFT (wolna, szybka)

xc = x; % kopia sygnału x

% PRZESTAWIENIE KOLEJNOŚCI PRÓBEK: wersja 1− wolna ---------------------------------------------------


if (typBitReverse==1)
MSB=log2(N); % liczba bitów numerów próbek %
for n=0:N-1; % kolejne próbki %
ncopy=n; % stary numer próbki (kopia) %
nr=0; % nowy numer próbki (inicjalizacja) %
for m=1:MSB % po wszystkich bitach %
if (rem(n,2)==0) % czy jedynka na LSB %
n=n/2; % jeśli nie, przesuń w prawo %
else % %
nr=nr+2^(MSB-m); % dodaj 2^(MSB-m) %
n=(n-1)/2; % odejmij jedynkę, przesuń w prawo %
end % %
end % %
y(nr+1)=x(ncopy+1); % skopiuj we właściwe miejsce %
end % %
x = y; % podstaw wynik pod x %
end

% PRZESTAWIENIE KOLEJNOŚCI PRÓBEK: wersja 2− szybka (przestawianie „w miejscu”) --------------


if (typBitReverse==2)
a=1; %
Algorytmy wyznaczania dyskretnej transformacji Fouriera 249

for b=1:N-1 %
if (b<a) %
T=x(a); x(a)=x(b); x(b)=T; %
end %
c=N/2; %
while (c<a) %
a=a-c; c=c/2; %
end %
a=a+c; %
end %
end

% WŁAŚCIWE FFT - wersja 1 - wolniejsza, bardziej poglądowa -------------------------------------------------------


if (typFFT==1)
for e = 1 : log2(N) % KOLEJNE ETAPY
SM = 2^(e-1); % szerokość motylka
LB = N/(2^e); % liczba bloków
LMB = 2^(e-1); % liczba motylków w bloku
OMB = 2^e; % odległość między blokami
W = exp(-j*2*pi/2^e); % podstawa bazy Fouriera
for b = 1 : LB % KOLEJNE BLOKI
for m = 1 : LMB % KOLEJNE MOTYLKI
g = (b-1)*OMB + m; % indeks górnej próbki motylka
d = g + SM; % indeks dolnej próbki motylka
xgora = x(g); % skopiowanie górnej próbki
xdol = x(d)*W^(m-1); % korekta dolnej próbki
x(g) = xgora + xdol; % nowa górna próbka: górna plus dolna po korekcie
x(d) = xgora - xdol; % nowa dolna próbka: górna minus dolna po korekcie
end % koniec pętli motylków
end % koniec pętli bloków
end % koniec pętli etapów
end

% WŁAŚCIWE FFT - wersja 2 - szybsza -----------------------------------------------------------------------------------


if (typFFT==2)
for e = 1 : log2(N) % KOLEJNE ETAPY
L = 2^e; % długość bloków DFT, przesunięcie bloków
M = 2^(e-1); % liczba motylków w bloku, szerokość każdego motylka
Wi = 1; % WLl = W20k = 1 startowa wartość wsp. bazy w etapie
W = cos(2*pi/L)-j*sin(2*pi/L); % mnożnik bazy Fouriera WL−1 = W2−k 1
for m = 1 : M % KOLEJNE MOTYLKI
for g = m : L : N % W KOLEJNYCH BLOKACH
d = g+M; % g − „górny”, d − „dolny” indeks próbki motylka
T = x(d)*Wi; % „serce” FFT
x(d) = x(g)-T; % nowa dolna próbka: górna minus „serce”
x(g) = x(g)+T; % nowa górna próbka: górna plus „serce”
end % koniec pętli bloków
Wi=Wi*W; % kolejna wartość bazy Fouriera WL− l = W2−k l
end % koniec pętli motylków
end % koniec pętli etapów
end

% PORÓWNAJ Z MATLABEM --------------------------------------------------------------------------------------------


xc = fft(xc);
blad_real = max(abs(real(x-xc)))
blad_imag = max(abs(imag(x-xc)))
pause
250 Algorytmy wyznaczania dyskretnej transformacji Fouriera

DFT N/4-punktowymi. Na każdym etapie obliczeń algorytm radix-4 wykonuje 3*(N/4) mnoże-
nia zespolone, zamiast N/2 mnożeń tak jak w algorytmie radix-2, ale etapów jest teraz dwa razy
mniej. W wyniku tego do wyznaczenia DFT metoda radix-4 potrzebuje „tylko” (3N/8)* *log2N
mnożeń zespolonych, zamiast podejście radix-2 − „aż” (N/2)*log2N mnożeń.
Idąc dalej, dlaczego nie stosować różnego podziału na różnych etapach dekompozycji? Tę ideę
wykorzystano w algorytmach typu „rozłożony” podział (ang. split-radix). Jest w nich możliwe,
przykładowo, podzielenie sygnału na dwie części, potem każdej z nich na cztery części, dalej
na dwie, cztery lub osiem części itd. Ich podstawową zaletą jest to, że oferują bardzo dużą efe-
ktywność obliczeniową dla sygnałów, których długość nie jest potęgą liczby 2, ale jest to
okupione mniejszą regularnością (większą logiczną złożonością) i większą długością imple-
mentujących je programów. W literaturze pod nazwą split-radix najczęściej rozumie się „naj-
szybszy” z obecnie znanych algorytmów FFT, będący połączeniem algorytmów radix-2 i radix-
4, wykorzystujących decymację w dziedzinie częstotliwości DIF (ang. Decimation in Fre-
quency). Z algorytmami typu DIF FFT zapoznamy się w rozdziale 9.5.2. W ww. algorytmie
split-radix podział DIF radix-2 jest stosowany do wyznaczenia N/2 parzystych prążków widma,
metodę DIF radix-4 wykorzystuje się zaś do wyznaczenia dwóch N/4-punktowych, naprze-
miennych sekwencji prążków nieparzystych. Ze względu na specyficzną budowę motylka
algorytm ten charakteryzuje się jeszcze mniejszą liczbą mnożeń niż algorytmy radix-2
i radix-4.
Kończąc ten krótki przegląd metod, nie wypada zapomnieć o algorytmach FFT Cooleya-
-Tukeya i Gooda-Thomasa, służących do szybkiego wyznaczania DFT sygnałów o długości
N = LM, gdzie L i M są liczbami naturalnymi, w drugim przypadku względnie pierwszymi (ich
jedynym wspólnym podzielnikiem jest 1).

Dla dociekliwych. Przypomnijmy równanie DFT:


N −1
X (k ) = ∑ x ( n )WN− kn , k = 0, 1, 2, ..., N − 1 (9.45)
n =0

Załóżmy, że N może być przedstawione jako iloczyn dwóch liczb L i M: N = LM, wówczas
indeksy „czasu” n i „częstotliwości” k mogą być zapisane jako:
n = l + mL, k = pM + q (9.46)

skąd otrzymujemy (p = 0, 1, ..., L−1, q = 0, 1, ..., M−1):


M −1 L −1
X ( pM + q) = ∑ ∑ x (l + mL)WN− ( pM + q )(l + mL ) (9.47)
m =0 l =0

Zdefiniujmy macierz X, składającą się z elementów X(p,q):


X ( p, q) = X ( pM + q) (9.48)

Ponieważ:
W N− ( pM + q )( l + mL) = WN− pMlWN− pMmLW N− qlWN− qmL (9.49)
oraz
WN− pMl = WN− pl − pl − pMmL
/ M = WL , W N = WN− pmN = 1, WN− qmL = WN− qm − qm
/ L = WM (9.50)

stąd z (9.47) i (9.48) otrzymujemy (p = 0, 1, ..., L−1, q = 0, 1, ..., M−1):


Algorytmy wyznaczania dyskretnej transformacji Fouriera 251

M − 1 L −1
X ( p, q ) = ∑ ∑ x(l , m)WL− plWN− qlWM− qm (9.51)
m =0 l =0

Niech indeksy p i l będą numerami wierszy, a q i m − numerami kolumn. Równanie (9.51)


można zapisać w następującej postaci (p = 0, 1, ..., L−1, q = 0, 1, ..., M−1):
L −1  M −1  

X ( p, q ) = ∑ WN− ql  ∑ x(l , m)WM− qm  WL− pl (9.52)
l =0 m =0 

Wyznaczanie DFT na podstawie równania (9.52) przebiega następująco.


1) Z N-elementowego wektora wejściowego x(n), n = 0, 1, 2, ..., N−1, tworzy się macierz
x(l,m) o L wierszach i M kolumnach (l = 0, 1, ..., L−1, m = 0, 1, ..., M−1), w których próbki
wejściowe są umieszczane na początku w pierwszej kolumnie, potem w drugiej itd. (patrz
rysunek 9.10).
2) Następnie wyznacza się serię M-punktowych DFT wszystkich wierszy macierzy x(l,m),
umieszczając wynik w macierzy A(l,q):
M −1
A(l , q ) = ∑ x(l , m)WM− qm , l = 0, 1, 2,..., L − 1, q = 0, 1, 2,..., M − 1
m =0

3) Potem modyfikuje się elementy macierzy A(l,q) zgodnie z równaniem:

B(l , q) = WN− ql A(l , q), l = 0, 1, 2,..., L − 1, q = 0, 1, 2,..., M − 1

4) Kończąc wykonuje się serię L-punktowych DFT wszystkich kolumn macierzy B(l,q):
L −1
X ( p, q ) = ∑ B(l , q)WL− pl , p = 0, 1, ..., L − 1, q = 0, 1, 2, ..., M − 1
l =0

Ponieważ macierze „wyjściowe” (obliczane) mogą nadpisywać w pamięci komputera macierze


„wejściowe”, algorytm nie wymaga pamięci na żadne macierze „robocze”. Uwzględniając
(9.48) jesteśmy w stanie odtworzyć elementy X(pM+q), p = 0, 1, ..., L−1, q = 0, 1, ..., M−1
(N = LM) wektora X(k), k = 0, 1, ..., N−1, na podstawie elementów X(p,q) macierzy X.
W przedstawiony powyżej sposób można obliczyć DFT dla N = 15, zakładając L = 3 i M = 5
oraz wykonując: 1) trzy DFT 5-punktowe, 2) 15 mnożeń zespolonych, 3) pięć DFT 3-punkto-
wych. Razem daje to 3*5+15+5*3 = 45 mnożeń zespolonych i 3*4+5*2 = 22 dodawania zes-
polone. Obliczenia bezpośrednie ze wzoru (9.45) wymagają 15*15 = 225 mnożeń i 15*14 =
= 210 dodawań zespolonych. Jak widać obliczania DFT na podstawie (3) jest o wiele efektyw-
niejsze.
Przedstawioną metodologię można także zastosować dla N = 2p. Kiedy L = 2 i M = 2p−1, jedno
DFT 2p-punktowe rozkładamy na dwa DFT 2p−1-punktowe tylko próbek parzystych i nie-
parzystych (krok 2), a następnie składamy widma „cząstkowe” (korekta w kroku 3 oraz seria
dwupunktowych DFT w kroku 4). W rezultacie otrzymujemy pierwszy etap dekompozycji
obliczeń właściwy dla algorytmu DIT FFT radix-2 (rysunek 9.9 − góra). Potem oczywiście
można dalej dekomponować DFT 2p−1-punktowe. W wyniku iteracyjnego powtarzania
powyższego postępowania, otrzymujemy algorytm DIT FFT radix-2, przedstawiony na rysun-
ku 9.8.
Natomiast dla N = 4p i L = 4 i M = 4p−1, zastępujemy jedno DFT N-punktowe czterema DFT
N/4-punktowymi (po wierszach) oraz korektą i N/4-ema DFT 4-punktowymi (po kolumnach).
252 Algorytmy wyznaczania dyskretnej transformacji Fouriera

Iteracyjnie powtarzając dekompozycję DFT wierszy, dochodzimy do DFT 4-punktowego.


Algorytm ten nosi nazwę DIT FFT radix-4.

m
0 1 2 M-1
l
0 x(0) x(L) x(2L) … x((M−1)L)

1 x(1) x(L+1) x(2L+1) … x((M−1)L+1)

2 x(2) x(L+2) x(2L+2) … x((M−1)L+2)

: : : … :
L-1 x(L−1) x(2L−1) x(2L−1) … x(LM−1)

Rys. 9.10. Graficzna ilustracja rozłożenia wektora danych x(n), n = 0, 1, 2, ..., N−1, w macierzy x(l,m),
l = 0, 1, ..., L−1, m = 0, 1, ..., M−1 (LM = N. n = l+mL). DFT wektora x(n) sprowadza się do: 1) wykonania
DFT wszystkich wierszy macierzy x(l,m) i zastąpieniu ich obliczonymi transformatami, 2) korekcji tak
otrzymanej macierzy, 3) wykonania DFT wszystkich kolumn macierzy otrzymanej w kroku 2

9.5.2. Podział w dziedzinie częstotliwości − DIF (ang. Decimation in Frequency)

Podobnie jak w poprzednim przypadku załóżmy, że N jest równe potędze liczby 2, oraz że za-
interesowani jesteśmy szybkim wyznaczeniem k-tego prążka X(k) widma Fouriera ze wzoru
(WN = exp(j2π/N)):
N −1
X (k ) = ∑ x(n)WN− kn , k = 0, 1, 2,..., N − 1 (9.53)
n =0

Teraz jednak nie będziemy decymować próbek sygnału x(n) tylko prążki widma X(k), tzn.
osobno wyznaczymy prążki o indeksach parzystych i nieparzystych (k = 0, 1, 2, ..., N/2−1):
N −1
X ( 2k ) = ∑ x(n )WN− ( 2k )n (9.54)
n =0
N −1
X (2k + 1) = ∑ x(n)WN− (2k +1)n (9.55)
n =0

Powyższe wzory mogą być zapisane jako (k = 0, 1, 2, ..., N/2−1):


N / 2 −1 N −1
X ( 2k ) = ∑ x(n)WN− (2k )n + ∑ x(n)WN− ( 2k )n (9.56)
n =0 n= N / 2
N / 2 −1 N −1
X (2k + 1) = ∑ x(n)WN− (2k +1)n + ∑ x(n)WN− (2k +1)n (9.57)
n =0 n= N / 2

Po zmianie zmiennych w drugich sumach otrzymujemy (k = 0, 1, 2, ..., N/2−1):


N / 2 −1 N / 2 −1
X ( 2k ) = ∑ x(n)WN− (2k )n + ∑ x(n + N / 2)WN− ( 2k )( n + N / 2) (9.58)
n =0 n =0
Algorytmy wyznaczania dyskretnej transformacji Fouriera 253

N / 2 −1 N / 2 −1
X (2k + 1) = ∑ x(n)WN− (2k +1)n + ∑ x(n + N / 2)WN− ( 2k +1)(n + N / 2) (9.59)
n =0 n =0

Ponieważ:

W N−2k ( n + N / 2 ) = W N−2knWN− kN = WN−2kn , WN−2 kn = WN− kn


/2 (9.60)

więc (9.58) jest równe


N / 2 −1
X (2k ) = ∑ [ x(n ) + x (n + N / 2)]WN− kn
/2 (9.61)
n =0

Natomiast (9.59) można przekształcić do postaci (k = 0, 1, 2, ..., N/2−1):


N / 2 −1 N / 2 −1
X (2k + 1) = ∑ x(n)WN− (2k +1)n + WN− (2k +1)( N / 2) ∑ x(n + N / 2)WN− ( 2k +1)n (9.62)
n=0 n =0

i wykorzystując zależność:

WN−( 2k +1)( N / 2) = WN− kN WN− N / 2 = ( +1)( −1) = −1 (9.63)

otrzymać:
N / 2 −1 N / 2 −1
X (2k + 1) = ∑ x(n)WN− (2k +1)n − ∑ x(n + N / 2)WN− (2k +1)n (9.64)
n =0 n=0

Po prostych przekształceniach końcowy wzór na X(2k+1) przyjmuje postać (k = 0, 1, 2, ...,


N/2−1):
N / 2 −1
X (2k + 1) = ∑ [ x(n) − x(n + N / 2)]W
n =0
− (2 k +1) n
N =

N / 2 −1
= ∑ [ x(n ) − x(n + N / 2)]W
n =0
−2 kn
N WN− n =

N / 2 −1
= ∑
n =0
{ [ x(n) − x(n + N / 2)]WN−n }WN−kn/ 2 (9.65)

Jak widać zarówno parzyste, jak i nieparzyste prążki widma X(2k) i X(2k+1) można otrzy-
mać w wyniku transformacji DFT, która jest o połowę krótsza (N/2) niż sygnał wejściowy (N).
Jest ona jednak wykonywana nie na sygnale oryginalnym, ale na danych sztucznie „spre-
parowanych”:
x1 ( n ) = x ( n ) + x ( n + N / 2), n = 0, 1, 2,..., N / 2 − 1 (9.66)

x 2 (n ) = [x (n ) − x ( n + N / 2)]WN− n , n = 0, 1, 2,..., N / 2 − 1 (9.67)

Dalsze rozważania dotyczące aspektów programowej implementacji algorytmów DIF FFT


radix-2 pozostawiamy jako ćwiczenie Czytelnikowi. Pełny schemat blokowy tego algorytmu
dla przypadku N = 8 jest wyprowadzony na rysunku 9.11.
254 Algorytmy wyznaczania dyskretnej transformacji Fouriera

a) x(0) X(0)

x(1) DFT X(2)


N=4
x(2) X(4)
x(3) X(6)
W80
x(4) X(1)
−1 W8−1
x(5) DFT X(3)
−1 W8−2 N=4
x(6) X(5)
−1 W8−3
x(7) X(7)
−1

b) x(0) DFT X(0)


N=2
x(1) X(4)
W40
x(2) DFT X(2)
−1 W4−1 N=2
x(3) X(6)
−1
0
W8
x(4) DFT X(1)
−1 W8−1 N=2
x(5) X(5)
−1 W8−2 W40
x(6) DFT X(3)
−1 W8−3 −1 W4−1 N=2
x(7) X(7)
−1 −1

c) x(0) X(0)
W20
x(1) X(4)
W40 −1
x(2) X(2)
−1 W4−1 W20
x(3) X(6)
−1 −1
0
W8
x(4) X(1)
−1 W8−1 W20
x(5) X(5)
−1 W8−2 W40 −1
x(6) X(3)
−1 W8−3 −1 W4−1 W20
x(7) X(7)
−1 −1 −1

Rys. 9.11. Schemat blokowy algorytmu DIF FFT radix-2: a) pierwszy, b) drugi, c) końcowy etap dekom-
pozycji
Algorytmy wyznaczania dyskretnej transformacji Fouriera 255

9.6. Szybka transformacja Fouriera dla sygnałów rzeczywistych


Jak wiemy (równanie (8.30)), widmo Fouriera X(k), k = 0, 1, 2, ..., N−1, sygnału rzeczywiste-
go x(n), n = 0, 1, 2, ..., N−1, jest symetryczne względem prążka k = N/2:

X (k ) = X * (N − k ), k = 1, 2, ..., N − 1 (9.68)
tzn.
Re ( X ( k ) ) = Re ( X ( N − k ) ) , Im ( X (k ) ) = − Im ( X ( N − k ) ) , k = 1,..., N − 1

 N   N   N   N  N
Re  X  + k   = Re  X  − k   , Im  X  + k   = − Im  X  − k   , k = 0,..., − 1
 2   2   2   2  2

Jeśli tak, to w przypadku sygnałów rzeczywistych część „pary idzie w gwizdek”, tzn. liczy się
coś co nie jest potrzebne, gdyż i tak jest znane.
Jak wykażemy poniżej właściwość symetrii widma DFT można z sukcesem wykorzystać i za
pomocą jednego, N-punktowego algorytmu FFT wyznaczać dwa N-prążkowe widma dwóch
sygnałów o długości N lub też wyznaczać N-prążkowe widmo sygnału o długości N, ale za
pomocą N/2-punktowego algorytmu FFT. Rozważmy teraz oba przypadki.

Przypadek 1 − dwa N-punktowe sygnały rzeczywiste, jedno N-punktowe FFT

Załóżmy, że mamy dwa sygnały rzeczywiste x1(n) i x2(n), n = 0, 1, 2, ..., N −1, N = 2p. Utwórz-
my sygnał zespolony y(n), taki że:
y ( n ) = x1 ( n ) + jx 2 ( n ) (9.69)
Sygnał ten jest superpozycją dwóch sygnałów: y1(n) = x1(n)+j0 i y2(n) = 0+jx2(n). Widmo pier-
wszego z nich jest równe Y1(k) = X1(k), a drugiego Y2(k) = jX2(k). Widma X1(k) i X2(k) chara-
kteryzują się (a)symetrią typową dla transformat DFT sygnałów rzeczywistych (część rzeczy-
wista symetryczna, a urojona − asymetryczna). Ponieważ dyskretna transformacja Fouriera jest
liniowa, to widmo sygnału y(n) = y1(n)+y2(n) jest równe sumie widm poszczególnych sygna-
łów, czyli:
Y ( k ) = Y1 ( k ) + Y2 ( k ) = X 1 ( k ) + jX 2 ( k ) (9.70)
Niech:
X 1 ( k ) = X 1r (k ) + jX 1i (k ), X 2 (k ) = X 2 r ( k ) + jX 2i (k ) (9.71)
wówczas:
Y (k ) = {X 1r (k ) + jX 1i (k )} + j{X 2 r ( k ) + jX 2i (k )}
Y (k ) = {X 1r (k ) − X 2i (k )} + j{X 1i (k ) + X 2 r (k )}
Y (k ) = Yr (k ) + jYi (k ) (9.72)
czyli w jego części rzeczywistej Y(k) mamy różnicę widm rzeczywistych X1r(k)−X2i(k), w częś-
ci zaś urojonej − sumę widm rzeczywistych X1i(k)+X2r(k). Każde z widm składowych X1r(k),
X1i(k), X2r(k) i X2i(k) ma określoną symetrię lub asymetrię (rysunek 9.12). Aby z części
rzeczywistej Yr(k) widma Y(k) „odzyskać” widmo X1r(k) należy „pozbyć” się z niej składowej
256 Algorytmy wyznaczania dyskretnej transformacji Fouriera

X2i(k). Ponieważ wiemy, że jest ona asymetryczna względem punktu k = N/2, „zniknie”
w przypadku dodawania próbek widma Yr(k), leżących symetrycznie względem tego punktu.
W wyniku takiego dodawania symetryczna względem k = N/2 składowa X1r(k) „wzmocni się”
dwa razy, czyli:
1
X 1r (k ) = [Yr (k ) + Yr ( N − k )] , k = 1, 2, 3, ..., N − 1 (9.73)
2
Aby z kolei odzyskać z Yr(k) jego asymetryczną składową X2i(k), trzeba się „pozbyć” skła-
dowej symetrycznej X1r(k), a można to uczynić w wyniku odejmowania próbek leżących syme-
trycznie względem punktu k = N/2. Ponieważ jednak składowa ta jest zanegowana w Yr(k),
wynik odejmowania także trzeba zanegować:
1 1
X 2i ( k ) = − [Yr (k ) − Yr ( N − k )] = [Yr ( N − k ) − Yr (k )] , k = 1, 2, 3, ..., N − 1 (9.74)
2 2
Analogicznie uzyskuje się:
1
X 1i (k ) = [Yi (k ) − Yi ( N − k )], k = 1, 2, 3, ..., N − 1 (9.75)
2
1
X 2r (k ) = [Yi (k ) + Yi ( N − k )], k = 1, 2, 3, ..., N − 1 (9.76)
2
Pozostają nam jeszcze do wyznaczenia zerowe prążki widm X1(k) i X2(k) dla k = 0. Ponieważ
X1i(0) = X2i(0) = 0, widmo X1r(k) znajduje w części rzeczywistej Yr(k) widma Y(k), a widmo
X2r(k) − w części jego części urojonej Yi(k), stąd mamy:
X 1r (0) = Yr (0), X 1i (0) = 0 (9.77)
X 2 r (0) = Yi (0), X 2i (0) = 0 (9.78)

Jednoczesne wyznaczanie dwóch widm sygnałów rzeczywistych może być korzystne wszędzie
tam, gdzie w sposób ciągły analizuje się zmianę widma sygnału, np. w przypadku analizy
sygnału mowy.

Przypadek 2 − N-punktowy sygnał rzeczywisty, N/2-punktowe FFT

Przypadek ten jest konsekwencją przypadku poprzedniego oraz właściwości, z której skorzy-
staliśmy podczas wyprowadzenia algorytmu radix-2 szybkiej transformacji Fouriera z decy-
macją w dziedzinie czasu. Przypomnijmy, że widmo X(k) całego sygnału może być odtworzone
na podstawie znajomości widma X2n(k) jego próbek parzystych i widma X2n+1(k) jego próbek
nieparzystych na podstawie wzoru:

X (k ) = X 2n (k ) + WN− k X 2n +1 (k ) (9.79)

Załóżmy, że analizujemy N-punktowy sygnał x(n). Jeśli utworzymy sygnał y(n) w taki sposób,
że próbki parzyste x(2n), umieścimy w jego części rzeczywistej sygnału y(n), a próbki x(2n+1)
w jego części urojonej:
y (n ) = x(2n ) + jx(2n + 1), n = 0, 1, 2,..., N / 2 − 1 (9.80)
Algorytmy wyznaczania dyskretnej transformacji Fouriera 257

wówczas wykonując szybką transformację Fouriera sygnału y(n) znajdujemy jego widmo Y(k).
Następnie tak jak w przypadku 1 należy z Y(k) „odtworzyć” widma X2n(k) i X2n+1(k), czyli
X2n,r(k), X2n,i(k), X2n+1,r(k) i X2n+1,i(k), a na ich podstawie widmo X(k) całego sygnału, korzy-
stając z wzoru (9.79). Przekształcając wzory (9.73)÷(9.76) oraz uwzględniając (9.79), otrzy-
mujemy (k = 0, 1, 2, ..., N/2−1):
1 N  1  N  
X (k ) = Y (k ) + Y *  − k  + j ⋅ e − j 2 πk / N Y *  − k  − Y (k ) (9.81)
2  2  2  2  

Y1r(k) = X1r(k) Y1i (k) = X1i (k)

N/2 k
0 N/2 k 0

Y2r(k) = −X2r(k) Y2i (k) = X2r(k)

N/2 k
0 0 N/2 k
Rys. 9.12. Graficzna ilustracja (a)symetrii odpowiednich widm

9.7. Dwuwymiarowa dyskretna transformacja Fouriera


Do analizy częstotliwościowej i przetwarzania dyskretnych sygnałów dwuwymiarowych
x(n,m), na przykład obrazów cyfrowych, często stosuje się dwuwymiarową transformację Fou-
riera. Jest ona zdefiniowana za pomocą następującej pary równań (k = 0, 1, ..., N−1, l = 0, 1, ...,
N−1):
N −1 N −1 2π
−j ( mk + nl )
X (k , l ) = ∑ ∑ x ( m, n ) e N (9.82)
m =0 n =0

N −1 N − 1 2π
1 j ( mk + nl )
x ( m, n ) =
N2
∑ ∑ X (k , l ) e N (9.83)
k =0 l =0

Pierwsze z nich reprezentuje transformację właściwą („prostą”), drugie zaś − transformację


„odwrotną”. Jak widać pod względem obliczeniowym równania (9.82) i (9.83) różnią się jedy-
nie znakiem wykładnika, a więc mogą być wyznaczane za pomocą (prawie) identycznych algo-
rytmów. Ponieważ (9.82) można zapisać jako:

N −1  N −1 2π  2π
−j nl − j mk
X (k , l ) = ∑  ∑ x ( m, n ) e N e N (9.84)
m =0 
 n =0


258 Algorytmy wyznaczania dyskretnej transformacji Fouriera

stąd wynika, że obliczenie dwuwymiarowego DFT sprowadza się do wykonania dwóch serii
jednowymiarowych, N-punktowych algorytmów DFT, przy czym każda seria składa się z N ta-
kich algorytmów:
1) DFT wszystkich wierszy miecierzy x(m,n), m = 0, 1, ..., N−1:
N −1 2π
−j nl
X w ( m, l ) = ∑ x ( m, n ) e N (9.85)
n =0

2) DFT wszystkich kolumn macierzy Xw(m,l) (9.85), l = 0, 1, ..., N−1:


N −1 2π
−j mk
X (k , l ) = ∑ X w ( m, l ) e N (9.86)
m =0

Możemy więc z powodzeniem skorzystać z szybkich procedur FFT, wyprowadzonych w roz-


dziale 9.5.

9.8. Wyznaczanie DCT metodą szybkiej transformacji Fouriera


Fakt istnienia ogólnie znanych algorytmów szybkiej transformacji Fouriera FFT powoduje, że
różne inne transformacje w pierwszym kroku najczęściej zapisuje się w postaci eksponujących
ich związek z DFT, a następnie wykorzystuje się szybkie algorytmy FFT. Najlepszym tego
przykładem jest „szybkie” wyznaczanie popularnej transformacji kosinusowej, stosowanej
w standardach kompresji obrazów nieruchomych JPEG i ruchomych MPEG oraz w algorytmie
kompresji dźwięku MPEG audio, „poprzez” FFT. Oczywiście istnieją jeszcze szybsze, dedy-
kowane metody rozwiązujące ten problem [Elli82][Elli87], ale ich dyskusja wykracza poza
zakres tego podręcznika.
Dygresja: transformacje DCT stosowane w standardach MPEG audio i video są różne (patrz
podrozdział 2.4).
Dyskretna transformacja kosinusowa została już przez nas zdefiniowana w rozdziale 2 poprzez
równanie baz kosinusowych (2.76):

 π(2n + 1) ⋅ k 
N −1
X (k ) = c (k ) ⋅ ∑ x(n ) cos , 0 ≤ k ≤ N −1 (9.87)
n =0 2N 

gdzie stałe c(k) są równe

1 2
c (0) = , c (k ) = dla 1≤ k ≤ N −1 (9.88)
N N

Natomiast transformacja odwrotna jest dana wyrażeniem:

 π(2n + 1) ⋅ k 
N −1
x (n ) = ∑ c(k )X (k ) cos , 0 ≤ n ≤ N −1 (9.89)
k =0 2N 

Równanie (9.87) można przekształcić w następujący sposób, oddzielnie sumując parzyste i nie-
parzyste próbki sygnału x(n):
Algorytmy wyznaczania dyskretnej transformacji Fouriera 259

 ( N / 2 )−1  π ( 4n + 1) k  ( N / 2 )−1  π ( 4n + 3) k  
X ( k ) = c ( k )  ∑ x ( 2n ) cos   + ∑ x ( 2n + 1) cos   =
 n =0  2N  n =0  2N  


( N / 2 )−1
 π ( 4n + 1) k  ( N / 2)−1  π ( 4n + 3) k  
= c ( k )  ∑ x ( n ) cos   + ∑ x ( N − n − 1) cos   (9.90)
 n =0  2N  n =0  2N  

gdzie (n = 0, 1, ..., N/2−1):


x (n ) = x (2n ),
~ x (N − n − 1) = x (2n + 1)
~ (9.91)

Zmieniając granice sumowania w drugiej sumie równania (9.90) na n' = N−n−1 oraz łącząc
obie sumy otrzymujemy:
N −1  π ( 4n + 1) k   N −1 
X (k ) = c (k ) ∑ x ( n ) cos   = Re  c ( k ) e
− j πk / 2 N
⋅ ∑ x ( n ) e − j 2 πkn / N  (9.92)
n =0  2 N   n =0 

czyli możemy obliczyć X(k) wykonując N-punktowe DFT (FFT) na sygnale ~


x (n) :

[
X (k ) = Re c (k )e − jπk / 2 N ⋅ DFTN ( ~
x (n )) ] (9.93)

Z kolei jeśli jako operację „odwrotną” wykonamy następujące N-punktowe IDFT:

x (n ) = Re  IDFTN { c ( k ) e jπ k / 2 N X ( k ) }  = (9.94)

 N-1 
= Re  ∑ { c ( k ) e jπ k / 2 N X ( k ) } e j 2π kn / N  (9.95)
 k =0 

to próbki parzyste i nieparzyste sygnału wejściowego x(n) można w następujący sposób od-
tworzyć z próbek sygnału x (n ) (n = 0, 1, ..., N/2−1):

x (2n ) = x (n ), x (2n + 1) = x ( N − 1 − n ) (9.96)

Czytelnikowi pozostawiamy jako ćwiczenie programową implementację podanego algorytmu.


10
Układy dyskretne

W poprzednich dwóch rozdziałach rozważaliśmy problem analizy częstotliwościowej sygna-


łów dyskretnych: jak należy dobierać parametry analizy, szybko ją wykonywać i interpretować
wyniki. Obecnie przystąpimy do omówienia zagadnienia projektowania układów „dyskret-
nych”, czyli układów analizy i przetwarzania danych dyskretnych, czyli ciągów liczb, np.
sygnałów.

10.1. Układy dyskretne LTI


Załóżmy, że i w tym przypadku, podobnie jak dla układów analogowych, rozpoczniemy od
podstaw, czyli jednowejściowych i jednowyjściowych układów liniowych niezmiennych w cza-
sie LTI (ang. Linear Time-Invariant). Niech x(n) oznacza sygnał wejściowy, y(n) − sygnał
wyjściowy, a h(n) − odpowiedź impulsową układu, czyli jego odpowiedź na pobudzenie
dyskretnym impulsem jednostkowym (deltą Kroneckera) δ(n):

1, n = 0
δ( n ) =  (10.1)
0, n ≠ 0
Schemat blokowy takiego układu jest pokazany na rysunku 10.1. Zachodzą dla niego następu-
jące zależności, wiążące sygnał wejściowy i wyjściowy:
δ( n ) → h ( n ) (10.2)
x (n) → y ( n) (10.3)

Przypomnijmy, układ jest niezmienny w czasie, jeśli na opóźnione pobudzenie odpowiada


w taki sam sposób, tylko z opóźnieniem:
x (n) → y (n ) ⇒ x (n − n0 ) → y (n − n0 ) (10.4)

Jest natomiast liniowy, kiedy na sumę wymuszeń odpowiada sumą odpowiedzi na poszcze-
gólne wymuszenia:
{x1 ( n) → y1 (n ), x2 ( n ) → y2 ( n )} ⇒ { ax1 (n ) + bx2 ( n) → ay1 ( n) + by2 (n)} (10.5)
Układy dyskretne 261

x(n) y(n) δ(n) y(n)=h(n)


h(n) h(n)

X(ejΩ) H(ejΩ) Y(ejΩ) ∆(ejΩ)=1 H(ejΩ) Y(ejΩ)=H(ejΩ)

∞ ⇒ ∞

y (n ) = ∑ h(k ) x(n − k ) y (n ) = ∑ h ( k ) δ( n − k ) = h ( n )
k = −∞
k = −∞
jΩ
Y(e )=H(e )X(e ) jΩ jΩ
Y(e )=H(ejΩ)∆(ejΩ)=H(ejΩ)
jΩ

Rys. 10.1. Schemat blokowy i równania liniowego układu dyskretnego niezmiennego w czasie: x(n) − syg-
nał wejściowy, y(n) − sygnał wyjściowy, h(n) − odpowiedź impulsowa układu, δ(n) − impuls jednostkowy
(delta Kroneckera), X(ejΩ), Y(ejΩ), H(ejΩ) i ∆(ejΩ) − transformaty Fouriera (8.8a) dyskretnych sygnałów cza-
sowych. ∆(ejΩ) = 1

Jakie są konsekwencje tych kilku założeń dla układu? Wbrew pozorom OLBRZYMIE!

Na początek zauważmy, że każda próbka x(n) dowolnego sygnału może być przedstawiona
w następującej postaci:

x (n) = ∑ x(k )δ(n − k ) (10.6)
k = −∞

czyli jako suma przesuniętych impulsów jednostkowych δ(n−k) wziętych z „wagami” x(k).
Natomiast zgodnie z (10.2) i (10.4) odpowiedzią układu LTI na przesunięty impuls jednostko-
wy jest przesunięta odpowiedź impulsowa:
δ( n − k ) → h ( n − k ) (10.7)

a odpowiedzią na ważoną sumę przesuniętych impulsów jednostkowych jest ważona suma


przesuniętych odpowiedzi impulsowych, czyli:
∞ ∞
x (n) = ∑ x(k )δ(n − k ) → y (n) = ∑ x ( k )h ( n − k ) = x ( n ) ⊗ h ( n ) (10.8a)
k = −∞ k = −∞

W równaniu (10.8a) rozpoznajemy omawiany już w rozdziale pierwszym splot dwóch sygna-
łów dyskretnych. Tak więc wyjście y(n) układu dyskretnego LTI jest splotem jego wejścia x(n)
z odpowiedzią impulsową tego układu h(n). Po podstawieniu n−k = m, można równanie (10.8a)
zapisać także jako:

y(n) = ∑ h( m) x( n − m) = h(n ) ⊗ x (n ) (10.8b)
m = −∞

Przypomnijmy, obliczanie splotu dyskretnego (szczególnej formy filtracji cyfrowej) przebiega


w ten sam sposób jak splotu analogowego. Jego szczegóły zostały już przedstawione w pod-
rozdziale 1.3.6 i na rysunku 1.8. Dla zapisu (10.8a) mamy: 1) odwróć sygnał h(k) ze względu
na k: h(−k), 2) przesuń go o n próbek: h(n−k), 3) wymnóż z sygnałem x(k): x(k)h(n−k) oraz
4) zsumuj wszystkie iloczyny próbek. Operację tę należy powtórzyć dla wszystkich wartości n.

Obecnie poszukajmy interpretacji częstotliwościowej dyskretnych układów LTI. Załóżmy, że


na wejście dyskretnego układu LTI o odpowiedzi impulsowej h(n) podajemy sygnał x(n) =
= ejΩn, gdzie Ω = 2πf/fpr, wówczas zgodnie z (10.8b) na jego wyjściu otrzymamy:
262 Układy dyskretne

∞ ∞ ∞
y (n) = ∑ h( k ) x( n − k ) = ∑ h (k )e jΩ ( n − k )
= e jΩ n ∑ h(k )e − jΩ k
= x( n ) H ( e jΩ ) =
k =−∞ k =−∞ k =−∞

( )
= e jΩn H e jΩ = e jΩn M (Ω )e jΦ ( Ω ) = M (Ω) e j[Ωn +Φ ( Ω )] (10.9)

gdzie H(ejΩ) oznacza zespolone widmo Fouriera (8.8a) dyskretnej odpowiedzi impulsowej
h(n):

( ) ( )
jΩ
H e jΩ = H e jΩ e j)H ( e )
= M (Ω )e jΦ ( Ω )

Wynika stąd, że wartość modułu M(Ω) liczby zespolonej H(ejΩ) będzie decydowała o ewentu-
alnej zmianie amplitudy harmonicznego sygnału wyjściowego, a faza Φ(Ω) liczby zespolonej
H(ejΩ) − o przesunięciu fazowym (opóźnieniu), wnoszonym przez układ. Oznacza to, że pro-
jektowanie dyskretnego układu LTI sprowadza się do takiego doboru próbek jego odpowiedzi
impulsowej h(n), aby ich transformata Fouriera miała określone właściwości częstotliwościowe
(„przepuszczanie” i „zerowanie” wybranych częstotliwości).
Jeśli układ jest przyczynowy, to jego odpowiedź nie wyprzedza pobudzenia. Z definicji dys-
kretnego impulsu jednostkowego δ(n) (10.1) i odpowiedzi impulsowej h(n) (10.2) wynika
więc, że odpowiedź impulsowa h(n) układu LTI przyjmuje wartości równe zero dla n < 0.
Wówczas (10.8b) upraszcza się do następującej postaci:

y(n) = ∑ h(m ) x(n − m) (10.10)
m =0

Z kolei układ jest stabilny w sensie BIBO (ang. Bounded Input Bounded Output), kiedy jego
odpowiedź na pobudzenie o ograniczonej amplitudzie (|x(n)| ≤ Mx < ∞) ma także zawsze ogra-
niczoną amplitudę (|y(n)| ≤ My < ∞). Wówczas układ się nie wzbudza. Warunkiem koniecznym
i wystarczającym stabilności układów LTI jest bezwzględna sumowalność ich odpowiedzi
impulsowej:

∑ h( n ) < ∞ (10.11)
n = −∞

Zasadność warunku (10.11) można w prosty sposób wykazać, wyznaczając wartość bez-
względną obu stron równania (10.8b) i dalej przekształcając prawą stronę otrzymanej w ten
sposób zależności:
∞ ∞ ∞
y(n) = ∑ h (m) x (n − m) ≤ ∑ h(m ) x( n − m) ≤ M x ∑ h(m)
m = −∞ m = −∞ m = −∞

Z powyższego równania wynika, że spełnienie (10.11) narzuca ograniczoność |y(n)|.


Analogicznie jak dla układów analogowych, odpowiedź impulsowa układu powstałego z rów-
noległego połączenia dwóch dyskretnych układów LTI jest równa sumie odpowiedzi impul-
sowych tych układów (rysunek 10.2a):
h ( k ) = h1 ( n ) + h2 ( n ) (10.12)
natomiast odpowiedź impulsowa połączenia kaskadowego jest równa splotowi poszczególnych
odpowiedzi impulsowych (rysunek 10.2b):

h(n ) = ∑ h1 (k ) ⊗ h2 (n − k ) = x1 (n) ⊗ x1 (n ) (10.13)
k = −∞
Układy dyskretne 263

H(z)=H1(z)+H2(z)
x(n) h1(n) y(n) x(n) y(n)
a) h(n)=h1(n)+h2(n)
δ(n) h2(n) h(n) δ(n) h(n)

H(z)=H1(z)H2(z)
x(n) y(n) x(n) y(n)
b) h1(n) h2(n) h(n)=∑k h1(k)h2(n−k)
δ(n) h(n) δ(n) h(n)

Rys. 10.2. Równoległe (a) i kaskadowe (b) połączenie dwóch dyskretnych układów LTI

x(n) y(n)

−a z− 1
y(n−1)

Rys. 10.3. Schemat blokowy układu dyskretnego opisanego równaniem: y(n) = x(n)−ay(n−1). Blok „z−1” oz-
nacza opóźnienie o jedną próbkę

Ponieważ odpowiedź impulsowa h(n) dyskretnych układów LTI jest przyczynowa (h(n) = 0 dla
n < 0), więc z równań (10.8a)(10.8b) i ich praktycznej realizacji wynika, że ich wyjście y(n)
w n-tej chwili czasowej zależy tylko od wartości sygnału wejściowego x(k) w chwilach cza-
sowych k = n, n−1, n−2,..., czyli obecnej i poprzednich. Układ pamięta więc ileś ostatnich
próbek sygnału wejściowego i generuje na ich podstawie aktualną próbkę sygnału wyjścio-
wego. Długość bufora pamięci danych wejściowych zależy od liczby niezerowych próbek
odpowiedzi impulsowej h(n), czyli od tego jak szybko maleją one do zera po pobudzeniu
układu impulsem jednostkowym.
Załóżmy obecnie, że odpowiedź impulsowa przyczynowego układu LTI (10.10) jest nieskoń-
czona w czasie i przykładowo równa (|a| < 1):

h (n ) = ( −a ) n dla n ≥ 0 (10.14)

Taką odpowiedź na impuls jednostkowy ma także układ ze sprzężeniem zwrotnym, opisany na-
stępującym równaniem (przy założeniu zerowych warunków początkowych: y(n) = 0 dla
n < 0):
y ( n ) = x( n ) − ay (n − 1) (10.15)

Układ ten jest przedstawiony na rysunku 10.3. Rzeczywiście po jego pobudzeniu sygnałem
jednostkowym (10.1) (x(n) = δ(n)) kolejne wartości sygnału wyjściowego y(n) wynoszą bo-
wiem: y(0) = 1, y(1) = −a, y(2) = (−a)2, y(3) = (−a)3, ... Dochodzimy w tym miejscu do pew-
nego dualizmu: układ zdefiniowany równaniem (10.15) ma odpowiedź impulsową (10.14),
a więc może być także opisany za pomocą równania (10.10). W związku z tym jest to również
układ LTI.
Uwzględniając w (10.15) większą liczbę elementów opóźniających, otrzymujemy uogólnioną
postać układów LTI ze sprzężeniem zwrotnym:
∞ ∞
y ( n) = x( n) − ∑ ak y (n − k ) = x( n) − ∑ g (k ) y (n − k ) (10.16)
k =1 k =1
264 Układy dyskretne

natomiast w wyniku kaskadowego połączenia układu LTI typu (10.10) z układem LTI typu
(10.16), otrzymujemy uogólnione równanie przyczynowych układów LTI:
∞ ∞
y(n) = ∑ h(m ) x( n − m ) − ∑ g (k ) y (n − k ) (10.17a)
m=0 k =1
lub
∞ ∞
y(n) + ∑ g (k ) y(n − k ) = ∑ h (m) x (n − m) (10.17b)
k =1 m =0

p a m i ę t a j ą c y c h zarówno stare „wejścia” jak i „wyjścia”. W praktycznej realizacji „cyfro-


wej” (mikroprocesorowej) nieskończone sumy nie zapewnią programiście chwały, więc od
razu załóżmy, że nas dalej będą interesowały układy LTI o funkcji „przejścia” postaci:
M N
y(n) = ∑ h(m ) x( n − m ) − ∑ g (k ) y (n − k ) (10.18a)
m=0 k =1
lub
M N
y(n) = ∑ bm x(n − m) − ∑ a k y(n − k ) (10.18b)
m =0 k =1

Równanie „różnicowe” (10.17b) jest dyskretnym odpowiednikiem równania „różniczkowego”


(5.12), opisującego układy analogowe. A więc już jesteśmy „w domu”. Wystarczy dobrać
rzędy opóźnień M i N oraz współczynniki bm, m = 0, 1, 2, ..., M, ak, k = 1, 2, 3, ..., N, i zacząć
„cyfrowo przetwarzać sygnał” x(n) na y(n), czyli na przykład go filtrować, tak jak to było
w przypadku analogowym.
Schemat blokowy układu dyskretnego, realizującego zależność (10.18) jest przedstawiony na
rysunku 10.4a dla M = N = 3. Blok „z−1” oznacza układ opóźniający sygnał o jedną próbkę.
W sytuacji kiedy wszystkie współczynniki ak są równe zero (za wyjątkiem a0 = 1), upraszcza
się on do układu pokazanego na rysunku 10.4b, czyli do nierekursywnego filtra cyfrowego
(brak sprzężenia z wyjścia układu), w którym współczynniki bm, m = 0, 1, 2, ..., M, są równe
próbkom odpowiedzi impulsowej h(m), m = 0, 1, 2, ..., M. Wówczas układ realizuje operację
splotu sygnału x(n) z odpowiedzią impulsową h(m), mającą tylko M+1 próbek niezerowych.
Jeśli natomiast wszystkie współczynniki bm są równe zero (za wyjątkiem b0 = 1), otrzymujemy
układ zaprezentowany na rysunku 10.4c.

a) „pełny” FIR/IIR (ARMA) b) „tylko” FIR” (MA) c) „tylko” IIR (AR)


x(n) b0 y(n) x(n) b0 y(n) x(n) y(n)

z−1 z−1 z−1 z−1


b1 −a1 b1 −a1
x(n−1) y(n−1) x(n−1) y(n−1)
z−1 −a2 z−1 z−1 z−1
b2 b2 −a2
x(n−2) y(n−2) x(n−2) y(n−2)
z−1 z−1 z−1 −a3 z −1
b3 −a3 b3
x(n−3) y(n−3) x(n−3) y(n−3)

Rys. 10.4. Schemat blokowy filtra cyfrowego dla M = N = 3: a) pełny, b) linia opóźniająca tylko na wejściu,
c) linia opóźniająca tylko na wyjściu. Oznaczenia (angielskie): FIR − Finite Impulse Response, IIR − Infinite
Impulse Response, ARMA − Autoregressive Moving Average, MA − Moving Average, AR − Autoregressive
Układy dyskretne 265

Problemem otwartym pozostaje dalej zaproponowanie zestawu wartości parametrów {M, N,


bm, m = 0, 1, 2, ..., M, ak, k = 1, 2, 3, ..., N} gwarantujących spełnienie zadanych wymagań czę-
stotliwościowych typu LP, HP, BP, czy BS. Z pomocą przychodzi nam transformacja Z, która
w świecie układów dyskretnych pełni podobną rolę jak transformacja Laplace’a w świecie
układów analogowych. Jest ona poszukiwanym przez nas narzędziem obliczeniowym, które
jest równie skutecznym „pogromcą” równań różnicowych jak transformacja Laplace’a − rów-
nań różniczkowych. Z transformacją Z zapoznamy się w podrozdziale 10.3.

10.2. Algorytm filtracji sygnałów za pomocą dyskretnych


układów LTI
Przykładowy algorytm filtracji cyfrowej sygnałów „na bieżąco”, tzn. w trakcie napływania ko-
lejnych danych, jest przedstawiony w tabeli 10-1. Realizuje on następującą, zmodyfikowaną
wersję równania (10.18)
M N
y(n) = ∑ bm x(n − m + 1) − ∑ a k y(n − k + 1) (10.19)
m =1 k =2

w której zakłada się indeksowanie numerów „wag” filtra od jedynki, a nie od zera. Wiąże się to
z faktem, że w wielu ułomnych językach programowania, także w Matlabie, tylko w taki spo-
sób można indeksować tablice (chlubnym wyjątkiem jest język Pascal, który dopuszcza bardzo
elastyczne indeksowanie tablic). Filtr (10.19) ma M współczynników bm, m = 1, 2, 3, ..., M,
oraz N współczynników ak, k = 1, 2, 3, ..., N (zawsze a1 = 1). Do przechowywania próbek
wejściowych jest wykorzystywany bufor bx[.] o długości M, a do zapamiętywania próbek wyj-
ściowych − bufor by[.] o długości N−1. Użycie nawiasów kwadratowych w przypadku buforów
ma na celu odróżnienie ich od próbek danych. Po „przyjściu” kolejnej danej, wejściowej x(n)
lub wyjściowej y(n), wartości znajdujące się w buforach są przesuwane o jedną pozycję w pra-
wo, w wyniku czego „najstarsza” dana jest z nich usuwana. Nowe dane są zawsze umieszczane
na początku bufora. Ze względu na taką organizację pracy, bufory bx[.] i by[.] są nazywane
buforami przesuwnymi. W przypadku dużej liczby wag bm i ak, operacja przesuwania (kopio-
wania) danych w buforach staje się coraz bardziej czasochłonna. Wówczas jest korzystniej
nieco skomplikować „logicznie” algorytm filtracji (zastosować bardziej złożone adresowanie
danych), ale uzyskać sprawniej działający filtr. Rozwiązanie takie opiera się na technice
buforów kołowych (cyklicznych). W metodzie tej nowa dana zostaje zapisana na miejscu naj-
starszej danej, tzn. przychodzące próbki są zapisywane w kolejnych „komórkach” bufora
w trybie „kołowym” (modulo). Przykładowo dla bufora bx[.] o długości M = 3 i indeksowa-
nego od jedynki, kolejne próbki sygnału x(n) są zapisywane do „komórek”: bx[1], bx[2], bx[3],
bx[1], bx[2], bx[3], bx[1], ... itd. Załóżmy, że zapisaliśmy kolejną próbkę x(n) na pozycji dru-
giej: bx[2]. W następnym kroku algorytmu filtracji należy obliczyć sumę b0x(n) + b1x(n−1) +
+ b2x(n−2). W rozpatrywanym przypadku mamy: b0⋅bx[2] + b1⋅bx[1] + b2⋅bx[3], czyli powin-
niśmy pobierać „wstecznie”, w sposób „kołowy” kolejne próbki z bufora, zaczynając od
pozycji numer 2, tzn. bx[2], bx[1] i ... bx[3]. Indeks pobieranej próbki, u nas 3, jest równo-
cześnie numerem pozycji, na której powinna zostać umieszczona następna próbka wejściowa
x(n+1). W tabeli 10-2 są przedstawione programy napisane w języku Matlab, które imple-
mentują oba przedstawione wyżej algorytmy filtracji: z buforami przesuwnymi (funkcja
filtrBP()) oraz buforami kołowymi (funkcja filtrBK()). Szczegóły filtracji i imple-
mentacji w czasie rzeczywistym buforów kołowych na procesorach sygnałowych przedsta-
wiono w rozdziale 25. Tam też można znaleźć graficzną ilustrację zasady ich pracy.
266 Układy dyskretne

Dla N = 1 przedstawione algorytmy realizują operację splotu sygnału x(n) z wagami filtra bm,
m = 1, 2, 3, ..., M.

Tab. 10-1. Algorytm filtracji cyfrowej sygnału x(n) „na bieżąco” zgodnie z równaniem (10.19), wykorzy-
stujący metodę buforów przesuwnych

1) wyzeruj bufor próbek wejściowych bx(.) o długości M:


m = 1, 2,..., M : bx[m] = 0
i bufor próbek wyjściowych by(.) o długości K = N−1:
k = 1, 2,..., K : by[k ] = 0

2) powtarzaj w pętli dla każdego n:


{
a) przesuń próbki w buforze wejściowym o 1 pozycję w prawo:
m = M , M − 1,..., 2 : bx[m] = bx[m − 1]
b) umieść próbkę x(n) na skrajnej lewej pozycji w tym buforze;
bx[1] = x( n )
c) dokonaj właściwej filtracji (a(1) = 1 nie jest uwzględniane):
M K
y(n ) = ∑ bm bx[m] − ∑ ak +1by[k ]
m =1 k =1

d) przesuń próbki w buforze wyjściowym o 1 pozycję w prawo:


k = K , K − 1,..., 2 : bx[k ] = bx[k − 1]
e) umieść obliczoną próbkę y(n) na skrajnej lewej pozycji w tym buforze;
by[1] = y ( n )
}

Tab. 10-2. Przykładowy program komputerowy, napisany w języku Matlab, implementujący filtrację syg-
nałów z wykorzystaniem buforów przesuwnych i kołowych

% Ćwiczenie: Filtracja cyfrowa z wykorzystaniem buforów przesuwnych i kołowych

y = filter(b,a,x) % odpowiednia funkcja Matlaba

% ALGORYTM filtracji z wykorzystaniem Buforów Przesuwnych


function y = filterBP(b,a,x)
Nx=length(x); % długość sygnału
M=length(b); N=length(a); % liczba współczynników filtra
a=a(2:N); N=N-1; % usunięcie a(1)=1
bx=zeros(1,M); by=zeros(1,N); y=[]; % inicjalizacja i wyzerowanie buforów
for n=1:Nx % powtórz dla wszystkich próbek sygnału
bx = [ x(n) bx(1:M-1)]; % nowa próbka do bufora wejściowego
y(n) = sum(bx .* b) - sum(by .* a); % suma próbek wejściowych i wyjściowych
by = [ y(n) by(1:N-1) ]; % nowa próbka do bufora wyjściowego
end
Układy dyskretne 267

% ALGORYTM filtracji z wykorzystaniem Buforów Kołowych

function y = filterBK(b,a,x)
Nx=length(x); % długość sygnału
M=length(b); N=length(a); % liczba współczynników filtra
a=a(2:N); N=N-1; % usunięcie a(1)=1
bx=zeros(1,M); by=zeros(1,N); y=[]; % inicjalizacja i wyzerowanie buforów
ix = 1; iy = 1; % inicjalizacja wskaźników do buforów
for n=1:Nx % powtórz dla wszystkich próbek sygnału
bx(ix) = x(n); % pobranie danej wejściowej do bufora WE
sum = 0; ib = 1; ia = 1; % inicjalizacja

for k = 1 : M-1 % SUMA PRÓBEK WEJŚCIOWYCH


sum = sum + bx(ix)*b(ib); % kolejny składnik sumy
ix = ix - 1; if (ix==0) ix=M; end % zwiększenie indeksu w buforze WE
ib = ib + 1; % zwiększenie indeksu wag filtra b
end %
sum = sum + bx(ix)*b(ib); % dodanie ostatniego składnika sumy

for k = 1 : N-1 % SUMA PRÓBEK WYJŚCIOWYCH


sum = sum - by(iy)*a(ia); % kolejny składnik sumy
iy = iy - 1; if (iy==0) iy=N; end % zwiększenie indeksu w buforze WY
ia = ia + 1; % zwiększenie indeksu wag filtra
end %
sum = sum - by(iy)*a(ia); % odjęcie ostatniego składnika

y(n)=sum; % zapisanie danej wyjściowej


by(iy)=sum; % zapisanie danej wyjściowej do bufora WY
end

10.3. Transformacja Z
Transformacja Z jest zdefiniowana za pomocą następującego równania:

X ( z) = ∑ x ( n ) z −n (10.20)
n = −∞

gdzie „z” jest zmienną zespoloną, pełniącą podobną rolę jak zmienna zespolona „s” w trans-
formacji Laplace’a. Wzór (10.20) to tzw. szereg Laurenta. Aby istniała transformata X(z)
sygnału x(n), szereg ten musi być zbieżny. Dla danego sygnału określa się obszar zmienności
wartości „z”, dla którego zbieżność zachodzi:

0 ≤ r− < z < r+ ≤ ∞ (10.21)

Dla sygnałów impulsowych o skończonej liczbie niezerowych próbek (skończonym czasie


trwania), liczba wyrazów wielomianu (10.20) jest także skończona i zawsze istnieje obszar
zmienności zmiennej „z” zapewniający zbieżność szeregu (10.20). Przykładowo, wyznaczmy
transformaty Z kilku sygnałów, z których każdy ma tylko trzy niezerowe próbki o wartościach
0,25; 0,5 i 0,25; lecz występujące w różnych chwilach czasowych:

X 1 ( z ) = x ( −3) z 3 + x ( −2) z 2 + x ( −1) z , X 1 ( z ) = 0, 25z 3 + 0, 5z 2 + 0, 25z , z≠∞

X 2 ( z ) = x ( −2) z 2 + x ( −1) z1 + x (0) , X 2 ( z ) = 0, 25z 2 + 0,5z + 0, 25 , z≠∞


−1 −1
X 3 ( z ) = x ( −1) z + x (0) + x (1) z , X 3 ( z ) = 0, 25z + 0, 5 + 0, 25z , z≠∞ i z≠0
268 Układy dyskretne

X 4 ( z ) = x (0) + x (1) z + x ( 2) z −2 , X 4 ( z ) = 0, 25 + 0, 5z −1 + 0, 25z −2 , z≠0


−1 −2 −3 −1 −2 −3
X 5 ( z ) = x (1) z + x ( 2) z + x (3) z , X 5 ( z ) = 0, 25z + 0, 5z + 0, 25z , z≠0
Pierwsze trzy sygnały są nieprzyczynowe, gdyż przyjmują wartości niezerowe dla n < 0,
natomiast kolejne dwa to sygnały przyczynowe. Transformata Z sygnałów nieprzyczynowych
nie jest określona dla z równego nieskończoności (z = ∞), natomiast sygnałów przyczynowych
− dla z równego zero (z = 0), gdyż wówczas potęga zmiennej z jest równa nieskończoności.
Z powyższego przykładu jasno też wynika, że z transformaty Z sygnału można odtworzyć
sygnał. Przykładowo, wiedząc, że X(z) jest równe:

X ( z ) = 0,1 + z −1 + 2 z −2 + 3z −3 + 4 z −4

ze wzoru (10.20) mamy:


x (0) = 0,1, x(1) = 1, x (2) = 2, x(3) = 3, x (4) = 4

Zgodnie bowiem z definicją współczynnik występujący przed potęgą zmiennej z−n jest równy
próbce sygnału w chwili x(n).
Tak jak dla transformacji Laplace’a, i w tym przypadku rutynowo wyznacza się transformaty Z
typowych sygnałów. Najważniejsze z nich są przedstawione w tabeli 10-3 wraz z podaniem
obszaru zbieżności. Należy na to zwrócić uwagę, gdyż często tylko dzięki obszarowi zbież-
ności można rozróżnić dwie pozornie identyczne transformaty Z.

Przykłady

1) Transformata Z skoku jednostkowego u(n) z tabeli 10-3:


∞ ∞ ∞
∑ z − n = ∑ ( z −1 )
n 1
X ( z) = ∑ u(n ) z − n = = , z >1
n =−∞ n =0 n =0 1 − z −1
2) Transformata przyczynowego szeregu wykładniczego anu(n) z tabeli 10-3:
∞ ∞ ∞
∑ a n z − n = ∑ ( az −1 )
n 1 z
X ( z) = ∑ a n u( n ) z − n = = −1
= , z >a
n =−∞ n =0 n =0 1 − az z−a

3) Transformata szeregu wykładniczego:


− a n , n < 0
x (n) = 
 0, n≥0
−1 ∞ ∞ − a −1 z
∑ ( a −1 z )
n 1 z
X ( z) = − ∑ a n z −n = − ∑ a −n z n = 1 − = 1− −1
= = , z<a
n =−∞ n =1 n =0 1− a z 1 − a −1 z z−a

Jak widać, rzeczywiście transformaty w przypadku 2) i 3) są identyczne pomimo tego, że sy-


gnały są różne. Odróżnia je jedynie obszar zbieżności. W powyższych wyprowadzeniach wy-
korzystaliśmy następujący wzór na sumę szeregu potęgowego (|a| < 1):

1
∑an = 1− a
n =0
Układy dyskretne 269

Tab. 10-3. Transformaty Z wybranych sygnałów

Lp. Sygnał x(n) Transformata X(z) (10.20) Obszar zbieżności

1, n = 0
1 δ( n ) =  1 0 ≤ |z| ≤ ∞
0, n ≠ 0

2 δ(n − n0) z − n0 0 < |z| ≤ ∞

3 δ(n + n0) z n0 0 ≤ |z| < ∞

1, n ≥ 0 1
u(n) =  |z| > 1
4
0, n < 0 1 − z −1

z −1
n ⋅ u (n ) |z| > 1
5
(1 − z −1 )
2

z −1 (1 + z −1 )
6 n 2 ⋅ u(n ) |z| > 1
(1 − z −1 )
3

z −1 (1 + 4 z −1 + z −2 )
7 n 3 ⋅ u(n ) |z | > 1
(1 − z −1 )
4

1
8 a n ⋅ u(n ) |z| > |a|
1 − az −1
az −1
n |z| > |a|
9 na ⋅ u(n )
(1 − az −1 )
2

az −1 (1 + az −1 )
10 n 2 a n ⋅ u( n ) |z| > |a|
(1 − az −1 )
3

an
11 ⋅ u(n ) ea / z |z| > 0
n!
1
( n + 1)a n ⋅ u( n )
12
(1 − az −1 ) |z| > |a|
2

1
(n + 1)( n + 2)a n
⋅ u(n)
13
(1 − az −1 ) |z| > |a|
3
2!

1
(n + 1)( n + 2) ⋅ ⋅ ⋅ (n + k )a n |z| > |a|
⋅ u( n )
14
(1 − az −1 )
k
k!
270 Układy dyskretne

10.4. Odwrotna transformacja Z


Zadaniem odwrotnej transformacji Z jest wyznaczenie sygnału x(n) na podstawie jego trans-
formaty X(z) i informacji o jej obszarze zbieżności. Jej definicja jest następująca:
1 n −1
x (n) = v∫ X ( z ) z dz
2 πj Γ
(10.22)

gdzie Γ jest „zegaroskrętnym” konturem całkowania, obejmującym początek układu współ-


rzędnych. Zgodnie z twierdzeniem całkowym Cauche’ego:

1 1, n = 0

v z n −1dz =  (10.23)
2 πj Γ 0, n ≠ 0

mamy bowiem:
∞ 
1 1  ∞  1 − k + n −1 

v X ( z ) z n −1dz = ∫
v  ∑ x ( k ) z − k  z n −1dz = ∑  x (k ) v∫ z dz  = x (n ) (10.24)
2 πj Γ 2πj Γ  k =−∞  
k =−∞  2 π j Γ 
W najprostszym przypadku, kiedy X(z) jest zwykłym wielomianem zmiennej „z”:
n2
X ( z) = ∑ bn z −n (10.25)
n =n1

sygnał x(n) można wyznaczyć w sposób bardzo prosty, tzn. w odpowiedni sposób interpretując
współczynniki stojące przed potęgami tej zmiennej. Przykładowo bezpośrednio ze wzoru
(10.20) wynika, że X(z) równe:

X ( z) = 5 + 4 z −1 + 3 z −2 + 2 z −3 + z −4 ,
X ( z ) = x (0) + x (1) z −1 + x ( 2) z −2 + x ( 3) z −3 + x ( 4) z −4

jest związane z sygnałem, przyjmującym wartości:


x (0) = 5, x(1) = 4, x( 2) = 3, x (3) = 2, x(4) = 1

oraz zero we wszystkich pozostałych chwilach czasowych.


Natomiast w sytuacji kiedy X(z) jest ilorazem dwóch wielomianów zmiennej „z”, sygnał x(n)
oblicza się za pomocą następujących, praktycznych metod:
1) „długiego” dzielenia wielomianów,
2) rozkładu na sumę ułamków prostych,
3) metody residuów.

Przykłady

Szukamy odwrotnej transformaty Z z X(z) równego:

2 + 2 z −1 + z −2
X ( z) = , z >1
1 + z −1
Wyznaczymy ją za pomocą trzech alternatywnych metod.
Układy dyskretne 271

1) Metodą „długiego” dzielenia wielomianów otrzymujemy :

2+2z−1+z−2 ← wielomian licznika


−1
2⋅(1+z ) (−) 2+2z−1 ← wielomian mianownika razy 2
--------------------
z−2 ← różnica
+z−2⋅ (1+z−1) (−) z−2+z−3 ← wielomian mianownika razy z−2
-----------------
−z−3 ← różnica
−z−3⋅(1+z−1) (−) −z−3−z−4 ← wielomian mianownika razy −z−3
------------------
z−4
• • • itd.
czyli:
X ( z ) = 2 + z −2 − z −3 + z −4 − z −5 + ...
skąd
 0, n<0
 2, n=0

x (n) =  lub x ( n ) = δ( n ) + δ( n − 1) + ( −1) n u( n )
 0, n =1
( −1) n , n≥2

Podczas dzielenia mnożymy kolejno wielomian mianownika przez takie wartości az−k, aby
uzyskać „lewy skrajny” składnik aktualnej „różnicy”, który w wyniku późniejszego odejmo-
wania ma zostać uproszczony. Analityczny wzór na wartości współczynników wielomianu,
będącego wynikiem dzielenia, ma postać:
k
bk − ∑ ck − i ai
b0 b −c a b −c a −c a i =1
c0 = , c1 = 1 0 1 , c2 = 2 1 1 0 2 , ..., c k = (10.26)
a0 a0 a0 a0

przy założeniu, że:


∞ M N
∑ ck z −k = ∑ bm z −m ∑ a n z −n (10.27)
k =0 m=0 n =0

2) Metodą rozkładu na sumę składników prostych otrzymujemy :

1
X ( z ) = 1 + z −1 + , z >1
1 + z −1
skąd po uwzględnieniu transformat z tabeli 10-3 uzyskujemy:

x ( n ) = δ( n ) + δ( n − 1) + ( −1) n u( n )

czyli taki sam wynik jak poprzednio. Metoda ta wymaga umiejętności przekształcania wielo-
mianów, aż do momentu uzyskania sumy prostszych składowych, które występują w tabelach.
272 Układy dyskretne

Dla dociekliwych. W sytuacji kiedy X(z) jest ilorazem dwóch wielomianów zmiennej „z” i rząd
wielomianu licznika jest większy niż rząd wielomianu mianownika, X(z) należy przekształcić
do postaci (M≤N):
M

K ∑ bm z −m
X ( z) = X 1 ( z) + X 2 ( z) = ∑ ck z −k + mN=0 (10.28)
k =0
∑ a n z −n
n =0

Sygnał x1(n), związany z X1(z), wyznacza się bezpośrednio z definicji transformacji Z, nato-
miast odwrotną transformatę X2(z) (M≤N):

b0 + b1 z −1 + b2 z −2 + ... + bM z − M
X 2 ( z) = (10.29)
a 0 + a1 z −1 + a 2 z −2 + ... + a N z − N

wyznacza się dekomponując X2(z) na sumę składników prostych. Jeśli X2(z) ma tylko jedno-
krotne bieguny pk, k = 1, 2, ..., N (jednokrotne zera wielomianu mianownika), to może być za-
pisane jako:
B( z ) c1 c2 cN
X 2 ( z) = = c0 + + + ... + (10.30)
( 1 )( 2 ) ( N )
1 − p z −1
1 − p z −1
... 1 − p z −1
1 − p 1 z −1
1 − p 2 z −1
1 − p N z −1

i parametry „c” wyznacza się ze wzoru:

c k = X ( z ) ⋅ (1 − pk z −1 ) |z = p k , k = 1, 2, 3, ..., N (10.31)

współczynnik zaś c0 jest różny od zera tylko dla M = N i równy wtedy:


bN
c0 = (10.32)
aN

Natomiast w przypadku X(z) z m-krotnym biegunem pl mamy:

B( z ) ck m d l , j z1− j
X 2 (z) = = c0 + ∑ + ... + ∑ + ... (10.33)
(1 − p z ) (1 − p z ) ... (1 − p z )
1
−1
2
−1
k
−1 m
... k 1 − pk z −1 j =1 (1 − p z )
l
−1 j

ck m dl , j z
X 2 ( z ) = c0 + ∑ + ... + ∑ + ... (10.34)
j =1 ( z − pl )
−1
k 1 − pk z j

i współczynniki rozwinięcia dl,j są określone wzorem:

dl, j =
1 d m− j  (z − pl )m  (10.35)
 X ( z) 
( m − j )! dz m − j  z  z = p k

a współczynniki ck są wyznaczane jak poprzednio. W końcowym etapie z tabel znajdujemy sy-


gnały odpowiadające wyznaczonym, prostym transformatom, przykładowo:
ck
X k ( z) = ↔ x ( n ) = ck ⋅ ( p k )n (10.36)
1 − p k z −1
Układy dyskretne 273

d l ,2 z −1 d l ,2 p l z −1 d l ,2
X k ( z) = = ↔ x(n ) = ⋅ n ⋅ ( pl )n (10.37)
(1 − pl z )
−1 2
(
pl 1 − p z −1
l ) 2 pl

3) Zastosowanie metody residuów w rozważanym przypadku wygląda następująco :


(patrz uwaga poniżej):

• przekształcenia, analiza:

2z 2 + 2z + 1 2z 2 + 2z + 1
X ( z) = = , z >1
z2 + z z ( z + 1)
z n (2 z 2 + 2 z + 1)
F ( z ) = z n −1 X ( z ) = , z >1
z 2 ( z + 1)
wnioski dotyczące F(z):
− dla n ≥ 2: jeden biegun p1 = −1 (pojedynczy),
− dla n = 1: dwa bieguny p1 = −1 (pojedynczy) i p2 = 0 (pojedynczy),
− dla n = 0: dwa bieguny p1 = −1 (pojedynczy) i p2 = 0 (podwójny).

• przypadek n ≥ 2:
z n −2 ( 2 z 2 + 2 z + 1)
F ( z) =
( z + 1)
2z 2 + 2z + 1
x (n ) = Res[ p1 , F ( z )] = ( z − p1 ) F ( z ) z = p1 = ( z + 1) z n − 2 z = −1 = ( −1) n − 2 = ( −1) n
z +1
• przypadek n = 1:
2z 2 + 2z + 1
F ( z) =
z ( z + 1)
2z 2 + 2z + 1
x1 (1) = Res[ p1 , F ( z )] = ( z − p1 ) F ( z ) z = p1 = ( z + 1) z = −1 = −1
z ( z + 1)
2z 2 + 2z + 1
x 2 (1) = Res[ p2 , F ( z )] = ( z − p2 ) F ( z ) z = p2 =z z =0 =1
z ( z + 1)
x (1) = x1 (1) + x 2 (1) = −1 + 1 = 0

• przypadek n = 0:
2z 2 + 2z + 1
F ( z) =
z 2 ( z + 1)
2z 2 + 2z + 1
x1 (0) = Res[ p1 , F ( z )] = ( z − p1 ) F ( z ) z = p1 = ( z + 1) z = −1 =1
z 2 ( z + 1)

x 2 (0) = Res[ p 2 , F ( z )] =
d
dz
[
( z − p2 ) 2 F ( z ) ] z = p2 =
d  2 2 z 2 + 2 z + 1
z
dz 

z 2 ( z + 1) 
z=0 =1

x (0) = x1 (0) + x 2 (0) = 1 + 1 = 2


274 Układy dyskretne

Otrzymany wynik jest więc identyczny jak dwa poprzednie.

Dla dociekliwych. Jeżeli X(z) jest funkcją wymierną (iloraz dwóch wielomianów), to na pod-
stawie twierdzenia Cauchy’ego o residuach definicja (10.22) ma postać:

x (n) = ∑ ρ k (10.38)
k
gdzie ρk są residuami funkcji:

F ( z ) = z n−1X ( z ) (10.39)

w jej wszystkich biegunach pk leżących wewnątrz konturu Γ. Residuum funkcji F(z) w punkcie
z = pk, gdzie pk jest jej m-krotnym biegunem (zerem wielomianu mianownika), zdefiniowane
jest w sposób następujący:

1 d m −1 
ρk = ( z − pk ) m F ( z )  (10.40)
(m − 1)! dz m −1   z = pk

Dla pojedynczego bieguna mamy:

ρ k = ( z − pk ) m F ( z ) z = pk
= ( z − p k ) z n −1 X ( z ) z = pk
(10.41)

10.5. Właściwości transformacji Z


Transformata Z charakteryzuje się kilkoma fundamentalnymi właściwościami, które są dla nas
bardzo ważne i z których wkrótce skorzystamy rozwiązując „problem” równania (10.18),
a mianowicie jest ona liniowa:
∞ ∞ ∞
∑ [ax1 (n ) + bx2 (n )]z −n = a ∑ x1 (n ) z −n + b ∑ x2 (n ) z −n = aX 1 ( z ) + bX 2 ( z ) (10.42)
n = −∞ n = −∞ n = −∞

oraz „niewrażliwa” w module na przesunięcie sygnału (m = n−n0):


∞ ∞ ∞
∑ x ( n − n 0 ) z − n = ∑ x ( m ) z −( m + n ) = z − n ∑ x ( m ) z − m = z − n
0 0 0 X ( z) (10.43)
n = −∞ n = −∞ n = −∞

Druga właściwość jest analogiczna do właściwości „pochodnej” (5.41), (5.42) transformacji


Laplace’a: dla zerowych warunków początkowych transformata m-tej pochodnej sygnału była
równa transformacie samego sygnału, pomnożonej przez sm: x(n)(t) ↔ smX(s). Natomiast
w przypadku transformacji Z transformata sygnału opóźnionego o n0 próbek jest równa trans-
formacie sygnału bez opóźnienia, pomnożonej przez z − n0 . Dodatkowo transformata Z ma
właściwość splotu (m = n−k):
∞  ∞  ∞  ∞   ∞  ∞ 
∑  ∑ x(k ) y (n − k )  z −n = ∑  ∑ x(k ) y (m)  z −(m+k ) = ∑ x(k ) z −k  ∑ y (m) z −m  = X ( z )Y ( z )
n = −∞  k = −∞  m = −∞  k = −∞   k = −∞  m =−∞ 
(10.44)
Układy dyskretne 275

i właściwość iloczynu (korzystamy z definicji odwrotnej transformacji Z (10.22); ξ = z/ν):


∞ ∞   1  1  ∞ −n 
∑ [ x ( n ) y (n )] z −n
= ∑  x(n )  2π j v∫ Y (ν )ν n −1
dν   z − n =
2π j ∫
v  ∑ x ( n )( z /ν )  Y (ν )v dν =
 
−1

n =−∞ n =−∞   Γ  Γ n =−∞

1
= ∫
v X ( z / ν)Y ( ν)v −1d ν (10.45)
2 πj Γ
podobnie jak całkowe przekształcenie Fouriera.

10.6. Transmitancja układów dyskretnych


Ponieważ dyskretne układy LTI są opisane równaniem splotu dyskretnego (10.8a), (10.8b):
∞ ∞
y(n) = ∑ h( m) x( n − m ) = ∑ x (m)h(n − m) (10.46)
m = −∞ m = −∞

to z właściwości splotu transformacji Z wynika, że powyższemu opisowi układu w dziedzinie


czasu odpowiada następujące równanie w „dziedzinie” transformaty Z:
∞ ∞
Y ( z)
Y ( z) = H ( z) X ( z) ⇒ H (z) = = ∑ h( n ) z − n = ∑ h(n ) z − n (10.47)
X ( z ) n = −∞ n=0

czyli transformata H(z) odpowiedzi impulsowej h(n) (przyczynowej!) stanowi transmitancję


tego układu. W przypadku zaś kiedy dyskretny układ LTI jest opisany następującym równa-
niem:
M N
y(n) = ∑ bm x(n − m) − ∑ a k y(n − k ) (10.48)
m =0 k =1

to obliczając transformatę Z jego obu stron i korzystając z właściwości liniowości (10.42)


i „niezmienności” na przesunięcie (10.43) przekształcenia Z, otrzymujemy:

M  N 
Y ( z ) =  ∑ bm z −m  X ( z ) −  ∑ a k z −k Y ( z ) (10.49)
 m =0  k =1 
skąd:

Y ( z ) b0 + b1 z −1 + b2 z −2 + ... + bM z − M (1 − z1 z −1 )(1 − z 2 z −1 )...(1 − z M z −1 )


H ( z) = = − − −
= (10.50)
1 2
X ( z ) 1 + a1 z + a 2 z + ... + a N z N
(1 − p1 z −1 )(1 − p 2 z −1 )...(1 − p N z −1 )

gdzie zk oznaczają zera wielomianu licznika (zera transmitancji), a pk − zera wielomianu mia-
nownika (bieguny transmitancji). W przypadku kiedy układ nie ma pętli sprzężenia zwrotnego
z „wyjścia” (ak = 0), to wówczas transmitancja (10.50) ma tylko wielomian w liczniku i współ-
czynniki bm tego wielomianu są równe wartościom próbek odpowiedzi impulsowej h(n) z rów-
nania (10.47). Mnożąc równocześnie licznik i mianownik transmitancji (10.50) przez zM i zN,
otrzymujemy (a0 = 1):
276 Układy dyskretne

z N b0 z M + b1 z M −1 + ... + bM −1 z + bM b0 ( z − z1 )( z − z 2 )...( z − z M )
H ( z) = N −1
= z N −M (10.51)
z M
a0 z N
+ a1 z + ... + bN −1 z + bN a 0 ( z − p1 )( z − p 2 )...(1 − p N )

czyli transmitancję podobną do transmitancji układów analogowych H(s), w której występują


tylko dodatnie potęgi zmiennej zespolonej „z”. Układy cyfrowe opisane transmitancjami
(10.50), (10.51) są stabilne, jeśli ich bieguny pk, k = 1, 2, 3, ..., N leżą wewnątrz okręgu jedno-
stkowego na płaszczyźnie zmiennej zespolonej z.
Dla dociekliwych. Z czego wynika podany powyżej warunek stabilności układów LTI? Jak
wiemy warunkiem koniecznym i wystarczającym stabilności układu dyskretnego jest spełnienie
warunku (10.11) przez jego odpowiedź impulsową h(n). Odpowiedź tę możemy wyznaczyć za
pomocą odwrotnej transformacji Z z H(z). Jak już wykazaliśmy H(z) dane wzorem (10.29) jest
transformatą Z sumy sygnałów hk(n) i hl(n) postaci (10.36)(10.37). Suma ta będzie na pewno
spełniała warunek (10.11), jeśli każdy z jej sygnałów składowych będzie go spełniał. A tak
się dzieje, jeśli (pk)n i (pl)n dążą do zera dla n rosnącego do nieskończoności. Ma to miejsce
wtedy kiedy |pk| < 1 oraz |pl| < 1, tzn. kiedy każdy zespolony biegun transmitancji
(10.50), (10.51) leży wewnątrz okręgu jednostkowego.
Projektowanie dyskretnych układów LTI sprowadza się do zaprojektowania transmitancji H(z)
układu (10.48), tzn. przyjęcia wartości parametrów M, N, bm, ak, m = 0, 1, 2, ..., M, k = 1,
2, 3, ..., N. Kiedy transmitancja jest już zdefiniowana, równania czasowe układu, który ją „rea-
lizuje”, uzyskuje się odpowiednio interpretując współczynniki wielomianów tej transmitancji
zgodnie z równaniem (10.48). I tak, wielomian licznika jest związany z sygnałem wejściowym
x(n), wielomian zaś mianownika − z sygnałem wyjściowym y(n). Potęga zmiennej „z” infor-
muje nas natomiast o opóźnieniu sygnałów. Przykładowo transmitancja postaci:
3 + 2 z −1 + z −2
H ( z) =
1 + 2 z −1 + 3z −3
odpowiada układowi o równaniu czasowym:
y ( n ) = [3x ( n ) + 2 x ( n − 1) + x ( n − 2)] − [2 y ( n − 1) + 3 y ( n − 3)]

Przejdźmy teraz do fundamentalnego problemu: j ak należy d o b ie r ać wsp ó łczynniki


transmitancj i układu, aby zapewnić mu o kr eślo ne właściwo ści często tliwo ś-
cio we. Aby odpowiedzieć na to pytanie należy, po pierwsze, znać „interpretację” częstotli-
wościową transmitancji H(z) oraz, po drugie, odpowiednio ją kształtować, zmieniając współ-
czynniki wielomianów transmitancji.
Interpretacja częstotliwościowa. Aby nadać „sens” częstotliwościowy H(z), wystarczy znaleźć
związek pomiędzy transformacją Z a transformacją Fouriera dla sygnałów dyskretnych. Ponie-
waż są one zdefiniowane następująco:

transformacja Z: X ( z) = ∑ x ( n ) z −n
n = −∞

( ) ∑ x(n )e − jΩn
+∞
transformacja Fouriera: X e jΩ =
n = −∞

więc widzimy, że transformata X(z) sprowadza się do transformacji Fouriera X(ejΩ) sygnałów
dyskretnych dla:
z = e jΩ (10.52)
Układy dyskretne 277

gdzie Ω jest pulsacją unormowaną względem częstotliwości próbkowania i równą 2πF =


= 2πf / fpr. Wartości z na okręgu jednostkowym są związane wartościami częstotliwości unor-
mowanej F = f / fpr, nie istniejącymi poza tym okręgiem.
Szukając interpretacji częstotliwościowej transmitancji H(z), możemy też pójść inną drogą, już
przedstawioną na początku tego rozdziału. Jeśli założymy, że na wejście dyskretnego układu
LTI o odpowiedzi impulsowej h(n) podajemy sygnał x(n) = ejΩn, wówczas zgodnie z (10.8b) na
jego wyjściu otrzymamy (10.10):

∑ h(k ) x(n − k ) = ∑ h(k )e jΩ( n − k ) = e jΩn ∑ h(k )e − jΩk = x(n ) H (e jΩ ) = x(n) H ( z ) z = e


∞ ∞ ∞
y (n ) = jΩ
k = −∞ k = −∞ k = −∞
(10.53)
jΩ
Podobnie wynika stąd, że jeśli zastosujemy podstawienie z = e , to z H(z) widać, jak układ
„przetworzy” konkretną pulsację Ω: o ile ją wzmocni (moduł liczby zespolonej H(ejΩ)) oraz
przesunie w fazie (kąt liczby zespolonej H(ejΩ)).
Stosując podstawienie (10.52) w (10.51) otrzymujemy:

( ) ( )N −M ab0
H e jΩ = e jΩ
( e jΩ − z1 )( e jΩ − z 2 )...( e jΩ − z M )
(10.54)
0 (e jΩ − p1 )( e jΩ − p 2 )...( e jΩ − p N )

czyli widzimy, że w przypadku układów dyskretnych powtarza się z drobnymi zmianami „sce-
nariusz”, znany nam już z projektowania układów analogowych. Teraz jednak nie „poruszamy”
się po osi urojonej (s = jω) w przestrzeni zmiennej zespolonej „s”, tylko po okręgu o promieniu
jednostkowym (z = ejΩ) w przestrzeni zmiennej zespolonej „z”, natomiast tak jak poprzednio
interesują nas dla każdej wartości Ω moduły i kąty liczb zespolonych:

e jΩ − z m = Bm e jθm , e jΩ − p n = An e jθn (10.55)

gdzie (|.| − moduł liczby zespolonej, )(.) − jej kąt):

Bm = e jΩ − zm , (
An = e jΩ − pn , θm = ) e jΩ − zm , ϕn = ) e jΩ − pn ) ( ) (10.56)

Dlaczego scenariusz jest „ten sam”? Ponieważ zero transmitancji, leżące na okręgu jednostko-
wym w punkcie zm = e jΩm , zeruje transmitancję dla pulsacji Ωm, natomiast biegun transmitan-
cji, leżący w punkcie pn = εe jΩn , ε ≈ 1 , tzn. wewnątrz tego okręgu ale blisko niego, powoduje,
że układ wzmacnia pulsację Ωn. Wynika to z następujących wzorów:
M
∏ B m e jθ m

He ( ) = M (Ω )e
jΩ jΦ ( Ω )
( )
= e jΩ N − M b0
a0
m =1
N
(10.57)
∏ An e jϕn

n =1
M

b
∏ Bm M N
M ( Ω) = 0
a0
m =1
N
, Φ ( Ω ) = Ω( N − M ) + ∑ θm − ∑ ϕn (10.58)
∏ An m =1 n =1

n =1
278 Układy dyskretne

Jeśli bowiem dla jakieś pulsacji Ω jeden z modułów Bm się zeruje (czyli m-te zero leży na
okręgu jednostkowym), to wówczas moduł transmitancji także jest równy zeru dla tej pulsacji.
Z kolei jeśli jeden z biegunów transmitancji leży blisko okręgu jednostkowego, ale wewnątrz
niego w pobliżu wybranej pulsacji, to wówczas jeden z modułów An staje się mały dla tej
pulsacji, a więc moduł transmitancji rośnie, czyli układ wzmacnia.
Metoda projektowania transmitancji H(z) metodą „zer i biegunów” jest graficznie przedstawio-
na na rysunku 10.5. Zmieniając częstotliwość f od zera do częstotliwości próbkowania fpr poru-
szamy się na płaszczyźnie zmiennej zespolonej z po okręgu jednostkowym w kierunku prze-
ciwnym do ruchu wskazówek zegara. Dla dowolnego Ω = 2πf/fpr z przedziału [0, 2π) potrafimy
znaleźć związane z nim f. Umieszczając zero transmitancji w pobliżu wybranego f powo-
dujemy tłumienie tej częstotliwości przez układ. Jeśli zero leży dokładnie na okręgu jedno-
stkowym, to układ całkowicie usuwa z sygnału składową o danej częstotliwości. Z kolei zbliża-
nie bieguna do okręgu (od wewnątrz) w wybranym punkcie, powoduje wzmacnianie składowej
o częstotliwości związanej z tym punktem. Tym bardziej, im biegun leży bliżej okręgu. Zera
transmitancji mogą leżeć w dowolnym miejscu na płaszczyźnie zmiennej zespolonej z, bieguny
zaś − tylko wewnątrz okręgu. Jeśli zera i bieguny są zespolone, to zawsze występują w parach
sprzężonych.
Jak widać projektowanie metodą „zer i biegunów” jest bardzo prostą, intuicyjnie zrozumiałą
metodą projektowania dyskretnych układów LTI. Za pomocą tej metody trudno jest jednak
uzyskać charakterystyki amplitudowo-częstotliwościowe dobrej „jakości”, odznaczające się
dużą liniowością w paśmie przepustowym. W praktyce są więc preferowane inne metody pro-
jektowe, a metodę „zer i biegunów” wykorzystuje się wyłącznie do „jakościowej” prezentacji
zasad samego procesu projektowania (czyli wpływu położenia zer i biegunów na projekt koń-
cowy). Metody te opisano w następnym rozdziale.
Na koniec kilka uwag. P o p i e r ws z e , należy przypomnieć o istnieniu pewnych „zjawisk”
w obserwowanej charakterystyce częstotliwościowo-fazowej układów dyskretnych, a miano-
wicie występujących w niej skoków. Ponieważ zjawisko to ma taką samą naturę jak w układach
analogowych, nie będzie tutaj ponownie omawiane. Przypomnijmy tylko, że skoki ”fazy”
o +2π radianów są spowodowane okresowością funkcji arcus tangens, z pomocą której wyzna-
cza się charakterystykę fazową układu, natomiast skoki o +π radianów są związane z zerami
transmitancji, leżącymi na okręgu jednostkowym. P o d r u g i e , w rozdziale tym nie zajmo-
waliśmy się szczegółowo problemem stabilności układów dyskretnych. Przypomnijmy, po-
dobnie jak układy analogowe, także układy dyskretne są stabilne, jeśli ich bieguny leżą
w określonych obszarach płaszczyzny zespolonej. Dla układów analogowych była to lewa pół-
płaszczyzna zmiennej s, natomiast dla układów dyskretnych bieguny powinny leżeć wewnątrz
okręgu o promieniu jednostkowym w przestrzeni zmiennej z. P o t r z e c i e , należy w tym
miejscu powtórzyć i wyraźnie zaznaczyć, że w rozdziale tym zajmowaliśmy się tylko dyskret-
nymi układami typu LTI, czyli liniowymi, niezmiennymi w czasie, i w dodatku nie wyczer-
paliśmy wszystkich możliwości ich zapisu, przykładowo w ogóle nie przedstawiliśmy zapisu
w formie zmiennych stanu (patrz rozdział 13.2) oraz za pomocą struktur polifazowych (pkt.
18.2.2 i 18.2.3) i kratowych (rozdział 20.2). Oczywiście, klasa układów dyskretnych wykracza
poza układy LTI, czego przykładem są filtry nieliniowe, np. medianowe, „neuronowe” w sie-
ciach neuronowych itd. W każdym z tych przypadków układ odpowiada „liczbami” na „licz-
by”, ale nie w sposób „liniowy”.
Zostaną teraz przedstawione dwa przykłady zastosowania metody „zer i biegunów” do zapro-
jektowania prostych układów dyskretnych. Posłużą nam one do bardziej szczegółowego przyj-
rzenia się praktycznym aspektom działania układów dyskretnych.
Układy dyskretne 279

a) Im
z
jπ/2
e
ejΩ0

R=1
ej0 Re
ejπ
ej2π

ej3π/2 z=ejΩ

b)
Im z Im z
z1 z1
z=ejΩ0
z2 z=ejΩ0 z2
z3 z3 p1
p1
Re Re
p2 z3 p2

p1*
z3* z3* p1*
*
z2 z2*
*
z1 z=e jΩ
z1* z=ejΩ

c)
Im z Im z

z1
p1
z=ejΩ0 z=ejΩ0
Re Re

ϕ
p1*
z1* z1*
z=ejΩ z=ejΩ

Rys. 10.5. Ilustracja graficzna projektowania transmitancji H(z) metodą zer i biegunów: a) aby wyznaczyć
charakterystykę transmitancji H(z) podstawiamy z = ejΩ, Ω = 2πf/fpr, czyli poruszamy się po okręgu o pro-
mieniu jednostkowym (zmienności Ω [0, 2π) odpowiada zmienność f [0, fpr)); b) wszystkie zera „z” i bie-
guny „³”, jeśli są zespolone, to występują w parach sprzężonych; bieguny muszą leżeć wewnątrz okręgu,
a zera nie; zera zazwyczaj leżą na okręgu i zerują charakterystykę filtra dla wybranych pulsacji (często-
tliwości), bieguny zaś leżą w pobliżu okręgu i wpływają w ten sposób na wzmacnianie „okolicznych”
pulsacji (częstotliwości) przez układ; c) ilustracja zasady „konstrukcji” charakterystyki amplitudowo-czę-
stotliwościowej układu (iloraz dwóch iloczynów: iloczynu odległości wszystkich zer od wybranej pulsacji
(częstotliwości) i analogicznego iloczynu odległości biegunów) oraz charakterystyki fazowo-często-
tliwościowe (suma kątów zer minus suma kątów biegunów)
280 Układy dyskretne

10.7. Przykłady projektowania układów dyskretnych metodą


„zer i biegunów”
Obecnie spróbujemy wykorzystać wiedzę zdobytą w tym rozdziale do zaprojektowania dwóch
układów (filtrów) dyskretnych.

Przykład 1
Załóżmy, że mamy sygnał dyskretny, składający się z dwóch komponentów o częstotliwoś-
ciach fs = 10 Hz (sygnał użyteczny) oraz fz = 50 Hz (zakłócenie sieciowe). Niech częstotliwość
próbkowania tego sygnału fpr wynosi 1000 Hz (okres próbkowania ∆t = 1/fpr = 0,001 s). Chce-
my zaprojektować filtr cyfrowy, który usunie z sygnału zakłócenie 50-hercowe, ale pozostawi
składową 10-hercową. Zgodnie z opisaną powyżej metodologią, aby „wyzerować” na wyjściu
częstotliwość 50 herców powinniśmy umieścić zero transmitancji filtra na okręgu jednostko-
wym w punkcie określonym przez kąt ϕz = Ωz = 2π(fz/fpr). W związku z tym zero to jest równe:
j 2 π ( f z / f pr )
z z = e jϕ z = e jΩ z = e = e j 2 π( 50 / 1000) = e jπ / 10 (10.59)

Aby wielomian licznika transmitancji miał współczynniki o wartościach rzeczywistych, trans-


mitancja musi mieć także zero sprzężone zz*. Z kolei aby filtr wzmacniał sygnał o częstotli-
wości fs = 10 Hz, powinien mieć biegun wewnątrz okręgu jednostkowego, blisko punktu, zwią-
zanego z tą częstotliwością, na przykład równy:
j 2π ( f s / f pr )
ps = 0, 98e jΩ s = 0, 98e = 0, 98e j 2π (10 /1000) = 0, 98e jπ / 50 (10.60)

oraz biegun z nim sprzężony ps*. W związku z powyższym transmitancja H(z) jest równa:

(1 − z z z −1 )(1 − z z* z −1 ) (1 − e jπ /10 z −1 )(1 − e − jπ /10 z −1 )


H ( z) = = (10.61)
(1 − ps z )(1 − ps z ) (1 − 0, 98e jπ / 50 z −1 )(1 − 0, 98e − jπ / 50 z −1 )
−1 * −1

Jej zera i bieguny są przedstawione na rysunku 10.6a. Po wymnożeniu wyrazów licznika i mia-
nownika otrzymujemy:

1 − ( e jπ /10 + e − jπ /10 ) z −1 + z −2 1 − 2 cos(π /10) z −1 + z −2


H ( z) = jπ / 50 − jπ / 50
= (10.62)
1 − 0, 98( e +e −1
)z + z −2
1 − 0, 98 ⋅ 2 cos(π / 50) z −1 + 0, 9604 z −2
czyli
1 − 1, 9021z −1 + z −2
H ( z) = (10.63)
1 − 1, 9561z −1 + 0, 9604 z −2

Podstawiając
j 2 π ( f / f pr )
z = e jΩ = e

otrzymujemy charakterystykę częstotliwościową tego układu:

1 − 1, 9021e − jΩ + e −2 jΩ
H (e jΩ ) = (10.64)
1 − 1, 9561e − jΩ + 0, 9604e −2 jΩ
Układy dyskretne 281

a) 1 b) 40

20log10|H(ej2πf/fpr)| [dB]
0.5 20

Imag(z)
0
0
-20
-0.5 -40
-1 -60
-1 -0.5 0 0.5 1 0 20 40 60 80 100
Real(z) f [Hz]
c) 40 d) 1

30 0

kąt H(ej2πf/fpr)
|H(ej2πf/fpr)|

-1
20
-2
10 -3
0 -4
0 20 40 60 80 100 0 20 40 60 80 100
f [Hz] f [Hz]
Rys. 10.6. Projekt 1: a) położenie zer „z” i biegunów „³” transmitancji H(z), b), c) charakterystyka
amplitudowo-częstotliwościowa |H(ej2πf/fpr)| w skali decybelowej i liniowej, d) charakterystyka fazowo-czę-
stotliwościowa )H(ej2πf/fpr) w radianach

przedstawioną na rysunkach 10.6b i 10.6c (charakterystyka amplitudowa) i 10.6d (charaktery-


styka fazowa). W zerze transmitancji obserwujemy skok charakterystyki fazowej o π radianów.
Dla f = fs = 10 Hz oraz f = fz = 50 Hz otrzymujemy (fpr = 1000 Hz):
 f   π  f  π
H  2π s  = H   = Ge jφ = 37,23 ⋅ e − j1,40 , H  2π z  = H   = 0 (10.65)
 f   
50  f   10 
 pr   pr 
co oznacza, że sygnał użyteczny wzmocniono 37,23 razy i opóźniono w fazie o 1,4 radiana,
zakłócenie zaś zostanie całkowicie usunięte z sygnału wejściowego.
Aby zrealizować układ dyskretny o transmitancji (10.63), wykorzystujemy definicję transmi-
tancji:
Y ( z)
H ( z) = (10.66)
X ( z)
Ze wzorów (10.63) i (10.66) otrzymujemy:

 1 − 1, 9561z −1 + 0, 9604 z −2  Y ( z ) =  1 − 1, 9021z −1 + z −2  X ( z ) (10.67)

Wykorzystując właściwość (10.43) transformacji Z dochodzimy do równania czasowego ukła-


du:
y (n ) − 1, 9561 y ( n − 1) + 0, 9604 y (n − 2) = x(n ) − 1, 9021x (n − 1) + x (n − 2) (10.68)

Po pozostawieniu po lewej stronie tylko wielkości poszukiwanej y(n), otrzymujemy końcową


zależność na wyznaczanie kolejnej wartości wyjściowej układu na podstawie trzech ostatnich
próbek wejściowych i dwóch ostatnich próbek wyjściowych:
282 Układy dyskretne

1
x(n) y(n)
e)

z−1 −1.9021 1.9561 z−1


x(n−1) y(n−1)
z−1 1 −0.9604 z−1
x(n−2) y(n−2)

f) 1
0.8
0.6
0.4
h(n)

0.2
0
-0.2
-0.4
0 100 200 300 400 500
n

g) 2 h) 40

1 20
y(n)
x(n)

0 0

-1 -20

-2 -40
0 100 200 300 400 500 0 100 200 300 400 500
n n

i) 1 j) 40
0.8 30
|X(ej2πf/fpr)|

|Y(ej2πf/fpr)|

0.6
20
0.4
0.2 10

0 0
0 20 40 60 80 100 0 20 40 60 80 100
f [Hz] f [Hz]

Rys. 10.6. (cd.) e) schemat blokowy układu filtra, f) odpowiedź impulsowa h(n), g) sygnał wejściowy x(n),
h) sygnał wejściowy y(n), i), j) moduły widm Fouriera |X(ej2πf/fpr)| i |Y(ej2πf/fpr)| (8.8a) sygnałów x(n) i y(n)
dla n = 501, 502, ..., 1000

y (n ) = x( n ) − 1, 9021x(n − 1) + x(n − 2) + 1, 9561 y ( n − 1) − 0, 9604 y (n − 2) (10.69)

Schemat blokowy tego układu jest przedstawiony na rysunku 10.6e. Na rysunku 10.6f przed-
stawiono odpowiedź impulsową zaprojektowanego filtra, czyli jego odpowiedź na dyskretny
impuls jednostkowy (deltę Kroneckera) (10.1). Dla osoby nie wtajemniczonej stanowi ona po-
Układy dyskretne 283

czątkowo duże zaskoczenie: filtr ma bowiem tylko kilka współczynników, a h(n) ustala się tak
długo. Ale nie zapominajmy, że jest to układ ze sprzężeniem zwrotnym. Aby rozwiązać zagad-
kę h(n), zastosujmy (10.30)(10.31) w stosunku do (10.63). Otrzymamy wówczas:

0, 7669 ⋅ e − j1.5977 0, 7669 ⋅ e j1.5977


H ( z) = jπ / 50 −1
+ (10.70)
1 − 0, 98e z 1 − 0, 98e − jπ / 50 z −1

Z kolei na podstawie pozycji 8 z tabeli 10-3 mamy:

h (n ) = (0, 7669 ⋅ e − j1,5977 )(0, 98e jπ / 50 )n u( n ) + (0, 7669 ⋅ e j1,5977 )(0, 98e − jπ / 50 )n u (n ) (10.71)

Ponieważ pierwszy wyraz powyższej sumy jest zespolonym sprzężeniem wyrazu drugiego dla
dowolnego n, stąd:

h (n ) = h0 (n ) + h0* (n ) = 2 Re ( h0 (n ) ) = 2 Re ( 0, 7669e − j1,5977 ⋅ (0, 98)n e jπ n / 50 ⋅ u (n ) ) (10.72)

czyli dla n > 0 mamy

h ( n ) = 2 ⋅ 0, 7669 ⋅ (0, 98) n cos (π n / 50 − 1, 5977 ) (10.73)


oraz
h(0) = 1 (10.74)
Załóżmy, że na wejście układu podamy sygnał o długości N = 1000 próbek (n = 0, 1, 2, ...,
999):
 f   f  π  π 
x (n ) = sin(2πf s n∆t ) + sin(2 πf z n∆t ) = sin 2π s n  + sin 2π z n  = sin n  + sin n 
 
f pr   
f pr   50   10 
 
(10.75)
przedstawiony na rysunku 10.6g. Wówczas zgodnie z (10.65) na jego wyjściu powinniśmy
otrzymać sygnał (po zaniku stanu przejściowego):

π  π 
y ( n ) = G sin  n + φ  = 37,23 ⋅ sin  n − 1,4  (10.76)
 10   10 
Rzeczywisty sygnał otrzymany na wyjściu filtra jest pokazany na rysunku 10.6h. Jak widać
czas jego ustalania się jest równy „długości” odpowiedzi impulsowej filtra z rysunku 10.6f.
Moduły widm Fouriera (8.8a) fragmentów sygnałów x(n) i y(n), n = 501, 502, ..., 1000 (po
ustaleniu się sygnału y(n)), są przedstawione na rysunkach 10.6i i 10.6j. Jak widać składowa
50-hercowa została odfiltrowana. Oczywiście z powodu analizy fragmentów sygnałów, „wy-
ciętych” przez okno prostokątne, na rysunkach 10.6i i 10.6j widzimy poprzesuwane w często-
tliwości moduły widma okna prostokątnego (patrz rozdział 8).
W tabeli 10-4 przedstawiono program napisany w języku Matlab, za pomocą którego
dokonano stosownych obliczeń i wygenerowano wyniki, zaprezentowane na rysunku 10.6. Na
szczególną uwagę Czytelnika zasługują jeszcze raz podprogramy filterBP() oraz
filterBK(), realizujące operację filtracji, czyli implementujące równanie (10.69). Ich kod
źródłowy był przedstawiony w tabeli 10-2 oraz omówiony w sposób ogólny w podrozdziale
10.2, ale nic tak nie uczy jak konkretny przykład. Przypomnijmy: M oznacza w nich liczbę
wyrazów wielomianu licznika transmitancji filtra, a N reprezentuje liczbę wyrazów wielomianu
mianownika transmitancji. Współczynniki wielomianu licznika są oznaczone jako {b1, b2, ...,
bM}, a współczynniki mianownika przez {a1, a2, ..., aN}. W rozpatrywanym przypadku
M = N = 3 oraz {bm} = {1; −1,9021; 1} i {ak} = {1; −1,9561; 0,9604}. Należy zwrócić
284 Układy dyskretne

uwagę, że indeksowanie wag filtra rozpoczyna się od 1, a nie od 0, czyli w podprogramach jest
implementowane równanie (10.19) a nie (10.18).

Przykład 2
Zaprojektujemy teraz metodą „zer i biegunów” cyfrowy filtr pasmowoprzepustowy. Do sygna-
łu x(n) (10.75) z przykładu 1 dodamy trzecią składową o częstotliwości f3 = 250 Hz (n = 0,
1, 2, ..., 999):
 f   250  π 
x 3 ( n ) = sin (2πf 3n∆t ) = sin 2π 3 n  = sin 2 π n  = sin n  (10.77)
 f   1000  4 
 pr 

i postaramy się zaprojektować filtr przepuszczający częstotliwości od 200 do 300 Hz, czyli
pozostawiający tylko trzecią składową na swoim wyjściu. Zgodnie z podstawową zasadą meto-
dy „zer i biegunów” zera umieszczamy w paśmie zaporowym:
 f 
z k = exp j 2 π zk , f zk = 50, 100, 150, 350, 400, 450 Hz (10.78)
 f 
 pr 
a bieguny w pobliżu okręgu jednostkowego blisko częstotliwości pasma przepustowego:
 f pk 
pk = rk exp  j 2π  , rk = 0, 9; 0, 65 ; 0, 9; f pk = 200, 250, 300 Hz (10.79)
 f pr
 
Oczywiście wszystkie zera i bieguny sprzęgamy, aby wielomiany transmitancji miały współ-
czynniki rzeczywiste. Na rysunku 10.7 są zbiorczo przedstawione wszystkie charakterystyki
otrzymanego filtra. Podobnie jak poprzednio obserwujemy skoki charakterystyki fazowej w ze-
rach transmitancji (o π radianów) oraz stan przejściowy na wyjściu filtra, którego czas trwania
zależy od długości odpowiedzi impulsowej filtra h(n) (liczby jej „niezerowych” próbek).

10.8. Przykład ćwiczenia komputerowego


W tabeli 10-4 został przedstawiony program komputerowy, z pomocą którego zaprojektowano
filtry w dwóch omawianych przykładach. W programie tym jest zaimplementowana także
operacja samej filtracji oparta na wzorach (10.19), (10.48). Bufory próbek wejściowych bx[.]
i wyjściowych by[.] zaimplementowane zostały w najprostszy sposób, czyli jako bufory prze-
suwne, mając na uwadze czytelność programu i poglądowe przedstawienie algorytmu filtracji
sygnałów dyskretnych, pracującego w czasie rzeczywistym. Oczywiście, każdorazowe przesu-
wanie próbek w buforach po „przyjściu” nowej próbki z przetwornika A/C nie jest rozwią-
zaniem optymalnym pod względem szybkości działania filtra. W rzeczywistości nie stosuje się
buforów przesuwnych tylko kołowe (cykliczne), w których nowa próbka „nadpisuje” w buforze
wartość próbki najstarszej. Wówczas nie jest konieczne przesuwanie próbek sygnałów w
buforach, ale część sterująca programu jest nieco bardziej złożona. Program algorytmu
filtracji, wykorzystujący bufory kołowe, jest przedstawiony w tabeli 10-4. Niektóre procesory
sygnałowe, na przykład firmy Motorola DSP56xxx, mają wbudowane mechanizmy sprzętowe
umożliwiające cykliczne/kołowe (modulo M lub N) adresowanie próbek w pamięci procesora.
Układy dyskretne 285

a) 1 b) 40

20log10|H(ej2πf/fpr)| [dB]
0.5 20

Imag(z)
0
0
-20
-0.5 -40
-1 -60
-1 -0.5 0 0.5 1 0 100 200 300 400 500
Real(z) f [Hz]

c) 80 d) 0

60 -5

kąt H(ej2πf/fpr)
|H(ej2πf/fpr)|

-10
40
-15
20 -20
0 -25
0 100 200 300 400 500 0 100 200 300 400 500
f [Hz] f [Hz]

e) 3 f) 80
2
40
1
y(n)
x(n)

0 0
-1
-40
-2
-3 -80
0 50 100 150 200 0 50 100 150 200
n n

g) 1 h) 80
0.8 60
|X(ej2πf/fpr)|

|Y(ej2πf/fpr)|

0.6
40
0.4
0.2 20

0 0
0 100 200 300 400 500 0 100 200 300 400 500
f [Hz] f [Hz]

Rys. 10.7. Projekt 2: a) położenie zer „z” i biegunów „³” transmitancji H(z), b), c) charakterystyka ampli-
tudowo-częstotliwościowa |H(ej2πf/fpr)| w skali decybelowej i liniowej, d) charakterystyka fazowo-częstotli-
wościowa )H(ej2πf/fpr) w radianach, e) sygnał wejściowy x(n), f) sygnał wejściowy y(n), g), h) moduły widm
Fouriera |X(ej2πf/fpr)| i |Y(ej2πf/fpr)| (8.8a) sygnałów x(n) i y(n) dla n = 501, 502, ..., 1000
286 Układy dyskretne

i) 15
10
5

h(n)
0
-5
-10
-15
0 50 100 150 200
n

Rys. 10.7. (cd.) i) odpowiedź impulsowa filtra h(n)

Tab. 10-4. Przykładowy program komputerowy do projektowania filtrów cyfrowych metodą „zer i biegu-
nów” i testujący zaprojektowany filtr

% Ćwiczenie: Projektowanie rekursywnych filtrów cyfrowych metodą „zer i biegunów”

clear all; clf; subplot(111);

projekt = 1; % 1=filtr dolnoprzepustowy LP, 2=filtr pasmowoprzepustowy BP


filtr = 1; % filtracja: 1=funkcja Matlaba, 2=bufory przesuwne, 3=bufory kołowe
odpimp = 0; % 1=pokaż odpowiedź impulsową układu
fpr = 1000; % częstotliwość próbkowania w Hz

% Podaj parametry zer i biegunów transmitancji


if (projekt==1) % FILTR DOLNOPRZEPUSTOWY
fz = [ 50 ]; % częstotliwości zer w Hz
fp = [ 10 ]; % częstotliwości biegunów w HZ
Rz = [ 1 ]; % promienie kolejnych zer
Rp = [ 0.95 ]; % promienie kolejnych biegunów
fmax = 100; df = 0.1; % parametry obliczanego widma Fouriera
end
if (projekt==2) % FILTR PASMOWOPRZEPUSTOWY
fz = [ 50 100 150 350 400 450 ]; % częstotliwości zer w Hz
fp = [ 200 250 300 ]; % częstotliwości biegunów w Hz
Rz = [ 1 1 1 1 1 1 ]; % promienie kolejnych zer
Rp = [ 0.9 0.65 0.9 ]; % promienie kolejnych biegunów
fmax = 500; df = 1; % parametry obliczanego widma Fouriera
end

% Oblicz zera i bieguny transmitancji


fi_z = 2*pi*(fz/fpr); % kąty zer w paśmie zaporowym
fi_p = 2*pi*(fp/fpr); % kąty biegunów w paśmie przepuszczania
z = Rz .* exp(j*fi_z); % zera
p = Rp .* exp(j*fi_p); % bieguny
z = [ z conj(z) ]; % dodanie zer sprzężonych
p = [ p conj(p) ]; % dodanie biegunów sprzężonych

% Rysunek - położenie zer i biegunów


NP = 1000; fi=2*pi*(0:1:NP-1)/NP; s=sin(fi); c=cos(fi);
plot(s,c,'-k',real(z),imag(z),'or',real(p),imag(p),'xb');
title('ZERA i BIEGUNY'); grid; pause

% Oblicz współczynniki transmitancji {z,p} ---> {b,a}


wzm = 1; [b,a] = zp2tf(z',p',wzm), pause

% Charakterystyka częstotliwościowa {b,a} -> H(f)


f = 0 : df : fmax; w = 2*pi*f; wn= 2*pi*f/fpr;
Układy dyskretne 287

H = freqz(b,a,wn);
Habs = abs(H); HdB = 20*log10(Habs); Hfa = unwrap(angle(H));
plot( f, Habs); grid; title('|H(f)|'); xlabel('f [Hz]'); pause
plot( f, HdB); grid; title('|H(f)| dB'); xlabel('f [Hz]'); pause
plot( f, Hfa); grid; title('kąt H(f)'); xlabel('f [Hz]'); ylabel('[rd]'); pause

% Generacja sygnałów testowych


Nx=1024; n=0:Nx-1; dt=1/fpr; t=dt*n;
f1=10; f2=50; f3=250;
x1=sin(2*pi*f1*t); x2=sin(2*pi*f2*t); x3=sin(2*pi*f3*t);
if (projekt==1) x=x1+x2; else x=x1+x2+x3; end
if (odpimp==1) x=zeros(1,Nx); x(1)=1; end

% Filtracja sygnału: x(n) ---[b,a]---> y(n)


if (filtr==1) y = filter(b,a,x); end % funkcja Matlaba
if (filtr==2) y = filterBP(b,a,x); end % nasza funkcja wykorzystująca bufory przesuwne
if (filtr==3) y = filterBK(b,a,x); end % nasza funkcja wykorzystująca bufory kołowe

% Prezentacja wyników filtracji


subplot(211); plot(t,x); grid; axis tight; title('Wejscie x(n)');
subplot(212); plot(t,y); grid; axis tight; title('Wyjście y(n)');
xlabel('nr próbki n’); pause
n=Nx/2+1:Nx; X = freqz(x(n),1,wn)/(Nx/4); Y = freqz(y(n),1,wn)/(Nx/4);
X = abs(X); Y = abs(Y);
subplot(211); plot(f,X); grid; title('Wejscie X(f)');
subplot(212); plot(f,Y); grid; title('Wyjście Y(f)');
xlabel('f [Hz]'); pause
11
Projektowanie rekursywnych
filtrów cyfrowych

W rozdziale tym skrótowo przedstawiono problematykę projektowania rekursywnych filtrów


cyfrowych typu IIR (ang. Infinite Impulse Response), mających nieskończoną odpowiedź
impulsową. Są to filtry cyfrowe ze sprzężeniem zwrotnym, które mają także linię opóźniającą
na swoim wyjściu (rysunek 10.4). Konsekwencją tego jest występowanie wielomianu mianow-
nika w transmitancji filtra H(z) (10.50). Wielką zaletą filtrów rekursywnych jest możliwość
uzyskiwania bardzo stromych charakterystyk amplitudowo-częstotliwościowych przy stosunko-
wo małej liczbie współczynników wagowych bm i ak. Filtr nierekursywny mający porównywal-
ną pod względem stromości charakterystykę amplitudowo-częstotliwościową jest wielokrotnie
dłuższy, tzn. trzeba użyć bardzo długiej linii opóźniającej na wejściu filtra i dużej liczby
współczynników bm. Jednak za prostotę układową filtra rekursywnego „płaci” się nieliniowoś-
cią jego charakterystyki fazowo-częstotliwościowej. Powoduje to, że czas opóźnienia poszcze-
gólnych częstotliwości na wyjściu filtra jest różny, co prowadzi do zmiany kształtu sygnału.
W niektórych zastosowaniach deformacja taka nie jest dopuszczalna. Równocześnie z racji
sprzężenia zwrotnego filtry rekursywne mogą być niestabilne (czyli „wzbudzać się”). Należy
więc projektować je bardzo starannie, zwracając szczególną uwagę na dokonywane zaokrągle-
nia współczynników wagowych.
Najpopularniejszą metodą projektowania cyfrowych filtrów rekursywnych jest metoda bilinio-
wa, wykorzystująca związki pomiędzy analogowymi filtrami Butterwortha i Czebyszewa a ich
odpowiednikami cyfrowymi. W metodzie tej projektuje się filtry analogowe spełniające okre-
ślone wymagania, a następnie transformuje się transmitancje tych filtrów H(s) do postaci
cyfrowej H(z), stosując podstawienie s = 2fpr(z−1)/(z+1). Ponieważ metodologia projektowania
„dobrych” filtrów analogowych jest rozwijana od lat i powszechnie znana, dlatego za pomocą
metody transformacji biliniowej uzyskuje się porównywalnie „dobre” filtry cyfrowe. Równo-
cześnie swoją wiedzę można z sukcesem wykorzystywać w dwóch „światach”: analogowym
i cyfrowym.
Z tego powodu główną zawartością „merytoryczną” niniejszego rozdziału jest przedstawienie
podstaw i możliwości zastosowań metody projektowania rekursywnych filtrów cyfrowych za
pomocą transformacji biliniowej filtrów analogowych. Inne metody przedstawiono w spo-
sób syntetyczny jako tło dla głównego „bohatera” naszej opowieści.
Projektowanie rekursywnych filtrów cyfrowych 289

11.1. Wymagania stawiane filtrom cyfrowym


Podobnie jak w przypadku filtrów analogowych (podrozdział 6.1), filtrom cyfrowym stawiane
są określone wymagania częstotliwościowe. Zazwyczaj specyfikuje się je dla charakterystyki
amplitudowo-częstotliwościowej filtra H(ejΩ) (10.54), gdzie pulsacja unormowana Ω jest
równa 2πf/fpr (f − częstotliwość, fpr − częstotliwość próbkowania) i zawiera się w przedziale
[−π, π]. Definiuje się cztery główne typy filtrów cyfrowych ze względu na zakres (pasmo)
przenoszonych częstotliwości:
1) filtry dolnoprzepustowe LP (ang. LowPass):
1 ± δ pass dla Ω ≤ Ω pass
H LP (e jΩ ) =  (11.1)
 0 + δ stop dla Ω ≥ Ω stop

2) filtry górnoprzepustowe HP (ang. HighPass):


 0 + δ stop dla Ω ≤ Ω stop
H HP (e jΩ ) =  (11.2)
 1 ± δ pass dla Ω ≥ Ω pass

3) filtry pasmowoprzepustowe BP (ang. BandPass)


1 ± δ pass dla Ω pass1 ≤ Ω ≤ Ω pass 2
H BP (e jΩ ) =  (11.3)
0 + δ stop dla Ω ≤ Ω stop1 lub | Ω |≥ Ω stop 2

4) filtry pasmowozaporowe BS (ang. BandStop):


0 + δ stop dla Ω stop1 ≤ Ω ≤ Ω stop 2
H BS ( e jΩ ) =  (11.4)
1 ± δ pass dla Ω ≤ Ω pass1 lub Ω ≥ Ω pass 2

W powyższych definicjach uwzględniono tylko pasma przepustowe i zaporowe. W pasmach


przejściowych charakterystyki wszystkich filtrów powinny spełniać warunek 0 ≤ |H(ejΩ)| ≤ 1+
+ δpass. W skrótach nazw oraz parametrów wykorzystywano terminologię angielską, ponieważ
przyjęto założenie, że środowiskiem programowym, w którym zostaną przeprowadzane proje-
ktowe eksperymenty symulacyjne będzie anglojęzyczny program Matlab. Powyższe wzory
określają przedziały wartości, w których powinna się zawierać charakterystyka amplitudowo-
-częstotliwościowa filtra M(Ω) = |H(ejΩ)| dla dowolnej pulsacji Ω z przedziału [−π, π] dla każ-
dego typu filtra. Wynika z nich, że wartości funkcji M(Ω) powinny leżeć w „tunelach”, zazna-
czonych białym kolorem na rysunkach 11.1 i 11.2, określonych przez przyjęte wartości para-
metrów Ωpass, Ωstop, δpass, δstop.
Istnieją dwie grupy metod: projektowanie bezpośrednie filtrów cyfrowych oraz projektowanie
pośrednie, polegające na przekształceniu filtrów analogowych do postaci cyfrowej. W pier-
wszym przypadku dobiera się współczynniki wielomianów transmitancji filtra cyfrowego mini-
malizując błąd średniokwadratowy aproksymacji zadanej charakterystyki częstotliwościowej.
Tak jest na przykład w metodzie Yule’a-Walkera. W drugim przypadku natomiast idzie się „na
skróty” i wykorzystuje się umiejętność projektowania filtrów analogowych, odpowiednio je
przekształcając na filtry cyfrowe. Stosuje się wówczas metody:
• niezmienności odpowiedzi impulsowej,
• dopasowanej transformacji Z,
• transformacji biliniowej.
290 Projektowanie rekursywnych filtrów cyfrowych

Drugie podejście jest częściej stosowane, zwykle wybiera się metodę transformacji biliniowej.
Skrótowo omówimy każdą z podanych metod.

MLP(Ω) LP

1+δpass
1
1−δpass

δstop

0 Ωpass Ωstop π Ω [rd⋅Hz/Hz]


0 Fpass Fstop 0.5 F [Hz/Hz]
0 fpass fstop fpr/2 f [Hz]

Rys. 11.1. Orientacyjny kształt charakterystyki amplitudowo-częstotliwościowej M(Ω) = |H(ejΩ)| (biały „tu-
nel”) dla cyfrowego filtra dolnoprzepustowego (LP). F oznacza częstotliwość unormowaną (F = f / fpr),
Ω − pulsację unormowaną (Ω = 2πF), f zaś jest częstotliwością wyrażoną w hercach

MLP(Ω) LP MHP(Ω) HP

1+δpass 1+δpass
1 1
1−δpass 1−δpass

δstop δs
Ω Ω
0 Ωpass Ωstop π 0 Ωstop Ωpass π

MBP(Ω) BP MBS(Ω) BS

1+δpass 1+δpass
1 1
1−δpass 1−δpass

δstop δstop
Ω Ω
0 Ωstop1 Ωpass1 Ωpass2 Ωstop1 π 0 Ωpass1 Ωstop1 Ωstop2 Ωpass1 π

Rys. 11.2. Orientacyjny kształt charakterystyk amplitudowo-częstotliwościowych M(Ω) = |H(ejΩ)| (białe


„tunele”) dla czterech podstawowych typów filtrów cyfrowych: dolnoprzepustowego (LP), górnoprzepusto-
wego (HP), pasmowoprzepustowego (BP) i pasmowozaporowego (BS). Ω oznacza pulsację unormowaną
równą Ω = 2πF = 2π(f / fpr), gdzie f oznacza częstotliwość wyrażoną hercach
Projektowanie rekursywnych filtrów cyfrowych 291

11.2. Metoda Yule’a-Walkera


Załóżmy, że realizowany filtr rekursywny IIR ma budowę kaskadową:
M
∑ bm z − m L 
1 + b1i z −1 + b2i z − 2 
H (z ) = m =0
= g∏  (11.5)
N  −1 −2 
i =1  1 + a1i z + a 2i z 
1 + ∑ an z −n

n =1

czyli składa się z L sekcji bikwadratowych (transmitancji „elementarnych”, mających wielo-


miany drugiego rzędu zarówno w liczniku jak i mianowniku). Oznaczmy przez Hp(ejΩ) projek-
towaną (wymaganą) charakterystykę częstotliwościową filtra cyfrowego i załóżmy, że jest ona
zadana dla K dyskretnych częstotliwości Ωk, k = 1, 2, 3, ..., K. Zdefiniujmy minimalizowaną
średniokwadratową funkcję błędu jako:

K 2
E= ∑ H p ( e jΩ k ) − H ( e jΩ k ) (11.6)
k =1

Nieznane współczynniki filtra {g, a1i, a2i, b1i, b2i}, i = 1, 2, ..., L znajduje się wyznaczając
pochodne cząstkowe błędu aproksymacji E względem tych współczynników i przyrównując je
do zera. Uzyskuje się w ten sposób układ 4L+1 równań z 4L+1 niewiadomymi. Jedną z metod
rozwiązania tego układu równań jest tzw. metoda Flechera-Powella.
Do projektowania filtrów według powyższego scenariusza służy funkcja yulewalk()
w programie Matlab.

11.3. Metoda niezmienności odpowiedzi impulsowej


Załóżmy, że odpowiedź impulsowa filtra cyfrowego hc(n) jest spróbkowaną odpowiedzią im-
pulsową odpowiedniego filtra analogowego ha(t):
hc (n ) = Tha (nT ) (11.7)

Mnożenie ha(t) przez okres próbkowania T ma na celu uniezależnienie wzmocnienia filtra cyf-
rowego od tego okresu. Niech transmitancja filtra analogowego ma postać (5.43):

b0 + b1s + ... + bM s M
H a (s ) = , N≥M (11.8)
ao + a1s + ... + a N s N

i niech pk, k = 1, 2, ..., N, oznaczają jej bieguny (zera wielomianu mianownika transmitancji).
Odpowiedź impulsową filtra (11.8) wyznaczamy za pomocą odwrotnej transformaty Laplace’a
(lub Fouriera, patrz podrozdziały 5.2 i 5.3):

c e p1t + c2 e p 2 t + ... + c N e p N t , t≥0


ha (t ) =  1 (11.9)
 0, t < 0

Na podstawie założenia o niezmienności odpowiedzi impulsowej otrzymujemy z powyższego


równania zależność na odpowiedź impulsową filtra cyfrowego:
292 Projektowanie rekursywnych filtrów cyfrowych

h (1) (n ) + hc( 2 ) (n ) + ... + hc( N ) (n ), n≥0


hc (n ) =  c (11.10)
 0, n < 0
gdzie
Tc e p k nT , n ≥ 0
hc( k ) (n ) =  k (11.11)
 0, n < 0

Transmitancja Hc(z) odpowiedniego filtra cyfrowego jest równa transformacie Z (10.20) jego
odpowiedzi impulsowej hc(n), czyli z (11.10), (11.11) na podstawie (10.36) mamy:
N
Tck
H c (z ) = ∑ H c( k ) (z ) , H c( k ) (z ) = (11.12)
k =1 1 − e p k T z −1

Bieguny pk transmitancji filtra analogowego „przechodzą” w bieguny e pkT filtra cyfrowego.


Ponieważ warunkiem stabilności filtra analogowego jest położenie jego biegunów w lewej
półpłaszczyźnie liczb zespolonych, stąd

Re ( pk ) < 0 ⇒ e pk T < 1 (11.13)

czyli wynikowy filtr cyfrowy jest stabilny i przyczynowy.


Charakterystyka częstotliwościowa filtra cyfrowego zaprojektowanego tą metodą jest równa:
∞ ∞
( )
H c e jΩ = ∑ hc ( n ) e− jΩn = ∑ Tha ( nT ) e− jΩn
n =0 n =0
(11.14a)

Na podstawie (4.48), (4.49) mamy:

( ) ∑ H a  jω − jk 2Tπ 



H c e jΩ = (11.14b)
k = −∞

czyli jest ona równa sumie poprzesuwanych charakterystyk filtra analogowego (patrz pod-
rozdział 4.5, dotyczący twierdzenia o próbkowaniu oraz zawarte w nim rysunki).

Przykład. Zaprojektujmy metodą niezmienności odpowiedzi impulsowej dolnoprzepustowy


filtr Butterwortha trzeciego rzędu (N = 3). Ze wzoru (6.56) obliczamy położenie biegunów fil-
tra analogowego:
−1+ j 3
p1 = ω3dB e j ( 2 π / 3) = ω3dB , p2 = ω3dB e j ( π ) = −ω3dB , p3 = ω3dBe j ( 4 π / 3) = p1*
2
Na podstawie (6.39) otrzymujemy:
− p1 p2 p3 ω33dB
Ha (s) = =
( s − p1 )( s − p2 ) ( s − p3 ) ( s + ω ) s2 + sω + ω2 ( )
3dB 3dB 3dB

Po rozłożeniu transmitancji na sumę składników prostych mamy:


c1 c2 c3
H a (s ) = + +
s − p1 s − p2 s − p3
Projektowanie rekursywnych filtrów cyfrowych 293

gdzie
−3− j 3 − 3+ j 3
c1 = ω3dB , c2 = ω3dB , c3 = c1* = ω3dB
6 6
Na podstawie (11.12) transmitancja odpowiedniego filtra cyfrowego jest po przekształceniach
równa:

Hc ( z) =
Ω 3dB
−  ( )
Ω3dB −  Ω3dBe −Ω3dB / 2 cos ( α ) + sin ( α ) / 3  z −1

1 −  e −Ω3dB  z −1 
1 − 2e −Ω 3dB / 2
cos ( α ) z + e
 −1  −Ω3dB  −2
z
     

gdzie zastosowano następujące podstawienia:


ω3dB 3
Ω 3dB = ω3dBT = , α= Ω 3dB
f pr 2

Jeśli przykładowo przyjmiemy f3dB = fpr/8, to wówczas:


f pr π π 3
ω3dB = 2πf 3dB = 2π ⇒ Ω 3dB = ⇒ α=
8 4 8
i ostatecznie otrzymujemy następującą transmitancję Hc(z) filtra cyfrowego:

0,7854 0,7854 − 0,6049 z −1


Hc ( z) ≅ −1

1 − 0,4559 z 1 − 1,0499 z −1 + 0,4559 z −2

Narysowanie charakterystyki częstotliwościowej tego filtra pozostawiamy jako ćwiczenie Czy-


telnikowi (podstawienie: z = ejΩ, 0 ≤ Ω ≤ π).

11.4. Metoda dopasowanej transformacji Z


W metodzie tej transformuje się zera i bieguny transmitancji filtra analogowego do następują-
cej postaci (T − okres próbkowania):
q jT
zera qj: s−qj ⇒ 1 − z −1e (11.15)
p jT
bieguny pj: s− pj ⇒ 1 − z −1e (11.16)

co odpowiada transformacji osi jω z przestrzeni zmiennej „s” w okrąg o środku w punkcie


(0,5; 0) i promieniu równym 0,5 w przestrzeni zmiennej „z”. Z tego powodu przybliżona
zgodność charakterystyk filtra analogowego i cyfrowego występuje tylko w zakresie często-
tliwości [0, fpr/10), fpr = 1/T. W tej metodzie należy więc stosować odpowiednio mały okres
próbkowania T. Z powodu występującego zjawiska aliasingu, metoda ta jest bardzo rzadko
stosowana.

11.5. Metoda transformacji biliniowej


Załóżmy, że dla każdego filtra analogowego Ha(s) można skonstruować filtr cyfrowy Hc(z),
taki że:
( )
H c e jΩ = H a ( jω) (11.17)
294 Projektowanie rekursywnych filtrów cyfrowych

czyli zmianom pulsacji analogowej ω w zakresie (−∞, +∞) powinny odpowiadać zmiany pul-
sacji cyfrowej Ω (unormowanej względem częstotliwości próbkowania: Ω = 2πf/fpr) w zakresie
(−π, +π). Niech:
z = φ(s ) (11.18)

wówczas filtr analogowy i odpowiadający mu filtr cyfrowy są związane zależnością:


H c (φ(s )) = H a (s ) (11.19)

Transformacja z = φ(s) powinna spełniać następujące warunki:


1) Oś jω powinna być przekształcona na okrąg jednostkowy: φ(jω) = ejΩ.
2) Powinna istnieć funkcja odwrotna s = φ−1(z), tak aby można było zaprojektować filtr cy-
frowy na podstawie odpowiedniego filtra analogowego:

(
H c ( z ) = H a φ −1 ( z ) ) (11.20)

3) Jeśli układ analogowy opisany transmitancją Ha(s) jest stabilny, to także układ cyfrowy
o transmitancji Hc(φ(s)) powinien być stabilny. Jeśli więc bieguny transmitancji układu
analogowego leżą w lewej półpłaszczyźnie (Re(s) < 0), to bieguny odpowiadającego mu
układu cyfrowego powinny leżeć wewnątrz okręgu jednostkowego, czyli powinien być
spełniony warunek |φ(s)| < 1.
4) Jeśli „zerowa” częstotliwość ma być zachowana, to powinien być spełniony warunek
φ(0) = 1.
W transformacji biliniowej przyjmuje się następującą funkcję przekształcającą filtr cyfrowy
Hc(z) na filtr analogowy Ha(s):
(2 / T ) + s 1 + sT / 2
z = φ(s ) = = (11.21)
( 2 / T ) − s 1 − sT / 2

gdzie T jest okresem próbkowania sygnału dyskretnego. Definicja ta spełnia wszystkie powyż-
sze warunki. Transformacja odwrotna do (11.21) ma postać:
2 z −1
s = φ −1 ( z ) = (11.22)
T z +1

Podstawiając w (11.22) s = jω i z = e jΩ , otrzymujemy:

jω =
2 e jΩ − 1 2 e
=
jΩ / 2
( )
e jΩ / 2 − e − jΩ / 2 / 2 2 j sin ( Ω / 2 )
=
( )
T e jΩ + 1 T e jΩ / 2 e jΩ / 2 + e − jΩ / 2 / 2 T cos ( Ω / 2 )

czyli
2
ω= tg(Ω / 2 ) , Ω = 2 arctg (ωT / 2 ) (11.23a), (11.23b)
T
Graficzna ilustracja zasady transformacji biliniowej jest przedstawiona na rysunku 11.3, nato-
miast zależność funkcyjna pulsacji analogowej ω od unormowanej pulsacji cyfrowej Ω, i od-
wrotnie, jest pokazana na rysunku 11.4. Kolejność projektowania rekursywnych filtrów cyfro-
wych metodą transformacji biliniowej jest następująca:
Projektowanie rekursywnych filtrów cyfrowych 295

Imag(s) Imag(z)
2 z −1
s=
T z +1
Ha(s) Hc(z)
1
Real(s) Real(z)

jω ejΩ
Ha(s)
zmienna "s" zmienna "z"

Rys. 11.3. Graficzna ilustracja transformacji biliniowej transmitancji Ha(s) filtra analogowego na transmi-
tancję Hc(z) filtra cyfrowego: 1) lewa półpłaszczyzna zmiennej zespolonej „s” transformacji Laplace’a prze-
chodzi we wnętrze okręgu o promieniu jednostkowym na płaszczyźnie zmiennej zespolonej „z” transforma-
cji Z, 2) oś jω przechodzi w okrąg ejΩ, Ω = 2πf / fpr

ω⇔Ω Ω
H(ω) ⇔ H(ejΩ)

ω=(2/T)tg(Ω/2)
Ωpass2 Ω=2arctg(ωT/2)

Ωpass1

ωp1 ωpass2
|HBP(ejΩ) ω
1

|HBP(ω)|

Rys. 11.4. Przykładowa zależność pomiędzy charakterystyką amplitudowo-częstotliwościową pasmowo-


przepustowego filtra analogowego |HBP(ω)| a charakterystyką |HBP(ejΩ)| filtra cyfrowego, jego brata „bliź-
niaka”, uzyskanego w wyniku transformacji biliniowej (p1 = pass1)

1) Podanie zbioru zadanych pulsacji granicznych {Ωg = 2πfg/fpr} filtra cyfrowego z przedziału
[0,π) (filtry dolnoprzepustowe, górnoprzepustowe, pasmowoprzepustowe, pasmowozapo-
rowe) oraz wymaganych wartości tłumienia w paśmie przepustowym (Apass) i zaporowym
(Astop).
2) Wyznaczenie pulsacji ωg dla filtra analogowego Ha(s), związanego z filtrem cyfrowym
Hc(z):
2
ωg = tg ( Ω g / 2 )
T
296 Projektowanie rekursywnych filtrów cyfrowych

3) Zaprojektowanie filtra analogowego, zdefiniowanego przez zbiór parametrów {ωg1, ωg1,...,


Apass, Astop}.
4) Wyznaczenie współczynników transmitancji filtra cyfrowego na podstawie współczynni-
ków transmitancji filtra analogowego:

H c ( z ) = H a (s ) s = ( 2 / T )( z −1) /( z +1)

W tabeli 11-1 przedstawiono kod źródłowy programu napisanego w języku Matlab, trans-
formującego filtr analogowy w filtr cyfrowy metodą transformacji biliniowej. Zasada jego
pracy jest bardzo prosta, identyczna jak w przypadku transformacji częstotliwości opisanych
w rozdziale 6.2. Problemu nie stanowi bowiem obliczenie zer wielomianów licznika i mia-
nownika transmitancji filtra cyfrowego, jeśli są znane zera wielomianów licznika i mianownika
transmitancji filtra analogowego. Stosując podstawienie (11.22), otrzymujemy:
2 f pr + z k
z−
2 f pr − zk
s − z k = 2 f pr
z −1
z +1
(
− z k = 2 f pr − z k ) z +1
Jeśli wykonamy powyższą operację w stosunku do wszystkich zer wielomianów transmitancji
Ha(s) filtra analogowego, to otrzymamy wszystkie zera wielomianów transmitancji Hc(z) filtra
cyfrowego.

Przykład. W celach poglądowych zaprojektujemy dolnoprzepustowy filtr Butterwortha trze-


ciego rzędu (N = 3), czyli tego samego typu jak w przypadku metody niezmienności odpo-
wiedzi impulsowej. Przyjmijmy częstotliwość próbkowania fpr równą 1 Hz (okres próbkowania
T = 1/fpr = 1 sekundę) oraz górną częstotliwość graniczną filtra f3dB równą 0,25 Hz. W ko-
lejnych krokach realizacji obliczeń otrzymujemy:
f 3dB 0, 25 π
cyfrową częstotliwość graniczną: Ω 3dB = 2π = 2π =
f pr 1 2

2
analogową częstotliwość graniczną: ω3dB = tg(Ω 3dB / 2 ) = 2 tg(π / 4 ) = 2
T
− p1 p2 p3 ω33dB
filtr analogowy: Ha (s) = =
( s − p1 )( s − p2 ) ( s − p3 ) ( s + ω ) s 2 + sω + ω2
( )
3dB 3dB 3dB

 (
gdzie p1 = p3* = ω3dB  −1 + j 3 / 2  ,
 ) p2 = −ω3dB

8
po uwzględnieniu ω3dB = 2: Ha ( s ) =
( s + 2)( s 2
+ 2s + 4 )
( 1 + z −1 )
3
 2 z −1 ( z + 1) 3
filtr cyfrowy: Hc ( z) = Ha  = =
(
 T z + 1  2 z 3z 2 + 1
) 2 ( 3 + z −2 )
( 1 + e − jΩ )
3

charakterystykę częstotliwościową filtra cyfrowego: Hc (e ) =


jΩ

2 ( 3 + e −2 j Ω )
Projektowanie rekursywnych filtrów cyfrowych 297

Tab. 11-1. Kod źródłowy programu transformacji biliniowej, przekształcającej transmitancję Ha(s) filtra
analogowego na transmitancję Hc(z) filtra cyfrowego: Ha(s) → Hc(z), zastosowanie podstawienia s =
= 2fpr(z−1)/(z+1) (transformacja zer „z” i biegunów „p” transmitancji Ha(s) na zera „zz” i bieguny „pp”
transmitancji Hc(z)). W programie fpr oznacza częstotliwość próbkowania, a wzm − wzmocnienie

% Ćwiczenie: Transformacja biliniowa

function [zz,pp,wzm] = bilinearTZ(z,p,wzm,fpr)

% Bilinear TZ
pp = []; zz = [];
for k=1:length(z)
zz = [ zz (2*fpr+z(k))/(2*fpr-z(k)) ];
wzm = wzm*(2*fpr-z(k));
end
for k=1:length(p)
pp = [ pp (2*fpr+p(k))/(2*fpr-p(k)) ];
wzm = wzm/(2*fpr-p(k));
end
if (length(p)>length(z)) zz = [ zz -1*ones(1,length(p)-length(z)) ]; end
if (length(p)<length(z)) pp = [ pp -1*ones(1,length(z)-length(p)) ]; end

11.6. Przykłady projektowania filtrów w języku Matlab


Obecnie przechodzimy do przedstawienia przykładów filtrów, zaprojektowanych w środowis-
ku Matlab. Do tego celu wykorzystano programy zaprezentowane w rozdziale 6 w tabelach
6-2, 6-3 i 6-4, służące do projektowania analogowych filtrów Butterwortha oraz Czebyszewa
I i II typu. Tak dużo uwagi poświęciliśmy wtedy metodologii projektowania filtrów analogo-
wych, gdyż wiedzieliśmy, że będzie ją można potem także z sukcesem zastosować w przy-
padku filtrów cyfrowych. Do programów tych dodano tylko linie kodu, dokonujące:
1) na początku transformacji wymagań z pulsacji cyfrowych Ω na analogowe ω zgodnie
z (11.23a),
2) na końcu transformacji zer i biegunów zaprojektowanego filtra analogowego Ha(s) na ze-
ra i bieguny wynikowego filtra cyfrowego Hc(z) z wykorzystaniem (11.22).
W tabeli 11-2 przedstawiono w całości program, służący do projektowania cyfrowych filtrów
Butterwortha na podstawie analogowych filtrów Butterwortha. Stanowi on modyfikację pro-
gramu z tabeli 6-2. Linie dodane są zaznaczone tłustym drukiem. Aby otrzymać programy do
projektowania cyfrowych filtrów Czebyszewa należy w sposób identyczny uzupełnić programy
z tabel 6-3 i 6-4.
Na rysunku 11.5 jest przedstawiony wynik zastosowania programu z tabeli 11-2 do zaproje-
ktowania pasmowozaporowego, cyfrowego filtra Butterwortha, spełniającego następujące wy-
magania projektowe:
fpass1 = 200 Hz, fstop1 = 300 Hz, fstop2 = 700 Hz, fpass2 = 800 Hz, fpr = 2000 Hz
Apass = 3 dB , Astop = 60 dB
Po przeliczeniu częstotliwości „cyfrowych” na „analogowe” uzyskano (11.23a):
fpass1 = 207 Hz, fstop1 = 324 Hz, fstop2 = 1249 Hz, fpass2 = 1959 Hz
Transmitancja HLP(n)(s) dolnoprzepustowego, unormowanego prototypu analogowego, spełnia-
jąca powyższe wymagania, miała N = 11 biegunów leżących na okręgu jednostkowym o środku
w początku układu współrzędnych. Po transformacji „częstotliwości” HLP(n)(s) (patrz pod-
298 Projektowanie rekursywnych filtrów cyfrowych

rozdział 6.2), uzyskano transmitancję filtra pasmowozaporowego HBS(s) o rozkładzie zer i bie-
gunów oraz charakterystyce amplitudowo-częstotliwościowej przedstawionych na rysunku
11.5a i 11.5b. Jak widać filtr analogowy spełnia postawione wymagania „analogowe”, ozna-
czone na rysunku za pomocą symbolu „o”. Oczywiście graniczne częstotliwości „analogowe”
są różne od zadanych, granicznych częstotliwości „cyfrowych”. Jednak po dokonaniu podsta-
wienia (11.22) w HBS(s) otrzymujemy satysfakcjonujący nas filtr cyfrowy o transmitancji
HBS(z). Ma on rozkład zer i biegunów oraz charakterystykę amplitudowo-częstotliwościową
przedstawioną na rysunkach 11.5c i 11.5d. Jak widać trzeba rzeczywiście zaprojektować inny
filtr analogowy, aby otrzymać w wyniku transformacji biliniowej (11.22) zadany przez nas filtr
cyfrowy.
Z kolei na rysunku 11.6 są przedstawione w sposób bardziej kompleksowy przykłady zapro-
jektowanych cyfrowych filtrów Butterwortha różnych typów: dolnoprzepustowego, górno-
przepustowego, pasmowoprzepustowego i pasmowozaporowego. Dla każdego filtra przedsta-
wiono: 1) rozkład zer i biegunów jego transmitancji, 2) charakterystykę amplitudowo-często-
tliwościową, 3) charakterystykę fazowo-częstotliwościową oraz 4) odpowiedź impulsową. Na
charakterystyce amplitudowo-częstotliwościowej za pomocą symbolu „o” zaznaczono zadane
wymagania projektowe: Apass = 3 dB i Astop = 60 dB dla odpowiednich częstotliwości. Jak
widać wszystkie filtry spełniają stawiane warunki. Obserwowane skoki na charakterystykach
fazowo-częstotliwościowych występują dla częstotliwości pasma zaporowego, dla których filtr
bardzo silnie tłumi sygnał wejściowy (bardzo mała wartość |H(ejΩ)|) i są spowodowane ograni-
czoną precyzją obliczeń komputerowych. Należy także zwrócić uwagę na różne kształty odpo-
wiedzi impulsowych poszczególnych filtrów oraz względnie długi czas ich trwania (zaniku do
„zera”).

a) 2000 b) 0
1500
20log10|H(jω)| [dB]

-20
1000
Imag(s/2π)

500 -40
0 -60
-500 -80
-1000
-1500 -100
-2000 -120
-10000 -5000 0 0 1000 2000 3000
Real(s) f [Hz]

c) 1 d) 0
20log10|H(ej2πf/fpr)| [dB]

-20
0.5
-40
Imag(z)

0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]
Rys. 11.5. Przykład zaprojektowania pasmowozaporowego filtra cyfrowego na podstawie analogowego
filtra Butterwortha: a) zera „z” i bieguny „³” transmitancji filtra analogowego H(s), b) charakterystyka
amplitudowo-częstotliwościowa filtra analogowego H(jω), c) zera i bieguny transmitancji filtra cyfrowego
H(z), d) charakterystyka amplitudowo-częstotliwościowa filtra cyfrowegoH(ejΩ), Ω = 2πf / fpr
Projektowanie rekursywnych filtrów cyfrowych 299

a) filtr dolnoprzepustowy, N = 16

1 0

20log10|H(ej2πf/fpr)| [dB]
-20
0.5
-40
Imag(z) 0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

0.2 0
0.15 -5

kąt H(ej2πf/fpr)
0.1
-10
h(n)

0.05
-15
0
-0.05 -20
-0.1 -25
0 50 100 150 0 200 400 600 800 1000
n f [Hz]

b) filtr górnoprzepustowy, N = 16

1 0
20log10|H(ej2πf/fpr)| [dB]

-20
0.5
-40
Imag(z)

0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

0.2 0

0.1 -5
kąt H(ej2πf/fpr)

-10
h(n)

0
-15
-0.1 -20
-0.2 -25
0 50 100 150 0 200 400 600 800 1000
n f [Hz]

Rys. 11.6. Przykłady cyfrowych filtrów Butterwortha. Na charakterystyce amplitudowo-częstotliwościowej


za pomocą symboli „o” zaznaczono wymagania projektowe, które były stawiane filtrowi: Apass = 3 dB
i Astop = 60 dB dla wybranych częstotliwości. Symbol „z” oznacza zero transmitancji, a „³” − biegun
transmitancji. Wszystkie zera są N-krotne
300 Projektowanie rekursywnych filtrów cyfrowych

c) filtr pasmowoprzepustowy, N = 9

1 0

20log10|H(ej2πf/fpr)| [dB]
-20
0.5
-40
Imag(z)
0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

0.2 5
0
0.1

kąt H(ej2πf/fpr)
-5
-10
h(n)

0
-15
-0.1 -20
-25
-0.2 -30
0 50 100 150 0 200 400 600 800 1000
n f [Hz]

d) filtr pasmowozaporowy, N = 11

1 0
20log10|H(ej2πf/fpr)| [dB]

-20
0.5
-40
Imag(z)

0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

0.4 0
0.3 -5
kąt H(ej2πf/fpr)

0.2 -10
h(n)

0.1 -15
0 -20
-0.1 -25
-0.2 -30
0 50 100 150 0 200 400 600 800 1000
n f [Hz]

Rys. 11.6. (cd.) Przykłady cyfrowych filtrów Butterwortha


Projektowanie rekursywnych filtrów cyfrowych 301

a) filtr dolnoprzepustowy N = 8
1 0

20log10|H(ej2πf/fpr)| [dB]
-20
0.5
-40
Imag(z) 0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

b) filtr górnoprzepustowy N = 8
1 0

20log10|H(ej2πf/fpr)| [dB]
-20
0.5
-40
Imag(z)

0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

c) filtr pasmowoprzepustowy N = 6
1 0
20log10|H(ej2πf/fpr)| [dB]

-20
0.5
-40
Imag(z)

0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

d) filtr pasmowozaporowy N = 7
1 0
20log10|H(ej2πf/fpr)| [dB]

-20
0.5
-40
Imag(z)

0 -60
-80
-0.5
-100
-1 -120
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

Rys. 11.7. Przykłady cyfrowych filtrów Czebyszewa typu I (oscylacje w paśmie przepustowym). Na cha-
rakterystyce amplitudowo-częstotliwościowej za pomocą symboli „o” zaznaczono wymagania projektowe,
które były stawiane filtrowi: Apass = 3 dB i Astop = 60 dB dla wybranych częstotliwości. Symbol „z” oznacza
zero transmitancji, a „³” − biegun transmitancji. Wszystkie zera są N-krotne
302 Projektowanie rekursywnych filtrów cyfrowych

a) filtr dolnoprzepustowy N = 8
1 0

20log10|H(ej2πf/fpr)| [dB]
0.5 -20

Imag(z)
-40
0
-60
-0.5 -80
-1 -100
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

b) filtr górnoprzepustowy N = 8
1 0

20log10|H(ej2πf/fpr)| [dB]
0.5 -20
Imag(z)

-40
0
-60
-0.5 -80
-1 -100
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

c) filtr pasmowoprzepustowy N = 6
1 0
20log10|H(ej2πf/fpr)| [dB]

0.5 -20
Imag(z)

-40
0
-60
-0.5 -80
-1 -100
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

d) filtr pasmowozaporowy N = 7
1 0
20log10|H(ej2πf/fpr)| [dB]

0.5 -20
Imag(z)

-40
0
-60
-0.5 -80
-1 -100
-1 -0.5 0 0.5 1 0 200 400 600 800 1000
Real(z) f [Hz]

Rys. 11.8. Przykłady cyfrowych filtrów Czebyszewa typu II (oscylacje w paśmie zaporowym). Na chara-
kterystyce amplitudowo-częstotliwościowej za pomocą symboli „o” zaznaczono wymagania projektowe,
które były stawiane filtrowi: Apass = 3 dB i Astop = 60 dB dla wybranych częstotliwości. Symbol „z” oznacza
zero transmitancji, a „³” − biegun transmitancji. Wszystkie zera są jednokrotne
Projektowanie rekursywnych filtrów cyfrowych 303

0 0.2
-5 0.1

kąt H(ej2πf/fpr)
-10

h(n)
0
-15
-20 -0.1

-25 -0.2
0 200 400 600 800 1000 0 50 100 150
f [Hz] n

Rys. 11.9. Odpowiedź impulsowa oraz charakterystyka fazowo-częstotliwościowa pasmowoprzepustowego


filtra Czebyszewa typu I z rysunku 11.7c. Należy je porównać z odpowiednimi charakterystykami filtra
Butterwortha z rysunku 11.6c

Na rysunkach 11.7 i 11.8 przedstawiono rozkład zer i biegunów oraz charakterystykę ampli-
tudowo-częstotliwościową transmitancji filtrów cyfrowych Czebyszewa typu I i typu II, speł-
niających identyczne wymagania projektowe jak przedstawione wcześniej filtry Butterwortha.
Cóż wynika z tych rysunków? P o p i e r ws z e , rząd tych filtrów jest o wiele niższy niż filtrów
Butterwortha, czyli ich złożoność obliczeniowa jest mniejsza. W odróżnieniu od filtrów
Butterwortha charakterystyki amplitudowo-częstotliwościowe filtrów Czebyszewa mają jednak
zafalowania: typu I w paśmie przepustowym, a typu II w paśmie zaporowym. W związku
z tym można wybrać albo „oscylacyjny” kształt charakterystyki w paśmie przepustowym filtra
ale za to bardzo duże tłumienie w paśmie zaporowym (filtr Czebyszewa typu I), albo od-
wrotnie, „oscylacyjny” kształt charakterystyki i małe tłumienie w paśmie zaporowym ale za to
liniowość przetwarzania w paśmie przepustowym (filtr Czebyszewa typu II). W przypadku
filtra typu II oscylacje w paśmie zaporowym mogą być do zaakceptowania w wielu zastoso-
waniach, gdyż występują w zakresie częstotliwości, których filtr nie „przenosi”. Nieliniowość
charakterystyki filtra II typu w paśmie przepustowym jest związana wyłącznie z jej „opada-
niem” podczas zbliżania się do częstotliwości „granicznych”. P o d r u g i e , rozkład zer i bie-
gunów transmitancji filtrów Czebyszewa typu I jest powtórzeniem filozofii znanej z filtrów
Butterwortha: na okręgu jednostkowym w środku każdego pasma zaporowego występuje tylko
jedno zero wielokrotne, bieguny zaś tak jak poprzednio leżą wewnątrz tego okręgu na łukach
„elips”, znajdujących się w sąsiedztwie pasma przepustowego. Jednak teraz łuki te przylegają
do okręgu jednostkowego (są „wklęsłe”). Z kolei bieguny filtrów Czebyszewa typu II leżą na
łukach „wypukłych” tak jak w przypadku filtrów Butterwortha, ale zera nie są wielokrotne. Są
one rozłożone nierównomiernie na okręgu jednostkowym, coraz rzadziej wraz z oddalaniem
się od częstotliwości granicznych pasma przepustowego. Rozkład zer i biegunów z rysunku
11.8c przypomina nasz intuicyjny projekt filtra pasmowoprzepustowego z rysunku 10.7, wyko-
nany metodą zer i biegunów.
Aby nie zanudzać Czytelnika nie przedstawiono dla cyfrowych filtrów Czebyszewa ich chara-
kterystyk fazowo-częstotliwościowych oraz ich odpowiedzi impulsowych. Należy jednak nad-
mienić, że charakterystyki te są o wiele bardziej nieliniowe, odpowiedzi impulsowe zaś zani-
kają do zera o wiele dłużej niż w przypadku filtrów Butterwortha. Potwierdza to regułę, że im
bardziej jest stroma charakterystyka amplitudowo-częstotliwościowa filtra rekursywnego, tym
bardziej jest nieliniowa jego charakterystyka fazowa i tym dłużej trwają występujące w nim
stany przejściowe. Nieprzedstawiony w niniejszym rozdziale cyfrowy filtr eliptyczny, mający
oscylacje zarówno w paśmie przejściowym, jak i zaporowym, ale za to charakteryzujący się
najkrótszym pasmem przejściowym, także potwierdza powyższą zasadę. W celach poglądo-
wych na rysunku 11.9 zaprezentowano odpowiedź impulsową oraz charakterystykę fazowo-
304 Projektowanie rekursywnych filtrów cyfrowych

-częstotliwościową pasmowoprzepustowego filtra Czebyszewa typu I z rysunku 11.7c. Nale-


ży je porównać z odpowiednimi charakterystykami filtra Butterwortha z rysunku 11.6c.

11.7. Przykład ćwiczenia komputerowego


W tabeli 11-2 przedstawiono program napisany w języku Matlab, za pomocą którego wygene-
rowano dane do rysunków 11.5 i 11.6. Służy on do projektowania cyfrowych filtrów Butter-
wortha. Program ten stanowi rozszerzenie programu z tabeli 6-2, za pomocą którego projektuje
się analogowe filtry Butterwortha. Linie dodane do wersji analogowej są zaznaczone tłustym
drukiem. Czytelnikowi pozostawiamy osobistą analizę tego programu oraz jego zastosowanie.
Sugerujemy także stworzenie programów do projektowania cyfrowych filtrów Czebyszewa
typu I i II na podstawie programów z tabel 6-3 i 6-4.
Przedstawiony program nie należy do najkrótszych, ale ze względu na znaczenie rekursywnych
filtrów cyfrowych oraz na fakt, że jest to jedyny przykład programu komputerowego w niniej-
szym rozdziale, zamieszczamy go bez skrótów, to znaczy z uwzględnieniem generacji wszyst-
kich rysunków pośrednich, ilustrujących kolejne etapy procesu projektowania.

Tab. 11-2. Program w języku Matlab, służący do zaprojektowania transmitancji cyfrowych filtrów LP, HP,
BP i BS Butterwortha na podstawie transmitancji analogowych filtrów Butterwortha

% Ćwiczenie: Projektowanie cyfrowych filtrów Butterwortha (LP, HP, BP i BS)

clear all; subplot(111);

% Podaj wymagania projektowe


typ = 1; % rodzaj filtra: 1 = LowPass, 2 = HighPass, 3 = BandPass, 4 = BandStop
apass = 3; % nieliniowość pasma przepustowego w dB ("zwis")
astop = 60; % tłumienie w paśmie zaporowym
fpr = 2000; % częstotliwość próbkowania
fmx = 1000; % maksymalna częstotliwość charakterystyki na rysunku

% Podaj częstotliwości graniczne


if (typ==1) % FILTR DOLNOPRZEPUSTOWY
fpass = 200; % częstotliwość pasma przepustowego odpowiadająca Apass
fstop = 300; % częstotliwość pasma zaporowego odpowiadająca Astop
fpass = 2*fpr*tan(pi*fpass/fpr)/(2*pi); % f cyfrowe --> f analogowe
fstop = 2*fpr*tan(pi*fstop/fpr)/(2*pi); %
ws = fstop/fpass; % transformacja częstotliwości: s=s'/w0, w0=2*pi*fpass
end
if (typ==2) % FILTR GÓRNOPRZEPUSTOWY
fstop = 700; % częstotliwość pasma przepustowego odpowiadająca Astop
fpass = 800; % częstotliwość pasma zaporowego odpowiadająca Apass
fpass = 2*fpr*tan(pi*fpass/fpr)/(2*pi); % f cyfrowe --> f analogowe
fstop = 2*fpr*tan(pi*fstop/fpr)/(2*pi); %
ws = fpass/fstop; % transformacja częstotliwości: s=w0/s', w0=2*pi*fpass
end
if (typ==3) % FILTR PASMOWOPRZEPUSTOWY
fs1 = 300; % dolna częstotliwość stop
fp1 = 400; % dolna częstotliwość pass
fp2 = 600; % górna częstotliwość pass
fs2 = 700; % górna częstotliwość stop
fp1 = 2*fpr*tan(pi*fp1/fpr)/(2*pi); % f cyfrowe --> f analogowe
fp2 = 2*fpr*tan(pi*fp2/fpr)/(2*pi); %
fs1 = 2*fpr*tan(pi*fs1/fpr)/(2*pi); %
fs2 = 2*fpr*tan(pi*fs2/fpr)/(2*pi); %
Projektowanie rekursywnych filtrów cyfrowych 305

ws1t = (fs1^2 - fp1*fp2) / (fs1*(fp2-fp1)); % transformacja częstotliwości


ws2t = (fs2^2 - fp1*fp2) / (fs2*(fp2-fp1)); % transformacja częstotliwości
ws = min( abs(ws1t), abs(ws2t) );
end
if (typ==4) % FILTR PASMOWOZAPOROWY
fp1 = 200; % dolna częstotliwość filtra pasmowego
fs1 = 300; % dolna częstotliwość filtra pasmowego
fs2 = 700; % górna częstotliwość filtra pasmowego
fp2 = 800; % górna częstotliwość filtra pasmowego
fp1 = 2*fpr*tan(pi*fp1/fpr)/(2*pi); % f cyfrowe --> f analogowe
fp2 = 2*fpr*tan(pi*fp2/fpr)/(2*pi); %
fs1 = 2*fpr*tan(pi*fs1/fpr)/(2*pi); %
fs2 = 2*fpr*tan(pi*fs2/fpr)/(2*pi); %
ws1t = (fs1*(fp2-fp1)) / (fs1^2 - fp1*fp2); % transformacja częstotliwości
ws2t = (fs2*(fp2-fp1)) / (fs2^2 - fp1*fp2); % transformacja częstotliwości
ws = min( abs(ws1t), abs(ws2t) );
end

% Przelicz decybele na wartość bezwzględną, np. 40 dB = 0.01


wzm_p = 10^(-apass/20);
wzm_s = 10^(-astop/20);

% Oblicz parametry pomocnicze


if( (typ==1) | (typ==2) )
vp = 2*pi*fpass;
vs = 2*pi*fstop;
f_ps = [fpass, fstop]; wzm_ps = [wzm_p, wzm_s]; wzmdB_ps = [-apass, -astop];
end
if( (typ==3) | (typ==4) )
vp = 2*pi*[ fp1 fp2 ];
vs = 2*pi*[ fs1 fs2 ];
vc = 2*pi*sqrt(fp1*fp2); % pulsacja środka
dv = 2*pi*(fp2-fp1); % szerokość filtra wokół vc
f_ps = [fp1,fp2,fs1,fs2];
wzm_ps = [wzm_p, wzm_p, wzm_s, wzm_s];
wzmdB_ps = [-apass, -apass, -astop, -astop];
end

% Oblicz parametry filtra: N i w0


% MATLAB: [N,w0] = buttord( 2*pi*fpass, 2*pi*fstop, -apass, -astop, 's' );
wp = 1;
N = ceil( log10( (10^(astop/10)-1) / (10^(apass/10)-1) ) / (2*log10(ws/wp)) )
w0 = ws / (10^(astop/10)-1)^(1/(2*N))
pause

% Oblicz bieguny transmitancji dolnoprzepustowego filtra prototypowego i jej współczynniki


% MATLAB: [z,p,k] = buttap(N); [b,a] = zp2tf(z,p,k);
dfi0 = (2*pi)/(2*N); % kąt „kawałka tortu”
fi = pi/2 + dfi0/2 + (0 : N-1)*dfi0; % kąty biegunów
p = w0*exp(j*fi); % bieguny
z = []; % zera
wzm = prod(-p); % wzmocnienie
a = poly(p); % bieguny --> wsp wielomianu mianownika A(z)
b = wzm; % wielomian licznika B(z)
z, p, b, a, pause
plot( real(p), imag(p), 'x' ); grid; title('Położenie biegunów');
xlabel('real'); ylabel('imag'); pause

% Porównaj z funkcjami Matlaba


[NN,ww0] = buttord( vp, vs, apass, astop, 's' );
blad_N = N-NN
pause

% Oblicz charakterystykę częstotliwościową prototypu H(w)=B(w)/A(w)


w = 0 : 0.005 : 2; % zakres pulsacji unormowanej; pulsacja granicy pasma przepustowego = 1
306 Projektowanie rekursywnych filtrów cyfrowych

H = freqs(b,a,w); % alternatywa: H = polyval( b,j*w)./polyval(a,j*w);


plot(w,abs(H)); grid; title('Moduł prototypu LPass'); xlabel('pulsacja [rad/sek]');
pause
plot(w,20*log10(abs(H))); grid; title('Moduł prototypu LowPass w dB');
xlabel('pulsacja [rad/sek]'); ylabel('dB'); pause

% Transformata częstotliwości filtra analogowego: prototyp unormowany --> wynikowy filtr


if (typ==1) [z,p,wzm] = lp2lpTZ(z,p,wzm,vp); end % LowPass to LowPass: s=s/w0
if (typ==2) [z,p,wzm] = lp2hpTZ(z,p,wzm,vp); end % LowPass to HighPass: s=w0/s
if (typ==3) [z,p,wzm] = lp2bpTZ(z,p,wzm,vc,dv); end % LowPass to BandPass: s=(s^2+wc^2)/(dw*s)
if (typ==4) [z,p,wzm] = lp2bsTZ(z,p,wzm,vc,dv); end % LowPass to BandStop: s=(dw*s)/(s^2+wc^2)
b=wzm*poly(z); a=poly(p);

% Pokaż zera i bieguny po transformacji częstotliwości


plot( real(z), imag(z), 'o',real(p),imag(p),'x' ); grid;
title('Położenie biegunów'); xlabel('real'); ylabel('imag'); pause
p, z, pause
a, b, pause
printsys(b,a,'s'); pause

% Końcowa charakterystyka częstotliwościowa filtra analogowego


NF = 1000; % ile punktów
fmin = 0; % dolna częstotliwość
fmax = 5000; % górna częstotliwość
f = fmin : (fmax-fmin)/(NF-1) : fmax; % wyznaczane częstotliwości
w = 2*pi*f; % wyznaczane pulsacje
H = freqs(b,a,w); % alternatywa: H = polyval( b,j*w)./polyval(a,j*w);
plot( f,abs(H), f_ps,wzm_ps,'ro');
grid; title('Moduł'); xlabel('freq [Hz]'); pause
plot(f,20*log10(abs(H)), f_ps,wzmdB_ps,'ro'); axis([fmin,fmax,-100,20]);
grid; title('Moduł dB'); xlabel('freq [Hz]'); ylabel('dB'); pause
plot(f,unwrap(angle(H))); grid; title('FAZA'); xlabel('freq [Hz]'); ylabel('[rad]');
pause

% H(s) --> H(z) Transformacja biliniowa


[zc,pc,wzmc]=bilinearTZ(z,p,wzm,fpr)
bc=wzmc*poly(zc); ac=poly(pc);

% Pokaż zera i bieguny filtra cyfrowego


NP = 1000; fi=2*pi*(0:1:NP-1)/NP; x=sin(fi); y=cos(fi);
plot(x,y,'-k',real(zc),imag(zc),'or',real(pc),imag(pc),'xb');
title('ZERA i BIEGUNY filtra cyfrowego'); grid; pause

% Otrzymana charakterystyka częstotliwościowa


NF = 1000; fmin = 0; fmax = fmx; f = fmin : (fmax-fmin)/(NF-1) : fmax;
w = 2*pi*f/fpr; H = freqz(bc,ac,w);
Habs=abs(H); HdB=20*log10(Habs); Hfa=unwrap(angle(H));
f_ps = (fpr/pi)*atan(pi*f_ps/fpr);
plot(f,Habs,f_ps,wzm_ps,’o’); grid; title('Moduł'); xlabel('freq [Hz]'); pause
plot(f,HdB,f_ps,wzmdB_ps,'o'); grid; title('Moduł dB'); xlabel('freq [Hz]'); pause
plot(f,Hfa); grid; title('FAZA'); xlabel('freq [Hz]'); ylabel('[rad]'); pause

% Odpowiedź impulsowa (filtracja sygnału delty Kroneckera)


Nx=200; x = zeros(1,Nx); x(1)=1;
M=length(bc); N=length(ac);
ac=ac(2:N); N=N-1;
bx=zeros(1,M); by=zeros(1,N); y=[];
for n=1:Nx
bx = [ x(n) bx(1:M-1)];
y(n) = sum(bx .* bc) - sum(by .* ac);
by = [ y(n) by(1:N-1) ];
end
n=0:Nx-1; plot(n,y); grid; title('Odp impulsowa h(n)'); xlabel(‘n’); pause
12
Projektowanie nierekursywnych
filtrów cyfrowych

W tym rozdziale zapoznamy się z metodami projektowania nierekursywnych filtrów cyfro-


wych. W literaturze są one potocznie nazywane filtrami o skończonej odpowiedzi impulsowej
(ang. FIR − Finite Impulse Response). Filtry nierekursywne są filtrami bez sprzężenia zwrot-
nego (patrz rysunek 10.4b). Każda próbka sygnału wyjściowego jest w nich średnią ważoną
kilku, kilkunastu, kilkudziesięciu lub kilkuset ostatnich próbek sygnału wejściowego. Przykła-
dowo w standardzie MPEG audio stosowane filtry nierekursywne składają się z 512 współ-
czynników wagowych. Wielkimi zaletami filtrów nierekursywnych są: prostota projektowania,
stabilność (nie wzbudzanie się) oraz możliwość uzyskania liniowej charakterystyki fazowo-
-częstotliwościowej. Dzięki tej ostatniej cesze odpowiednio zaprojektowane filtry nierekursyw-
ne nie zniekształcają kształtu sygnału, co jest bardzo ważne w wielu zastosowaniach, na przy-
kład biomedycznych. Ceną jaką się płaci za „dobrodziejstwa” filtrów nierekursywnych jest ich
duża złożoność obliczeniowa w porównaniu z filtrami rekursywnymi. Co to oznacza? Aby filtr
nierekursywny miał stromą charakterystykę amplitudowo-częstotliwościową, szybko przecho-
dzącą od pasma przejściowego do zaporowego, to musi mieć dużą liczbę współczynników
wagowych − o wiele większą od liczby współczynników filtra rekursywnego (rysunek 10.4a),
spełniającego podobne wymagania odnośnie stromości zboczy. Postęp w technologii projekto-
wania i produkcji układów elektronicznych jest jednak bardzo duży i z roku na rok oferują one
coraz większe prędkości pracy, więc złożoność obliczeniowa cyfrowych filtrów nierekursyw-
nych stanowi coraz mniejsze ograniczenie ich zastosowań.
Szczególny nacisk położono w niniejszym rozdziale na dokładne przedstawienie podstaw
teoretycznych projektowania nierekursywnych filtrów cyfrowych za pomocą metody okien.
Jest to metoda prosta, ale umożliwiająca uzyskanie bardzo „dobrych” filtrów. Poświęcenie jej
większej uwagi jest w pełni uzasadnione i spowodowane chęcią „puszczenia jak ... naj-
mniejszej ... ilości pary w gwizdek”.
W ostatniej części rozdziału zapoznamy się z metodami projektowania nierekursywnych fil-
trów specjalnych: Hilberta (przesuwnik fazowy o minus 90 stopni), różniczkującego, interpo-
lującego i decymującego.
308 Projektowanie nierekursywnych filtrów cyfrowych

12.1. Wprowadzenie
Jak już wiemy cyfrowa filtracja nierekursywna jest określona następującym równaniem (10.8),
(10.10), (10.18):
∞ ∞ N −1 N −1
y(n) = ∑ h(m) x(n − m) = ∑ h(m) x(n − m) = ∑ h(m) x(n − m) = ∑ bm x(n − m) (12.1)
m = −∞ m =0 m=0 m =0

gdzie x(n) oznacza sygnał wejściowy, y(n) − sygnał wyjściowy, a h(n) to odpowiedź impulso-
wa filtra (odpowiedź na dyskretny impuls jednostkowy δ(n)), charakteryzująca jego właści-
wości częstotliwościowe. Ponieważ układ jest przyczynowy i h(n) = 0 dla n < 0, stąd dolna
granica sumy może być przesunięta do m = 0. Dodatkowo dla układów stabilnych odpowiedź
impulsowa musi mieć skończoną energię (czyli być bezwzględnie całkowalna), skąd wynika,
że powinna ona zanikać do zera dla czasu dążącego do nieskończoności. Uwzględniając aspek-
ty implementacji programowej, ograniczamy więc długość „filtra” h(n) do pierwszych N pró-
bek, numerowanych od 0 do N−1. Projektowanie filtrów cyfrowych opisanych równaniem
(12.1) sprowadza się do wyznaczenia N wartości odpowiedzi impulsowej h(n), lub jak kto
woli, współczynników bm (konwencja stosowana w programie Matlab). W dziedzinie częstotli-
wości równaniu (12.1) odpowiada zależność:

Y ( e jΩ ) = H ( e jΩ ) X ( e jΩ ) (12.2)

gdzie Y(ejΩ), H(ejΩ) i X(ejΩ) są widmami Fouriera (8.8a) sygnałów dyskretnych y(n), h(n) i x(n).
Przykładowo:

( ) ∑ x(n )e − jΩn
+∞
X e jΩ = (12.3)
n = −∞

x (n ) =
1
2π −∫π
( )
X e jΩ e jΩn dΩ (12.4)

We wzorach tych Ω oznacza pulsację unormowaną względem częstotliwości próbkowania:


f
Ω = 2π (12.5)
f pr

ponieważ −fpr/2 ≤ f ≤ fpr/2, więc −π ≤ Ω ≤ π. Współczynniki h(m), m = 0, 1, 2, ..., N−1, należy


dobrać tak, aby w zadany sposób ukształtować ich widmo częstotliwościowe H(ejΩ). Filtr
powinien przepuszczać jedne częstotliwości (H(ejΩpass) ≈ 1), a tłumić inne (H(ejΩstop) ≈ 0).
Ponieważ widmo Fouriera H(ejΩ) dla każdej pulsacji Ω reprezentuje sobą liczbę zespoloną:

H ( e jΩ ) = R( Ω) + jI (Ω) (12.6)

więc w procesie projektowania filtra h(n) tak właściwie „projektujemy” moduł i fazę H(ejΩ):

M (Ω) = H (e jΩ ) = R 2 (Ω) + I 2 (Ω) (12.7)

 I (Ω ) 
Φ (Ω) = arctg  (12.8)
 R (Ω ) 
Projektowanie nierekursywnych filtrów cyfrowych 309

5 5
4 4
3 3
2 2
M(Ω)

A(Ω)
1 1
0 0
-1 -1
-2 -2
-0.5 0 0.5 -0.5 0 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

8 8

4 4

Ψ(Ω) [rd]
Φ(Ω) [rd]

0 0

-4 -4

-8 -8
-0.5 0 0.5 -0.5 0 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.1. Charakterystyki amplitudowo-częstotliwościowe M(Ω) i A(Ω) oraz fazowo-częstotliwościowe
Φ(Ω) i Ψ(Ω) dla filtra o wagach h(0) = h(1) = h(2) = h(3) = h(4) = 1, mającego H(ejΩ) dane wzorem (12.11)

Jednak funkcja M(Ω) nie jest analityczna (m.in. nie ma ciągłej pochodnej w miejscach zero-
wych), a funkcja Φ(Ω) nie jest ciągła (ma skoki o π radianów). Problem ten rozwiązuje się
definiując funkcję A(Ω):
A(Ω) = ± M (Ω) (12.9)

w której wybrane fragmenty M(Ω) są zanegowane. Funkcja A(Ω), podobnie jak M(Ω), przyj-
muje tylko wartości rzeczywiste, jednak nie tylko dodatnie, także ujemne. Wówczas H(ejΩ)
można zapisać w następującej postaci:

H ( e jΩ ) = A(Ω) e jΨ ( Ω ) (12.10)

Na rysunku 12.1 pokazano przykładowy kształt funkcji M(Ω), Φ(Ω) oraz A(Ω), Ψ(Ω) dla filtra
dolnoprzepustowego (okna prostokątnego) o długości N = 5, mającego tylko następujące „wa-
gi” niezerowe: h(0) = h(1) = h(2) = h(3) = h(4) = 1. W rozdziale 8.4.1 wykazaliśmy, że w ta-
kim przypadku jest prawdziwa zależność (8.39a):
sin (ΩN / 2 )
( )
H e jΩ = e − jΩ ( N −1) / 2
sin(Ω / 2 )
(12.11)

Podstawową zaletą filtrów nierekursywnych, opisanych równaniem (12.1), jest łatwość uzy-
skiwania idealnej liniowej charakterystyki fazowej filtra:
Ψ (Ω) = c1 + c2 Ω (12.12)

co jak wiemy (np. z rozdziału 5.2) zapewnia takie samo opóźnienie wszystkich przenoszonych
częstotliwości, czyli nie zmienianie kształtu sygnału. W równaniu (12.12) c1 i c2 oznaczają do-
310 Projektowanie nierekursywnych filtrów cyfrowych

wolne stałe rzeczywiste. Oczywiście liniowość charakterystyki fazowo-częstotliwościowej fil-


tra jest istotna tylko w paśmie przepustowym, dlatego nawet filtry rekursywne, które mają nie-
liniową charakterystykę fazową, są czasami pod tym względem do zaakceptowania, gdyż
w paśmie przepustowym nieliniowość ta jest najmniejsza i do pominięcia.
Zostanie teraz przedstawiona metodologia projektowania filtrów nierekursywnych FIR ma-
jących tę cechę. Transformacja Fouriera H(ejΩ) odpowiedzi impulsowej h(n) na podstawie
definicji (12.3) jest równa:
N −1
H ( e jΩ ) = ∑ h(n)e − jΩn (12.13)
n=0

Można ją zapisać w następującej postaci:


N −1
H ( e j Ω ) = e − jΩ M ∑ h ( n ) e jΩ ( M − n ) = (12.14)
n =0

= e − jΩM  h(0)e jΩM + h (1)e jΩ( M −1) + ... + h ( N − 1)e jΩ( M −( N −1))  (12.15)
 
Zakładając:
N −1
M = ⇒ M − ( N − 1) = − M (12.16)
2
oraz wykorzystując symetrię (asymetrię) funkcji kosinus (sinus) możemy równanie to zapisać
jako:

H ( e jΩ ) = e − jΩM { (h(0) + h( N − 1) )cos(ΩM ) + j (h (0) − h ( N − 1) )sin(ΩM ) + (12.17)

+ (h (1) + h( N − 2) ) cos(Ω( M − 1)) + j (h(1) − h( N − 2) ) sin(Ω( M − 1)) + ...}

Teraz możemy rozważyć kilka możliwości. Filtr będzie miał liniową charakterystykę fazo-
wo-częstotliwościową tylko wtedy, kiedy wyrażenie w nawiasie {.} będzie miało tylko część
rzeczywistą lub tylko część urojoną. Aby to „spowodować” musimy założyć określoną syme-
trię odpowiedzi impulsowej h(n). Dla symetrycznej odpowiedzi impulsowej:
h (n ) = h( N − 1 − n ), n = 0, 1, 2, ..., N − 1 (12.18)

zeruje się część urojona H(ejΩ), a dla odpowiedzi asymetrycznej:


h (n ) = −h ( N − 1 − n ), n = 0, 1, 2, ..., N − 1 (12.19)

„znika” część rzeczywista. Rozważmy osobno oba przypadki dla N nieparzystego i N parzys-
tego:
I) symetryczna odpowiedź impulsowa o długości nieparzystej (N = 2L+1, M = L):

 M −1 
H (e jΩ ) = e − jΩM A(Ω ) = e − jΩM  ∑ 2h(n ) cos(Ω( M − n )) + h( M )  (12.20)
 n =0 

II) symetryczna odpowiedź impulsowa o długości parzystej (N = 2L, M = L−1/2):


 N / 2 −1 
H (e jΩ ) = e − jΩM A(Ω ) = e − jΩM  ∑ 2h(n ) cos(Ω( M − n ))  (12.21)
 n =0 
Projektowanie nierekursywnych filtrów cyfrowych 311

III) asymetryczna odpowiedź impulsowa o długości nieparzystej (N = 2L+1, M = L):

 M −1 
H (e jΩ ) = je − jΩM A(Ω) = je − jΩM  ∑ 2h( n ) sin(Ω( M − n ))  (12.22)
 n =0 

IV) asymetryczna odpowiedź impulsowa o długości parzystej (N = 2L, M = L−1/2):

 N / 2 −1 
H (e jΩ ) = je − jΩM A(Ω ) = je − jΩM  ∑ 2h(n ) sin(Ω( M − n ))  (12.23)
 n =0 

Analizując wzory (12.20)−(12.23) dochodzimy do wniosku, że niezależnie od konkretnych


wartości próbek odpowiedzi impulsowej h(n), ze względu na symetrię i asymetrię funkcji kosi-
nus i sinus, także odpowiedzi amplitudowe A(Ω) charakteryzują się określoną symetrią, zawsze
taką samą. Ich właściwości są zebrane w tabeli 12-1, natomiast przykładowe charakterystyki
amplitudowe A(Ω) są przedstawione na rysunku 12.2. W punkcie będącym środkiem asymetrii,
odpowiedź amplitudowa A(Ω) jest równa zero. Z właściwości odpowiedzi amplitudowych
A(Ω) filtrów I−IV wynika, że nie każdy z nich się nadaje do zaprojektowania dowolnego typu
filtra. Przykładowo filtry typu I i II nie nadają się do zaimplementowania filtra różniczkującego
H(Ω) = jΩ, gdyż nie są asymetryczne dla Ω = 0. Podobnie filtr typu II nie może być za-
stosowany dla filtrów górnoprzepustowych i pasmowozaporowych, ponieważ A(π) = 0. Z kolei
filtry dolnoprzepustowe i pasmowozaporowe nie mogą być typu III i IV, gdyż dla nich
A(0) = 0.
Załóżmy, że filtr ma charakterystykę częstotliwościową określoną wzorem (12.20). Jeśli na
jego wejście podamy sygnał x(n):

x (n ) = A1e j ( Ω1n+ϕ1 ) + A2 e j ( Ω2 n+ϕ 2 ) (12.24)

to na wyjściu otrzymamy sygnał y(n) (po uwzględnieniu (12.9):

y ( n ) = A1e j ( Ω1n+ϕ1 ) A(Ω1 ) e− jΩ1M + A2 e j ( Ω2 n+ϕ 2 ) A(Ω2 )e− jΩ2 M = (12.25a)

= A1 A(Ω1 )e j ( Ω1 ( n−M )+ϕ1 ) + A2 A(Ω2 ) e j ( Ω2 ( n−M )+ϕ 2 ) (12.25b)

Tab. 12-1. Własności charakterystyk amplitudowych A(Ω) dla czterech typów filtrów h(n), mających linio-
wą charakterystykę fazowo-częstotliwościową. Filtry: LP − dolnoprzepustowy, HP − górnoprzepustowy, BP
− pasmowoprzepustowy, BS − pasmowozaporowy, H − Hilberta, D − różniczkujący

Typ
Właściwości h(n)
Okres Ω punktów Ω punktów Rodzaje filtrów
(a)symetria / długość symetrii asymetrii
I h(n) = h(N−1−n), N = 2L+1 2π 0, π −− LP, HP, BP, BS

II h(n) = h(N−1−n), N = 2L 4π 0, 2π π, 3π LP, BP

III h(n) = −h(N−1−n), N = 2L+1 2π −− 0, π BP, H, D

IV h(n) = −h(N−1−n), N = 2L 4π π, 3π 0, 2π HP, BP, H, D


312 Projektowanie nierekursywnych filtrów cyfrowych

a) 0 π 2π 3π 4π 5π 6π 0 π 2π 3π 4π 5π 6π
9 9
8 8
7 7
6 6

M(Ω)
5 5

A(Ω)
4 4
3 3
2 2
1 1
0 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

b) 0 π 2π 3π 4π 5π 6π 0 π 2π 3π 4π 5π 6π
6 6
4 5
2 4

M(Ω)
A(Ω)

0 3
-2 2
-4 1
-6 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

c) 0 π 2π 3π 4π 5π 6π 0 π 2π 3π 4π 5π 6π
6 6
4 5
2 4
M(Ω)
A(Ω)

0 3
-2 2
-4 1
-6 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

d) 0 π 2π 3π 4π 5π 6π 0 π 2π 3π 4π 5π 6π
6 5
4 4
2
3
M(Ω)
A(Ω)

0
2
-2
-4 1
-6 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

Rys. 12.2. Przykładowe charakterystyki amplitudowe A(Ω) i M(Ω) = |A(Ω)| dla filtrów: a) typu I: h1(n) =
= {1, 2, 3, 2, 1}, b) typu II: h2(n) = {1, 2, 2, 1}, c) typu III: h3(n) = {1, 2, 0, −2, −1}, d) typu IV: h4(n) =
= {1, 2, −2, −1}. Dla a) i c) długość filtra N = 5 i n = 0, 1, 2, 3, 4, natomiast dla b) i d) filtr ma długość N = 4
i n = 0, 1, 2, 3. Symbolami „•” zaznaczono punkty symetrii i asymetrii
Projektowanie nierekursywnych filtrów cyfrowych 313

Jak widać liniowość charakterystyki fazowo-częstotliwościowej powoduje, że wszystkie skła-


dowe sygnału wejściowego, niezależnie od ich pulsacji (częstotliwości), są na wyjściu opóź-
nione o taką samą liczbę próbek. W naszym przypadku o M próbek. Jeśli więc A(Ω1) =
= A(Ω2) = G, to sygnał zostanie wzmocniony G razy i jego kształt nie ulegnie zmianie. W wie-
lu zastosowaniach brak deformacji kształtu jest bardzo istotny, na przykład podczas filtracji
sygnału EKG.
W kolejnych podrozdziałach przedstawiono najważniejsze metody służące do projektowania
nierekursywnych filtrów cyfrowych o skończonych odpowiedziach impulsowych.

12.2. Metoda próbkowania w dziedzinie częstotliwości


W metodzie tej użytkownik „zadaje” w dziedzinie częstotliwości „próbki” odpowiedzi często-
tliwościowej H(ejΩ) dla N pulsacji unormowanych (12.5) Ωk = k(2π/N), k = 0, 1, 2, ..., N−1,
a następnie znajduje odpowiedź impulsową h(n) wykonując odwrotną, dyskretną transformację
Fouriera z H(ejΩk):
N −1  2π 
j k  n
h(n ) = ∑ H ( k )e N  , n = 0,1, 2, ..., N − 1 (12.26)
k =0

Aby otrzymać rzeczywistą, (a)symetryczną odpowiedź impulsową h(n) dla parzystych i niepa-
rzystych wartości N, trzeba uwzględnić obserwacje poczynione w poprzednim podrozdziale
(patrz tabela 12-1), tzn. umieścić zadane wartości charakterystyki amplitudowo-częstotliwo-
ściowej tylko w części rzeczywistej H(ejΩ) (filtry typu I i II, symetryczne h(n)) lub części uro-
jonej H(ejΩ) (filtry typu III i IV, asymetryczne h(n)). Dodatkowo należy pamiętać o tym, że nie
każdy rodzaj filtra (LP, HP, BP, BS, H, D) można zaprojektować z wybranego „prototypu” ze
względu na asymetrię H(ejΩ), czyli jej zerowanie się w wybranych punktach.
Załóżmy, że wyznaczamy dyskretną transformatę Fouriera już zaprojektowanego prototypu:
N −1
1
H (e jΩ ) =
N
∑ h(n)e − jΩn (12.27)
n =0

przyjmując ciągłość zmian pulsacji unormowanej Ω w przedziale od −π do π. Wówczas pod-


stawiając (12.26) do (12.27), otrzymujemy:

N −1  N −1 j k  n 
 2π 
1
H ( e jΩ ) = ∑  ∑ X ( k )e  N   e − jΩ n (12.28)
N n =0  k =0 
 
Po zmianie kolejności sumowania i obliczeniu sumy względem zmiennej „n” otrzymujemy:
 N −1 j  2 π k  n 
1 N −1 1 N −1  1 − e − jΩ N 
H (e jΩ
)=
N
∑ X (k )  ∑ e  N  e − jΩn  = N
 ∑ X (k )  j (2 π / N ) k − jΩ 
(12.29)
k =0

n =0

k =0 1 − e e 

W powyższym równaniu wykorzystaliśmy następujące zależności prawdziwe dla szeregu geo-


metrycznego:
N −1 N −1
r p − rN 1− r N
∑ rn = 1− r
, ∑ rn = 1− r
(12.30)
n= p n=0
314 Projektowanie nierekursywnych filtrów cyfrowych

1
0.8
0.6

Sinc(Ω)
0.4
0.2
0
-0.2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Ω/2π [Hz/Hz]
Rys. 12.3. Przykładowy kształt funkcji interpolującej Sinc(Ω) = (sin(x)/sin(y))/N z równania (12.31b) dla
N = 41 i k = 20

dla których w szczególności mamy:


 2π 
 2π   2π  j  k −Ω  N
N −1 j  k  n N −1 j  k −Ω  n 1− e N  1 − e − j ΩN
∑ e  N  e − jΩ n = ∑ e N  = = (12.31a)
 2π   2π 
n =0 n =0 j  k −Ω  j  k −Ω 
1− e  N  1− e  N 

Ze wzoru (12.29) wynika, że zrealizowana odpowiedź częstotliwościowa jest interpolowana


pomiędzy prążkami H(k) za pomocą funkcji (po uwzględnieniu: 1 − ejφ = ejφ/2(e−jφ/2 − ejφ/2) =
= ejφ/2⋅2jsinφ):

 1 −e − jΩN  sin (ΩN / 2 )


 j ( 2 π / N ) k − jΩ 
= e − jΩ( N −1) / 2 e − jπk / N (12.31b)
1 − e e  sin (Ω / 2 − πk / N )

zmiennej Ω i może ona mieć między tymi punktami charakter oscylacyjny. Jest to związane
z faktem, że funkcja Sinc(Ω) = (sin(x)/sin(y))/N z równania (12.31b) ma kształt przedstawiony
na rysunku 12.3 dla N = 41, k = 20. Przykładowy kształt odpowiedzi częstotliwościowej filtra
typu I, zaprojektowanego za pomocą tej metody, jest pokazany na rysunku 12.4b. Symbolami
„o” oznaczono na nim zadane wartości prążków widma, linią zaś narysowano „ciągłą” chara-
kterystykę filtra Re(H(ejΩ)), daną wzorem (12.29). Jak widać otrzymana charakterystyka prze-
chodzi przez punkty zadane, lecz pomiędzy nimi znacznie oscyluje. Aby zmniejszyć poziom
tych oscylacji należy umieszczać („zadawać”) prążki widma także w paśmie przejściowym.
Inną metodą jest pomnożenie próbek odpowiedzi impulsowej filtra h(n), otrzymanych ze wzo-
ru (12.26), przez próbki okna czasowego w(n) o długości N: hw(n) = h(n)w(n), n = 0, 1, 2,
..., N−1. Do tego celu można użyć na przykład okna Hanninga, Hamminga lub Blackmana
(patrz rozdział 8, tabela 8-1). Iloczynowi sygnałów h(n) i w(n) w dziedzinie czasu odpowiada
splot widm H(ejΩ) i W(ejΩ) w dziedzinie częstotliwości, co prowadzi do redukcji oscylacji
w widmie Hw(ejΩ). Im widmo okna ma listki boczne na niższym poziomie, tym wynikowy filtr
odznacza się większym tłumieniem w paśmie zaporowym. Szerszy listek główny okna powo-
duje natomiast zwiększenia pasm przejściowych charakterystyki amplitudowo-częstotliwo-
ściowej filtra (zwiększenie szerokości „strefy” przejścia z pasma przepustowego do zaporowe-
go i odwrotnie).
Projektowanie nierekursywnych filtrów cyfrowych 315

Przykład

Obecnie zaprojektujemy metodą próbkowania w dziedzinie częstotliwości dolnoprzepustowy,


półpasmowy filtr typu I, tzn. o długości nieparzystej N oraz symetrycznej odpowiedzi impul-
sowej. Filtr półpasmowy jest filtrem mającym częstotliwość graniczną pasma przepustowego
fpass równą fpass/(fpr/2) = 0,5. Przyjmijmy N = 41, dla którego M = (N−1)/2 = 20. Zadane punkty
charakterystyki częstotliwościowej są zaznaczone symbolami „o” na rysunku 12.4b. Przedsta-
wiono na nim tylko pierwszych M+1 „prążków”, leżących w przedziale pulsacji unormowanej
Ω [0,π]. Pozostałe są symetryczne względem ostatniego pokazanego prążka. Odpowiedź im-
pulsowa h(n) uzyskana z wzoru (12.26) jest pokazana na rysunku 12.4a (po przesunięciu koło-
wym o M próbek w prawo). Część rzeczywista widma H(ejΩ) jest narysowana linią ciągłą na
rysunku 12.4b, moduł zaś H(ejΩ) jest przedstawiony w decybelach na rysunku 12.4c. Jak widać

a) 0.6 d) 0.6

0.4 0.4

hw(n)
h(n)

0.2 0.2

0 0

-0.2 -0.2
0 10 20 30 40 0 10 20 30 40
n n

b) 1.2 e) 1.2
1 1
0.8 0.8
Re(Hw(ejΩ))
Re(H(ejΩ))

0.6 0.6
0.4 0.4
0.2 0.2
0 0
-0.2 -0.2
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

c) 20 f) 20
0 0
|Hw(ejΩ)| [dΒ]
|H(ejΩ)| [dΒ]

-20 -20
-40 -40
-60 -60
-80 -80
-100 -100
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.4. Ilustracja projektowania nierekursywnego filtra cyfrowego I typu metodą próbkowania w dzie-
dzinie częstotliwości (długość filtra N = 41): a), b), c) zastosowanie okna prostokątnego, d), e), f) zasto-
sowanie okna Blackmana. Kolejno w pionie: odpowiedź impulsowa filtra oraz jej widmo Fouriera w skali
liniowej oraz decybelowej. Zadane punkty charakterystyki częstotliwościowej są zaznaczone na rysun-
kach b) i e) symbolami „o”
316 Projektowanie nierekursywnych filtrów cyfrowych

charakterystyka spełnia wymagania projektowe w zadanych punktach charakterystyki często-


tliwościowej, ale ma charakter oscylacyjny. Aby zmniejszyć te oscylacje oraz zwiększyć tłu-
mienie filtra w paśmie zaporowym wymnożono odpowiedź impulsową h(n) z rysunku 12.4a
z oknem Blackmana w(n) o takiej samej długości N = 41. W wyniku tego otrzymano odpo-
wiedź impulsową hw(n) przedstawioną na rysunku 12.4d. Charakterystyka amplitudowo-czę-
stotliwościowa otrzymanego w ten sposób filtra jest przedstawiona na rysunkach 12.4e i 12.4f.
Jak widać jedyną wadą zastosowania okna Blackmana jest rozszerzenie pasma przejściowego
filtra (charakterystyka nie przechodzi już przez wszystkie zadane punkty, zwłaszcza w okolicy
pasma przejściowego).

Ćwiczenie komputerowe

Podane wyniki uzyskano za pomocą programu komputerowego, przedstawionego w tabeli


12-2. Może on posłużyć Czytelnikowi do dalszych samodzielnych eksperymentów. Ponieważ
są w nim projektowane filtry typu I i III o długości nieparzystej N = 2M+1 (patrz tabela 12-1),
interesujące jest dodanie do niego możliwości projektowania także filtrów typu II i IV o dłu-
gości parzystej N = 2M. Jako ćwiczenie pozostawiamy Czytelnikowi zdefiniowanie w progra-
mie wektorów Ar i Ai dla filtrów typu II i IV. Należy w tym przypadku uwzględnić wzory
(12.21) i (12.23) oraz odpowiednią symetrię funkcji A(Ω), przedstawionych na rysunkach
12.2b i 12.2d.

Tab. 12-2. Przykładowy program komputerowy

% Ćwiczenie: Projektowanie nierekursywnych filtrów cyfrowych metodą próbkowania w dziedzinie


% częstotliwości

clear all; subplot(111);

N = 41; % długość filtra


typ = 1; % typ filtra: 1 (LP) lub 3 (BP)
okno = 0; % 0=bez okna Blackmana, 1=z oknem Blackmana
if (typ==1 | typ==3)
M=(N-1)/2; M2=M/2; M4=M/4;
else
M=N/2;
end

Z2 = zeros(1,M2); J2=ones(1,M2);
Z4 = zeros(1,M4); J4=ones(1,M4);
if (typ==1) % FILTR LP TYPU 1
Ar = [ 1 J2 Z2 Z2 J2 ]; % zadane punkty: część rzeczywista
Ai = zeros(1,N); % zadane punkty: część urojona
end
if (typ==3) % FILTR BP TYPU 3
Ar = zeros(1,N); % zadane punkty: część rzeczywista
Ai = [ 0 Z4 J2 Z4 Z4 -J2 Z4 ]; % zadane punkty: część urojona
end
A = Ar + j*Ai;

n = 0 : N-1; f = n/N; h = zeros(1,N);


for k = 0 : N-1 % użycie (n-M) zamiast n w równaniu (12.26)
h = h + A(k+1)*exp(j*2*pi*k/N*(n-M)); % powoduje przesunięcie kołowe odpowiedzi
end % impulsowej h(n) o M próbek w prawo
h=real(h/N);
if (okno==1) h=h.*blackman(N)'; end
stem(n,h); title('h(n)'); pause
Projektowanie nierekursywnych filtrów cyfrowych 317

% H = freqz(h,1,wn); H = H .* exp(j*wn*M); % to samo co niżej, tylko funkcją Matlaba


NF = 500; k=0:NF-1; fn=k/NF; wn=2*pi*fn;
for k=0:NF-1
H(k+1)=exp(-j*2*pi*k/NF*(n-M)) * h';
end

if (typ==1 | typ==2) Ax = Ar; Hx=real(H); end % dla filtra typu I i II


if (typ==3 | typ==4) Ax = Ai; Hx=imag(H); end % dla filtra typu III i IV
plot(f,Ax,'ob',fn,Hx); grid; title('real(H) lub imag(H)'); pause
plot(fn,20*log10(abs(H))); grid; title('abs(H) w dB'); pause

12.3. Metoda optymalizacji średniokwadratowej


Popatrzymy teraz na problem projektowania nierekursywnych filtrów cyfrowych o liniowej
charakterystyce fazowo-częstotliwościowej jak na problem optymalizacji (aproksymacji) śre-
dniokwadratowej: chcemy znaleźć takie „wagi” filtra h(n), aby jego odpowiedź częstotli-
wościowa H(ejΩ) jak najlepiej aproksymowała („przybliżała”) charakterystykę zadaną Hp(ejΩ)
w L wybranych punktach Ωk:
L −1 2
E= ∑ H ( e jΩ k ) − H p ( e jΩ k ) (12.32)
k =0

Dla dyskutowanych wyżej filtrów typu I−IV równanie (12.32) można zapisać jako:
L −1 2
E= ∑ A(Ωk ) − Ap (Ω k ) (12.33)
k =0

gdyż ich odpowiedź częstotliwościowa H(ejΩ) jest albo w całości rzeczywista, albo w całości
urojona. W najprostszym przypadku zakłada się liniowe „próbkowanie” pulsacji, tzn.:

Ωk = k , k = 0, 1, 2, ..., L − 1 (12.34)
L
Z twierdzenia Parsevala (zachowanie energii w dziedzinie transformaty Fouriera) wynika wów-
czas, że minimalizacja wyrażeń (12.32), (12.33) jest równoważna minimalizacji wyrażenia:
( L−1) / 2 2
E= ∑ h(n ) − h p (n ) (12.35)
n =−( L−1) / 2

gdzie h(n) i hp(n) są odpowiedziami impulsowymi filtrów, mających odpowiedzi częstotli-


wościowe H(ejΩ) i Hp(ejΩ). Oczywiście błąd aproksymacji jest najmniejszy, kiedy H(ejΩ) =
= Hp(ejΩ) w wybranych prążkach widma, a jest to spełnione dla h(n) = hp(n), czyli poszukiwa-
ną, „optymalną” odpowiedzią impulsową jest wynik odwrotnej dyskretnej transformacji Fou-
riera z Hp(ejΩ). Otrzymujemy więc wynik identyczny jak w poprzednim rozdziale.
Jeśli jednak wymagania w dziedzinie częstotliwości specyfikujemy w L punktach, a poszukuje-
my „optymalnej” odpowiedzi N-punktowej, to sytuacja się zmienia. Przykładowo dla N = 2M +
+ 1 sumę (12.35) możemy rozbić na dwie części:
M 2 ( L −1) / 2 2
E= ∑ h(n ) − h p (n ) + 2 ∑ h p (n) (12.36)
n =− M n = M +1
318 Projektowanie nierekursywnych filtrów cyfrowych

E osiąga minimum, kiedy pierwszy składnik jest jak najmniejszy, tzn. kiedy za „zaprojekto-
waną” odpowiedź impulsową h(n) przyjmujemy próbki odpowiedzi hp(n) o indeksach od −M
do M, resztę zaniedbując.
Kiedy rozpatrujemy przypadek nierównomiernego próbkowania pulsacji Ω, metodologia pro-
jektowania jest inna. Wówczas stosujemy wzory (12.20)−(12.23), w których pulsacja Ω jest
dowolna, podstawiamy do nich wybrane wartości Ωk, k = 0, 1, 2, ..., L−1, oraz zadajemy war-
tości A(Ωk). Otrzymujemy w ten sposób układ L równań z M lub M+1 niewiadomymi (liczba
współczynników filtra, które są do wyznaczenia):
Fh ≅ a p (12.37)

Przykładowo dla filtrów typu I, F jest macierzą wartości funkcji cosinus o wymiarach
L×(M+1), h jest (M+1)-elementowym wektorem próbek h(n), a zaś jest L-elementowym we-
ktorem zadanych wartości A(Ωk). Błąd aproksymacji zadanej charakterystyki częstotliwościo-
wej w zapisie macierzowym ma następującą postać:
Fh = a p + e (12.38)

Mnożąc obustronnie powyższe równanie przez macierz FT (transponowane F), otrzymujemy:

FT Fh = FT a p + FT e (12.39)

Aby błąd był najmniejszy, wektor błędu powinien być ortogonalny do wierszy macierzy F.
Wtedy FTe jest równe zero i „optymalny” wektor h jest rozwiązaniem równania:

FT Fh = FT a p (12.40)
skąd
( )−1 FT a p = pinv(F)a p
h = FT F (12.41)

gdzie funkcja pinv(F) wyznacza macierz pseudoodwrotną dla macierz F.


Opcjonalnie zamiast (12.33) można minimalizować ważoną funkcję błędu postaci:
L −1 2
E= ∑ gk A(Ω k ) − Ap (Ω k ) (12.42)
k =0

Dla niej równania (12.40) i (12.41) przyjmują postać:

FT WFh = FT Wa p (12.43)

(
h = FT WF )−1 FT Wa p (12.44)

gdzie W jest dodatnio określoną macierzą wag (na głównej diagonali ma wagi wk).

Przykład
Podobnie jak poprzednio zaprojektujemy obecnie dolnoprzepustowy, półpasmowy filtr typu
I, tzn. o długości nieparzystej N oraz symetrycznej odpowiedzi impulsowej. Przyjmijmy
N = 41, dla którego M = (N−1)/2 = 20. Tym razem zadamy K = 50 punktów charakterystyki
amplitudowo-częstotliwościowej filtra. Punkty te są zaznaczone symbolami „o” na rysunku
Projektowanie nierekursywnych filtrów cyfrowych 319

12.5b. Przedstawiono na nim tylko pierwszych K/2+1 = 26 „prążków”, leżących w przedziale


pulsacji unormowanej Ω [0,π]. Pozostałe są symetryczne względem ostatniego pokazanego
prążka.
W pierwszej kolejności zastosujemy metodę średniokwadratową nieważoną (wzór (12.41).
Uzyskane z jej pomocą wyniki są przedstawione na rysunku 12.5. Obliczona odpowiedź im-
pulsowa h(n) jest pokazana na rysunku 12.5a (po przesunięciu kołowym o M próbek w prawo).
Na rysunku 12.5b linią ciągłą został przedstawiony moduł widma H(ejΩ) w skali liniowej, na
rysunku 12.5d − w skali decybelowej, natomiast charakterystyka fazowo-częstotliwościowa fil-
tra jest pokazana na rysunku 12.5c.

a) 0.6 b) 1
0.8
0.4
0.6

|H(ejΩ)|
h(n)

0.2
0.4
0 0.2
-0.2 0
0 10 20 30 40 0 0.1 0.2 0.3 0.4 0.5
n Ω/2π [Hz/Hz]

c) 0 d) 0
faza H(ejΩ) [rd]

-10 |H(ejΩ)| [dΒ] -20

-20 -40

-30 -60

-40 -80
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.5. Dolnoprzepustowy, półpasmowy filtr cyfrowy typu I, zaprojektowany metodą prostej (nieważo-
nej) optymalizacji średniokwadratowej w dziedzinie częstotliwości (długość filtra N = 41): a) odpowiedź
impulsowa h(n), b), d) charakterystyka amplitudowo-częstotliwościowa w skali liniowej i decybelowej,
c) charakterystyka fazowo-częstotliwościowa

a) 0 b) 0

-20 -20
|H(ejΩ)| [dΒ]

|H(ejΩ)| [dΒ]

-40 -40

-60 -60

-80 -80
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.6. Porównanie charakterystyk amplitudowo-częstotliwościowych dwóch filtrów cyfrowych, zapro-
jektowanych metodą ważonej optymalizacji średniokwadratowej w dziedzinie częstotliwości. Przypadki:
a) preferowanie pasma przepustowego (wagi: wpass = 1000, wtrans = 1, wstop = 1), b) preferowanie pasma zapo-
rowego (wagi: wpass = 1, wtrans = 1, wstop = 1000). Długość filtrów N = 41
320 Projektowanie nierekursywnych filtrów cyfrowych

Następnie zaprojektowano dwa różne filtry także o długości N = 41 metodą średniokwadra-


tową ważoną. Zastosowano dwie różne kombinacje wag, preferujące optymalizację: 1) w paś-
mie przepustowym (wagi: wpass = 1000, wtrans = 1, wstop = 1) oraz 2) w paśmie zaporowym (wa-
gi: wpass = 1, wtrans = 1, wstop = 1000). Uzyskane charakterystyki amplitudowo-częstotliwościo-
we są przedstawione na rysunku 12.6. Z ich porównania z charakterystyką filtra przedstawioną
na rysunku 12.5d (przypadek bez preferencji, czyli optymalizacja nieważona: wpass = 1, wtrans =
= 1, wstop = 1) widać, że dzięki wprowadzeniu dodatkowego, różnego ważenia błędu opty-
malizacji w zależności od przynależności zadanych punktów charakterystyki do pasma prze-
pustowego, przejściowego lub zaporowego, możemy skutecznie wpływać na właściwości
„częstotliwościowe” projektowanej odpowiedzi impulsowej h(n).

Ćwiczenie komputerowe

Wyniki przedstawione powyżej uzyskano wykorzystując program komputerowy z tabeli 12-3.


Może on posłużyć Czytelnikowi do dalszych samodzielnych eksperymentów. Ponieważ jest
w nim projektowany tylko filtr dolnoprzepustowy typu I o długości nieparzystej N = 2M+1
(patrz tabela 12-1), jest wskazane także zaprojektowanie przykładowych filtrów HP, BP i BS.
Dodanie do programu opcji projektowania filtrów typu II, III i IV z tabeli 12-1 jest również
interesujące.

Tab. 12-3. Przykładowy program komputerowy

% Ćwiczenie: Projektowanie nierekursywnych filtrów cyfrowych metodą próbkowania w dziedzinie


% częstotliwości i optymalizacji średniokwadratowej

% Projektowanie filtrów FIR metodą WAŻONEJ minimalizacji błędu średniokwadratowego


% pomiędzy zadaną charakterystyką, spróbkowaną w dziedzinie częstotliwości, a charakterystyką otrzymywaną
clear all;

% Podaj swoje wymagania: K punktów charakterystyki częstotliwościowej Ak, k = 0, 1, 2, ..., K−1


M = 20; % połowa długości filtra; całość N=2M+1
K = 50; % liczba punktów charakterystyki częstotliwościowej (parzysta; K=>2*M)
% Podaj wymagania częstotliwościowe, czyli Ak w pulsacjach 2*pi*k/K,
k=0,1,2,...,K-1;
L1 = floor(K/4); % liczba jedynek na początku, potem punkty przejściowe, następnie zera
Ak = [ ones(1,L1) 0.75 0.25 zeros(1,K-(2*L1-1)-4) 0.25 0.75 ones(1,L1-1)];
Ak = Ak';
% Podaj współczynniki funkcji wagowej w(k), k = 0, 1, 2,..., K−1, odpowiadające zadanym
% punktom charakterystyki częstotliwościowej
wp = 1; % waga odcinka PassBand
wt = 1; % waga odcinka TransientBand
ws = 1; % waga odcinka StopBand
w = [ wp*ones(1,L1) wt wt ws*ones(1,K-(2*L1-1)-4) wt wt wp*ones(1,L1-1) ];
W = zeros(K,K); % macierz diagonalna z wagami
for k=1:K % na głównej przekątnej
W(k,k)=w(k); %
end %
% Wyznacz macierz F równania macierzowego W*F*h = W*(Ak + err)
F = [];
n = 0 : M-1;
for k = 0 : K-1
F = [ F; 2*cos(2*pi*(M-n)*k/K) 1 ];
end
% Ponieważ dla h minimalizującego błąd W*F*h = W*Ak, stąd
h = pinv(W*F)*(W*Ak); % metoda 1
% h = (W*F)\(W*Ak); % metoda 2
Projektowanie nierekursywnych filtrów cyfrowych 321

h = [ h; h(M:-1:1) ];
% Rysunki
n = 0 : 2*M; subplot(111); stem(n,h); grid;
title('Odp impulsowa filtra'); xlabel('nr próbki'); pause
NF=500; wn =0:pi/(NF-1):pi; fn = wn/(2*pi); H = freqz(h,1,wn);
subplot(211); plot(fn,abs(H)); grid; title('Moduł odp częstotliwościowej');
subplot(212); plot(fn,180/pi*unwrap(angle(H))); grid;
title('Faza odp częstotliwościowej'); ylabel('stopnie'); xlabel('f norm [Hz]'); pause
subplot(111); plot(fn,20*log10(abs(H))); grid; title('Moduł odp częstotliwościowej');
xlabel('f norm [Hz]'); axis([0 0.5 -100 10]); pause

12.4. Metoda aproksymacji Czebyszewa (algorytm Remeza)


Obecnie zajmiemy się jednym z najczęściej stosowanych algorytmów projektowania filtrów
cyfrowych, a mianowicie problemem aproksymacji Czebyszewa charakterystyk częstotliwo-
ściowych nierekursywnych filtrów cyfrowych o „liniowej fazie”. W praktycznej realizacji pro-
gramowej tej metody wykorzystuje się implementację Parksa-McClellana algorytmu Remeza.
W algorytmie tym aproksymuje się zadaną (projektowaną) charakterystykę amplitudową Ap(Ω)
za pomocą sumy kosinusoid wziętych ze współczynnikami wagowymi cn, czyli minimalizuje
funkcję błędu E(Ω) postaci:

M 
E (Ω) = W (Ω)  ∑ cn cos(Ωn ) − Ap (Ω) (12.45)
n = 0 

gdzie W(Ω) oznacza dowolną dodatnią funkcję wagową, która służy do innego ”tra-
ktowania” pasma przepustowego i zaporowego. Algorytm Remeza opiera się na ogólnym
twierdzeniu, według którego zawsze istnieje taki zbiór M+2 pulsacji Ωm, m = 1, 2, ..., M+2, że
powyższa funkcja błędu przyjmuje dla tych pulsacji tylko wartości ±ε:

M 
W (Ω m )  ∑ cn cos(Ω m n ) − Ap (Ω m ) = ( −1) m ε, m = 1, 2, ..., M + 2 (12.46)
n = 0 

i że są to jej wartości ekstremalne w zbiorze pulsacji Ω. Załóżmy na wstępie, że pulsacje Ωm są


znane. Wówczas (12.46) stanowi układ M+2 równań z M+2 niewiadomymi:

1 cos(Ω1 ) " cos( MΩ1 ) 1 / W (Ω1 )   c0   Ap (Ω1 ) 


1 cos(Ω 2 ) " cos( MΩ 2 ) − 1 / W (Ω 2 )   c   A (Ω ) 
   1  p 2 
# # % # # ⋅ #  =  #  (12.47)
 M     A (Ω 
 1 cos( Ω M +1 ) " cos( MΩ M +1 ) ( −1) / W (Ω M +1 )  c M   p M +1 ) 
1 cos(Ω M + 2 ) " cos( MΩ M + 2 ) ( −1) M +1 / W (Ω M +1 )  ε   Ap (Ω M + 2 )

z którego wyznacza się M+1 współczynników aproksymacji ck oraz amplitudę oscylacji ε. Pul-
sacje Ωm noszą nazwę pulsacji „ekstremalnych” (czyli pulsacji „ekstremów” funkcji błędu). Jak
widać z (12.46) dla kolejnych wartości Ωm błąd aproksymacji wynosi odpowiednio −ε, +ε, −ε,
+ε itd. Jednak pulsacje ekstremalne nie są znane. Istota algorytmu Remeza polega właśnie na
ich iteracyjnym, przybliżonym wyznaczeniu, a następnie na rozwiązaniu układu równań
(12.47) ze względu na zmienne cn, n = 0, 1, ..., M, i ε. Algorytm ten składa się z następujących
kroków:
322 Projektowanie nierekursywnych filtrów cyfrowych

1) przyjęcie wejściowego zbioru pulsacji Ωm;


2) rozwiązanie układu równań (12.47): otrzymanie wartości cn, n = 0, 1, ..., M, i ε;
3) sprawdzenie, czy amplituda oscylacji funkcji błędu E(Ω) (12.45) dla Ω, należącego do
przedziału [0, π], jest większa niż obliczone ε; jeśli nie to KONIEC;
4) w przeciwnym przypadku wyznaczenie M+2 pulsacji, dla których funkcja błędu E(Ω) ma
ekstrema, i przyjęcie ich za pulsacje „ekstremalne” Ωm; powrót do punktu 2).
Wyznaczanie wartości nowych wartości „ekstremalnych” funkcji błędu może być wykonywane
techniką interpolacji Lagrange’a.
W celu uproszczenia rozważań szczegółowych załóżmy, że interesujemy się obecnie zapro-
jektowaniem symetrycznej odpowiedzi impulsowej filtra FIR o nieparzystej liczbie próbek,
czyli filtra FIR pierwszego typu. Jak wiemy charakterystyka amplitudowa w jego przypadku
jest równa (N = 2M+1):
M −1 M M
A(Ω) = ∑ 2h(n ) cos(Ω( M − n )) + h( M ) = ∑ hn cos(Ω( M − n)) = ∑ hM − n cos(Ωn) (12.48)
n =0 n =0 n=0

gdzie
2h(n ), n = 0,1,..., M − 1
hn =  (12.49)
 h (n ), n = M

Jeśli przyjmiemy cn = hM−n, n = 0, 1, 2, ..., M, wówczas wzory (12.45)−(12.47) bezpośrednio


dotyczą problemu aproksymacji zadanej charakterystyki amplitudowej Ap(Ω) przez filtr postaci
(12.48). Po wyznaczeniu współczynników cn, odpowiedź impulsową zaprojektowanego filtra
otrzymuje się uwzględniając zastosowane podstawienie cn = hM−n oraz (12.49), skąd otrzymu-
jemy:
 cM c c c c c 
 ,..., 2 , 1 , c0 , 1 , 2 ,..., M  (12.50)
 2 2 2 2 2 2 

Przykład
Zaprojektujemy teraz za pomocą aproksymacji Czebyszewa dwa filtry dolnoprzepustowe
o długości N = 2M+1 = 39 (M = 19). W pierwszym przypadku nie będziemy różnicowali zna-
czenia jakości aproksymacji charakterystyki częstotliwościowej w paśmie przepustowym i za-
porowym (wagi: wpass = 1, wstop = 1), a w drugim większy priorytet przyznamy pasmu zapo-
rowemu (wagi: wpass = 1, wstop = 10). Uzyskane wyniki są przedstawione na rysunku 12.7:
pierwszy przypadek po lewej stronie, a drugi − po prawej. Uzyskano je za pomocą poglądo-
wego programu, realizującego przedstawiony wyżej algorytm w sposób uproszczony (upro-
szczenie dotyczy sposobu wyznaczenia ekstremów funkcji E(Ω)).

Ćwiczenie komputerowe
W tabeli 12-4 został przedstawiony program komputerowy, z pomocą którego zaprojektowano
filtry w powyższym przykładzie. Nie jest on optymalny, ponieważ sposób wyznaczania ekstre-
mów funkcji E(Ω) zrealizowano w nim w najprostszy sposób. Równocześnie program ten
w wersji obecnej umożliwia jedynie projektowanie filtrów dolnoprzepustowych. Ma jednak
dużą zaletę: jest stosunkowo prosty w porównaniu z innymi, istniejącymi implementacjami
programowymi, dzięki czemu pozwala na szybkie wniknięcie w istotę rozważanego zagadnie-
nia optymalizacji.
Projektowanie nierekursywnych filtrów cyfrowych 323

0.6 0.6

0.4 0.4

h(n)

h(n)
0.2 0.2

0 0

-0.2 -0.2
0 10 20 30 40 0 10 20 30 40
n n

1.2 1.2
1 1
0.8 0.8
H(ejΩ)

H(ejΩ)
0.6 0.6
0.4 0.4
0.2 0.2
0 0
-0.2 -0.2
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

0 0
-10 -10
|H(ejΩ)| [dΒ]

|H(ejΩ)| [dΒ]

-20 -20
-30 -30
-40 -40
-50 -50
-60 -60
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.7. Dwa przykłady projektowania filtrów cyfrowych metodą aproksymacji Czebyszewa. Po lewej
stronie: brak różnicowania pasma przepustowego i zaporowego (wagi: wpass = 1, wstop = 1), po prawej stronie
− przyznanie większego priorytetu pasmu zaporowemu (wagi:wpass = 1, wstop = 10). Długość filtrów N = 39

Tab. 12-4. Przykładowy program komputerowy

% Ćwiczenie: Projektowanie nierekursywnych filtrów cyfrowych w dziedzinie częstotliwości metodą


% aproksymacji Czebyszewa (algorytm Remeza)

clear all;

L = 20; % liczba poszukiwanych współczynników filtra (parzysta): długość filtra N=2L−1


Nr = 5; % „szerokość” pasma przepustowego 0 < Nr < L
wp = 1; ws = 1; % wagi poszczególnych podpasm: Pass, Stop
R = 200; % ile razy zbiór testowy ma być większy od zbioru ekstremów
tol = 10^(-8); % tolerancja rozwiązania
ifigs = 0; % wyświetlanie rysunków podczas iteracji: 0=nie, 1=tak
324 Projektowanie nierekursywnych filtrów cyfrowych

M = L+1; % liczba częstotliwości ekstremów


K = 1+R*(M-1); % liczba wszystkich badanych częstotliwości
fz = (0 : K-1)/(K-1); % K-elementowy zbiór częstotliwości przeszukiwanych
k11 = 1; k12 = 1+Nr*R; % granice pasma przepustowego
k21 = 1+(Nr+1)*R; k22=K; % granice pasma zaporowego
K1 = 1+Nr*R+R/2; % nr próbki charakterystyki dla częstotliwości granicznej
fd = [ fz(1:K1) fz(K1:K)]; % częstotliwości charakterystyczne filtra
Hd = [ ones(1,K1) zeros(1,K-K1)]; % wymagane wartości wzmocnienia
Wg = [ wp*ones(1,K1) ws*ones(1,K-K1)]; % wagi
imax = 1:R:K; % indeksy startowych częstotliwości ekstremów
% Wybranie startowego zbioru częstotliwości „ekstremów”
feMAX = fz(1:R:K);
sigmaMAX = 10^15; sigma = 0;
% Pętla główna
n = 0 : L-1;
while ( (sigmaMAX-sigma) > tol )

sigmaMAX - sigma % pokaż aktualne zmniejszenie wartości błędu ch-ki


H = Hd(imax); H=H';
W = Wg(imax);
% Uaktualnij parametry zmieniane iteracyjnie
fe = feMAX; % nowe częstotliwości „ekstremów” w obecnym kroku
% Oblicz macierz kosinusów A
A = [];
for m = 0 : M-1 % po częstotliwościach „ekstremów”
A = [ A; cos(pi*fe(m+1)*n) ((-1)^m)/W(m+1) ];
end
% Rozwiąż równanie
% c = A\H'; % Metoda 1
c = pinv(A)*H; % Metoda 2
% Pokaż aktualną odpowiedź impulsową
h = c(1:L); sigma=c(M); sigma=abs(sigma);
g=h'/2; g(1)=2*g(1); g = [ fliplr(g(2:L)) g];
if (ifigs==1)
% stem(h); title('Połowa odp impulsowej h'); pause
stem(g); title('Cała odp impulsowa h'); pause;
end
% Oblicz i pokaż aktualną charakterystykę częstotliwościową oraz jej błąd
for k = 0 : K-1
H(k+1) = cos(pi*fz(k+1)*n) * h;
Herr(k+1) = Wg(k+1) * (H(k+1) - Hd(k+1));
end
if (ifigs==1)
plot(fz,Hd,'r',fz,H,'b'); grid; title('Aktualna H(f)'); pause
plot(fz,Herr); grid; title('Błąd H(f)’); pause
end

% Znajdź M+1 największych ekstremów funkcji błędu (częstotliwość, wartość ekstremum)


% tzn. oblicz feMAX i sigmaMAX

% Znajdź wszystkie ekstrema


Hmax = []; imax = [];
for p = 1 : 2 % kolejne przedziały: przepuszczania i zaporowy
if (p==1) k1=k11; k2=k12; end % pasmo przepustowe
if (p==2) k1=k21; k2=k22; end % pasmo zaporowe
Hmax = [ Hmax Herr(k1)]; imax = [ imax k1 ]; % zapisz pierwszy element / indeks
k=k1+1; % zwiększ indeks
while( Herr(k-1) == Herr(k) ) k = k+1; end % inkrementuj indeks, jeśli równe
if ( Herr(k) < Herr(k+1) ) %
sgn=1; % charakterystyka narasta
else %
sgn=-1; % charakterystyka opada
end %
k=k+1; %
Projektowanie nierekursywnych filtrów cyfrowych 325

while ( k <= k2 ) % „poluj” na kolejne ekstrema


if (sgn==1)
while( (k<k2) & (Herr(k-1)<Herr(k)) ) k=k+1; end
end
if (sgn==-1)
while( (k<k2) & (Herr(k-1)>Herr(k)) ) k=k+1; end
end
sgn = -sgn;
Hmax = [ Hmax Herr(k) ]; imax = [imax k]; % zapamiętaj kolejne ekstremum
k=k+1;
end % end while
end % end for
if (ifigs==1)
plot(fz(imax),Hmax,'or',fz,Herr,'b');
grid; title('Błąd charakterystyki i jego ekstrema'); pause
end

% Wybierz M+1 największych


if ( length(Hmax)>M )
disp('UWAGA!!! Więcej EKSTREMÓW niż M+1!');
IM = []; G = abs(Hmax); LenG = length(G);
while( LenG > 0 )
Gmx = max(G); imx=find(G==Gmx);
LenGmx = length(imx);
IM = [ IM imax(imx)];
G(imx)=0; LenG = LenG-LenGmx;
end
IM = IM(1:M); IM = sort(IM); imax = IM;
end
sigmaMAX = max( abs(Hmax) );
feMAX = fz( imax );
if (ifigs==1)
plot(fz(imax),Herr(imax),'or',fz,Herr,'b');
grid; title('Błąd charakterystyki i M+1 największych ekstremów'); pause
end

end % end while(tol)

% Rysunki
fz=fz/2;
stem(g); title('Wynikowa odp impulsowa filtra'); pause;
plot(fz(imax),Herr(imax),'or',fz,Herr,'b'); grid;
title('Błąd H(f) + jego EKSTREMA'); pause
plot(fz,Hd,'r',fz,H,'b'); grid; title('Wynikowe H(f)'); pause
plot(fz,20*log10(H),'b'); grid; title('Wynikowe H(f) w dB'); pause

12.5. Metoda okien


W tym podrozdziale omówimy projektowanie nierekursywnych filtrów cyfrowych za pomocą
tzw. metody okien. Jest to metoda bardzo prosta pod względem teoretycznym i implementa-
cyjnym, równocześnie bardzo efektywna i z tego powodu szeroko stosowana. Składa się ona
z następujących kroków:
1) wyboru rodzaju filtra (dolnoprzepustowy, górnoprzepustowy, pasmowoprzepustowy lub
pasmowozaporowy) i jego pulsacji granicznych, czyli określenia wymaganego H(ejΩ);
2) analitycznego wyznaczenia wzoru na dyskretną odpowiedź impulsową filtra h(n) za pomo-
cą odwrotnego przekształcenia Fouriera H(ejΩ) (patrz tabela 12-5)
π
h(n ) =
1

∫ ( )
H e jΩ e jΩn d Ω, − ∞ ≤ n ≤ ∞ (12.51)
−π
326 Projektowanie nierekursywnych filtrów cyfrowych

3) wymnożenia obliczonego h(n) (nieskończonych, gasnących oscylacji) z wybraną funkcją


okna czasowego w(n) (patrz tabele 12-6 i 12-7):
hw ( n ) = h(n ) w( n ), − ∞ ≤ n ≤ ∞ (12.52)

mającą tylko skończoną liczbę niezerowych próbek:


w( n ) = 0 dla n >M

4) przesunięcia hw(n) w prawo o M próbek i pobrania 2M+1 próbek:

hwM (n ) = hw (n − M ), 0 ≤ n ≤ 2 M (12.53)

5) sprawdzenia zgodności uzyskanej charakterystyki częstotliwościowej zaprojektowanego


filtra hw(M)(n) z charakterystyką zadaną.
Ponieważ w ogólności odpowiedź impulsowa filtra h(n) (gasnące oscylacje) nie ma skończo-
nego czasu trwania (czyli ma nieskończenie wiele niezerowych współczynników), do praktycz-
nej realizacji filtra należy wybrać („wyciąć”) tylko jej najbardziej istotny fragment (próbki
wokół n = 0). Wybór odpowiedniej długości okna (N = 2M+1) oraz jego kształtu ma zapewnić
uzyskanie wymaganej liniowości charakterystyki amplitudowej w paśmie przepuszczania,
odpowiedniego tłumienia w paśmie zaporowym oraz pożądanej stromości filtra. Ponieważ
iloczyn sygnałów w dziedzinie czasu odpowiada splotowi ich widm w dziedzinie częstotliwoś-
ci:
π
hw (n ) = h (n ) ⋅ w(n ) ⇔ ( )
H w e jΩ =
1
2π −∫π
( ) ( )
H e jΘ W e j ( Ω − Θ dΘ (12.54)

w wyniku wymnożenia odpowiedzi impulsowej filtra h(n) z funkcją okna w(n), otrzymuje się
nową odpowiedź impulsową hw(n), która ma już inną charakterystykę częstotliwościową
Hw(ejΩ) niż oryginał H(ejΩ). Charakterystyka ta jest silnie zależna od widma Fouriera W(ejΩ)
zastosowanego okna i nie ma już „idealnej” (zero-jedynkowej) charakterystyki amplitudowo-
-częstotliwościowej. Ponieważ okna czasowe i ich charakterystyki częstotliwościowe zostały
szczegółowo omówione w rozdziale poświęconym analizie widmowej sygnałów dyskretnych,
w tym rozdziale poświęcimy im mniej miejsca.
Przypomnijmy jednak, że zachowując kształt okna i tylko zwiększając jego długość (czyli pro-
porcjonalnie go „przeskalowując”), możemy jedynie wpływać na szerokość listka głównego
widma okna. Poziom tłumienia listków bocznych widma pozostaje bez zmian. Wynika stąd, że
aby wynikowy filtr był bardziej stromy, należy zwiększyć długość okna, natomiast aby otrzy-
mać filtr o większym tłumieniu w paśmie zaporowym, należy zmienić okno na inne, „lepsze”,
tzn. mające listki boczne widma na niższym poziomie (tabele 12-6 i 12-7). Zwróćmy także
uwagę, że filtry zaprojektowane z użyciem konkretnych okien mają większe tłumienie niż same
okna. Przykładowo, listek boczny widma okna prostokątnego jest na poziomie −13,5 dB
w stosunku do listka głównego, a filtr zaprojektowany z wykorzystaniem tego okna ma tłumie-
nie około −21 dB. Zjawisko to dotyczy wszystkich okien.
Podczas projektowania filtra bardzo korzystnie jest stosować okna parametryczne, tzn. okna
o zmiennym kształcie. Najbardziej znanymi oknami tego typu są okna Kaisera i Dolpha-Cze-
byszewa. Zmieniając długość oraz parametr kształtu okna, można z ich pomocą projektować
filtry o różnej stromości pasm przejściowych i różnym tłumieniu w paśmie zaporowym.
Projektowanie nierekursywnych filtrów cyfrowych 327

Dodatkowego komentarza wymaga jeszcze przesunięcie odpowiedzi impulsowej hw(M)(n), wy-


konywane w kroku czwartym metody. Przypomnijmy, układ dyskretny jest przyczynowy, jeśli
jego odpowiedź impulsowa jest przyczynowa, tzn. kiedy h(n) = 0 dla n < 0; wówczas od-
powiedź układu nie wyprzedza jego pobudzenia. Ale odpowiedź impulsowa hw(M)(n), uzyskana
w punkcie trzecim, nie jest przyczynowa, gdyż hw(n) ≠ 0 dla n = −M, −M+1, ..., −2, −1. Jej
wersja przesunięta hw(M)(n) z punktu czwartego jest już jednak przyczynowa. Zgodnie z (8.10)
opóźnienie sygnału dyskretnego w czasie wprowadza tylko dodatkowe przesunięcie fazowe
jego widma Fouriera:

H w( M ) (e jΩ ) = e − jΩM H w (e jΩ ) (12.55)

Obliczenie odpowiedzi impulsowych filtrów „idealnych”

Obecnie wyprowadzimy analitycznie wzory na odpowiedzi impulsowe filtrów cyfrowych, ma-


jących „idealne” („prostokątne”) charakterystyki amplitudowo-częstotliwościowe. Charaktery-
styki te są przedstawione na rysunku 12.8. Odpowiedź impulsowa filtra jest wynikiem od-
wrotnej transformacji Fouriera (12.51) zadanej charakterystyki. W poniższych przekształce-
niach podstawowe znaczenie ma wyprowadzenie wzoru na odpowiedź impulsową „idealnego”
filtra dolnoprzepustowego. Charakterystyki pozostałych filtrów mogą być bowiem przedsta-
wione jako superpozycja filtrów dolnoprzepustowych o różnych częstotliwościach granicznych
oraz filtra „wszechprzepustowego” (H(ejΩ) = 1 dla −π ≤ Ω < π), którego odpowiedź impulsowa
jest deltą Kroneckera. Na rysunku 12.8 wynikową charakterystykę amplitudowo-częstotli-
wościową (tylko linie poziome) zawsze otrzymuje się, odejmując od charakterystyki „linii
poziomych” charakterystykę „linii pionowych” (obie charakterystyki zachodzą na siebie).
1) F i l t r d o l n o p r z e p u s t o w y ( pasmo przepustowe równe [−Ω0, Ω0]):
π Ω Ω0
1 1 0 1 1 jΩ n 1
∫ ∫
jΩ jΩn
hLP ( n ) = H ( e ) e d Ω = 1 ⋅ e jΩ n d Ω = e =  e j Ω n − e − jΩ n  =
j 2 πn  
LP
2π −π 2π −Ω 2π jn −Ω0
0

2 j sin(Ω 0 n ) sin(Ω 0 n ) sin(Ω 0 n )


= = = 2 F0 , n ≠ 0, (12.56)
j 2 πn πn Ω0n

Ω0 cos(Ω0 n )
hLP (0) = 2 F0 = 2 F0 (z reguły d’Hospitala w granicy dla n → 0)
Ω0 n →0

2) F i l t r g ó r n o p r z e p u s t o w y (pasmo przepustowe równe [−π, −Ω0]+[Ω0, π]):

1  0 
π −Ω π
1
hHP (n ) =
2π ∫ H HP (e jΩ )e jΩn d Ω =  ∫ 1 ⋅ e j Ωn d Ω + ∫ 1 ⋅ e j Ωn d Ω  =
2π  −π 
−π  Ω0

π Ω
1 1 0 j Ωn
∫ ∫ e dΩ =
j Ωn
= e d Ω −
2π −π 2π −Ω
0

sin(Ω 0 n ) Ω0
= δ(n ) − 2 F0 = δ( n ) − hLP (n ), n ≠ 0 (12.57)
Ω0n

h HP (0) = 1 − 2 F0 (z reguły d’Hospitala w granicy dla n → 0)


328 Projektowanie nierekursywnych filtrów cyfrowych

HLP(ejΩ)
1

−π −Ω0 0 Ω0 π

HHP(ejΩ) 1−HLP(ejΩ)
1 1

Ω Ω

−π −Ω0 0 Ω0 π −π −Ω 0 Ω0 π

HBP(ejΩ) HLP2(ejΩ)−HLP1(ejΩ)
1 1

Ω Ω

−π −Ω −Ω 0 Ω1 Ω2 π −π −Ω −Ω 0 Ω1 Ω2 π

HBS(ejΩ) 1−HBP(ejΩ)
1 1

Ω Ω

−π −Ω2 −Ω1 0 Ω1 Ω2 π −π −Ω2 −Ω1 0 Ω1 Ω2 π

Rys. 12.8. „Idealne” charakterystyki amplitudowo-częstotliwościowe filtrów cyfrowych. Kolejno od góry do


dołu filtry: dolnoprzepustowy (LP), górnoprzepustowy (HP), pasmowoprzepustowy (BP) i pasmowo-
zaporowy (BS). Wynikową charakterystykę amplitudowo-częstotliwościową filtra (tylko linie poziome) zaw-
sze otrzymuje się, odejmując od charakterystyki „linii poziomych” charakterystykę „linii pionowych” (obie
charakterystyki zachodzą na siebie)

Wzór na odpowiedź impulsową filtra górnoprzepustowego można „wydedukować” bez żad-


nych dodatkowych obliczeń na podstawie hLP(n). Ponieważ:
Ω Ω
H LP0 (e jΩ ) + H HP0 (e jΩ ) = 1
więc
Ω Ω
h LP0 (n ) + hHP0 (n ) = δ(n )

skąd wynika, że
Ω0 Ω0 sin(Ω 0 n )
h HP ( n ) = δ(n ) − hLP (n ) = δ(n ) − 2 F0
Ω0n

Inną możliwością jest otrzymanie HHP(ejΩ) poprzez przesunięcie widma Fouriera HLP(ejΩ)
o π w kierunku pulsacji dodatnich: HHP(ejΩ) = HLP(ej(Ω−π)), wówczas hHP(n) uzyskuje się w wy-
niku wymnożenia hLP(n) z sygnałem ejπn = (−1)n .
Projektowanie nierekursywnych filtrów cyfrowych 329

3) F i l t r p a s m o w o p r z e p u s t o w y (pasmo przepustowe równe [−Ω2, −Ω1]+[Ω1, Ω2]):

1  1 
−Ω Ω2
1 π
hBP ( n ) = ∫ H BP (e jΩ )e jΩ n d Ω =  ∫ 1 ⋅ e jΩ n d Ω + ∫ 1 ⋅ e jΩ n d Ω  =
2π −π 2π  −Ω
 2 Ω1 

1  2 jΩ n 
Ω Ω1
=  ∫ e d Ω − ∫ e jΩ n d Ω  =
2π  −Ω 
 2 −Ω1

sin(Ω 2 n ) sin(Ω1n ) Ω2 Ω1
= 2 F2 − 2 F1 = hLP − hLP , n≠0 (12.58)
Ω2n Ω1n

hBP (0) = 2( F2 − F1 ) (z reguły d’Hospitala w granicy dla n → 0)

I w tym przypadku wyprowadzony wzór nie powinien być dla nas zaskoczeniem, gdyż:
Ω1 ,Ω2 Ω2 Ω1
H BP (e jΩ ) = H LP ( e jΩ ) − H LP ( e jΩ )

skąd mamy:

Ω1 ,Ω 2 Ω2 Ω1 sin(Ω 2 n ) sin(Ω1n )
hBP (n ) = hLP ( n ) − hLP (n ) = 2 F2 − 2 F1
Ω2n Ω1n

4) F i l t r p a s m o w o z a p o r o w y (pasmo przepustowe równe [−π, −Ω2] + [−Ω1, Ω1] +


+ [Ω2, π]):

1  2 
−Ω Ω1
1 π π
hBS (n ) = ∫ H BS ( e jΩ )e jΩ n d Ω =  ∫ 1 ⋅ e jΩ n d Ω + ∫ 1 ⋅ e jΩ n d Ω + ∫ 1 ⋅ e jΩ n d Ω  =
2 π −π 2 π  −π 
 −Ω1 Ω2

1  π jΩ n 
Ω1 Ω2
=  ∫ e d Ω + ∫ 1 ⋅ e j Ω n d Ω − ∫ 1 ⋅ e jΩ n d Ω  =
2 π  −π 
 −Ω1 −Ω 2

 sin(Ω 2 n) sin(Ω1n) 
= δ(n) −  2 F2 − 2 F1 =
 Ω 2 n Ω1n 

{Ω2
= δ ( n ) − hLP Ω1
( n ) − hLP }
(n) , n ≠ 0 (12.59)

hBS (0) = 1 − 2 (F2 − F1 ) (z reguły d’Hospitala w granicy dla n → 0)

Analogicznie jak poprzednio wyniku tego należało się spodziewać, gdyż:


Ω1 ,Ω 2 Ω1 ,Ω 2
H BS (e jΩ ) = 1 − H BP (e jΩ )

skąd oczywiście wynika, że

Ω , Ω2 Ω , Ω2  sin(Ω 2 n ) sin(Ω1n ) 
h BS1 ( n ) = δ( n ) − hBP1 ( n ) = δ( n ) −  2 F2 − 2 F1 
 Ω2n Ω1n 
330 Projektowanie nierekursywnych filtrów cyfrowych

Tab. 12-5. Wzory na odpowiedzi impulsowe filtrów „idealnych” o prostokątnej charakterystyce amplitudo-
wo-częstotliwościowej, przedstawionej na rysunku 12.8 (F, Ω − częstotliwość i pulsacja unormowana:
0 ≤ F < 1, 0 ≤ Ω < 2π; Ωk = 2πfk / fpr i Fk = fk / fpr, k = 0, 1, 2)

Rodzaj filtra h(n), −∞ < n < ∞

 sin(Ω 0 n )
2 F , n≠0
Dolnoprzepustowy (LP) hLP ( n ) =  0 Ω 0 n
 2 F0 , n = 0

 sin(Ω 0 n )
δ( n ) − 2 F0 , n≠0
Górnoprzepustowy (HP) hHP ( n ) =  Ω0n
 1 − 2 F0 , n = 0

 sin(Ω 2 n ) sin(Ω1n )
2 F − 2 F1 , n≠0
Pasmowoprzepustowy (BP) hBP ( n ) =  2 Ω 2 n Ω1n
 2( F2 − F1 ), n = 0

  sin(Ω 2 n ) sin(Ω1n ) 
δ( n ) −  2 F2 − 2 F1 , n ≠ 0
Psmowozaporowy (BS) hBS ( n ) =   Ω 2 n Ω1n 
 1 − 2( F2 − F1 ), n = 0

W powyższych wzorach zarówno pulsacje Ωk (= 2πfk / fpr) jak i częstotliwości Fk (= fk / fpr) są


unormowane względem częstotliwości próbkowania, tzn. są podzielone przez częstotliwość fpr
(0 ≤ F < 1, 0 ≤ Ω < 2π).
Oczywiście możliwe jest „zadawanie” charakterystyk amplitudowo-częstotliwościowych fil-
trów innych niż „idealne” prostokątne i wyznaczanie ich odpowiedzi impulsowych jak po-
przednio, czyli z wykorzystaniem odwrotnej transformacji Fouriera. Przykładowo, jeśli w przy-
padku filtra dolnoprzepustowego uwzględnimy pasmo przejściowe i założymy, że charakte-
rystyka ta liniowo w nim opada, to otrzymamy trapezoidalny kształt tej charakterystki. Wów-
czas odpowiedź impulsowa odpowiadającego jej filtra jest równa [Par87]:

 2 F0 , n = 0
 sin(Ω 0 n )
hLP (n ) =  2 sin( ∆Ωn / 2) (12.60)
⋅ 2 F0 , n≠0
 ∆Ωn Ω 0n

gdzie ∆Ω = Ωstop−Ωpass = 2π(Fstop−Fpass), Ω0 = (Ωpass+Ωstop)/2 = 2πF0. Natomiast w przypadku


kiedy założy się, że charakterystyka amplitudowa pasma przejściowego jest opisana za pomocą
funkcji sklejanej K-tego rzędu, to wówczas [Par87]:

 2 F0 , n = 0

hLP (n ) =  sin( ∆Ωn / 2 K )  K sin(Ω 0 n ) (12.61)
 ∆Ωn / 2 K  ⋅ 2 F0 Ω n , n ≠ 0
 0
Projektowanie nierekursywnych filtrów cyfrowych 331

Ilustracja graficzna kolejnych kroków algorytmu


Rysunki 12.9 i 12.10 stanowią ilustrację kolejnych kroków wyznaczania odpowiedzi impulso-
wej hw(M)(N) (12.53) w metodzie okien. Na rysunku 12.9a jest przedstawiona część odpowiedzi
impulsowej h(n) idealnego filtra dolnoprzepustowego, wyznaczona na podstawie zależności
z tabeli 12-5, dla częstotliwości f0 = 200 Hz i fpr = 1000 Hz. Rysunek 12.9b prezentuje okno
prostokątne dla M = 7 (N = 2M+1 = 15). Z kolei na rysunku 12.9c jest pokazany iloczyn h(n)
i w(n), czyli zmodyfikowana odpowiedź impulsowa hw(n). Po jej przesunięciu w prawo o M =
= 7 otrzymujemy odpowiedź hw(M)(n) = hw(n−M), przedstawioną na rysunku 12.9d. Niezerowe
próbki hw(M)(n), wykorzystywane do filtracji, znajdują się w ramce kwadratowej. Na rysunku
12.10 przedstawiono analogiczną „konstrukcję” hw(M)(n), tym razem jednak dla okna Hanninga
z tabeli 12-6.
Z kolei na rysunku 12.11 przedstawiono konsekwencje częstotliwościowe zastosowania róż-
nych funkcji okien. Unormowane moduły widma Fouriera okna prostokątnego z rysunku 12.9b
oraz widma okna Hanninga z rysunku 12.10a przedstawiono na rysunku 12.11a
(20log10|W(ejΩ)/W(0)|), natomiast na rysunku 12.11b są zaprezentowane charakterystyki ampli-
tudowo-częstotliwościowe |Hw(M)(ejΩ)| filtrów hw(M)(n), uzyskanych dla tych okien. Jak widać
charakterystyki te są dalekie od założonego ideału (rysunek 12.8a). Dla okna prostokątnego
charakterystyka ma widoczną nieliniowość w paśmie przepustowym oraz bardzo małe tłumie-
nie w paśmie zaporowym. Okno Hanninga oferuje większą liniowość charakterystyki w paśmie
przepustowym i większe tłumienie w paśmie zaporowym, ale za cenę poszerzenia pasma
przejściowego.
Zwiększanie wartości parametru M spowodowałoby zawężenie „listków” głównych obu widm,
leżących w okolicy f = 0, przy zachowanym poziomie oscylacji „listków” bocznych. W wyniku
tego coraz dłuższym odpowiedziom impulsowym hw(M)(n) odpowiadałyby filtry o coraz
bardziej stromych charakterystykach amplitudowo-częstotliwościowych (krótszych pasmach
przejściowych), lecz o takim samym tłumieniu w paśmie zaporowym (w przypadku granicz-
nym M→∞ otrzymujemy idealną, prostokątną charakterystykę filtra). Problem wpływu doboru
kształtu okna (prostokątne czy inne) oraz jego długości, szczegółowo przedyskutowano
poniżej.
Wybór okna
Aby zaprojektować filtry o większym tłumieniu (niż dla okna prostokątnego) w paśmie zapo-
rowym należy jako w(n) użyć innej funkcji „okna”, wycinającego używany podczas filtracji
fragment hw(M)(n) odpowiedzi impulsowej h(n). Definicje wybranych okien dyskretnych o dłu-
gości nieparzystej N = 2M+1 przedstawiono w tabeli 12-6, ich kształty zaś pokazano na rysun-
ku 12.12. W tabeli podano także poziom szerokość „listka” głównego widma okna (Asl) oraz
poziom tłumienia „listków” bocznych widma okna (∆ml). Funkcje te charakteryzuje zdecydo-
wanie niższy poziom „listków” bocznych widma niż dla okna prostokątnego, ale jest to oku-
pione większą szerokością „listków” głównych widma. Jednak zwiększenie długości okien
powoduje zmniejszenie szerokości ww. „listków” głównych, analogicznie jak w przypadku
okna prostokątnego. Z kolei w tabeli 12-7 podano tłumienie filtra, jakie się uzyskuje stosując
dane okno. Współczynnik K służy do wyboru długości filtra N, zapewniającej odpowiednią
stromość pasm przejściowych jego charakterystyki amplitudowo-częstotliwościowej. Korzysta
się w tym przypadku z zależności:
K K
N> = (12.62)
∆f / f pr ∆ ml
332 Projektowanie nierekursywnych filtrów cyfrowych

a) 0.4
0.3
0.2

h(n)
0.1
0
-0.1
-20 -15 -10 -5 0 5 10 15 20
n

b) 1
0.8
0.6
w(n)

0.4
0.2
0
-20 -15 -10 -5 0 5 10 15 20
n

c) 0.4
0.3
0.2
hw(n)

0.1
0
-0.1
-20 -15 -10 -5 0 5 10 15 20
n

d) 0.4
hw(M)(n)=hw(n-M)

0.3
0.2
0.1
0
-0.1
-20 -15 -10 -5 0 5 10 15 20
n

Rys. 12.9. Przykładowa ilustracja graficzna „konstrukcji” odpowiedzi impulsowej hw(M)(n) filtra LP (patrz
tabela 12-5, f0 = 200 Hz, fpr = 1000 Hz) w przypadku zastosowania okna prostokątnego (M = 7, N =
= 2M+1 = 15): a) h(n), b) w(n), c) hw(n), d) hw(M)(n)
Projektowanie nierekursywnych filtrów cyfrowych 333

a) 1
0.8
0.6

w(n)
0.4
0.2
0
-20 -15 -10 -5 0 5 10 15 20
n

b) 0.4
0.3
0.2
hw(n)

0.1
0
-0.1
-20 -15 -10 -5 0 5 10 15 20
n

c) 0.4
hw(M)(n)=hw(n-M)

0.3
0.2
0.1
0
-0.1
-20 -15 -10 -5 0 5 10 15 20
n

Rys. 12.10. Przykładowa ilustracja graficzna „konstrukcji” odpowiedzi impulsowej hw(M)(n) filtra LP (tabela
12-5, f0 = 200 Hz, fpr = 1000 Hz) w przypadku zastosowania okna Hanninga (tabela 12-6, M = 7, N =
= M+1 = 15): a) w(n), b) hw(n), c) hw(M)(n)

gdzie ∆f jest wyrażone w hercach i oznacza wymaganą szerokość zboczy pasm przejściowych
(albo najmniejszą z tych szerokości, w przypadku większej liczby zboczy).
Zwróćmy uwagę, że widma okien oraz odpowiedzi impulsowych filtrów z rysunku 12.11 mają
tłumienie zgodne z tym, które podano w tabelach 12-6 i 12-7 (odpowiednio: 13,5 dB i 21 dB
dla okna prostokątnego oraz 31 dB i 44 dB dla okna Hanninga).
Na rysunku 12.13 zaprezentowano możliwość zwiększenia stromości zboczy filtra poprzez
zwiększenie jego długości. W tym przypadku także projektowano filtr dolnoprzepustowy
o częstotliwości granicznej f0 = 200 Hz oraz częstotliwości próbkowania fpr = 1000 Hz, ale
z wykorzystaniem okna Blackmana. Na rysunku przedstawiony jest unormowany moduł widma
okna w(n) oraz moduł widma wynikowej odpowiedzi impulsowej filtra hw(M)(n) dla M = 7, 14
i 49. Wraz ze wzrostem M widmo okna staje się coraz węższe, a charakterystyka amplitudowo-
-częstotliwościowa filtra − coraz bardziej stroma. Na uwagę zasługuje także duży poziom tłu-
mienia w paśmie zaporowym (74 dB, zgodnie z tabelą 12-7).
334 Projektowanie nierekursywnych filtrów cyfrowych

a) 0

-20

|W(ejΩ)| [dB]
-40

-60

-80
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]

b) 0
|Hw(M)(ejΩ)| [dB]

-20

-40

-60

-80
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
Rys. 12.11. Unormowane moduły widma Fouriera (20log10|W(ejΩ)/W(0)|) okna prostokątnego z rysunku
12.9b oraz widma okna Hanninga z rysunku 12.10a (a) oraz charakterystyki amplitudowo-częstotliwościowe
|Hw(M)(ejΩ)| filtrów hw(M)(n) uzyskane dla tych okien (b)

a) 0
-20
|W(ejΩ)| [dB]

-40
-60
-80
-100
-120
-140
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]

b) 0
-20
|Hw(M)(ejΩ)| [dB]

-40
-60
-80
-100
-120
-140
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
Rys. 12.13. Moduły widma Fouriera: a) okna Blackmana w(n), b) odpowiedzi impulsowej hw(M)(n) filtra LP.
Wartości parametrów: f0 = 200 Hz, fpr = 1000 Hz oraz M = 7, 14, 49 (widma coraz węższe)
Projektowanie nierekursywnych filtrów cyfrowych 335

a) b)
1 1
0.8 0.8
0.6 0.6

w(n)
w(n)
0.4 0.4
0.2 0.2
0 0
-100 -50 0 50 100 -100 -50 0 50 100
n n
Rys. 12.12. Przykłady okien dyskretnych dla M = 100, N = 2M+1 = 201. Po lewej: okno Hamminga, Han-
ninga i Blackmana, zdefiniowane w tabeli 12-6 (kolejno coraz węższe). Po prawej: parametryczne okno
Kaisera dla β = 1, 5, 10, 15 (wraz ze wzrostem wartości β okno staje się coraz węższe)

Tab. 12-6. Równania definicyjne różnych okien czasowych w(n) o długości nieparzystej N = 2M+1:
Asl − względny poziom tłumienia „listków” bocznych widma okna w stosunku do tłumienia „listka” głów-
nego, wyrażony w decybelach, ∆ml − unormowana szerokość „listka” głównego widma okna, równa ∆f / fpr
[Hz/Hz]. Współczynnik β jest dodatkowym parametrem okna Kaisera

Okno Definicja w(n), −M ≤ n ≤ M Asl ∆ml = ∆f / fpr [Hz/Hz]


Prostokątne 1 13,5 dB 2/(2M+1)
Bartletta 1−|n|/(M+1) 27,0 dB 4/(2M+1)

Hanninga 0,5+0,5cos(2πn/(2M+1)) 31,0 dB 4/(2M+1)

Hamminga 0,54+0,46cos(2πn/(2M+1)) 41,0 dB 4/(2M+1)

Blackmana 0,42+0,5cos(2πn/(2M+1))+0,08cos(4πn/(2M+1)) 57,0 dB 6/(2M+1)

Kaisera Io[ β (1−(n/M)2)0.5 ] / Io(β), Io(β) − funkcja Bessela dowolne dowolne

Tab. 12-7. Wybór rodzaju okna podczas projektowania filtrów FIR metodą „okien”

Okno Tłumienie filtra*) Współczynnik K


Prostokątne 21 dB 2,00
Trójkątne (Bartletta) 25 dB 4,00
Hanninga 44 dB 4,00
Hamminga 53 dB 4,00
Blackmana 74 dB 6,00
Kaisera (β = 2,12) 30 dB 1,54
Kaisera (β = 4,54) 50 dB 2,93
Kaisera (β = 7,76) 70 dB 4,32
Kaisera (β = 8,96) 90 dB 5,71
*) wysokość najwyższego listka w paśmie zaporowym
336 Projektowanie nierekursywnych filtrów cyfrowych

Zastosowanie okna Kaisera

Projektując filtry cyfrowe metodą okien najkorzystniej jest zastosować parametryczne okno
Kaisera, które było szczegółowo omówione w pkt. 8.4.2. Dobierając w odpowiedni sposób
parametry tego okna, tzn. jego długość N oraz wartość parametru β, jesteśmy w stanie w spo-
sób kontrolowany zmieniać jego kształt, a co za tym idzie wpływać w świadomy sposób na
kształt jego widma. To z kolei decyduje o właściwościach projektowanego filtra:
− im bardziej stromy jest listek główny widma okna, tym bardziej stroma jest charakterystyka
amplitudowo-częstotliwościowa filtra (krótkie pasmo przejściowe);
− im niżej leżą listki boczne widma okna, tym większe jest tłumienie filtra w paśmie zaporo-
wym.
Projektowanie dolnoprzepustowych filtrów cyfrowych metodą okien z wykorzystaniem okna
Kaisera przebiega według scenariusza podanego w tabeli 12-8. Jako przykład wyznaczymy
odpowiedź impulsową hw(M)(n) dolnoprzepustowego filtra cyfrowego, spełniającego następują-
ce założenia:
• częstotliwość próbkowania: f pr = 1000 Hz
• częstotliwość graniczna: f0 = 200 Hz
• szerokość pasma przejściowego: ∆f = 25 Hz
• liniowość w paśmie przepustowym: δpass = 0,001
• „przepustowość” w paśmie zaporowym δstop = 0,00001
W wyniku zastosowania algorytmu z tabeli 12-8 otrzymujemy następujące wartości parame-
trów:
A = 100 dB; β = 10,0613; M = 128; N = 257
Na rysunku 12.14 przedstawiono uzyskane współczynniki wagowe filtra hw(n) (przed przesu-
nięciem w prawo o M = 128 próbek) oraz moduł jego charakterystyki amplitudowo-częstotli-
wościowej.

Tab. 12-8. Algorytm projektowania dolnoprzepustowych filtrów cyfrowych typu FIR typu I (symetrycz-
nych o długości nieparzystej N = 2M+1) metodą okien z wykorzystaniem okna Kaisera

1. Podaj parametry wymaganej charakterystyki częstotliwościowejHw(M)(ej2π f / fpr):


• określ dopuszczalny poziom oscylacji w paśmie przejściowym δpass (np. 0,01 wokół 1) oraz żądaną
przepustowość filtra w paśmie zaporowym δstop (np. przepuszczanie 0,001 wejścia);
• podaj szerokość ∆f (w hercach) najbardziej stromego zbocza charakterystyki filtra.
2. Wyznacz A ze wzoru:

( )
δ = min δ pass , δ stop , A = −20log10 ( δ )

3. Oblicz parametr β okna Kaisera ze wzoru:

 0, dla A < 21 dB

β = 0,5842 ( A − 21) + 0,07886 ( A − 21) ,
0,4
dla 21 dB ≤ A ≤ 50 dB
 0,1102 ( A − 8,7 ) , dla A > 50 dB

4. Oblicz nieparzystą długość filtra, spełniającego zadane wymagania ze wzoru (fpr oznacza częstotliwość
próbkowania):
Projektowanie nierekursywnych filtrów cyfrowych 337

Tab. 12-8 (cd.)

A − 7,95 f pr
N≥
14,36 ∆f
5. Oblicz współczynniki okna Kaisera dla danego β i M:
 I  β 1 − (n / M ) 2 
 0  
wK [n ] =  , −M ≤n≤ M
 I 0 (β )
 0, dla pozostałych
gdzie I0(x) to zmodyfikowana funkcja Bessela zerowego rzędu.
6. Wymnóż wyznaczoną w sposób analityczny odpowiedź impulsową h(n) filtra idealnego z tabeli 12-5
(nieskończone, gasnące oscylacje typu sinx/x) z oknem Kaisera wK(n):
hw ( n ) = h( n ) wK ( n ), − M ≤ n ≤ M
7. Przesuń w prawo wyznaczoną odpowiedź impulsową o M próbek:
hw( M ) ( n ) = hw (n − M ), 0 ≤ n ≤ N − 1

0.4
0.3
0.2
hw(n)

0.1
0
-0.1
-120 -100 -80 -60 -40 -20 0 20 40 60 80 100 120
n

0
-20
|Hw(ejΩ)| [dB]

-40
-60
-80
-100
-120
-140
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz]
Rys. 12.14. Zaprojektowana odpowiedź impulsowa filtra hw(n) oraz jej widmo Fouriera Hw(ejΩ)

Ćwiczenie komputerowe
W tabeli 12-9 został przedstawiony program komputerowy, z pomocą którego zaprojektowano
filtr przedstawiony na rysunku 12.14 (metoda okien z oknem Kaisera). Umożliwia on proje-
ktowanie odpowiedzi impulsowych filtrów LP, HP, BP i BS typu I (symetryczne o długości
nieparzystej).
338 Projektowanie nierekursywnych filtrów cyfrowych

Tab. 12-9. Przykładowy program komputerowy implementujący metodę „okien” z oknem Kaisera

% Ćwiczenie: Projektowanie nierekursywnych filtrów cyfrowych metodą okien z zastosowaniem okna


% Kaisera

% Podaj parametry filtra (np. pasmowozaporowego)


fpr = 1000; % częstotliwość próbkowania [Hz]
fd1 = 150; % częstotliwość dolna 1 [Hz]
fd2 = 200; % częstotliwość dolna 2 [Hz]
fg1 = 300; % częstotliwość górna 1 [Hz]
fg2 = 350; % częstotliwość górna 2 [Hz]
dp = 0.001; % oscylacje w paśmie przepustowym np. 0.1, 0.01, 0.001
ds = 0.0001; % oscylacje w paśmie zaporowym np. 0.001, 0.001, 0.0001
typ = 'bs'; % lp=LowPass, hp=HighPass, bp=BandPass, bs=BandStop
% Oblicz parametry okna
if (typ=='lp') % Filtr LP
df=fd2-fd1; fc=((fd1+fd2)/2)/fpr; wc=2*pi*fc;
end
if (typ=='hp') % Filtr HP
df=fg2-fg1; fc=((fg1+fg2)/2)/fpr; wc=2*pi*fc; end
if (typ=='bp' | typ=='bs') % Filtr BP lub BS
df1=fd2-fd1; df2=fg2-fg1; df=min(df1,df2);
f1=(fd1+(df/2))/fpr; f2=(fg2-(df/2))/fpr; w1=2*pi*f1; w2=2*pi*f2;
end
% dp=((10^(Ap/20))-1)/((10^(Ap/20))+1); % opcjonalne przeliczenie Ap i As w [dB]
% ds=10^(-As/20); % na dp i ds
d=min(dp,ds); A=-20*log10(d);
if (A>=50) beta=0.1102*(A-8.7); end
if (A>21 & A<50) beta=(0.5842*(A-21)^0.4)+0.07886*(A-21); end
if (A<=21) beta=0; end
if (A>21) D=(A-7.95)/14.36; end
if (A<=21) D=0.922; end
N=(D*fpr/df)+1; N=ceil(N); if(rem(N,2)==0) N=N+1; end
N
pause
M = (N-1)/2; m = 1 : M; n = 1 : N;
% Wygeneruj okno
w = besseli( 0, beta * sqrt(1-((n-1)-M).^2/M^2) ) / besseli(0,beta);
plot(n,w); title('Funkcja okna'); grid; pause
% Wygeneruj odpowiedź impulsową filtra
if (typ=='lp') h=2*fc*sin(wc*m)./(wc*m); h=[ fliplr(h) 2*fc h]; end % filtr LP
if (typ=='hp') h=-2*fc*sin(wc*m)./(wc*m); h=[ fliplr(h) 1-2*fc h]; end % filtr HP
if (typ=='bp') % filtr BP
h = 2*f2*sin(w2*m)./(w2*m) - 2*f1*sin(w1*m)./(w1*m);
h = [ fliplr(h) 2*(f2-f1) h];
end
if (typ=='bs') % filtr BS
h = 2*f1*sin(w1*m)./(w1*m) - 2*f2*sin(w2*m)./(w2*m);
h = [ fliplr(h) 1+2*(f1-f2) h];
end
plot(n,h); title('Odp impulsowa filtra'); grid; pause
% Wymnóż odp impulsową filtra z funkcją okna
hw = h.* w;
plot(n,hw,'b'); title('Odpowiedz impulsowa filtra z oknem'); grid; pause
% Charakterystyka częstotliwościowa
NF = 1000; fmin = 0; fmax = fpr/2; % wartości parametrów charakterystyki
f = fmin : (fmax-fmin)/(NF-1) : fmax; % częstotliwość
w = 2*pi*f/fpr; % pulsacja
HW = freqz(hw,1,w); % widmo Fouriera
plot(f,abs(HW)); grid; title('Moduł'); xlabel('freq [Hz]'); pause
plot(f,20*log10(abs(HW))); grid; title('Moduł dB'); xlabel('[Hz]'); ylabel('dB');
pause
plot(f,unwrap(angle(HW))); grid; title('FAZA'); xlabel('[Hz]'); ylabel('[rad]'); pause
Projektowanie nierekursywnych filtrów cyfrowych 339

12.6. Filtry specjalne


12.6.1.Filtr Hilberta

Ciągła transformacja Hilberta

Przypomnijmy, w rozdziale drugim została podana definicja ciągłej transformacji Hilberta:

1 π xr ( τ )
xi ( t ) = H [ xr ( t )] = ∫ dτ ↔ X i ( jω) = H ( jω) X r ( jω) (12.63)
π −π t − τ

która przekształca sygnał xr(t) o wartościach rzeczywistych w sygnał xi(t), przyjmujący także
rzeczywiste wartości. Definicja transformacji odwrotnej jest następująca:

1 π xi ( τ )
xr ( t ) = H −1 [ xi (t )] = − ∫ dτ ↔ X r ( jω) = H −1 ( jω) X i ( jω) (12.64)
π −π t − τ

Równania (12.63), (12.64) są równaniami splotu (filtracji analogowej): w (12.63) sygnał xr(t)
jest splatany z odpowiedzią impulsową 1/(πt), a w (12.64) − z odpowiedzią impulsową −1/(πt).
Filtry te mają charakterystykę częstotliwościową (transmitancję widmową) równą:

− j, ω > 0  j, ω> 0
 
H ( jω) =  0 , ω = 0 , H ( jω) =  0,
−1
ω=0 (12.65) (12.66)
 j, ω < 0 − j, ω< 0
 

Z równań (12.65), (12.66) wynika, że oba filtry są przesuwnikami fazowymi o ±π/2 oraz że
|H(jω)| = |H−1(jω)| = 1. Charakterystyki częstotliwościowe pierwszego filtra (12.65) są przedsta-
wione na rysunku 12.15. Jak widać nie zmienia on amplitudy sygnału, tylko przesuwa go
w fazie (pulsacje dodatnie są przesuwane o −π/2). Charakterystyka fazowa drugiego filtra (od-
wrotnej transformacji Hilberta) jest zanegowaniem charakterystyki filtra pierwszego. Jeśli za
pomocą wzoru (12.63) filtrowany jest sygnał kosinusoidalny:
xr(t) = cos(ω0t)
to wówczas:
xi (t ) = cos(ω0t − π / 2 ) = cos(ω0t )cos(π / 2 ) + sin (ω0t )sin (π / 2 ) = sin(ω0 t )
oraz
x (t ) = x r (t ) + jxi (t ) = cos(ω0 t ) + j sin(ω0 t ) = e jω0 t

Dla dociekliwych. Obecnie postaramy się wyprowadzić zależność (12.65) z definicji (12.63).
Z rozdziału 4.3 wiemy, że sygnał znaku x(t) = sgn(t) ma transformatę Fouriera postaci X(jω) =
= 2/(jω):
2
x (t ) = sgn(t ) ↔ X ( jω) = (12.67)

Równocześnie ciągła transformacja Fouriera odznacza się właściwością „dualności”:
X(jt) ↔ 2πx(−ω)
340 Projektowanie nierekursywnych filtrów cyfrowych

W związku z tym transformata Fouriera sygnału y(t) = 2/(jt) jest równa:


2
y (t ) = ↔ Y ( jω) = 2π sgn(− ω) = −2π sgn(ω) (12.68)
jt

Wynika stąd, że filtr o odpowiedzi impulsowej h(t) = 1/(πt) ma transformatę Fouriera równą:
1
h (t ) = ↔ H ( jω) = − j sgn(ω) (12.69)
πt
Otrzymaliśmy w ten sposób zależność (12.65), przedstawioną na rysunku 12.15 (zgodność
z wyłączeniem punktu ω = 0).

W wyniku następującego złożenia (1.7) sygnałów xr(t) i xi(t) o wartościach rzeczywistych:


x (t ) = x r (t ) + j ⋅ xi (t ) = x r (t ) + j ⋅ H ( x r (t )) (12.70)

otrzymujemy sygnał zespolony x(t), nazywany sygnałem „analitycznym” (patrz rysunek


12.16). Oznaczymy przez X(jω), Xr(jω) i Xi(jω) widma Fouriera sygnałów x(t), xr(t) i xi(t),
wówczas widmo sygnału analitycznego jest równe:
X ( jω) = X r ( jω) + jX i ( jω) = X r ( jω) + jH ( jω) X r ( jω) = [1 + jH ( jω)] X r ( jω) (12.71)

Dla ω ≥ 0 otrzymujemy:
X ( jω) = [1 + j ( − j )] X r ( jω) = 2 X r ( jω) (12.72)

a dla ω < 0 mamy:


X ( jω) = [1 + j ( j )] X r ( jω) = [1 − 1] X r ( jω) = 0 (12.73)

|H(jω)|
∠H(jω)

π/2
1
ω

ω −π/2

Rys. 12.15. Charakterystyka amplitudowa i fazowa filtra Hilberta

xr(t) xr(t)
x(t)=xr(t)+jxi(t)
Transformacja
jxi(t)
Hilberta

Rys. 12.16. Wyznaczanie zespolonego sygnału „analitycznego”


Projektowanie nierekursywnych filtrów cyfrowych 341

Xr(jω) jXi(jω) X(jω)

ω ω ω

Rys. 12.17. Przykładowy kształt widm Xr(jω), Xi(jω) i X(jω)

Wynika stąd, że dla pulsacji nieujemnych widmo sygnału analitycznego X(jω) jest równe po-
dwojonemu widmu Xr(jω), a dla pulsacji ujemnych jest ono równe zero. Nie występuje więc
w tym przypadku symetria widma F(ω) = F*(−ω), charakterystyczna dla sygnałów rzeczywis-
tych. Na rysunku 12.17 pokazano przykładowy kształt widm Xr(jω), jXi(jω) i X(jω), przy
założeniu, że Xr(jω) przyjmuje wyłącznie wartości rzeczywiste (wówczas wszystkie widma
mają wyłącznie wartości rzeczywiste). Jak widać dla ω < 0 widma Xr(jω) i jXi(jω) wzajemnie
się odejmują. Analogicznie jest w przypadku, kiedy widmo Xr(jω) przyjmuje wartości zespo-
lone i jest (a)symetryczne: Xr(ω) = Xr*(−ω).
Oczywiście z sygnału x(t) można „odtworzyć” sygnały xr(t) i xi(t), a z widma X(jω) − widma
Xr(jω) i Xi(jω). Z liniowości ciągłego przekształcenia Fouriera oraz właściwości x*(t) ↔
X*(−jω):
+∞ *
− jωt
+ ∞ 
∫x
*
(t ) e dt =  ∫ x (t )e jωt dt  = X * ( − jω) (12.74)
−∞  − ∞ 

wynika bowiem, że:


1 1
xr ( t ) = x ( t ) + x* ( t )  ↔ X r ( jω) = X ( jω) + X * ( − jω)  (12.75)
2  2 

1  1 
xi ( t ) = x ( t ) − x* ( t )  ↔ X i ( jω) = X ( j ω) − X * ( − j ω )  (12.76)
2j  2j 

Dyskretna transformacja Hilberta

Wyprowadzone powyżej zależności widmowe (transmitancyjne) (12.65)−(12.73) filtra Hilberta


są także prawdziwe dla sygnałów dyskretnych. W tym przypadku ω jest zastępowane przez
unormowaną pulsację Ω = 2πf/fpr i wszystkie widma X(ejΩ), Xr(ejΩ) i Xi(ejΩ) powtarzają się
okresowo co 2π. Splot (12.63) przyjmuje teraz postać dyskretną:

xi ( n ) = ∑ hH ( n − m) x r (m ) (12.77)
m = −∞

Odpowiedź impulsową dyskretnego filtra Hilberta wyznacza się ze wzoru:


π
jΩ
hH (n ) = ∫ H H (e )e jΩn dΩ (12.78)
−π
342 Projektowanie nierekursywnych filtrów cyfrowych

Uwzględniając (12.65) otrzymujemy z niego:


π
j  1 jΩn 1 jΩn 
0 π 0
1 1
hH (n ) = ∫ je jΩn dΩ + ∫ ( − j )e jΩn dΩ =  e − e 
2π − π 2π 0 2π  jn jn 0
 −π 

=
1
2 πn
[ ]
(e j 0 − e − jπn ) − ( e jπn − e j 0 ) =
1
2 πn
[2 − 2 cos πn] = 1 [1 − cos πn]
πn
Ponieważ prawdziwa jest następująca zależność trygonometryczna:
1 − cos 2α
sin 2 α =
2
ostatecznie otrzymujemy:

2 sin 2 (πn / 2 ) sin 2 (πn / 2 )


hH (n ) = =
πn πn / 2
Po zastosowaniu reguły d’Hospitala do powyższej zależności, otrzymujemy wzór podający ex-
plicite wartość próbki zerowej filtra:

 sin 2 (πn / 2 )

h H ( n ) =  πn / 2 , n ≠ 0 (12.79)
 0, n = 0

Rysunek 12.18 stanowi ilustrację problemu projektowania filtra Hilberta. Oczywiście podczas
filtracji cyfrowej nie jest możliwe uwzględnienie wszystkich jej próbek. Podobnie jak w przy-
padku innych filtrów musimy zastosować funkcję okna czasowego. W zależności od rodzaju
użytego okna oraz wyboru wartości jego parametrów, w tym długości, uzyskuje się różny
kształt charakterystyki amplitudowej filtra Hilberta. Na rysunku 12.18a są pokazane próbki
fragmentu odpowiedzi impulsowej dyskretnego filtra Hilberta (12.79) dla −10 ≤ n ≤ 10 oraz
odpowiadające mu charakterystyki częstotliwościowe: amplitudowa i fazowa. Jest to przypa-
dek zastosowania okna prostokątnego w(n) jako funkcji wycinającej (hw(n) = h(n)w(n)). Wyni-
kowa charakterystyka amplitudowo-cząstotliwościowa filtra jest silnie zafalowana, podobnie
jak widmo okna prostokątnego. Wzrost długości okna z 21 do 41 próbek (linia przerywana)
rozszerzył pasmo użytkowe filtra, w którym wzmocnienie jest równe w przybliżeniu 1, ale nie
zlikwidował oscylacji charakterystyki amplitudowej tylko je zmniejszył. Charakterystyka fazo-
wa wskazuje, że filtr Hilberta przesuwa sygnał w fazie o minus 90 stopni. Z kolei na rysunku
12.18b przedstawiono przypadek zastosowania okna Blackmana. Uzyskujemy dużą liniowość
charakterystyki w paśmie przepustowym. Dodatkowo zwiększając długość okna (linia prze-
rywana) jesteśmy w stanie zwiększyć szerokość tego pasma oraz poprawić stromość zboczy
filtra. Jak widać, w przedstawionej realizacji filtr Hilberta jest filtrem pasmowoprzepustowym.
Wraz ze wzrostem jego długości okna (właściwie dobranego) pasmo przepustowe filtra staje
się coraz szersze, a jego zbocza coraz bardziej strome, czyli charakterystyka amplitudowa filtra
coraz bardziej upodabnia się do idealnej charakterystyki „prostokątnej” (brak modyfikacji
amplitudy sygnałów tylko ich przesunięcie w fazie). Na zafalowania charakterystyki w paśmie
przepustowym można wpływać poprzez dobór okna o odpowiednio niskim poziomie listków
bocznych. I w tym przypadku często wykorzystuje się parametryczne okno Kaisera.
Projektowanie nierekursywnych filtrów cyfrowych 343

a) z oknem prostokątnym b) z oknem Blackmana

0.6 0.6
0.4 0.4
0.2 0.2
hw(n)

hw(n)
0 0
-0.2 -0.2
-0.4 -0.4
-0.6 -0.6
-10 -5 0 5 10 -10 -5 0 5 10
n n

1.2 1
1 0.8
0.8
|Hw(ejΩ)|

|Hw(ejΩ)|
0.6
0.6
0.4
0.4
0.2 0.2
0 0
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

0 0
faza Hw(ejΩ) [deg]

faza Hw(ejΩ) [deg]

-45 -45

-90 -90

-135 -135

-180 -180
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

Rys. 12.18. Filtr Hilberta. Od góry do dołu: odpowiedź impulsowa hw(n), charakterystyka amplitudowo-
-częstotliwościowa |Hw(ejΩ)|, charakterystyka fazowo-częstotliwościowa ∠ Hw(ejΩ)|. M = 10 (N = 2M+1 =
= 21). Linią przerywaną zaznaczono przypadek M = 20 (N = 2M+1 = 41)

Dla dociekliwych. Alternatywną metodą obliczenia sygnału xi(n) lub x(n) jest zastosowanie
algorytmu szybkiej transformacji Fouriera FFT i skorzystanie z zależności częstotliwościo-
wych (12.65)(12.72):
FFT ( N ) FFT −1 ( N )
x r ( n )  → X r ( e jΩk ) → X i (e jΩk ) = H (e jΩk ) X r (e jΩk )    → x i ( n )

FFT ( N ) FFT −1 ( N )
x r ( n )  → X r ( e jΩk ) → X ( e jΩk ) = W ( e jΩk ) X r ( e jΩk )    → x ( n )

gdzie
n = 0, 1, 2, ..., N−1, k = 0, 1, 2, ..., N−1, Ωk = k2π / N
344 Projektowanie nierekursywnych filtrów cyfrowych

W pierwszej metodzie wymnaża się wartości prążków widma Xr(k)=Xr(ejΩk) z wartościami


transmitancji filtra Hilberta (12.65):

 0, k =0
− j, k = 1...( N / 2 − 1)

H (k ) = H (e jΩ k ) = 
 0, k = N /2
 j, k = ( N / 2)...( N − 1)

i otrzymuje się na wyjściu rzeczywisty sygnał xi(n), w drugiej zaś metodzie korzysta się z wła-
ściwości (12.72), (12.73) widma sygnału analitycznego, modyfikuje się wartości Xr(k) nastę-
pującą funkcją „wagową”:

 1, k =0
2, k = 1...( N / 2 − 1)

W (k ) = W (e jΩ k )=
 1, k = N /2
0, k = ( N / 2)...( N − 1)

i uzyskuje się sygnał analityczny x(n). Funkcja hilb() w języku Matlab pracuje według dru-
giego scenariusza. W obu powyższych metodach należy uwzględnić okresowość widm sygna-
łów dyskretnych i ujemnych pulsacji „szukać” w górnej części widma (k = N/2, ..., N−1).

Przykłady zastosowań

Przykład 1. Demodulacja chwilowej amplitudy. Załóżmy, że mamy sygnał rzeczywisty x(t)


postaci:
x (t ) = A(t ) cos( ωt + φ(t ))

Po transformatorze Hilberta (rysunek 12.16) otrzymujemy:

y ( t ) = A(t ) e j ( ωt +φ( t ))

Wartość bezwzględna sygnału y(t) jest równa:


| y (t ) |=| A(t ) |

Jeśli A(t) > 0, wówczas |y(t)| = A(t). Tak więc obliczając |y(t)|, jesteśmy w stanie wyznaczyć
chwilową wartość amplitudy A(t) dla dowolnej chwili czasowej t, czyli dokonać demodulacji
amplitudy sygnału x(t). Przykładem może być demodulacja AM sygnału radiowego.

Przykład 2. Demodulacja chwilowego przesunięcia fazowego. Załóżmy, że mamy dwa sygna-


ły rzeczywiste x1(t) i x2(t) o następującej postaci:
x1 (t ) = A1 (t ) cos(ωt + φ1 (t )) , x2 (t ) = A2 (t ) cos( ωt + φ2 (t ))

o wolnozmiennych amplitudach A1(t) i A2(t). Metodą transformacji Hilberta przekształcamy je


na sygnały analityczne:

y1 (t ) = A1 (t ) e (
j ωt +φ1 ( t ) )
, y 2 (t ) = A2 (t )e j(ωt +φ2 (t ))
Projektowanie nierekursywnych filtrów cyfrowych 345

Jeśli wymnożymy sprzężenie zespolone pierwszego z sygnałów analitycznych przez sygnał


drugi, otrzymamy:

z (t ) = y1* (t ) y2 ( t ) = A1 (t ) A2 (t )e (
j −ωt −φ1 ( t ) +ωt +φ2 ( t ) )
= A1 (t ) A2 ( t )e ( 2
j φ ( t ) −φ1 ( t ) )

Wynika stąd, że w dowolnej chwili czasowej przesunięcie fazowe pomiędzy sygnałami x1(t)
i x2(t) może być w prosty sposób wyznaczone ze wzoru:

 imag( z (t )) 
∆φ(t ) = φ2 (t ) − φ1 (t ) = arctg 
 real (z (t )) 
W przypadku dysponowania zaszumionymi sygnałami, z(t) wyznacza się ze wzoru:
T T
z (t ) = ∫ w( τ) y1* ( t + τ ) y2 ( t + τ ) d τ, ∫ w( τ ) d τ = 1
−T −T

jako ważoną średnią bieżącą iloczynu sygnałów y1*(t) i y2*(t), gdzie w(τ) jest rzeczywistą fun-
kcją wagową (co jest równoznaczne filtracji z(t) za pomocą w(t)). Jest także możliwe „odszu-
mianie” samego przesunięcia fazowego ∆φ(t).

12.6.2.Filtr różniczkujący

Obecnie zajmiemy się wyprowadzeniem odpowiedzi impulsowej dyskretnego filtra różnicz-


kującego. Przypomnijmy, ciągła transformacja Fouriera ma następującą właściwość „pochod-
nej”:
dx(t )
x (t ) ↔ X ( jω), y (t ) = ↔ Y ( jω) = jωX ( jω) (12.80)
dt
Wynika stąd, że różniczkowanie sygnału uzyskuje się poprzez jego „przepuszczenie” przez
układ o transmitancji H(jω) = jω. W przypadku układów dyskretnych, filtr różniczkujący po-
winien mieć H(ejΩ) równe jΩ. W związku z tym jego odpowiedź impulsowa hD(n) jest dana
wzorem:
π π
1 1
hD (n ) = ∫ ( jΩ)( e jΩn )dΩ = ∫ ( jΩ)(2 j sin(Ωn )) dΩ
2π − π 2π 0

π
1
π ∫0
=− Ω sin(Ωn )dΩ (12.81)

gdyż transmitancja H(ejΩ) jest asymetryczna względem punktu Ω = 0 i do jej „aproksymacji”


wystarczą wyłącznie składowe sinusoidalne. Do ostatniego wzoru można zastosować metodę
całkowania przez części:

∫ udv = uv − ∫ vdu
gdzie u i v są funkcjami zmiennej Ω, mającymi ciągłą pochodną. Wówczas
1
u = Ω, dv = sin(Ωn )dΩ → v = ∫ dv = ∫ sin(Ωn )dΩ = − cos(Ωn )
n
346 Projektowanie nierekursywnych filtrów cyfrowych

a) z oknem prostokątnym b) z oknem Blackmana

1 1

0.5 0.5
hw(n)

hw(n)
0 0

-0.5 -0.5

-1 -1
-10 -5 0 5 10 -10 -5 0 5 10
n n

3.5 3.5
3 3
2.5 2.5
|Hw(ejΩ)|

|Hw(ejΩ)|
2 2
1.5 1.5
1 1
0.5 0.5
0 0
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

180 180
faza Hw(ejΩ) [deg]

faza Hw(ejΩ) [deg]

135 135

90 90

45 45

0 0
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.19. Filtr różniczkujący. Od góry do dołu: odpowiedź impulsowa hw(n), charakterystyka amplitu-
dowo-częstotliwościowa |Hw(ejΩ)|, charakterystyka fazowo-częstotliwościowa ∠Hw(ejΩ), M = 10 (N = 2M+
+1 = 21). Linią przerywaną zaznaczono przypadek M = 20 (N = 2M+1 = 41)

skąd otrzymujemy:
π π
1  1   1  
hD (n ) = − Ω − cos(Ωn )  − ∫  − cos(Ωn ) dΩ
π  n 0 0 n  

π
1  1  11   cos( πn )
= − π − cos( πn )  +  sin(Ωn )   = (12.82)
π  n  nn  0  n

Odpowiedź impulsowa filtra różniczkującego jest przedstawiona na rysunku 12.19a. Teraz po-
zostaje nam tylko ograniczyć jej długość poprzez wymnożenie z wybranym oknem czasowym
(patrz metoda okien).
Projektowanie nierekursywnych filtrów cyfrowych 347

Przykład. Na rysunku 12.19a są pokazane próbki fragmentu odpowiedzi impulsowej filtra róż-
niczkującego (12.82) dla −10 ≤ n ≤ 10 oraz odpowiadające mu charakterystyki częstotliwo-
ściowe: amplitudowa i fazowa. Odpowiadają one przypadkowi zastosowania 21-punktowego
okna prostokątnego jako funkcji „wycinającej” (hw(n) = h(n)w(n)) i mają wady związane z tą
funkcją, czyli duże oscylacje charakterystyki amplitudowej. Wzrost długości okna do 41 pró-
bek (linia przerywana) zmniejszył oscylacje i poszerzył pasmo filtra. Na rysunku 12.19b
przedstawiono przypadek zastosowania okna Blackmana jako wagowej funkcji „obserwacji”.
Uzyskano liniową charakterystykę amplitudową za cenę zmniejszenia zakresu częstotliwości,
w którym filtr różniczkuje sygnał wejściowy.

12.6.3. Filtr interpolatora i decymatora cyfrowego

W cyfrowym przetwarzaniu sygnałów często zachodzi potrzeba (lub konieczność) zmiany czę-
stotliwości próbkowania sygnałów cyfrowych już spróbkowanych. Przykładem mogą być sy-
stemy radiowe, w których dokonuje się konwersji bardzo różnych częstotliwości próbkowania
sygnałów (np. 8; 11,025; 16; 22,05; 24; 32; 44,1; 48 kHz) podczas ich odtwarzania w zależ-
ności od częstotliwości pracy wyjściowego przetwornika cyfrowo-analogowego. Często też
miksuje się (dodaje) różne sygnały radiowe po stronie cyfrowej, a to wymaga, aby dodawane
sygnały były identycznie spróbkowane.
Dokonując zmiany częstotliwości próbkowania sygnałów dyskretnych x(n) należy pamiętać
o konieczności spełnienia twierdzenia Nyquista (Kotielnikowa-Shannona), według którego
częstotliwość próbkowania sygnału musi być minimum dwa razy większa od maksymalnej
częstotliwości występującej w sygnale. Co prawda twierdzenie to zostało już uwzględnione
podczas pierwotnego próbkowania sygnału, ale także obowiązuje podczas jego dalszego
„repróbkowania” po stronie cyfrowej.
Do zmiany częstotliwości próbkowania sygnałów dyskretnych wykorzystuje się układy K-krot-
nego interpolatora i L-krotnego decymatora cyfrowego. Ich schematy blokowe są przedsta-
wione na rysunku 12.20. Składają się one, odpowiednio, z K-krotnego ekspandera oraz L-krot-
nego reduktora, które współpracują z dolnoprzepustowymi filtrami o odpowiedziach impulso-
wych h(n) i g(n). Pierwszy z tych filtrów jest nazywany filtrem interpolującym, a drugi − fil-
trem decymującym. Zasada działania ekspandera i reduktora cyfrowego jest pokazana rysunku
12.21. Układy interpolatora i decymatora mogą być połączone kaskadowo i wówczas umożli-
wiają zmianę częstotliwości próbkowania w stosunku K/L. W takim przypadku należy za-
stososować filtr o węższym paśmie przepustowym. Należy pamiętać, aby w kaskadzie inter-
polator wyprzedzał decymator. W przypadku interpolacji lub decymacji wysokiego rzędu, np.
100-krotnej, ze względów obliczeniowych jest korzystnie przeprowadzać ją stopniowo w ukła-
dzie kaskadowym, na przykład decymując najpierw sygnał 25-krotnie, a potem 4-krotnie.
Spowodowane to jest dużą długością filtrów decymujących i interpolujących w przypadku
jednoczesnego wymagania dużej stromości charakterystyki amplitudowo-częstotliwościowej
i wąskiego pasma przepustowego filtra.

Przykład. Poniżej są przedstawione przykłady interpolacji i decymacji próbek sygnałów dy-


skretnych:
sygnał oryginalny x(n): 0 2 4 6 4 2 0
↓ ↓ ↓ ↓ ↓ ↓ ↓
sygnał interpolowany xi(n): 0 1 2 3 4 5 6 5 4 3 2 1 0
348 Projektowanie nierekursywnych filtrów cyfrowych

a) interpolator b) decymator

x(n) xe(m) ye(n) x(n) y(n) yr(n)


↑K h(n) g(n) ↓L

ekspander filtr LP filtr LP reduktor

Rys. 12.20. Schemat blokowy układu: intepolatora cyfrowego K-tego rzędu (po lewej) oraz decymatora cy-
frowego L-tego rzędu (po prawej)

x(n) xe(n) x(n) xr(n)


↑2 ↓2

x(n) x(n)

0 1 2 3 4 5 6 7 8 n 0 1 2 3 4 5 6 7 8 n

xe(n) xr(n)

0 1 2 3 4 5 6 7 8 9 n 0 1 2 3 4 5 6 7 8 9 n

ekspander reduktor

Rys. 12.21. Ilustracja graficzna zasady działania ekspandera i reduktora cyfrowego drugiego rzędu
(K = L = 2). Ekspander wstawia K−1 zer pomiędzy każde dwie próbki, reduktor zaś pozostawia co L-tą
próbkę

sygnał oryginalny x(n): 0 1 2 3 4 5 6 5 4 3 2 1 0


↓ ↓ ↓ ↓ ↓ ↓ ↓
sygnał decymowany xd(n): 0 2 4 6 4 2 0

sygnał oryginalny x(n): 0 1 2 3 4 5 6 5 4 3 2 1 0


↓ ↓ ↓ ↓ ↓
sygnał decymowany xd(n): 0 1,5 3 4,5 6 4,5 3 1,5 0

Bardziej szczegółowe przedstawienie zagadnienia interpolacji i decymacji sygnałów dyskret-


nych można znaleźć w pkt. 18.2.1.

Filtr interpolatora

K-krotnym interpolatorem cyfrowym nazywa się układ, który zastępuje każdą próbkę sygnału
K próbkami, czyli zwiększa K-krotnie częstotliwość próbkowania. Jego schemat blokowy jest
przedstawiony na rysunku 12.20a. Co prawda od dawna są powszechnie znane różne wymyślne
Projektowanie nierekursywnych filtrów cyfrowych 349

metody interpolacji danych na podstawie skończonego zbioru punktów „pomiarowych” (np. za


pomocą różnych funkcji wielomianowych lub funkcji sklejanych), ale w cyfrowym przet-
warzaniu sygnałów powszechnie stosuje się do tego celu tzw. K-krotne filtry interpolujące.
W układzie interpolatora na początku znajduje się ekspander (rysunek 12.21a), który dodaje
K−1 próbek o wartościach zerowych pomiędzy każde dwie próbki sygnału (czyli w sposób
sztuczny K-krotnie zwiększa on częstotliwość „próbkowania” i pozornie rozszerza pasmo
sygnału), a następnie wygładza się tak „spreparowany” sygnał filtrem interpolującym, ponow-
nie ograniczając K-krotnie pasmo sygnału do zadanego. Filtr interpolujący jest filtrem dolno-
przepustowym o unormowanej pulsacji granicznej Ω0 = π/K oraz unormowanej częstotliwości
granicznej F0 = Ω0/(2π) = 1/(2K) (patrz rysunek 12.8 i tabela 12-5), mającym teoretyczną
odpowiedź impulsową równą:

 1 sin( πn / K ) 
h(n) = K  , − ∞ < n < ∞ (12.83)
 K πn / K 
Jest to K-krotnie wzmocniona odpowiedź impulsowa filtra dolnoprzepustowego (12.56). Rów-
nanie (12.83) opisuje dyskretny sygnał postaci sin(x)/x (gasnące oscylacje), który się zeruje dla
n = pK (p to dowolna liczba całkowita), za wyjątkiem n = 0, dla którego przyjmuje wartość
h(0) = 1. Powoduje to, że w wyniku filtracji nie są modyfikowane znane („stare”) próbki
sygnału. Cała operacja interpolacji cyfrowej jest szczególnym przypadkiem rekonstrukcji syg-
nału analogowego na podstawie jego próbek (patrz rozdział 4.5 i rysunek 4.13). Jednak w tym
przypadku interesuje nas nie „cały”, ciągły fragment sygnału, leżący pomiędzy dowolnymi
dwoma jego próbkami, tylko dodatkowe K−1 równoodległe wartości.
W praktyce występuje konieczność ograniczenia długości filtra (12.83), dlatego wymnaża się
go z wybranym oknem w(n) (patrz rozdział 12.4 − metoda okien),
hw ( n ) = w(n )h( n ), − ∞ ≤ n ≤ ∞ (12.84)

mającym określone właściwości widmowe. Na rysunku 12.22a pokazano odpowiedź impulso-


wą filtra interpolującego piątego rzędu (K = 5) dla 31-elementowego (M = 15) okna prostokąt-
nego w(n) = 1, −M ≤ n ≤ M, oraz jego charakterystykę amplitudowo-częstotliwościową w skali
liniowej i logarytmicznej („decybelowej”). Jak widać jest to rzeczywiście filtr ograniczający
pięciokrotnie pasmo sygnału, gdyż |H(ejπ/5)| = 0,5, ale liniowość jego pasma przejściowego
oraz tłumienie pasma zaporowego pozostawiają wiele do życzenia. Wady filtra są konse-
kwencją zastosowania okna prostokątnego do wycięcia fragmentu h(n) (widmo Fouriera tego
okna charakteryzuje się bardzo wysokim poziomem listków bocznych). Zastosowanie okna
Blackmana o identycznej długości (M = 15) dało w wyniku odpowiedź impulsową i charakte-
rystykę częstotliwościową filtra przedstawioną na rysunku 12.22b, czyli o wiele korzystniejszą.
Zwróćmy uwagę, że pomnożenie funkcji h(n) (12.84) z dowolnym oknem w(n) nie zmienia jej
miejsc zerowania się, czyli podstawowej cechy filtra interpolującego.
Na rysunku 12.23 przedstawiono eksperymentalną weryfikację dyskutowanej powyżej 5-krot-
nej interpolacji, z wykorzystaniem filtra dolnoprzepustowego o odpowiedzi impulsowej poka-
zanej na rysunku 12.22b. Pomiędzy każde dwie oryginalne próbki sygnału sinusoidalnego
(czarne kwadraty) wstawiono cztery próbki „interpolujące” o wartościach zerowych (czarne
koła), a następnie dokonano filtracji tak zmodyfikowanego sygnału. W jej wyniku oryginalne
próbki (czarne kwadraty) nie zmieniły swojego położenia, natomiast dodane zera (czarne koła)
przesunęły się do obrysu interpolowanej sinusoidy (białe koła). Operacja przesuwania próbek
jest zaznaczona na rysunku strzałką.
350 Projektowanie nierekursywnych filtrów cyfrowych

a) z oknem prostokątnym b) z oknem Blackmana


1 1
0.75 0.75
h w (n) 0.5 0.5

h w (n)
0.25 0.25
0 0
-0.25 -0.25
-15 -10 -5 0 5 10 15 -15 -10 -5 0 5 10 15
n n

6 6
5 5
4 4
|Hw(ejΩ)|

|Hw(ejΩ)|
3 3
2 2
1 1
0 0
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]

20 20
0 0
|Hw(ejΩ)| [dB]

|Hw(ejΩ)| [dB]

-20 -20
-40 -40
-60 -60
-80 -80
-100 -100
0 0.1 0.2 0.3 0.4 0.5 0 0.1 0.2 0.3 0.4 0.5
Ω/2π [Hz/Hz] Ω/2π [Hz/Hz]
Rys. 12.22. Filtr interpolujący piątego rzędu (K = 5): a) odpowiedź impulsowa hw(n), b) charakterystyka
amplitudowo-częstotliwościowa |Hw(ejΩ)|. M = 15 (N = 2M+1 = 31). Co piąta próbka odpowiedzi impulso-
wych się zeruje

1
0.8
x we(n), y wy (n)

0.6
0.4
0.2
0
0 5 10 15 20 25 30 35 40 45 50
numer próbki n
Rys. 12.23. Wynik eksperymentalnej weryfikacji zastosowania odpowiedzi impulsowej filtra interpolu-
jącego z rysunku 12.12b (K = 5) do sygnału sinusoidalnego. Oznaczenia: „ − próbki oryginalne, z − dodane
zera, { − przesunięte zera w wyniku filtracji dolnoprzepustowej, © − operacja przesuwania próbek
Projektowanie nierekursywnych filtrów cyfrowych 351

Dla dociekliwych. Filtry K-krotnie interpolujące nie wyczerpują oczywiście możliwości inter-
polacji sygnałów dyskretnych. Ich ograniczeniem jest zawsze całkowitoliczbowa krotność in-
terpolacji. W przypadku kiedy interesuje nas interpolacja „wymierna”, nie K-krotna, np. N pró-
bek sygnału chcemy zastąpić M próbkami (M > N), możemy do tego celu wykorzystać algo-
rytm dyskretnej transformacji Fouriera DFT. Należy wówczas: 1) obliczyć DFT z N próbek
sygnału x(n), 2) w odpowiedni sposób dodać (M−N) wartości zerowych w środku N-elemen-
towego wektora prążków widma X(k) (zmodyfikowany wektor powinien mieć cechy widma
Fouriera sygnału rzeczywistego, czyli powinien być asymetryczny względem próbki M/2 przy
numerowaniu od 0 do M−1), 3) obliczyć M-punktowe odwrotne DFT ze zmodyfikowanego
widma X(k), 4) przeskalować wynik w amplitudzie za pomocą współczynnika M/N. Uzyskamy
w ten sposób M próbek sygnału x’(n) odległych o (N/M)⋅∆t, gdzie ∆t oznacza odległość pomię-
dzy próbkami sygnału oryginalnego x(n). Przykładowo dla parzystej wartości N i dowolnej
wartości M (M > N) do interpolacji sygnału może być zastosowany poniższy program, napi-
sany w języku Matlab:

% Algorytm interpolacji sygnału za pomocą dyskretnej transformacji Fouriera DFT (FFT)


M=24; N=16; n=0:N-1; x=sin(2*pi/8*n);
X = fft(x);
X = [ X(1:N/2) 0.5*X(N/2+1) zeros(1,M-N-1) conj(0.5*X(N/2+1)) X(N/2+2:N)];
y = M/N*real(ifft(X));
subplot(211); stem(x); % sygnał wejściowy
subplot(212); stem(y); pause % interpolowany sygnał wejściowy

Filtr decymatora

L-krotnym decymatorem cyfrowym nazywa się układ, który pozostawia w sygnale cyfrowym
co L-tą próbkę, czyli zmniejsza L-krotnie częstotliwość próbkowania. Jego schemat blokowy
jest przedstawiony na rysunku 12.20b. Aby spełnić wymagania twierdzenia o próbkowaniu,
przed układem L-krotnego reduktora (rysunek 12.21b) należy L-krotnie ograniczyć pasmo
sygnału za pomocą L-krotnego filtra decymującego o odpowiedzi impulsowej g(n). Jest to
filtr dolnoprzepustowy mający pulsację graniczną pasma zaporowego Ωstop = π/L. Jest to
jego podstawowa różnica w stosunku do filtra interpolacyjnego, dla którego podaje się w fazie
projektowania graniczną, 3-decybelową pulsację pasma przepustowego Ω3dB = π/K. Nie
powinno to dziwić. Zadaniem filtra decymującego jest bowiem redukcja zjawiska przecieku
widmowego. Ponieważ do projektowania filtrów decymujących wykorzystuje się standardowe
procedury projektowania filtrów cyfrowych, w których zakłada się Ωstop = π/L, filtry te nie będą
obecnie szerzej omawiane.

12.6.4. Przykład ćwiczenie komputerowego

W tabeli 12-10 przedstawiono program komputerowy, który posłużył do wygenerowania przy-


kładowych filtrów Hilberta, różniczkujących i interpolujących, przedstawionych na rysunkach
12.18, 12.19 i 12.22. Zainteresowany Czytelnik może wykorzystać ten program do sprawdze-
nia różnych zastosowań tych filtrów, krótko opisanych powyżej.
Na szczególną uwagę zasługuje w nim operacja „fazowania” sygnału wyjściowego z filtra y(n)
z jego sygnałem wejściowym x(n). W większości zastosowań takie „synchronizowanie” obu
sygnałów nie jest wymagane, gdyż najczęstszym zadaniem filtra jest tylko usuwanie wybranych
składowych częstotliwościowych z sygnału. W takim przypadku opóźnienie czasowe wprowa-
352 Projektowanie nierekursywnych filtrów cyfrowych

dzane przez filtr zazwyczaj nie ma dla nas znaczenia. Sytuacja jest jednak diametralnie inne
dla filtrów przesuwających w fazie, różniczkujących i interpolujących. Wówczas chcielibyśmy
umieć powiązać odpowiadające sobie próbki wejściowe i wyjściowe. Ponieważ jest to bardzo
ciekawe zagadnienie dotyczące wszystkich filtrów typu FIR, rozpatrywanych w rozdziale 12,
dlatego szczegółowo omówimy go w następnym punkcie.

Tab. 12-10. Przykład projektowania cyfrowych filtrów Hilberta, różniczkujących i interpolujących

% Ćwiczenie: Projektowanie specjalnych filtrów cyfrowych metodą okien

clear all;
M = 20; % połowa długości filtra (cały N=2*M+1)
typ = 1; % 1 = Hilberta, 2 = różniczkujący, 3 = interpolujący (K-krotnie)
N=2*M+1; n = 1 : M;

% Wygeneruj teoretyczne odpowiedzi impulsowe


if (typ==1) h = (2/pi) * sin(pi*n/2).^2 ./ n; end % połowa odpowiedzi impulsowej
if (typ==2) h = cos(pi*n)./n; end % dla n = 1, 2, 3, ..., M
if (typ==3) %
K=5; wc=pi/K; fc=wc/(2*pi); % fc = 1/(2*K)
h = 2*fc*sin(wc*n)./(wc*n); % współczynnik skalujący 2*fc = 1/K
end
if (typ==1 | typ==2) % cała odpowiedź dla n = −M,...,0,...,M
h = [ -h(M:-1:1) 0 h(1:M) ];
else
h = K*[ h(M:-1:1) 2*fc h(1:M)]; % wzmocnienie K-razy, aby próbka środkowa była równa 1
end

% Wymnóż je z funkcją okna


w = blackman(N); w=w'; % okno Blackmana
hw = h .* w; % wymnożenie odpowiedzi impulsowej z oknem

% Oblicz widmo Fouriera


m = -M : 1 : M; % dla filtra nieprzyczynowego (bez przesunięcia o M próbek w prawo)
% m = 0 : N-1; % dla filtra przyczynowego (z przesunięciem o M próbek w prawo)
NF=500; fn=0.5*(1:NF-1)/NF;
for k=1:NF-1
H(k)=sum( h .* exp(-j*2*pi*fn(k)*m) );
HW(k)=sum( hw .* exp(-j*2*pi*fn(k)*m) );
end

% Rysunki
stem(m,h); grid; title('h(n)'); xlabel('n'); pause
stem(m,hw); grid; title('hw(n)'); xlabel('n'); pause
plot(fn,abs(H)); grid; title('|H(fn)|'); xlabel('f norm]'); pause
plot(fn,abs(HW)); grid; title('|HW(fn)|'); xlabel('f norm]'); pause
plot(fn,unwrap(angle(H))); grid; title('kąt H(fn) [rd]'); xlabel('f norm'); pause
plot(fn,unwrap(angle(HW))); grid; title('kąt HW(fn) [rd]'); xlabel('f norm'); pause

% Zastosowanie filtra Hilberta i filtra różniczkującego


if(typ==1 | typ==2)
Nx=200; fx=50; fpr=1000; n=0:Nx-1; x=cos(2*pi*fx/fpr*n); % generacja sygnału testowego x(n)
y=conv(x,hw); % filtracja sygnału x(n) za pomocą odp. impulsowej hw(n); otrzymujemy Nx+N−1 próbek
yp=y(N:Nx); % odcięcie stanów przejściowych (po N−1 próbek) z przodu i z tyłu sygnału y(n)
xp=x(M+1:Nx-M); % odcięcie tych próbek z x(n), dla których nie ma poprawnych odpowiedników w y(n)
if(typ==1) % filtr Hilberta
z = xp + j*yp; % sygnał analityczny
Ny=ceil(fpr/fx); k=1:Ny; plot(k,xp(k),'b',k,yp(k),'r');
title('xp(n) i yp(n)'); grid; pause % -90 stopni
plot(xp,yp); title('Cz. urojona w funkcji cz. rzeczywistej');
grid; pause % powinien być okrąg
plot(abs(fft(z))); title('Widmo sygnału analitycznego');
Projektowanie nierekursywnych filtrów cyfrowych 353

grid; pause % brak częstotliwości ujemnych


else % filtr różniczkujący
Ny=ceil(fpr/fx); k=1:Ny; plot(k,xp(k),'b',k,yp(k),'r'); title('xp(n) i yp(n)');
grid; pause % przesunięcie w fazie +90 stopni
end
end
% Zastosowanie filtra interpolującego
if(typ==3)
Nx=50; fx=50; fpr=1000; n=0:Nx-1; x=cos(2*pi*fx/fpr*n); % generacja sygnału testowego x(n)
xz=[]; KNx=K*Nx; xz=zeros(1,KNx); xz(1:K:KNx)=x(1:Nx); % dodanie zer
yz=conv(xz,hw); % filtracja xz(n) za pomocą odp. impulsowej hw(n); otrzymujemy Nx+N−1 próbek
yp=yz(N:KNx); % odcięcie stanów przejściowych (po N−1 próbek) z przodu i z tyłu sygnału yz(n)
xp=xz(M+1:KNx-M); % odcięcie tych próbek w xz(n), dla których nie ma poprawnych odpowiedników w yz(n)
Ny=length(yp); k=1:Ny; plot(k,xp(k),'or',k,yp(k),'-b');
title('xp(n) i yp(n)'); grid; pause % porównanie
end

12.7. Synchronizacja próbek wejściowych i wyjściowych filtra


W podrozdziale 12.1 wykazaliśmy, że filtry o skończonej, (a)symetrycznej odpowiedzi impul-
sowej h(n) mają charakterystykę częstotliwościową daną wzorami (12.10), (12.20) − (12.23):
H ( e jΩ ) = A(Ω )e jΨ ( Ω ) = A(Ω) e − jΩM , Ω = 2π f f pr (12.85)

gdzie A(Ω) jest funkcją przyjmującą wyłącznie wartości rzeczywiste, a M jest parametrem „po-
łowy” długości filtra. Wynika stąd, że charakterystyka fazowa Ψ(Ω) filtra jest równa:
Ψ (Ω) = − M Ω (12.86)

czyli jest liniowa, co powoduje, że wszystkie pulsacje (częstotliwości) są na wyjściu filtra


opóźnione o M próbek w stosunku do jego wejścia (patrz (12.24), (12.25)):
d Ψ (Ω )
t g (Ω ) = = −M (12.87)
dΩ

o czym świadczy powyższa, stała wartość opóźnienia grupowego tg(Ω) równa −M.
Jeśli przez N oznaczymy liczbę próbek odpowiedzi impulsowej filtra, to M = (N−1)/2. M jest
liczbą całkowitą dla nieparzystej długości filtra N (np. dla N = 21 mamy M = 10) oraz liczbą
ułamkową dla długości parzystej (np. dla N = 20 mamy M = 9,5). W niniejszym rozdziale pro-
jektowaliśmy wyłącznie filtry typu FIR mające nieparzystą liczbę współczynników wagowych
(patrz rysunki 12.4 a, d, 12.5 a, 12.7 (góra), 12.18 (góra), 12.19 (góra), 12.22 (góra)).
Wytłumaczymy teraz pochodzenie opóźnienia czasowego, wprowadzanego przez filtr, na przy-
kładzie metody okien (podrozdział 12.5). Teoretyczna odpowiedź impulsowa h(n) rozpatry-
wanych filtrów FIR jest nieograniczona w czasie oraz nieprzyczynowa, tzn. różna od zera dla
n < 0 (rys. 12.9 a). Po wymnożeniu z ograniczającą funkcją okna w(n) o długości N = 2M+1
otrzymujemy hw(n), które dalej jest nieprzyczynowe, ponieważ ma niezerowe próbki hw(−M ),
..., hw(0), ..., hw(M), czyli dla −M ≤ n ≤ M (rys. 12.9 c). Oznacza to, że w celu wyznaczenia
wartości próbki sygnału wyjściowego y(0), musimy dysponować próbkami wejściowymi
x(−M ), ..., x(0), ..., x(M), czyli także przyszłymi. Dlatego dodatkowo przesuwamy zokienko-
waną odpowiedź impulsową hw(n) w prawo o M próbek i otrzymujemy hw(M)(n) (rys. 12.9 d).
Jest to już o g r a n i c z o n a w c z a s i e (2M+1 próbek) i p r z y c z y n o wa (równa zero dla n < 0)
odpowiedź impulsowa, która, zgodnie z algorytmem filtracji (12.1), korzysta tylko z N ostat-
354 Projektowanie nierekursywnych filtrów cyfrowych

x(n) 1 2 3 4 5 6 7 nr próbki

9 krok 9
8 krok 8
7 krok 7

3 krok 3
2 krok 2
h(−n) 1 1 krok 1

y(n) 1 2 3 4 5 6 7 8 9 nr próbki

Rys. 12.24. Ilustracja graficzna opisanej zasady „synchronizowania” („fazowania”) próbek wejściowych
i wyjściowych filtra cyfrowego typu FIR. Oznaczenia: x(n) − sygnał wejściowy (Nx = 7), h(−n) − wagi filtra
(N = 2M+1 = 3), y(n) − sygnał wyjściowy (Ny = Nx+N−1 = 9). Odpowiadają sobie próbki {x(2), x(3), ...,
x(6)} oraz {y(3), y(4), ..., y(7)}, czyli {x(M+1), ..., x(Nx−M)} i {y(N), ..., y(Nx) }

a) b)

x(n) 1 2 3 x(n) 1 2 3 4

h(−n) 1 0 -1 h(−n) 3/2 1/2 -1/2 -3/2

y(n) 1 2 3 y(n) 1 2 3 4

Rys. 12.25. Ilustracja graficzna synchronizowania próbek wejściowych i wyjściowych filtra cyfrowego typu
FIR w przypadku: a) nieparzystej długości odpowiedzi impulsowej filtra (N = 3), b) parzystej długości
(N=4)

tatnich próbek wejściowych x(0), x(−1), ..., x(N−1). Jednak opóźnienie o M próbek odpowiedzi
impulsowej hw(n) powoduje także opóźnienie sygnału wyjściowego z filtra. W związku z tym
zerowa próbka wyjściowa y(M)(0) z filtra opóźnionego jest równa y(0−M), a próbka pierwsza
y(M)(1) − y(0 − (M−1)). Dopiero M-ta próbka wyjściowa y(M)(M) z filtra opóźnionego jest równa
y(0) i odpowiada próbce wejściowej x(0), czyli jest z nią „zsynchronizowana”.
Na rysunku 12.24 jest przestawiona ilustracja graficzna opisanej wyżej zasady „synchroni-
zowania” („fazowania”) próbek wejściowych i wyjściowych filtra cyfrowego typu FIR. Sied-
miopróbkowy (Nx = 7) sygnał x(n) oznacza sygnał wejściowy, natomiast dziewięciopróbkowy
(Ny = Nx+N−1 = 9) sygnał y(n) jest sygnałem wyjściowym. Sygnał x(n) jest wymnażany
z trzypunktową (N = 2M+1=3), odwróconą w czasie, przesuwającą się odpowiedzią impulsową
filtra h(−n), np. Hilberta, która jest (a)symetryczna. Każda próbka sygnału y(n) jest wynikiem
sumy iloczynów odpowiednich próbek sygnałów x(n) oraz h(−n), analogicznie jak na rysunku
1.8. Numer wyznaczonej próbki sygnału y(n) jest równy największemu numerowi próbki
sygnału x(n), „widzianemu” przez odpowiedź impulsową h(−n) w kolejnym kroku (prze-
Projektowanie nierekursywnych filtrów cyfrowych 355

sunięciu), zmieniającym się od 1 do 9. W ten sposób wyznaczane są próbki: y(1), y(2), ..., y(9).
Odpowiadają one numerom próbek sygnału x(n) „wskazywanym” przez czarną próbkę środ-
kową wag h(−n), czyli x(0), x(1), ..., x(8). Poprawne wartości y(n) są obliczane tylko wtedy,
kiedy wszystkie wagi filtra h(−n) są wymnażane z próbkami sygnału x(n). W rozpatrywanym
przypadku są to próbki y(3), y(4), ..., y(7), odpowiadające „środkowym” próbkom x(2), x(3),
..., x(6). Pozostałe próbki sygnału y(n) reprezentują stan przejściowy „najeżdżania” i „zjeż-
dżania” wag h(−n) na próbki sygnału x(n).
W ogólności, w opisanym powyżej algorytmie filtracji próbki wyjściowe y(N), ..., y(Nx) odpo-
wiadają próbkom wejściowym x(M+1), ..., x(Nx−M).
Dla filtrów o długości nieparzystej sytuacja jest podobna. W tym przypadku nie jest jednak
możliwe dokładne zsynchronizowanie próbek sygnałów y(n) i x(n), ponieważ te pierwsze są
przesunięte w stosunku do tych drugich o 1/2 próbki. Sytuacja taka jest przedstawiona na
rysunku 12.25b. Załóżmy przykładowo, że (a)symetryczna odpowiedź impulsowa filtra h(n)
(np. z rysunku 12.9 a, c) składa się tylko z czterech współczynników (N = 4). Biorąc pod
uwagę zakładaną (a)symetrię względem zerowej chwili czasowej (h(−n) = ± h(n)), powinny
być one wtedy numerowane w sposób następujący: n = −3/2, −1/2, 1/2, 3/2. Jeśli wówczas
w wyniku filtracji jest wyznaczana na przykład próbka y(4), to odpowiada ona próbce
„środkowej” sygnału wejściowego x(2,5), którą nie dysponujemy. W przypadku filtrów FIR
o nieparzystej liczbie współczynników, problem ten nie występuje, co pokazano na rysunku
12.25a.
13
Algorytmy filtracji cyfrowej

W dwóch poprzednich rozdziałach zajmowaliśmy się problemem „projektowania” filtrów cy-


frowych, to znaczy zagadnieniem obliczania zbioru współczynników bm, m = 0, 1, 2, ..., M oraz
ak, k = 1, 2, 3, ..., N, które są wykorzystywane podczas filtracji sygnałów dyskretnych, realizo-
wanej w układzie przedstawionym na rysunku 10.4. Co prawda algorytm tej filtracji został już
przedstawiony w tabeli 10-1, a jego wersja programowa − w tabeli 10-2, ale stanowi to jedynie
„wierzchołek góry lodowej” zagadnienia struktur i algorytmów filtracji cyfrowej. W obecnym
rozdziale poświęcimy tej problematyce więcej miejsca. Poznamy w nim różne możliwości za-
pisu równań cyfrowej filtracji liniowej, ich wady i zalety oraz szybkie metody obliczeniowe ich
realizacji, wykorzystujące algorytm szybkiej transformacji Fouriera. Na końcu rozdziału „po-
wiemy dwa słowa” na temat procesorów sygnałowych, układów specjalnie dedykowanych do
przetwarzania, także filtrowania, sygnałów cyfrowych.

13.1. Klasyczne struktury filtrów cyfrowych


Klasyczny liniowy filtr cyfrowy typu LTI (ang. Linear Time-Invariant) jest zdefiniowany na-
stępującym równaniem:
M N
y (n) = ∑ bm x(n − m) − ∑ ak y(n − k ) (13.1)
m=0 k =1

gdzie x(n) oznacza sygnał wejściowy, y(n) to sygnał wyjściowy, a współczynniki wagowe
bm i ak decydują o właściwościach częstotliwościowych układu (i o jego stabilności). Schemat
obliczeniowy filtra (13.1) został już przedstawiony na rysunku 10.4. Obecnie przyjrzymy się
bliżej „anatomii” tego układu. Na rysunkach 13.1a oraz 13.1b są pokazane układy dwóch naj-
prostszych filtrów cyfrowych. Blok oznaczony przez „z−1” jest układem opóźniającym sygnał
o jedną próbkę. Pierwszy z tych układów (rys. 13.1a) jest filtrem nierekursywnym, w którym
sygnał wyjściowy y(n) jest ważoną sumą dwóch ostatnich próbek wejściowych: obecnej x(n)
oraz poprzedniej x(n−1). Wartości wag b0 i b1 decydują o charakterze „częstotliwościowym”
filtracji, to znaczy w jaki sposób są „przepuszczane” przez układ poszczególne częstotliwości
Algorytmy filtracji cyfrowej 357

wejściowe. Drugi układ (rys. 13.1b) jest filtrem rekursywnym, mającym sprzężenie zwrotne.
W tym przypadku każda kolejna próbka wyjściowa y(n) jest ważoną sumą aktualnej próbki
wejściowej x(n) oraz poprzedniej próbki wyjściowej y(n−1). Z powodu sprzężenia zwrotnego
układ może być niestabilny, jeśli waga a1 nie zostanie właściwie dobrana (przypomnijmy: bie-
guny transmitancji układu dyskretnego powinny leżeć wewnątrz okręgu o promieniu jedno-
stkowym). Na rysunku 13.1c pokazano filtr cyfrowy, który powstał w wyniku kaskadowego
połączenia filtrów z rysunków 13.1a i 13.1b. Ponieważ filtry „składowe” są liniowe, ich kolej-
ność nie ma znaczenia. Dlatego pod względem funkcjonalnym (x(n) → y(n): y(n) = f(x(n))
układ przedstawiony na rysunku 13.1d przetwarza sygnał wejściowy w sposób identyczny jak
układ z rysunku 13.1c.

a) najprostszy filtr nierekursywny: b) najprostszy filtr rekursywny:


y ( n ) = b0 x( n ) + b1 x( n − 1) y ( n ) = x ( n ) − a1 y ( n − 1)
x(n) b0 y(n) x(n) y(n)

z−1 z−1
b1 −a1
x(n−1) y(n−1)

c) kaskadowe połączenie układów z rys. a) i b): y ( n ) = b0 x ( n ) + b1 x ( n − 1) − a1 y ( n − 1)


x(n) b0 y(n) x(n) b0 y(n)

z−1 −a1 z−1 z−1 z−1


b1 b1 −a1
x(n−1) y(n−1) x(n−1) y(n−1)

d) zamiana kolejności układów z rys. a) i b): w( n ) = x ( n ) − a1w( n − 1), y ( n ) = b0 w( n ) + b1w( n − 1)


x(n) w(n) b0 y(n) x(n) w(n) b0 y(n)

z−1 z−1 z−1


−a1 b1 −a 1 b1
w(n−1)

Rys. 13.1. Struktury najprostszych filtrów cyfrowych typu FIR i IIR

Jak widać filtry cyfrowe są przedstawiane za pomocą grafów „przepływowych”, w których in-
formacja przepływa z węzła do węzła i jest pomiędzy tymi węzłami przetwarzana: mnożona
przez współczynniki skalujące oraz opóźniana. W teorii grafów liniowych obowiązuje zasada
transpozycji, według której, jeśli zmienimy kierunek przepływu danych na przeciwny, to uzys-
kamy tzw. układ transponowany, który realizuje taką samą funkcję jak układ oryginalny. Na
rysunku 13.2 przedstawiono kolejne kroki wyznaczenia struktur filtrów cyfrowych, które sta-
nowią transpozycje układów z rysunków 13.1a i 13.1b. Z kolei rysunek 13.3 stanowi „powtó-
rzenie” rysunku 13.1 tylko dla filtrów transponowanych. Na rysunku 13.2a i 13.2b są przedsta-
wione transponowane wersje prostych filtrów cyfrowych z rysunków 13.1a i 13.1b. Można je
wykorzystać do tworzenia „transponowanych” układów złożonych, pokazanych na rysunkach
13.3c i 13.3d, różniących się jedynie kolejnością występowania układów składowych.
358 Algorytmy filtracji cyfrowej

a) filtr FIR b) filtr IIR

x(n) b0 y(n) x(n) y(n)

z−1 z−1
b1 −a1
x(n−1) y(n−1)

y(n) b0 x(n) y(n) x(n)

z−1 z−1
b1 −a1

x(n) b0 y(n) x(n) y(n)

z−1 z−1
b1 −a1

Rys. 13.2. Ilustracja zasady transpozycji filtrów cyfrowych (zmiana kierunku przepływu danych na prze-
ciwny)

a) y ( n ) = b0 x ( n ) + b1 x ( n − 1) b) y ( n ) = x ( n ) − a1 y ( n − 1)

x(n) b0 y(n) x(n) y(n)

z−1 z−1
b1 −a1

c) w( n ) = b1 x ( n ) − a1 y ( n ), y ( n ) = b0 x( n ) + w( n − 1)
x(n) b0 y(n) x(n) b0 y(n)

z−1 z−1 z−1


b1 −a1 b1 −a1

d) w( n ) = x ( n ) − a1w( n − 1), y ( n ) = b0 w( n ) + b1w( n − 1)


x(n) w(n) b0 y(n) x(n) w(n) b0 y(n)

z−1 z−1 z−1 z−1


−a1 b1 −a1 b1

Rys. 13.3. Transponowane struktury najprostszych filtrów cyfrowych typu FIR i IIR z rysunku 13.1
Algorytmy filtracji cyfrowej 359

Obecnie uogólnimy powyższe rozważania układowe na filtry, w których linie opóźniające na


wejściu i wyjściu filtra są dłuższe. W celu kompletności przeprowadzanych „wywodów” przy-
pomnimy także schematy blokowe układów, przedstawionych w rozdziale 10 na rysunku 10.4.
Na rysunku 13.4a jest przedstawiony schemat blokowy nierekursywnego filtra cyfrowego, któ-
ry nazwiemy umownie jako „tylko FIR”, a na rysunku 13.4b schemat blokowy rekursywnego
filtra cyfrowego typu „tylko IIR”. W wyniku ich połączenia kaskadowego otrzymujemy filtr
cyfrowy „pełny FIR/IIR” typu I, którego struktura jest przedstawiona na rysunku 13.5, nato-
miast po zamianie kolejności filtrów składowych otrzymujemy filtr cyfrowy „pełny IIR/FIR”
typu II, pokazany na rysunku 13.6. Na rysunkach 13.4c i 13.4d pokazano transpozycje ukła-
dów 13.4a i 13.4b, a wersje transponowane filtrów typów I i II z rysunków 13.5 i 13.6 są
przedstawione na rysunku 13.7.
Jak widać filtr cyfrowy może występować w wielu różnych postaciach klasycznych. Co prawda
„od przybytku głowa nie boli”, ale czy nie jest to czasem zbyt „wiele zabawy o nic”. Na pewno
nie. Ponieważ filtr pracuje w bardziej złożonych układach przetwarzania, na przykład
interpolująco-decymujących, skrótowo przedstawionych w podrozdziale 12.6.3. Jak się później
okaże w układzie decymatora cyfrowego jest korzystniej pod względem obliczeniowym stoso-
wać filtr FIR pracujący w według schematu z rysunku 13.4a, w układzie interpolatora zaś
− jego transpozycji pokazanej na rysunku 13.4c. Z kolei bardzo ważny zapis filtra cyfrowego
w strukturze zmiennych stanu (rozdział 13.2) wykorzystuje zmodyfikowany schemat „pełny
IIR/FIR” typu II z rysunku 13.6b.
Różne struktury pracy filtra wybiera się także ze względu na przyjętą sprzętową arytmetykę
obliczeń i jej ograniczenia. Przykładowo w procesorach stałoprzecinkowych (ang. fixed-point)
należy unikać przepełnień, czyli są istotne występujace w nich maksymalne przejściowe wyniki
obliczeń. W procesorach zmiennoprzecinkowych (ang. floating-point) należy natomiast do-
dawać sygnały o zbliżonych wartościach, z powodu ograniczonej liczby bitów mantysy (patrz
rozdział 7.1).

Przykład − zamiana klasycznej struktury realizacji filtra


Jak już wiemy transmitancja H(z) cyfrowego filtra typu LTI jest ilorazem dwóch wielomianów
zmiennej zespolonej z. Ponieważ transmitancję tę można zapisać na wiele różnych sposobów,
ten sam filtr cyfrowy może mieć bardzo wiele różnych realizacji układowych. Przykładowo,
transmitancję filtra można przedstawić jako sumę lub iloczyn transmitancji prostszych,
w związku z czym wynikowy filtr może być zrealizowany jako kilka filtrów pracujących
równolegle lub kaskadowo (jeden za drugim).
Dla przykładu rozważmy transmitancję daną następującym wzorem:

1 + 2 z −1 + z − 2
H (1) ( z ) = (13.2)
1 − 0,9 z −1 + 0,2 z −2

Może ona także być zapisana jako:

−4 + 6,5z −1 49 45
H (2) ( z ) = 5 + −1 −2
, H (3) ( z ) = 5 − −1

1 − 0,9 z + 0,2 z 1 − 0,4 z 1 − 0,5z −1

 1 + z −1  1 + z −1    
H (4) ( z ) = 
 1 − 0,4 z −1 
 1 − 0,5z −1  ( )(
, H (5) ( z ) = 1 + z −1 1 + z −1 
1
)
−1  
1
−1 
 1 − 0,4 z   1 − 0,5z 
  
360 Algorytmy filtracji cyfrowej

Schematy blokowe układów, odpowiadających różnym zapisom transmitancji, są przedstawio-


ne na rysunku 13.8.

a) „tylko FIR” b) „tylko IIR”


x(n) b0 y(n) x(n) y(n)

z−1 z−1
b1 −a1
x(n−1) y(n−1)
−1 −1
z z
b2 −a2
x(n−2) y(n−2)
−1 −1
z z
b2 −a3
x(n−3) y(n−3)

c) transponowany „tylko FIR” d) transponowany „tylko IIR”

x(n) b0 y(n) x(n) y(n)

z−1 z−1
b1 −a1

z−1 z−1
b2 −a2

z−1 z−1
b3 −a3

Rys. 13.4. Podstawowa struktura filtrów typów: „tylko FIR" i „tylko IIR” i ich wersje transponowane

x(n) b0 y(n) x(n) b0 y(n)

z−1 z−1 z−1 z−1


b1 −a1 b1 −a1
x(n−1) y(n−1) x(n−1) y(n−1)
−1 −1 −1 −1
z z z z
b2 −a2 b2 −a2
x(n−2) y(n−2) x(n−2) y(n−2)
z−1 z−1 z−1 z−1
b3 −a3 b3 −a3
x(n−3) y(n−3) x(n−3) y(n−3)

Rys. 13.5. Kaskadowe połączenie filtrów typów „tylko FIR” i „tylko IIR” – podstawowa struktura filtra
cyfrowego typu I
Algorytmy filtracji cyfrowej 361

x(n) w(n) b0 y(n) x(n) b0 y(n)

z−1 z−1 z−1


−a1 b1 −a1 b1
w(n−1)
z−1 z−1 z−1
−a2 b2 −a2 b2
w(n−2)
z−1 z−1 z−1
−a3 b3 −a3 b3
w(n−3)

Rys. 13.6. Kaskadowe połączenie filtrów typów „tylko IIR” i „tylko FIR” – podstawowa struktura filtra
cyfrowego typu II

x(n) w(n) b0 y(n) x(n) b0 y(n)

z−1 z−1 z−1


−a1 b1 b1 −a1

z−1 z−1 z−1


−a2 b2 b2 −a2

z−1 z−1 z−1


−a3 b3 b3 −a3

Rys. 13.7. Wersje transponowane filtrów cyfrowych typu I i typu II z rysunków 13.5 i 13.6

13.2. Struktura zmiennych stanu


Filtry cyfrowe mogą być także zapisywane za pomocą równań zmiennych stanu. Na rysunku
13.9a jest przedstawiony schemat blokowy rekursywnego filtra cyfrowego drugiego rzędu,
„pracującego” w strukturze zmiennych stanu. Zmiennymi tymi są sygnały s1(n) i s2(n). Zależą
one od sygnału wejściowego x(n), same zaś determinują sygnał wyjściowy y(n):

 s1 (n + 1) = −a1s1 (n ) − a 2 s2 (n ) + x (n )

 s2 (n + 1) = s1 ( n ) (13.3)
 y ( n ) = c1s1 ( n ) + c2 s2 (n ) + dx ( n )

Możemy to równanie zapisać w następujący sposób w postaci macierzowej:

s(n + 1) = As(n ) + bx ( n )
 t (13.4)
 y (n ) = c s(n ) + dx ( n )
gdzie:
 −a − a2  1  s1 (n ) 
A= 1 , b =   , c t = [ c1 c2 ] , s( n ) =   (13.5)
 1 0  0  s2 (n ) 
362 Algorytmy filtracji cyfrowej

a) H(1)(z) 1 y(n)
x(n)

z−1 z−1
2 0.9
x(n−1) y(n−1)

z−1 z−1
1 −0.2
x(n−2) y(n−2)

5
(2)
b) H (z) 5 (3)
c) H (z)

−49 y(n)
x(n)
−4 y(n)
x(n)

-1
z−1
−1 −1 0.4
z z
6.5 0.9 45
x(n−1) y(n−1)

z−1 -1
z−1
−0.2 0.5
y(n−2)

d) H(4)(z) 1 1 y(n)
x(n)

z−1 z−1 z−1 z−1


1 0.4 1 0.5

e) H(5)(z) 1 1 y(n)
x(n)

z−1 z−1 z−1 z−1


1 1 0.4 0.5

Rys. 13.8. Schematy blokowe układów dyskretnych, realizujących różne zapisy transmitancjiH(z) (13.2)

Dla układu trzeciego rzędu definicje (13.5) przyjęłyby postać:

 −a1 − a2 − a3  1  s1 ( n ) 
A= 1 0 0  , b =  0 , c t = [ c1 c2 c3 ] , s( n ) =  s2 ( n )  (13.6)
     
 0 1 0  0  s3 ( n ) 
Algorytmy filtracji cyfrowej 363

a) b)
d d

x(n) y(n) b s(n+1) s(n) c


t
s1(n+1) x(n) y(n)
−1
z
z−1
A
s1(n)

−a 1 c1
z−1
s2(n)

−a 2 c2

Rys. 13.9. Rekursywny filtr cyfrowy drugiego rzędu w zapisie zmiennych stanu. Dwie zmienne stanu s1(n)
i s2(n): a) pełny schemat blokowy, b) macierzowy schemat blokowy, zgodny z równaniami (13.4),(13.5)

Sygnały wewnętrzne filtra sk(n) są nazywane zmiennymi stanu, ponieważ podczas jego pracy
zmieniają swój stan, zgodnie z równaniem (13.4). Macierzowy schemat blokowy cyfrowego
filtra rekursywnego jest przedstawiony na rysunku 13.9b. Układ ten ma transmitancję H(z) da-
ną wzorem:
∞  ∞  −1
∑ c A n −1 bz − n = d + z −1 c  ∑ A k z − k  b = d + z −1 c [ zI − A ] b
t t t
H ( z) = d + (13.7)
n =1  k =0 

gdzie I oznacza macierz diagonalną jednostkową (jedynki na przekątnej głównej).

13.3. Inne struktury filtrów cyfrowych


Liniowe filtry cyfrowe LTI można przedstawiać jeszcze w kilku postaciach alternatywnych. Do
najważniejszych, powszechnie stosowanych w praktyce należy zapis polifazowy (ang. poly-
phase) oraz kratowy (ang. lattice). Przykładowo filtracja polifazowa umożliwia szybką imple-
mentację numeryczną zespołu filtrów z modulacją kosinusową, wykorzystywanych w algo-
rytmie kompresji dźwięku MPEG audio (poziomy 1, 2 i 3, żargonowo nazywane mp1, mp2
i mp3), filtry kratowe zaś są zwyczajowo stosowane w koderach mowy opartych na liniowej
predykcji (np. LD-CELP, RPE-LPT (GSM), VSELP, CELP, LPC-10), gdyż są one bardziej
odporne na kwantyzację występujących w nich współczynników wagowych. Ze względu na
ogromną rolę jaką obie struktury odgrywają w nowoczesnych technikach przetwarzania sygna-
łów, poświęcimy im osobno więcej miejsca w dwóch rozdziałach późniejszych. Struktury poli-
fazowe szczegółowo opisano w rozdziale 18, dedykowanym modulowanym zespołom filtrów,
struktury kratowe zaś zaprezentowano w rozdziale 20, przedstawiającym zaawansowane meto-
dy analizy i przetwarzania sygnałów, stosowane w koderach sygnału mowy. Zainteresowanego
Czytelnika odsyłamy do lektury obu tych rozdziałów.
Warto w tym miejscu jeszcze raz podkreślić, że w trzech ostatnich rozdziałach (tzn. 10, 11
i 12) oraz rozdziale obecnym zajmowaliśmy się wyłącznie liniowymi układami dyskretnymi,
opisanymi przez równanie różnicowe (10.48) oraz związaną z nim transmitancję (10.50). Aby
Czytelnik nie zapadł w błogi sen „zimowy”, wynikający z przeświadczenia, że wie się już
364 Algorytmy filtracji cyfrowej

wszystko, otwórzmy jeszcze jedne drzwi, które do tej pory cały czas pozostawały zamknięte,
a prowadzące do krainy filtrów nieliniowych.
Jeśli bowiem działanie układu dyskretnego sprowadza się do obliczania liczb wyjściowych na
podstawie liczb wejściowych, to dlaczego się ograniczać tylko do równania (10.48). Można
przecież na wyjście układu „wyrzucać” wartości związane np. z pierwiastkami lub logarytmami
liczb wejściowych, lub też wymyślać różne logiczne (kontekstowe) reguły „sąsiedztwa” próbek
wejściowych dokładnie określające jaka wartość powinna się znaleźć na wyjściu układu.
W literaturze jest definiowanych wiele „filtrów” działających w sposób nieliniowy. Jednym
z nich są na przykład sieci neuronowe. Filtry nieliniowe są szeroko stosowane w przetwarzaniu
obrazów cyfrowych.
Najprostszym filtrem nieliniowym jest filtr medianowy. Zasada jego pracy jest bardzo prosta.
Filtr medianowy N-tego rzędu (załóżmy N = 2M−1):
1) zawsze pamięta N ostatnich próbek sygnału wejściowego w buforze roboczym:
{x (n − ( N − 1), x(n − ( N − 2), ..., x (n − 2), x(n − 1), x (n )}
2) porządkuje te próbki od wartości najmniejszej do największej,
{x1 (n ) ≤ x 2 (n ) ≤ ... x M −1 ( n ) ≤ x M (n ) ≤ x M +1 (n ) ≤ ... ≤ x N −1 (n ) ≤ x 2 M −1 (n )}
3) dla każdej chwili czasowej n podaje na wyjście układu medianę powyższego zbioru, czyli
próbkę środkową xM(n).
Wielką zaletą takiego filtra jest usuwanie zakłóceń impulsowych z sygnału, gdyż zakłócenia te
jako liczby zdecydowanie różniące się od pozostałych in minus lub in plus zawsze powinny się
znaleźć na początku lub na końcu zbioru wartości uporządkowanych rosnąco, czyli nie powin-
ny być „przekazane” na wyjście układu. Im N jest większe, tym dłuższe impulsy jest w stanie
„połykać” filtr medianowy.

Przykład. Obliczmy medianę następujących zbiorów liczb:


{ 0, 0, 0, 0, 0, 1, 0} → { 0, 0, 0, 0, 0, 0, 1} → Med = 0
{ 0, 1, 2, 1, 3, 4, 5 } → { 0, 1, 1, 2, 3, 4, 5} → Med = 2
czyli mediana eliminuje zakłócenia impulsowe oraz „śledzi” trend sygnału. A teraz zastosujmy
filtr medianowy trzeciego rzędu do następującego sygnału (zakładamy zerowy bufor filtra)
{ 1, 2, 3, 4, 4, 5, 5, 4, 8, 4, 3, 9, 2, 2, 1} → { 0, 1, 2, 3, 4, 4, 5, 5, 5, 4, 4, 4, 3, 2, 2}
W dalszej części tego rozdziału zajmiemy się problemem efektywnej realizacji nierekursywnej
filtracji cyfrowej za pomocą tzw. „szybkiego” splotu dwóch sygnałów dyskretnych. W me-
todzie tej filtracji sygnału dokonuje się w dziedzinie częstotliwościowej a nie czasowej. Efe-
ktywność obliczeniową takiego podejścia zapewniają istniejące algorytmy szybkiej dyskretnej
transformacji Fouriera, przedstawione w rozdziale dziewiątym.

13.4. Splot liniowy i kołowy


Obecnie zajmiemy się problemem szybkiej implementacji obliczeniowej nierekursywnych fil-
trów cyfrowych FIR. Filtry te są zdefiniowane za pomocą uproszczonej wersji równania (13.1)
M M
y(n) = ∑ bm x(n − m) = ∑ h( m) x( n − m) (13.8)
m =0 m=0
Algorytmy filtracji cyfrowej 365

w której nie występuje sprzężenie zwrotne z wyjścia filtra. Równanie (13.8) reprezentuje sobą
splot próbek sygnału wejściowego x(n) ze skończoną liczbą wag filtra bm, m = 0, 1, 2, ..., M,
według schematu blokowego przedstawionego na rysunku 13.4a (dla M = 3). Wagi te mogą
być interpretowane jako próbki odpowiedzi impulsowej filtra bm = h(m), m = 0, 1, 2, ..., M. Jak
wiemy z (8.11) splot w dziedzinie czasu dwóch nieskończonych, dyskretnych sygnałów jest
równoważny iloczynowi w dziedzinie częstotliwości ich ciągłych widm Fouriera (8.8a):

( ) ( ) ( )
Y e jΩ = H e jΩ X e jΩ (13.9)

Na podstawie Y(ejΩ) metodą odwrotnej transformacji Fouriera (8.8b) można wyznaczyć sygnał
y(n). Zamiast splatać ze sobą sygnały h(n) i x(n) zgodnie z (13.8) moglibyśmy więc obliczyć
numerycznie ich widma Fouriera H(ejΩ) i X(ejΩ), wymnożyć je i wyznaczyć sygnał y(n) jako
wynik odwrotnej transformacji Fouriera z iloczynu H(ejΩ)X(ejΩ):

(
y ( n ) = F −1 H ( e j Ω ) X ( e j Ω ) ) (13.10)

Szkopuł w tym, że w wersji „ciągłej” powyższą metodę możemy zastosować jedynie „na pa-
pierze” (analitycznie), gdyż widma H(ejΩ) i X(ejΩ) są wyznaczone z (8.8a) dla „ciągłej” zmiany
pulsacji unormowanej Ω w przedziale (−π, π). Dodatkowo X(ejΩ) powinno być obliczone z nie-
skończonej liczby próbek sygnału x(n). Także odwrotna transformacja Fouriera w postaci cał-
kowej stanowi problem obliczeniowy.
Koniecznością jest więc zastosowanie równań prostej (DFT) i odwrotnej (IDFT) dyskretnej
transformacji Fouriera (8.15) (0 ≤ n ≤ N−1, 0 ≤ k ≤ N−1):
N −1 2π N −1 2π
−j kn 1 j kn
X ( k ) = DFT ( N ) ( x ) = ∑ x ( n )e N , x (k ) = IDFT ( N ) ( X ) =
N
∑ X ( k )e N (13.11)
n =0 k =0

w stosunku do posiadanych zbiorów próbek sygnałów h(n) i x(n) z równania (13.8). W tym
przypadku trzeba w razie potrzeby oba sygnały uzupełnić na końcu zerami, tak aby każdy
z nich składał się z N próbek. Transformacja DFT charakteryzuje się także właściwością splotu
(8.20):
N −1
y(n) = ∑ h((m) N )x((n − m) N ) ⇔ Y (k ) = H ( k ) X (k ), k = 0, 1, 2, ..., N − 1 (13.12)
m=0

ale w odróżnieniu od (8.11), z racji swojej okresowości, jest „realizowany” z jej pomocą splot
k o ł o wy (cykliczny) a nie l i n i o wy . W wyniku sekwencji operacji:

(
y ( n ) = IDFT ( N ) DFT ( N ) (h ) ⋅ DFT ( N ) ( x ) ) (13.13)

otrzymujemy więc sygnał, który jest wynikiem kołowego splotu sygnałów h(n) i x(n) (po uzu-
pełnieniu zerami), a nie wynikiem ich splotu liniowego. W wyjaśnieniu równania (13.12) skon-
centrujemy się na jego drugim, alternatywnym zapisie:
N −1
y(n) = ∑ x((m) N )h((n − m) N ) ⇔ Y (k ) = X (k ) H (k ), k = 0, 1, 2, ..., N − 1 (13.14)
m=0

Oznaczenie h((n−m)N) należy interpretować tak jak w przypadku splotu liniowego (patrz roz-
dział 1.3.6 i rysunek 1.9), ale teraz indeksowanie próbek odbywa się modulo N: (n−m)N =
= (n−m)mod(N). Przykładowo: h((−1)N) = h(N−1), h((−2)N) = h(N−2), h(−3)N) = h(N−3) itd. Prób-
366 Algorytmy filtracji cyfrowej

ka o numerze leżącym poza „zakresem” jest zastępowana więc przez odpowiadającą jej próbkę
o indeksie z przedziału 0...N−1. „Cyklicznie” odnosimy się więc do próbek h(m), m = 0...N−1.
Poniżej przedstawiono ilustracje graficzne pokazujące różnicę pomiędzy splotem liniowym
dwóch sygnałów a ich splotem kołowym modulo(N).

Splot liniowy

Ponieważ klasyczna, nierekursywna filtracja cyfrowa (13.8) jest operacją splotu sygnału x(n)
z odpowiedzią impulsową filtra h(n) i jej zrozumienie ma podstawowe znaczenie w przetwa-
rzaniu sygnałów dyskretnych, teraz jeszcze raz zaprezentujemy przykład graficzny, będący
przypomnieniem rysunku 1.8. Na rysunku 13.10 pokazano kolejne etapy splotu liniowego
dwóch sygnałów dyskretnych x(k) i h(k). Oba sygnały są identyczne i mają tylko trzy próbki
niezerowe równe 1 dla k = 0, 1, 2. W pierwszym kroku drugi z sygnałów jest odwracany „w
czasie”, w wyniku czego otrzymujemy h(−k). W drugim kroku są mnożone parami wszystkie
próbki sygnałów x(k) i h(−k) dla tej samej wartości k: x(k)h(−k). W trzecim kroku wszystkie
iloczyny są sumowane, a otrzymana w ten sposób liczba jest traktowana jako wartość sygnału
wyjściowego z filtra w chwili „zerowej”: y(0) = ∑k[x(k)h(−k)]. Następnie sygnał h(−k) jest
przesuwany o jedną próbkę w prawo i są powtarzane kroki dwa i trzy, ale dla sygnału h(1−k).
Otrzymana w ten sposób liczba stanowi wyjście filtra w chwili „pierwszej: y(1) = ∑k[x(k)⋅
⋅h(1−k)]. I cała operacja powtarza się ponownie. Po n0 przesunięciach sygnału h(−k) w prawo
otrzymujemy więc próbkę sygnału wyjściowego o numerze n0, stanowiącą wynik splotu:
y(n0) = ∑k[x(k)h(n0−k)]. Jak widać splot linowy to nic trudnego. Raczej nie powinien straszyć
nas po nocach.

Splot kołowy

Pora więc przystąpić do przedstawienia idei splotu kołowego. Na początku musimy się jednak
zaznajomić z pojęciem przesunięcia „kołowego” („cyklicznego”). Jego ilustrację stanowi rysu-
nek 13.11. Podczas analizy danych zawsze dysponujemy skończoną liczbą próbek sygnału, na
przykład załóżmy, że posiadamy tylko pięć próbek sygnału x(k), k = 0, 1, 2, 3, 4. Załóżmy, że
w sposób sztuczny „uokresawiamy” nasz sygnał powtarzając „w nieskończoność” naszych pięć
próbek dla indeksów k ujemnych i dodatnich. Otrzymujemy w ten sposób okresowy sygnał
xp(k). Oczywiście w jego „środku” znajduje się „protoplasta” całej konstrukcji, wzięty na ry-
sunku w ramkę. Następnie przesuwajmy kolejno sygnał xp(k) o jedną próbkę w prawo, ale bez
ramki „protoplasty”.
Uzyskujemy w ten sposób sygnały xp(k−1), xp(k−2), xp(k−3) itd. Patrząc na nie przez ramkę,
mamy wrażenie, że obserwujemy przez okno przejeżdżający pociąg: to co znika po prawej
stronie pojawia się ponownie po lewej stronie. Tak jakby „protoplasta” sam kręcił się w ramce
w kółko. Pokazuje to prawa kolumna rysunków. Kołowe przesunięcie „protoplasty” może być
interpretowane jako następstwo indeksowania jego próbek w trybie modulo 5: x((k−n0)mod(5)),
gdzie k = 0, 1, 2, 3, 4, a n0 jest dowolną liczbą całkowitą odpowiedzialną za przesunięcie.
Przykładowo dla k = 2 i n0 = 1 mamy: x((2−1)mod(5)) = x((1)mod(5)) = x(1), a dla k = 2 i n0 = 3
otrzymujemy: x((2−3)mod(5)) = x((−1)mod(5)) = x(4). Na rysunku 13.11 sygnał „kołowy” („cykli-
czny”) oznaczono jako xmod(5)(k).
x(k) x(k) x(k) x(k)
1 1 1 1

k k k k
-4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6

h(-k) h(1-k) h(2-k) h(4-k)


1 1 1
1
k k k k
-4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6

y(n) y(n) y(n) y(n)


3 3 3 3

2 2 2 2

1 1 1 1
n n n n
-4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6 -4 -3 -2 -1 0 1 2 3 4 5 6

Rys. 13.10. Ilustracja graficzna splotu liniowego dwóch prostokątnych sygnałów dyskretnychx(k) i h(k)
368 Algorytmy filtracji cyfrowej

Aby przejść do wyjaśnienia operacji splotu kołowego musimy jeszcze zademonstrować wynik
odwrócenia „w czasie” sygnału „uokresowionego” xp(k) i związanego z nim sygnału „koło-
wego” xmod(5)(k), czyli sygnałów xp(−k) oraz xmod(5)(−k) (patrz rysunek 13.12). Oczywiście
kształt sygnału xp(−k) nie jest dla nas zaskoczeniem, ale postać xmod(5)(−k) dla k = 0, 1, 2, 3, 4,
na pierwszy rzut oka dziwi. A nie powinna. Przecież xmod(5)(−k) = x((−k)mod(5)), a stąd dla k =
= 0, 1, 2, 3, 4 mamy:
x(( 0)mod(5)) = x(0)
x((−1)mod(5)) = x(4)
x((−2)mod(5)) = x(3)
x((−3)mod(5)) = x(2)
x((−4)mod(5)) = x(1)
Po tym treningu możemy się już wypuścić na „szerokie wody”. Splot kołowy dwóch iden-
tycznych sygnałów dyskretnych x(k) i h(k) o długości N = 5 próbek jest przedstawiony na
rysunku 13.13. Dla k = 0, 1 i 2 przyjmują one wartość jeden, a dla k = 3 i 4 − wartość zero.
W splocie kołowym indeksowanie próbek sygnału h(k) jest wykonywane w trybie modulo
h((n0−k)mod(N)), dlatego na rysunku sygnał ten został oznaczony jako xmod(5)(k). W pierwszym
kroku sygnał hmod(5)(k) jest odwracany „w czasie” (w sposób kołowy!). W kroku drugim są
wymnażane przez siebie pary próbek sygnałów x(k) i hmod(5)(−k) dla k = 0, 1, 2, 3, 4. W kroku
trzecim są sumowane wyniki pięciu iloczynów i wynikowa wartość stanowi próbkę sygnału
wyjściowego o indeksie „0”: y(0) = ∑k[x(k)hmod(5)(−k)]. Następnie sygnał hmod(5)(−k) jest
przesuwany w prawo o jedną próbkę (w sposób kołowy!). Próbki otrzymanego sygnału
hmod(5)(1−k) są ponownie mnożone z odpowiadającymi im próbkami sygnału x(k) o tym samym
indeksie k. Zsumowana wartość wszystkich iloczynów stanowi próbkę sygnału wyjściowego
o indeksie „1”: y(1) = ∑k[x(k)hmod(5)(1−k)]. Postępując w sposób identyczny, po n0 przesunię-
ciach w prawo (kołowych!) sygnału hmod(5)(−k) otrzymujemy n0-ową próbkę wyniku splotu
kołowego: y(n0) = ∑k[x(k)⋅ hmod(5)(1−k)].
Cóż z tego wynika? A mianowicie, że wynik splotu kołowego może nowicjusza często wpra-
wić w osłupienie. Jeśli w przykładzie przedstawionym na rysunku 13.13 sygnały miałyby
wszystkie próbki równe 1, to w wyniku ich splotu kołowego otrzymalibyśmy sygnał y(n) = 5
dla n = 0, 1, 2, 3, 4, czyli wcale nie „trójkątny” wynik splotu linowego tych samych sygnałów.
Jeśli więc chcemy za pomocą splotu kołowego zrealizować splot liniowy N próbek sy-
gnału x(k), k = 0, 1, 2, ..., N−1, z M próbkami sygnału h(k), k = 0, 1, 2, ..., M−1, to
musimy oba sygnały uzupełnić na końcu zerami do długości K = N+(M−1). Wtedy próbki
odpowiedzi impulsowej h(k), k = 1, 2, 3, ..., M−1, po odwróceniu kołowym w czasie sygnału
hmod(K)(k) „lądują” na końcu wektora hmod(K)(−k), k = 0, 1, 2, ..., K−1, i „trafiają” na zera dodane
do sygnału x(n), wówczas y(0) = x(0)h(0). Występujące potem kolejne przesuwanie kołowe
sygnału hmod(K)(−k) o jedną próbkę w prawo powoduje natomiast, że kolejne próbki odpowiedzi
impulsowej h(k) „wsuwają się” na początek tego sygnału i poprawnie wymnażają z x(k), czyli
metodą kołową jest realizowany splot liniowy!
Jeśli nie wykonamy opisanej powyżej operacji dodania zer, to w wyniku splotu kołowego
pierwszych M−1 próbek sygnału y(n) nie będzie takich samych jak dla splotu linowego.
Algorytmy filtracji cyfrowej 369

x(k) xmod(5)(k)

k k

0 1 2 3 4 0 1 2 3 4

xP(k) xmod(5)(k)

k k

-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

xP(k-1) xmod(5)(k-1)

k k

-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

xP(k-2) xmod(5)(k-2)

k k

-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

xP(k-3) xmod(5)(k-3)

k k

-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

Rys. 13.11. Ilustracja graficzna przesunięcia cyklicznego sygnału x(k), k = 0, 1, 2, 3, 4. xP(k) − sygnał
„uokresowiony”, xmod(5) (k) − sygnał „cykliczny”, związany z sygnałem xP(k)
370 Algorytmy filtracji cyfrowej

xP(k) xmod(5)(k)

k k

-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

xP(-k) xmod(5)(-k)

k k

-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

Rys. 13.12. Wprowadzenie do operacji splotu „cyklicznego”: odwrócenie w czasie sygnału „uokresowio-
nego” xP(k) oraz związanego z nim sygnału „cyklicznego” xmod(5) (k)

x(k) x(k) x(k) x(k) x(k)


A B C D E A B C D E A B C D E A B C D E A B C D E
1 1 1 1 1
k k k k k
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

hmod(5)(-k) hmod(5)(1-k) hmod(5)(2-k) hmod(5)(3-k) hmod(5)(4-k)


A E D C B B A E D C C B A E D D C B A E E D C B A
1 1 1 1 1
k k k k k
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

y(n) y(n) y(n) y(n) y(n)


3 3 3 3 3
2 2 2 2 2
1 1 1 1 1
n n n n n
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

Rys. 13.13. Ilustracja graficzna splotu kołowego („cyklicznego”) dwóch identycznych prostokątnych sy-
gnałów dyskretnych x(k) i h(k) o długości N = 5 próbek, w których tylko pierwszych M = 3 próbek jest nie-
zerowych. Jak widać, jeśli na końcu sygnałów jest minimum M−1 = 2 wartości zerowych, to wówczas splot
kołowy sygnałów jest równoważny splotowi liniowemu (patrz rysunek 13.10)
Algorytmy filtracji cyfrowej 371

13.5. Algorytmy szybkiego splotu sygnałów dyskretnych


Ponieważ za pomocą metody „szybkiego” splotu w dziedzinie częstotliwości (13.13) realizuje-
my splot kołowy (13.12) a nie liniowy, mamy do wyboru dwa scenariusze: albo się z tym po-
godzimy albo będziemy się starali „przechytrzyć wroga”. Załóżmy, że sygnał x(k) ma N pró-
bek, a odpowiedź impulsowa h(k) − M próbek.
• W p i e r ws z e j we r s j i postępowania do sygnału h(k) dodajemy na końcu N−M zerowych
próbek. Następnie realizujemy algorytm (13.12) i odrzucamy pierwszych M−1 niepoprawnych
próbek z otrzymanego sygnału y(n).
• W d r u g i e j we r s j i oba sygnały uzupełniamy na końcu zerami do długości K = N+(M−1).
Potem realizujemy algorytm (13.12), wykonując DFT i IDFT o długości K. Otrzymany sygnał
y(n) jest identyczny z wynikiem splotu liniowego sygnałów x(k) i h(k).
Oczywiście algorytm „szybkiego” splotu staje się rzeczywiście szybki, kiedy wykorzystuje się
algorytmy szybkiej transformacji Fouriera FFT, przedstawione w rozdziale dziewiątym. Wów-
czas w pierwszej metodzie wartość N powinna być potęgą liczby 2, a w drugiej metodzie taka
powinna być wartość K. Zakładamy milcząco, że dysponujemy wyłącznie szybkim algorytmem
FFT typu radix-2. W drugiej metodzie wartość K może być większa niż N+(M−1), tzn. do obu
sygnałów można dodać większą liczbę wartości zerowych niż jest wymagana.
Na rysunku 13.14 przedstawiono przykład zastosowania obu metod. Sygnał x(k) o długości
N = 32 próbek był sumą dwóch sinusoid o częstotliwościach 5 i 40 herców, spróbkowanych
z częstotliwością 100 herców. Odpowiedź impulsowa h(k) o długości M = 13 próbek została
natomiast zaprojektowana metodą okien. Zastosowano wzór (12.56) z częstotliwością granicz-
ną f0 = 20 Hz (F0 = 1/5, Ω0 = 2π/5) oraz okno prostokątne o całkowitej długości M = 13 pró-
bek. W lewej kolumnie zaprezentowano sygnały „robocze” i sygnał wynikowy w pierwszej
metodzie. W tym przypadku odpowiedź impulsową uzupełniono N−M = 19 wartościami zero-
wymi. W otrzymanym sygnale y(n) pierwszych M−1 nie jest poprawnych. W prawej kolumnie
są natomiast przedstawione sygnały drugiej metody. Teraz oba sygnały x(k) i h(k) uzupełniono
na końcu zerami do długości N+(M−1). Otrzymany sygnał y(n) jest zgodny z wynikiem splotu
liniowego obu sygnałów. Jednak na początku i na końcu tego sygnału obserwujemy stany
przejściowe „najeżdżania” i „zjeżdżania” odpowiedzi impulsowej h(k) z sygnału x(k). Ustalony
wynik filtracji stanowi jedynie środkowych N−(M−1) próbek sygnału y(k), wziętych w ramkę.

Jaki jest zysk z zastosowania algorytmów „szybkiego” splotu? Dla przykładu załóżmy, że
sygnał i odpowiedź impulsowa filtra składają się 1024 próbek: N = M = 1024, wówczas
wyznaczenie pierwszych 1024 próbek splotu metodą bezpośrednią wymaga 524 800 mnożeń
i 523 776 dodawań rzeczywistych. Złożoność obliczeniowa metody „szybkiej” jest przedsta-
wiona w tabeli 13-1 dla K = N+M = 2048. Z rozdziału dziewiątego wiemy, że jedno K-punkto-
we FFT składa się z (K/2)log2(K) mnożeń i K*log2(K) dodawań zespolonych. Jak widać jest
o co walczyć, gdyż metoda „szybkiego” splotu wymaga w tym przypadku ponad 3,5 razy mniej
mnożeń i dodawań. Dodatkowo w przypadku wielokrotnej filtracji różnych sygnałów tym
samym filtrem, transformatę Fouriera odpowiedzi impulsowej wyznacza się tylko jeden raz.
Zysk obliczeniowy jest tym większy, im dłuższy jest sygnał i odpowiedź impulsowa filtra.
372 Algorytmy filtracji cyfrowej

Tab. 13-1. Złożoność obliczeniowa algorytmu „szybkiego” splotu, wykorzystującego FFT, dlaK=2048

Operacja Mnożenia rzeczywiste Dodawania rzeczywiste


1. FFT( x(n) z zerami ) 4 * (K/2)log2(K) = 45 056 2 * K*log2(K) = 45 056
2. FFT( h(n) z zerami ) 4 * (K/2)log2(K) = 45 056 2 * K*log2(K) = 45 056
3. Iloczyn widm 4 * K = 8192 −−
4. Odwrotne FFT 4 * (K/2)log2(K) = 45 056 2 * K*log2(K) = 45 056
RAZEM 4K + 6Klog2(K) = 143 360 6Klog2(K) = 135 168

N=32 N=32 M-1=12


2 2

1 1
x(n)

x(n)
0 0

-1 -1

-2 -2
0 10 20 30 0 10 20 30 40
n n
M=13 N-M=19 M=13 N-1=31
0.4 0.4
0.3 0.3
0.2 0.2
h(n)

h(n)

0.1 0.1
0 0
-0.1 -0.1
0 10 20 30 0 10 20 30 40
n n

M-1=12 N-(M-1)=20 M-1=12 N-(M-1)=20 M-1=12

1.5 1.5
1 1
0.5 0.5
y(n)

y(n)

0 0
-0.5 -0.5
-1 -1
-1.5 -1.5
0 10 20 30 0 10 20 30 40
n n
Rys. 13.14. Przykład zastosowania metody „szybkiego” wyznaczania splotu sygnału x(k), 0 ≤ k ≤ N−1,
z odpowiedzią impulsową h(k), 0 ≤ k ≤ M−1. N = 32, M = 13. Po lewej stronie splot kołowy (M−1 pierw-
szych próbek sygnału y(n) trzeba odrzucić), po prawej stronie splot liniowy
Algorytmy filtracji cyfrowej 373

13.6. Algorytmy sekcjonowanego szybkiego splotu sygnałów


dyskretnych
A teraz poznamy „awangardę” algorytmów szybkiego splotu sygnałów, realizowanego w dzie-
dzinie częstotliwości, czyli ich wersje sekcjonowane. Omówione do tej pory algorytmy umo-
żliwiają jedynie splatanie ze sobą dwóch bloków (wektorów) danych. A przecież przede wszy-
stkim trzeba umieć filtrować (splatać ze sobą) sygnały, których próbki napływają na bieżąco
(w czasie rzeczywistym). Cóż wówczas począć? Oczywiście trzeba napływające dane składać
w bloki i przetwarzać w sposób opisany powyżej, czyli blokowo. A potem z uzyskanych frag-
mentów sygnału wyjściowego yi(n) należy odtworzyć cały sygnał. Powszechnie są znane i sto-
sowane dwie metody sekcjonowanego szybkiego splotu: overlap-save i overlap-add. Obecnie
je zaprezentujemy. Załóżmy, że odpowiedź impulsowa filtra h(n) ma długość M, oraz że prób-
ki są pobierane z sygnału x(n) w blokach po N próbek.
Metoda „overlap-save”. Na rysunku 13.15 przedstawiono graficzną ilustrację zasady „pracy”
tej metody. Sygnał przetwarza się w niej w sposób szybki (metodą DFT/FFT), ale realizujący
splot kołowy. W naszym przykładzie M = 7 i N = 16. Na początku M = 7-elementowa odpo-
wiedź impulsowa filtra h(n) jest uzupełniana N−M = 9 zerami i tylko raz transformowana do
dziedziny częstotliwości za pomocą N = 16-punktowego DFT (FFT): H(k) = DFT(h(n)). Na-
stępnie sygnał wejściowy x(n) jest dzielony na fragmenty x1(n), x2(n), x3(n),... itd. o długości
N = 2p = 16, zachodzące na siebie M−1 = 6 próbkami. Potem są wykonywane N-punktowe
DFT (FFT) każdego sygnału xi(n), a otrzymane w ten sposób widma Xi(k) są wymnażane z od-
powiedzią częstotliwościową filtra H(k). Z kolei wykonuje się IDFT (IFFT) z Xi(k)H(k) i uzy-
skuje sygnały yi(n). Ponieważ w każdym z nich pierwszych M−1 = 6 próbek jest niepopraw-
nych, zostają one usunięte. Reszta zostaje złożona razem, dając w wyniku sygnał wyjściowy
y(n). Dzięki nakładaniu się sygnałów x1(n), x2(n), x3(n),... M−1 próbkami, usunięcie M−1 pier-
wszych próbek sygnałów y1(n), y2(n), y3(n),... nie stanowi problemu: poprawne próbki są po-
bierane z wektora poprzedzającego yi(n).
Metoda „overlap-add”. Na rysunku 13.16 przedstawiono graficzną ilustrację tej metody. Syg-
nał przetwarza się w niej w sposób szybki (metodą DFT/FFT), ale realizujący splot liniowy.
W dyskutowanym przykładzie M = 7 i N = 10. Niech K = N+(M−1) = 16. Na początku M =
= 7-elementowa odpowiedź impulsowa filtra h(n) jest uzupełniana K−M = 9 zerami i tylko raz
transformowana do dziedziny częstotliwości za pomocą K = 16-punktowego DFT (FFT):
H(k) = DFT(h(n)). Następnie sygnał wejściowy x(n) jest dzielony na fragmenty x1(n), x2(n),
x3(n),... itd. o długości N = 10, nie zachodzące na siebie. Z kolei są wykonywane K = 16-pun-
ktowe DFT (FFT) każdego sygnału xi(n), uzupełnionego zerami do długości K = 16, a otrzy-
mane w ten sposób widma Xi(k) są wymnażane z odpowiedzią częstotliwościową filtra H(k).
Potem wykonuje się IDFT (IFFT) z Xi(k)H(k) i uzyskuje sygnały yi(n). Ponieważ sygnały te
składają się z K = 16 próbek i zachodzą na siebie K−N = 6 próbkami, należy je wszystkie
dodać.
Metody sekcjonowanego szybkiego splotu, wykorzystujące algorytmy FFT, mogą być jedynym
ratunkiem dla taniej realizacji w czasie rzeczywistym (na bieżąco) splotu sygnału z bardzo
długimi odpowiedziami impulsowymi filtrów, na przykład rzędu kilkadziesiąt tysięcy próbek.
Taka sytuacja występuje podczas komputerowej symulacji akustyki pomieszczeń, mających
odpowiedzi impulsowe dłuższe niż 1 sekunda. Dla częstotliwości próbkowania 22 050 Hz ich
odpowiedzi impulsowe mają bowiem ponad 22 050 próbek. Należy jednak pamiętać o tym, że
w przedstawionej powyżej metodzie sekcjonowanego „szybkiego” splotu sygnałów, wykorzys-
374 Algorytmy filtracji cyfrowej

h(n)

x(n)

x1(n)

y1(n)

x2(n)

y2(n)

x3(n)

y3(n)

x4(n)

y4(n)

y(n)

Rys. 13.15. Ilustracja algorytmu sekcjonowanego szybkiego splotu dwóch sygnałów metodą overlap-save.
M = 7 − długość filtra, N = 16 − długość fragmentów sygnału wejściowego, transformowanych za pomocą
FFT, h(n) − odpowiedź impulsowa filtra uzupełniona N−M = 9 zerami, x(n) − sygnał wejściowy (filtro-
wany), y(n) − sygnał wyjściowy (po filtracji), x1(n), x2(n), x3(n), x4(n) − kolejne fragmenty sygnału wejścio-
wego, pokrywające się M−1 = 6 próbkami, y1(n), y2(n), y3(n), y4(n) − kolejne fragmenty sygnału wyjściowego
(wynik odwrotnej transformacji FFT)
Algorytmy filtracji cyfrowej 375

h(n)

x(n)

x1z(n)

y1z(n)

x2z(n)

y2z(n)

x3z(n)

y3z(n)

x4z(n)

y4z(n)

y(n)

Rys. 13.16. Ilustracja algorytmu sekcjonowanego szybkiego splotu dwóch sygnałów metodą overlap-add:
M = 7 − długość filtra, N = 10 − długość fragmentów sygnału wejściowego, K = 16 długość FFT, h(n) − od-
powiedź impulsowa filtra uzupełniona K−M = 9 zerami, x(n) − sygnał wejściowy (filtrowany), y(n) − syg-
nał wyjściowy (po filtracji), x1z(n), x2z(n), x3z(n), x4z(n) − kolejne fragmenty 10-próbkowe sygnału wejścio-
wego, uzupełnione zerami do długości 16, y1z(n), y2z(n), y3z(n), y4z(n) − kolejne fragmenty sygnału wyjścio-
wego (wynik odwrotnej transformacji FFT)
376 Algorytmy filtracji cyfrowej

tującej FFT, blok jednorazowo przetwarzanych danych musi być większy niż liczba próbek
odpowiedzi impulsowej filtra. Z tego powodu metoda ta wprowadza opóźnienie tym większe,
im dłuższe jest h(n). W sytuacjach, kiedy duża wartość opóźnienia nie jest akceptowalna,
stosuje się metody kombinowane. Długą odpowiedź impulsową dzieli się w nich na części i dla
pierwszego jej fragmentu stosuje się metodę splotu bezpośredniego, dla pozostałych zaś −
metodę FFT.
Załóżmy, że odpowiedź impulsowa filtra składa się z M = 215 = 32 768 próbek. Wybierzmy
metodę overlap-add i przyjmijmy K = 2M = 216 i N = M+1. Obliczenie N kolejnych próbek
sygnału wyjściowego metodą bezpośrednią wymaga wówczas NM ≈ 1,1*109 mnożeń rzeczy-
wistych i N(M−1) ≈ 1,1*109 dodawań rzeczywistych. Dla metody overlap-add otrzymujemy
zaś 4K+4Klog2(K) = 4 456 448 ≈ 4,5*106 mnożenia rzeczywiste i 4Klog2(K) = 4 194 304 ≈
≈ 4,2*106 dodawania rzeczywiste (patrz rozdział 13.5, tabela 13-1), przy założeniu, że trans-
formata Fouriera odpowiedzi impulsowej filtra jest już wyznaczona. Przykład ten powinien
przekonać „niedowiarków”, że „gra jest warta świeczki”.

13.7. Przykład ćwiczenia komputerowego


W tabeli 13-2 przedstawiono program komputerowy, który posłużył do wygenerowania wyni-
ków zaprezentowanych na rysunku 13.14. W programie tym zaimplementowano bezpośredni
splot dwóch sygnałów dyskretnych oraz szybki splot niesekcjonowany i sekcjonowany (metody
overlap-save i overlap-add).

Tab. 13-2. Algorytmy splotu dwóch sygnałów dyskretnych: bezpośredni, „szybki” niesekcjonowany oraz
„szybki” sekcjonowany (wersje overlap-save i overlap-add)

% Ćwiczenie: Szybkie algorytmy splotu dwóch sygnałów dyskretnych

clear all; subplot(111); clf;


% Parametry
idemo = 0; % demo splotu: 0=nie, 1=tak
N = 64; fpr=100; fx1=5; fx2=40; % parametry do zmiany: liczba próbek, częstotliwości [Hz]
% Wygeneruj sygnał filtrowany
nx = 0:N-1; dt = 1/fpr; t = dt*nx; % chwile próbkowania [sekundy]
x1 = cos(2*pi*fx1*t); % sinusoida 1 o częstotliwości fx1
x2 = cos(2*pi*fx2*t); % sinusoida 2 o częstotliwości fx2
x = x1 + x2; % suma sinusoid
% Wyznacz wagi dolnoprzepustowego filtra FIR)
M = 7; fg = 20; h = fir1(M-1,2*fg/fpr,boxcar(M)); % długość filtra, częstotliwość graniczna, oblicz
% Rysunki
subplot(211); stem(x,'filled'); grid; title('Sygnał filtrowany');
subplot(212); stem(h,'filled'); grid; title('Odp impulsowa filtra FIR'); pause
% Operacja splotu w Matlabie: y = conv(x,h)
if (idemo == 1)
% Ilustracja graficzna splotu
h = h(M:-1:1); % odwróć kolejność próbek
xe = [zeros(1,M-1) x zeros(1,M-1)]; % uzupełnij sygnał M−1 zerami po obu stronach
ye = zeros(1,N+2*(M-1)); % sygnał wyjściowy
subplot(311); stem(xe,'filled'); title('WE'); pause
for n = 1 : N+(M-1) % liczba próbek „niezerowych”
he = [zeros(1,n-1) h zeros(1,(N-1)+(M-1)-(n-1))]; % przesuń odp impulsową
y(n) = sum( xe .* he ); ye((M-1)+n)=y(n); % wymnóż x i przesunięte h
subplot(312); stem(he,'filled'); title('odp impuls'); % narysuj przesunięte h
Algorytmy filtracji cyfrowej 377

subplot(313); stem(ye,'filled'); title('WY'); % narysuj aktualne wyjście


pause
end
subplot(111); plot(t,x1,'r',t,y(1:N),'b'); grid; title('We (R) i Wy (B)'); pause
end
% Splot bezpośredni
K = N+M-1; % długość sygnałów z dodanymi zerami
xz=[x zeros(1,K-N)]; % dodaj zera jeśli krótszy
hh = h(M:-1:1); % odwróć kolejność próbek
bx = zeros(1,M); % bufor na próbki wejściowe
y = []; % wyzeruj sygnał wyjściowy
for n = 1 : K % pętla „po” próbkach
bx = [xz(n) bx(1:M-1)]; % przesuń próbki w buforze o jedną do tyłu, bx(1)=x(n);
y(n) = sum(bx.*hh); % filtracja; inaczej (szybciej): y(n)=bx*h'
end
% „Szybki splot” za pomocą FFT: splot liniowy poprzez zmodyfikowany kołowy
% Splot kołowy
NM = max(N,M); % znajdź dłuższy
xz=[x zeros(1,NM-N)]; % dodaj zera, jeśli krótszy
hz=[h zeros(1,NM-M)]; % dodaj zera, jeśli krótszy
X = fft(xz); H=fft(hz);
Y = X .* H;
yfft = ifft(Y);
y1 = real(yfft);
% Splot liniowy
K = N+M-1; % długość sygnałów z dodanymi zerami
xz=[x zeros(1,K-N)]; % dodaj zera, jeśli krótszy
hz=[h zeros(1,K-M)]; % dodaj zera, jeśli krótszy
X = fft(xz); H=fft(hz);
Y = X .* H;
yfft = ifft(Y);
y2 = real(yfft);
% Wszystkie rysunki razem
subplot(311); stem(y,'filled'); title('Po filtrze');
subplot(312); stem(y1,'filled'); title('Po FFT kołowym');
subplot(313); stem(y2(1:N),'filled'); title('Po FFT liniowym');
pause
% Sekcjonowany „szybki splot”: metoda overlap-save
L = ceil( log2(2*M) ); L = 2^L; % długość segmentu ( >> M )
LS = floor( (N-(M-1))/(L-(M-1)) ); % liczba segmentów (w każdym wspólnych jest M−1 próbek)
hs = [ h zeros(1,L-M) ]; % dodaj zera do h
HS = fft(hs); % fft z h
Ny = (M-1)+ LS*(L-M+1); %
Ny = max(Ny,N); %
y = zeros(1,Ny); %
for i = 0 : LS-1 % kolejne segmenty
i % numer kolejnego segmentu
n1st = 1+i*(L-(M-2)-1); % indeks początku kolejnego segmentu
xs = x( n1st : n1st + L-1 ); % fragmenty sygnałów w kolejnych, nakładających się segmentach
XS = fft(xs); % fft fragmentu sygnału
YS = HS .* XS; %
ys = ifft(YS); %
ys = real(ys); %
y(n1st+M-1+0 : n1st+M-1+(L-M)) = ys(M:L);
% Rysunki
xss=zeros(1,N); xss(n1st : n1st+L-1)=xs; yss=zeros(1,N); yss(n1st : n1st+L-1)=ys;
subplot(411); stem(x,'filled'); title('Overlap-Save: całe WE');
subplot(412); stem(xss,'filled'); title('Overlap-Save: fragment WE');
subplot(413); stem(yss,'filled'); title('Overlap-Save: fragment WY');
subplot(414); stem(y,'filled'); title('Overlap-Save: całe WY'); pause
end
% Sekcjonowany „szybki splot”: metoda overlap-add
L = ceil( log2(2*M) ); L = 2^L; % długość segmentu uzupełnionego zerami ( >> M )
378 Algorytmy filtracji cyfrowej

NZ = L - M + 1; % liczba niezerowych próbek w segmencie sygnału


LS = floor((N-(L-NZ))/NZ); % liczba segmentów
hs = [ h zeros(1,L-M) ]; % dodaj zera do h
HS = fft(hs); % fft z h
Ny = LS*NZ+(L-NZ); %
y = zeros(1,Ny); % inicjalizacja sygnału wyjściowego
for i = 0 : LS-1 % kolejne segmenty
i % numer segmentu
n1st = 1+i*NZ; % numer pierwszej próbki
n1 = n1st : n1st + (NZ-1); % indeksy NZ próbek danych wejściowych
n2 = n1st : n1st + (L-1); % indeksy L wyznaczonych próbek wyjściowych
xs = [ x(n1) zeros(1,L-NZ) ]; % fragmenty sygnałów w kolejnych segmentach
XS = fft(xs); % fft fragmentu sygnału
YS = HS .* XS; %
ys = ifft(YS); %
ys = real( ys ); %
y( n2 ) = y( n2 ) + ys; %
% Rysunki
xss=zeros(1,N); xss(n1)=x(n1); yss=zeros(1,N); yss(n2)=ys;
subplot(411); stem(x,'filled'); title('Overlap-Add: całe WE');
subplot(412); stem(xss,'filled'); title('Overlap-Add: fragment WE');
subplot(413); stem(yss,'filled'); title('Overlap-Add: fragment');
subplot(414); stem(y,'filled'); title('Overlap-Add: całość'); pause
end
14
Filtry adaptacyjne

Niniejszy rozdział stanowi wprowadzenie do adaptacyjnego przetwarzania sygnałów [Cowa85,


Glen99, Haye96, Hayk96, Kalo93, Mano00, Rutk94, Theo01, Trei87, Widr85]. Oczywiście,
adaptowanie („dopasowywanie”) parametrów algorytmów przetwarzania sygnałów cyfrowych
do zmiennych warunków, w jakich one działają, jest bardzo istotne. Układ adaptujący się
(„przystosowujący się”) ma zdecydowaną przewagę nad układem nieadaptacyjnym, czyli takim
który nie może lub nie chce niczego się nauczyć. W świecie przyrody tylko organizmy ada-
ptujące się do zmiennych warunków, na przykład klimatycznych, miały szansę przeżycia. Ada-
ptacja nie jest więc kaprysem, ale koniecznością.

14.1. Wprowadzenie
Wyobraźmy sobie sytuację, w której odszumiamy sygnał sinusoidalny zmodulowany w czę-
stotliwości. Sygnał taki może być w praktyce generowany przez układy mechaniczne obraca-
jące się ze zmienną częstotliwością (rysunek 14.1). „Nadajnik” znajduje się wówczas na części
obrotowej urządzenia, na przykład wale, „odbiornik” zaś jest przymocowany do części nie-
ruchomej. Załóżmy, że sygnał wyjściowy z odbiornika jest proporcjonalny do kwadratu od-
ległości c2 pomiędzy odbiornikiem i nadajnikiem. Jak łatwo wykazać z równości trójkąta (c2 =
= a2+b2+2abcosα → c2 = d 2+R 2+2dRcos(ωt), gdzie R − promień wału, d − odległość jego
środka od odbiornika), dla stałej prędkości obrotowej wału jest to sygnał o kształcie „kosinuso-
idalnym”, natomiast dla zmiennej − sygnał „kosinusoidalny” z modulacją częstotliwości. Po
spróbkowaniu sygnału może okazać się, że częstotliwość chwilowa tego sygnału zmienia się od
zera do prawie połowy częstotliwości próbkowania, czyli zajmuje prawie całe użyteczne pas-
mo częstotliwości. Powstaje wówczas problem jak odszumić sygnał, którego zakres zmiennoś-
ci częstotliwości „pokrywa się” z widmem częstotliwościowym szumu. Zastosowanie trady-
cyjnych filtrów mija się wówczas z celem. Jedynym rozwiązaniem jest zastosowanie wąskiego,
pasmowoprzepustowego filtra, którego częstotliwość środkowa jest przestrajana (adaptowana)
w taki sposób, aby pokrywała się z częstotliwością chwilową sygnału (rysunek 14.2).
Innym prostym przykładem filtra adaptacyjnego, tym razem pasmowozaporowego, może być
przypadek usuwania zmieniającego się w częstotliwości sygnału zakłócającego program ra-
diowy. Jak się wkrótce okaże istnieje wiele innych, bardzo ważnych praktycznych zastosowań
filtrów adaptacyjnych.
380 Filtry adaptacyjne

a) b) x(t)
nadajnik odbiornik 6
5.6
5.2
R d 4.8
ω 4.4
4
0 0.4 0.8 1.2 1.6 2
t [s]
Rys. 14.1. Pomiar chwilowej prędkości obrotowej wału: a) orientacyjna budowa obiektu mechanicznego
(bez zamocowania wału), b) przykładowy sygnał rejestrowany przez „odbiornik” (sinusoidalna modulacja
częstotliwości)

a) b)
częstotliwość
częstotliwość
f3
sygnał
pasmo
zaporowe
f2 przestrajany
filtr pasmo
przepustowe

f1 czas
czas
t1 t2 t3

Rys. 14.2. Ilustracja graficzna idei przestrajania w czasie (adaptowania) filtra pasmowoprzepustowego,
przypadek sygnału z modulacją częstotliwości: a) sinusoidalną (np. obracający się wał z rysunku 14.1),
b) liniową

14.2. Podstawy filtracji adaptacyjnej


Schemat blokowy filtra adaptacyjnego jest przedstawiony na rysunku 14.3. Filtr ten ma dwa
sygnały wejściowe (sygnał filtrowany x(n) i sygnał odniesienia d(n)) oraz dwa sygnały wyj-
ściowe (wynik filtracji y(n) i sygnał błędu e(n)). Zadaniem filtra o zmiennej w czasie trans-
mitancji Hn(z) jest takie przekształcenie sygnału wejściowego x(n), aby wynik filtracji y(n) jak
najmniej różnił się od sygnału odniesienia d(n) przy założonym kryterium błędu, na przykład
średniokwadratowym:

J = E  e2 ( n)  = E ( d (n ) − y (n) ) 
2
 
(14.1)
 

gdzie E[.] oznacza wartość oczekiwaną. Jak wiemy w przypadku układów liniowych trans-
mitancja Hn(z) jest ilorazem dwóch wielomianów zmiennej zespolonej z o współczynnikach
{bk(n)} oraz {ak(n)}:

b0 (n ) + b1 (n ) z −1 + b2 (n ) z −2 + ... + bM (n ) z − M
H n ( z) = (14.2)
1 + a1 ( n ) z −1 + a 2 ( n ) z − 2 + ... + a N (n ) z − N
Filtry adaptacyjne 381

FILTR ADAPTACYJNY

d(n) e(n)

x(n) Hn(z) y(n)

Rys. 14.3. Struktura blokowa filtra adaptacyjnego

W tym przypadku współczynniki te mogą się zmieniać w czasie. Minimalizacja wartości wyra-
żenia (14.1) sprowadza się więc do wyznaczenia odpowiednich wartości współczynników
{bk(n)} oraz {ak(n)} transmitancji (14.2), one zaś z kolei decydują o charakterystykach często-
tliwościowych filtra, czyli o tym jak będą wzmocnione i przesunięte w fazie poszczególne
składowe częstotliwościowe sygnału x(n). Jeśli sygnały d(n) i y(n) są stacjonarne i ich właści-
wości nie zmieniają się w czasie, to „optymalne” współczynniki także nie zależą od czasu i są
równe {bkopt} i {akopt}.
Oczywiście, filtr (14.2) jest filtrem rekursywnym IIR, ponieważ ma wielomian zmiennej z
w mianowniku transmitancji. Jak wiemy filtry tego typu są potencjalnie niestabilne, gdyż mają
sprzężenie zwrotne (przypomnijmy: warunkiem stabilności takiego układu jest położenie zer
wielomianu mianownika wewnątrz okręgu jednostkowego). Z tego powodu struktura algoryt-
mów filtracji adaptacyjnej typu IIR jest o wiele bardziej złożona, na przykład algorytmu
SHARF. W tym rozdziale omówiono więc wyłącznie filtry adaptacyjne nierekursywne typu
FIR, gdyż to one są najczęściej stosowane w praktyce. Dla tego typu filtrów równanie trans-
mitancji filtra Hn(z) przyjmuje postać:

H n ( z ) = h0 (n ) + h1 (n ) z −1 + h2 ( n ) z −2 + ... + hM ( n ) z − M (14.3)

sygnał zaś wyjściowy y(n) jest równy:


M
y(n) = ∑ hk ( n ) x ( n − k ) (14.4)
k =0

Błąd „dopasowania” sygnału y(n) do zadanych sygnałów x(n) i d(n) jest wtedy funkcją współ-
czynników filtra {hk(n)} (wektora h(n)):
 M  
2
J (h( n )) = E  d ( n ) − ∑ hk ( n ) x ( n − k )  
   (14.5)
 k =0  

W przypadku stacjonarnych sygnałów wejściowych współczynniki „optymalnej” odpowiedzi
impulsowej są niezmienne w czasie (po okresie adaptacji), czyli mamy {hkopt}.
Problemem, który pozostaje do rozwiązania, jest sposób właściwego „przestrajania” w czasie
każdego współczynnika filtra hk(n):
hk ( n + 1) = hk (n ) + ∆hk ( n ), k = 0, 1, 2,..., M (14.6)

czyli adaptacyjnego korygowania jego wartości. Zagadnienie to jest przedmiotem zaintereso-


wania teorii filtrów adaptacyjnych.
382 Filtry adaptacyjne

Pierwsze zetknięcie się z teorią filtrów adaptacyjnych zawsze wywołuje konsternację. Natych-
miast bowiem pojawia się pytanie: cóż uzyskujemy „dopasowując” za pomocą filtracji sygnał
y(n) do znanego sygnału odniesienia d(n)? Czy nie jest to czasem „masło maślane”? Jak się
jednak wkrótce okaże „scenariusz” filtracji adaptacyjnej jest bardzo elastyczny i znajduje
bardzo wiele ważnych zastosowań. Ponieważ teoria filtrów adaptacyjnych wyrosła na gruncie
adaptacyjnej „obserwacji” zachowania się obiektów dynamicznych, przedstawimy ją teraz
w skrócie.

14.3. Filtracja optymalna − filtr Wienera


Załóżmy, że chcemy wyznaczyć nieznaną transmitancję F(z) jakiegoś układu (patrz rysunek
14.4). Jedną z metod jest pobudzenie tego układu jakimś sygnałem x(n) (np. impulsem Diraca,
skokiem jednostkowym, szumem, przestrajanym w częstotliwości sygnałem sinusoidalnym,
sumą wielu sinusoid), najlepiej pokrywającym cały zakres częstotliwości, i obserwowanie wyj-
ścia z tego układu. Można także podać to samo pobudzenie x(n) na układ, którego trans-
mitancję Hn(z) możemy modyfikować, i zmieniać ją tak długo aż sygnały wyjściowe z obu
układów, identyfikowanego i przestrajanego, będą w przybliżeniu takie same. Możemy wów-
czas stwierdzić, że Hn(z) jest w przybliżeniu równe „identyfikowanej” transmitancji F(z). Jeśli
transmitancja F(z) jest zmienna w czasie, to odpowiednio szybki mechanizm adaptacji Hn(z)
powinien zapewnić możliwość śledzenia zmian F(z).

a) b)
s(n)
nieznane nieznane
d(n) c(n) d(n)
F(z) F(z)
e(n) e(n)
x(n) x(n)
model model
y(n) y ( n ) = dˆ (n )
Hn(z) Hn(z)

Rys. 14.4. Schemat blokowy układu identyfikacji adaptacyjnej: a) idealny − bez szumu, b) rzeczywisty −
z szumem. Przykładowo, górna gałąź układu odpowiada sytuacji, kiedy przez kanał telekomunikacyjny
o transmitancji F(z) jest przesyłany sygnał x(n) w przypadku niewystępowania (a) lub występowania (b)
addytywnego zakłócenia s(n). Natomiast dolna gałąź stanowi estymator gałęzi górnej

Przyjrzyjmy się obecnie opisanemu wyżej problemowi od strony matematycznej. Na początek


załóżmy, że wszystkie sygnały występujące w układzie są stacjonarne. Wówczas po okresie
adaptacji współczynniki filtra Hn(z) powinny się ustalić i przyjąć wartości optymalne:

hkopt = hk = lim hk ( n ) (14.7)


n →∞

Poszukujemy właśnie tych wartości. Dolna gałąź układu z rysunku 14.4 jest estymatorem gałę-
zi górnej i po „dostrojeniu” filtra ma postać:
M
dˆ (n ) = y (n ) = ∑ hk x(n − k ) = hT x(n) (14.8)
k =0
Filtry adaptacyjne 383

gdzie h i x(n) są następującymi wektorami (M+1)-elementowymi:

h = [h0 , h1 , h2 ,..., hM ] T , x ( n ) = [x ( n ), x ( n − 1), x ( n − 2),..., x ( n − M ) ] T (14.9)

Po podstawieniu (14.8) do (14.1) i prostych przekształceniach otrzymujemy:


( ) ( )
2  2
J (h ) = E  d ( n) − hT x( n)  = E  d 2 ( n)  − 2 E  d ( n)hT x(n)  + E  hT x( n)  = (14.10a)
   

= E  d 2 (n)  − 2hT E [ d (n)x(n)] + E  hT x( n)xT ( n)h  = (14.10b)

= E  d 2 (n)  − 2hT rdx


(n)
+ hT E  x(n)xT (n)  h = (14.10c)

[ ] (n )
= E d 2 ( n ) − 2hT rdx + h T R (xxn ) h (14.10d)

Po obliczeniu pochodnej wyrażenia (14.10d) względem h i przyrównaniu jej do zera:


∂J ( h) (n)
= −2rdx + 2R (xxn ) h opt = 0 (14.11)
∂h

otrzymujemy wyrażenie na optymalne wartości wag h (zakładamy, że det(R)≠0):

[
h opt = R (xxn ) ]
−1 ( n )
rdx (14.12a)

które po rozpisaniu występujących w nim macierzy i wektorów przyjmuje postać:


−1
h0opt   rxx
(n)
(0) ( n)
rxx (1) " (n)
rxx (M )   r ( n ) (0) 
 opt   ( n ) (n) (n)   dx( n ) 
h1  =  rxx (1) rxx (0) " rxx ( M − 1) r (1) 
⋅  dx (14.12b)
 #   # # % #   # 
 opt   ( n ) (n ) ( n)   (n ) 
hM   rxx ( M ) rxx ( M − 1) " rxx (0)  rdx ( M )

W powyższych zależnościach Rxx(n) oznacza estymatę m a c i e r z y k o r e l a c j i wł a s n e j sy-


gnału wejściowego x(n) w n-tej chwili czasowej, która ma następujące elementy w i-tym wier-
szu oraz j-tej kolumnie:

 R (xxn )  = rxx(n)
(i − j ) = E [ x ( n − i ) x ( n − j ) ] , i = 0,..., M , j = 0,..., M (14.13)
  i, j

rdx(n) stanowi zaś estymatę we k t o r a k o r e l a c j i wz a j e m n e j między sygnałami wejścio-


wymi d(n) i x(n−i):

 r ( n )  = r ( n ) (i ) = E [ d ( n ) x ( n − i ) ] , i = 0,..., M (14.14)
 dx  i dx

Filtr określony równaniem (14.12) nosi nazwę filtra Wienera. Jak widać zależy on od właści-
wości statystycznych przetwarzanych sygnałów (występowanie wartości „oczekiwanych”).
Jeśli właściwości te są niezmienne w czasie, również współczynniki „optymalnego” filtra
Wienera są stałe. W przeciwnym przypadku, zmieniają się wartości funkcji korelacji sygnałów
i wartości współczynników filtra: hk → hk(n).
384 Filtry adaptacyjne

14.4. Gradientowe filtry adaptacyjne


W związku z tym, że często nie są znane funkcje rozkładu gęstości prawdopodobieństwa
obserwowanych zmiennych losowych lub zmienne te są niestacjonarne, praktyczne zastoso-
wanie równania (14.12) dla każdej chwili czasowej n może stanowić złożony problem z dzie-
dziny optymalizacji stochastycznej (trudności z poprawną estymacją wartości oczekiwanych).
W adaptacyjnym przetwarzaniu sygnałów zwykle więc „idzie się na skróty” i dostosowuje się
znane iteracyjne metody optymalizacji wieloparametrycznej, które sprowadzają się do poszu-
kiwania minimów deterministycznych, wieloargumentowych funkcji „celu” („kosztu”). Wów-
czas iteracyjnie (adaptacyjnie) poszukuje się w przestrzeni (M+1)-wymiarowej wartości (M+1)
„parametrów” funkcji „dopasowania” J(.), czyli optymalnych wag filtra {h0opt, h1opt, h2opt, ...,
hMopt}, dla których występuje minimum tej funkcji.
Najczęściej są stosowane adaptacyjne algorytmy gradientowe. Zakłada się w nich, że modyfi-
kacja ∆h(n) wektora współczynników filtra h(n) powinna być w każdej chwili czasowej n pro-
porcjonalna do wektora gradientu funkcji kosztu (czyli pochodnej tej funkcji względem wekto-
ra wag h(n)), lecz mieć znak przeciwny:
1
h(n + 1) = h( n ) + ∆h( n ) = h(n ) − µ∇ n (14.15a)
2
T
∂J ( h(n ))  ∂J (n ) ∂J ( n ) ∂J ( n ) ∂J ( n ) 
∇n = = , , ,..., (14.15b)
∂h(n ) ∂
 0h ( n ) ∂h1 ( n ) ∂h2 ( n ) ∂hM ( n ) 

Ma to zapewnić modyfikowanie wektora wag h „w stronę” minimum funkcji kosztu J(.) tym
szybciej, im większa jest jej wrażliwość na zmianę tego wektora. Na rysunku 14.5 przedsta-
wiono kształt „powierzchni” funkcji J = E[e2(n)] = E[(d(n)−y(n))2] dla filtra h o tylko jednym
współczynniku h0. Współczynnik skalujący µ, występujący w równaniu (14.15), decyduje
o szybkości przestrajania: im jest on większy, tym większa będzie zmiana ∆h(n), niezależnie
od wartości gradientu ∇n. Dodanie mnożnika 1/2 jest zabiegiem czysto kosmetycznym i jego
wprowadzenie wyjaśni się w następnym podrozdziale. W ogólności współczynnik µ jest
zmienny w czasie i dodatkowo do równania (14.15) wprowadza się macierz „wagową” W(n),
mającą zwiększyć szybkość adaptacji (poprawić jej zbieżność):
1
h(n + 1) = h(n ) − µ(n ) W( n )∇ n (14.16a)
2
W deterministycznej procedurze optymalizacji Newtona-Raphsona za macierz W(n) przyjmuje
się odwrotność hesjanu funkcji celu J(.) w n-tej chwili czasowej:

J=E[e2(n)]

h0

h0opt h0(0)

Rys. 14.5. Przykład „powierzchni” średniokwadratowej funkcji J = E[e2(n)]


dla filtra adaptacyjnego o tylko jednym współczynniku
Filtry adaptacyjne 385

−1
 ∂2J ∂2J ∂2J 
 " 
 ∂h0 ∂h0 ∂h0 ∂h1 ∂h0 ∂hM 
 ∂2J ∂2J ∂2J 
W(n) = ∇ n[ ]
2 −1 
= ∂h ∂h
 1 0 ∂h1∂h1
"
∂h1∂hM


(14.16b)
 2# # % # 
 ∂ J ∂2J ∂2J 
 ∂h ∂h " 
 M 0 ∂hM ∂h1 ∂hM ∂hM 

W przypadku kiedy jest trudno wyznaczyć wartość hesjanu, wykorzystuje się jego aproksymatę
i wówczas takie podejście nazywa się metodą quasi-Newtona.
Oczywiście, powstaje pytanie czy filtr przestrajany według reguły (14.15) w granicy n → ∞
osiągnie optymalne wartości współczynników, określone przez równanie (14.12). Stanie się
tak, jeśli zawsze będzie spełniony warunek:
J (h( n ) + ∆h( n ) ) ≤ J (h( n ) )

Załóżmy, że przyrost wartości współczynników jest bardzo mały. Wówczas funkcję dopasowa-
nia można aproksymować za pomocą rozwinięcia w szereg Taylora pierwszego rzędu:
∂J (h(n ))
J (h(n ) + ∆h(n ) ) ≅ J (h(n ) ) + ∆h T (n ) = J (h(n ) ) + ∆hT (n )∇ n
∂h(n )

Uwzględniając podstawienie ∆h(n ) = −µ∇n / 2 , stosowane w gradientowych metodach adapta-


cyjnych, otrzymujemy:
1 1
J (h(n ) + ∆h(n ) ) ≅ J (h( n ) ) − µ∇Tn ∇ n = J (h( n ) ) − µ ∇ n
2
2 2

skąd wynika, że dla „nieznacznie” zmodyfikowanych wag filtra funkcja „kosztu” osiąga war-
tość równą lub mniejszą niż poprzednio, czyli filtr jest zbieżny do nastaw optymalnych.
Ostatnim problemem jest zakres dopuszczalnych wartości parametru µ. Rozpatrzmy przypadek
optymalizacji średniokwadratowej (14.1) i filtracji Wienera. Jeśli podstawimy do wyrażenia
(14.15a) wartość na gradient ∇n, określony przez równanie (14.11), to otrzymamy (h(n)
zamiast hopt):
1
h(n + 1) = h(n ) − µ − 2rdx
2
(
(n)
+ 2R (xx
n)
h( n ) )
i przekształcimy powyższą zależność do postaci:

(
h(n + 1) = I − µR (xx
n)
) (n )
h( n ) + µrdx

Otrzymane równanie różnicowe ma rozwiązanie postaci (bez dowodu: wynik zastosowania


transformacji Z):

( ) (h(0) − hopt )
n
h( n ) = hopt + I − µR (xxn )

które jest zbieżne do rozwiązania optymalnego, jeśli jest spełniony warunek:


386 Filtry adaptacyjne

2
1 − µλ k < 1 ⇒ 0 < µ <
λk

dla dowolnej wartości własnej macierzy korelacji Rxx(n). Wynika stąd następująca zależność
ograniczająca wartość parametru µ:

( )
M
2
0<µ< , λ max < Trace R (xxn ) = ∑ R xx
(n) ( n)
(i, i ) = ( M + 1) rxx ( 0) (14.17)
λ max i =0

Najwolniej zbieżny składnik wyrażenia (1−µλ)n (najbliższy wartości 1) jest związany z naj-
mniejszą wartością własną λmin. Po przyjęciu:
1
µ=
λ max

ma on postać (1−λmin/λmax)n. Jak widać kluczem do zwiększenia zbieżności adaptacji wag filtra
h(n) do wartości optymalnej hopt jest zmniejszenie rozrzutu wartości własnych macierzy auto-
korelacji Rxx(n) sygnału x(n), jeśli to możliwe. Jest więc najkorzystniej, aby macierz ta była
ortogonalna, co jest równoznaczne ze zdekorelowaniem sygnału x(n). Z t e g o p o wo d u
najczęściej stosuje się adaptacyjne filtry ortogonalne o strukturze krato-
we j , c h a r a k t e r y z u j ą c e s i ę wł a ś c i wo ś c i ą d e k o r e l a c j i d a n y c h we j ś c i o wy c h .
Filtry kratowe szczegółowo omówiono w rozdziale 20.

14.5. Filtry adaptacyjne LMS − filtry bez pamięci


Załóżmy obecnie, że minimalizowane kryterium błędu ma następującą postać:

J = e 2 (n ) (14.18)

czyli że zadaniem filtra adaptacyjnego jest minimalizacja c h w i l o w e j (J = e2(n)) a nie


o c z e k i w a n e j (J = E[e2(n)]) wartości błędu. Asymptotycznie jednak dla n → ∞ filtr ten mi-
nimalizuje średni błąd kwadratowy i stąd potocznie nazwa się go filtrem LMS (ang. Least
Mean Squares). Dla (14.1) gradient minimalizowanej funkcji jest dany wyrażeniem:
T
∂J  ∂e 2 (n ) ∂e2 (n ) ∂e 2 ( n ) ∂e2 (n ) 
∇n = = , , ,...,  (14.19)
∂h(n )  ∂h0 (n ) ∂h1 ( n ) ∂h2 ( n ) ∂hM ( n ) 

gdzie
 M 
∂  d ( n ) − ∑ hk x ( n − k ) 
2
∂e (n ) ∂e(n )
= 2e ( n ) = 2 e( n )  k =0  = −2 e ( n ) x ( n − k ) (14.20)
∂hk (n ) ∂hk (n ) ∂hk (n )

Równanie (14.16a) przyjmuje wtedy następującą postać:


h(n + 1) = h( n ) + µ( n ) W( n )e(n )x(n ) (14.21a)
Filtry adaptacyjne 387

 h0 (n + 1)   h0 (n )   x(n ) 
 h (n + 1)   h (n )   x ( n − 1) 
 1 = 1  + µ( n ) W ( n ) ⋅ e ( n )   (14.21b)
 #   #   # 
     
h
 M ( n + 1) h
  M ( n )   x ( n − M ) 

gdzie W(n) jest macierzą o wymiarach (M+1)×(M+1).

Zależność (14.21) charakteryzuje szeroką rodzinę filtrów adaptacyjnych, które różnią się tylko
szczegółami implementacyjnymi. Obecnie skrótowo je przedstawimy.

1) Filtr LMS otrzymujemy przyjmując stały współczynnik skalujący (µ(n) = µ) oraz identycz-
nościową macierz wagową (W(n) = I − macierz diagonalna, jednostkowa):
h(n + 1) = h( n ) + µe(n )x( n ) (14.22)

Jego zaletą jest prostota implementacji i mała złożoność obliczeniowa każdej iteracji, a podsta-
wową wadą − wolna zbieżność algorytmu, zależna od stosunku λmin/λmax, czyli stosunku mini-
malnej wartości własnej macierzy autokorelacji wejściowego sygnału x(n) do maksymalnej
wartości własnej tej macierzy. W przypadku stacjonarnym, wartość średnia błędu „dostrojenia”
wag h(n) do wartości optymalnej hopt, zdefiniowanej równaniem (14.12), dąży do zera dla
n→∞, jeśli:
2
0<µ< (14.23)
λ max

natomiast błąd średniokwadratowy tego dostrojenia dąży do stałej wartości dla n → ∞, kiedy:
2 2
0<µ< lub 0<µ< (14.24a) (14.24b)

M calkowita moc sygnalu x ( n )
λ
k =0 k

2) Unormowany filtr LMS, czyli NLMS, otrzymujemy uzależniając dodatkowo w (14.22) pa-
rametr µ od czasu w filtrze LMS w następujący sposób:
µ µ
µ(n ) = = (14.25)
γ+∑
T M
γ + x ( n )x ( n ) x 2 (n − k )
k =0

gdzie parametr γ ma zapobiec zerowaniu się mianownika powyższego wyrażenia. Jak widać
w praktyce implementuje się regułę (14.24b). Filtry NLMS charakteryzują się lepszą zbież-
nością (większą szybkością adaptacji) od filtrów LMS.

3) Zdekorelowany filtr LMS (NLMS). Szybkość zbieżności algorytmu LMS zależy od stosun-
ku wartości własnych λmin/λmax macierzy autokorelacji sygnału wejściowego x(n), tzn. jest tym
mniejsza, im większy jest ten stosunek. Sygnał x(n), występujący w równaniu adatacji wag
filtra (14.22), można zastąpić więc przez związany z nim, lecz zdekorelowany sygnał v(n):

x T (n )x( n − 1)
v (n ) = x( n ) − α( n )x (n − 1) , α( n ) = (14.26)
x T ( n − 1)x( n − 1)
388 Filtry adaptacyjne

który ma stosunek λmin/λmax bliski jedności. Powoduje to zwiększenie szybkości adaptacji.


W równaniu (14.26) α(n) jest współczynnikiem korelacji pomiędzy wektorami x(n) i x(n−1).
W przypadku algorytmu NLMS równanie (14.25) zostaje bez zmian, tzn. wykorzystuje
oryginalny sygnał wejściowy.
Inną metodą dekorelacji danych wejściowych może być zastosowanie adaptacyjnych filtrów
ortogonalnych o strukturze kratowej lub wykonanie transformacji ortogonalnej (np. DCT
o macierzy C) obu stron równania (14.22) i wykonywanie adaptacji w dziedzinie „transfor-
maty”:
[Ch( n + 1)] = [Ch(n )] + µe(n)[Cx(n )] (14.27a)
hˆ (n + 1) = hˆ ( n ) + µe(n )xˆ ( n ) (14.27b)

gdzie „^” oznacza wynik transformacji odpowiedniego wektora. W tym przypadku jest adapto-
wanych nie M+1 wag filtra h, tylko ich transformata DCT.

4) Adaptacyjny filtr quasi-Newtona. W tym przypadku w równaniu (14.21) przyjmuje się za


W(n) odwrotność estymaty macierzy autokorelacji: W(n) = [Rxx(n)]−1, czyli macierz Rxx(n) jest
wówczas aproksymatą hesjanu ∇n2 z równania (14.16b). W zależności od sposobu estymacji
macierzy autokorelacji rozróżnia się wiele algorytmów. W najprostszej metodzie po przyjściu
następnej próbki sygnału x(n+1) (0 ≤ i ≤ M) uaktualnia się po prostu estymatę funkcji auto-
korelacji rxx(n)(i) i związanej z nią macierzy Rxx(n) (patrz równanie (14.12b)):
( n +1) (n)
rxx (i ) = λrxx (i ) + x ( n + 1) x ( n + 1 − i ) (14.28)
T
R xx ( n + 1) = λR xx ( n ) + x(n + 1)x(n + 1) (14.29)

gdzie λ jest współczynnikiem zapominania z przedziału [0, 1].

14.6. Filtry adaptacyjne LS (RLS) − filtry z pamięcią


Oczywiście istnieją także inne kryteria „miary” błędu adaptacji niż (14.18). Przykładowo sto-
suje się kryteria „najmniejszych kwadratów” LS (ang. Least Squares):
n
Jn = ∑ e 2 (k ) (14.30)
k =0

oraz „ważonych najmniejszych kwadratów” WLS (and. Weighted Least Squares):


n
Jn = ∑ λn − k e 2 (k ), 0 < λ ≤1 (14.31)
k =0

Odpowiadające im filtry adaptacyjne Gaussa-Newtona będą stanowić przedmiot naszego za-


interesowania w następnym rozdziale. Można wykazać, że filtr WLS (który dla λ = 1 sprowa-
dza się do filtra LS) jest opisany za pomocą następującego równania:
h(n + 1) = h( n ) + K ( n )e(n ) (14.32)
gdzie
Filtry adaptacyjne 389

n
K (n ) = R −xx1 (n )x( n ) , R xx ( n ) = ∑ λn − k x(k )x T (k ) (14.32a)
k =0
e( n ) = d ( n ) − h T ( n )x ( n ) (14.32b)

K(n) jest nazywane wzmocnieniem Kalmana. Równanie (14.32) można także zapisać w posta-
ci:
h(n + 1) = h( n ) + R −xx1 ( n )e(n )x(n ) (14.33)

analogicznej do (14.21a): Rxx−1(n) zastępuje macierz W(n) oraz µ jest równe 1.


Podstawowym problemem obliczeniowym filtracji adaptacyjnej WLS jest efektywna estymacja
„chwilowej” macierzy autokorelacji Rxx(n) oraz jej odwracanie. Rozwiązanie obu zagadnień
prowadzi do rekursywnego algorytmu WLS, czyli WRLS.

Dla dociekliwych. Co prawda estymacją parametrów metodą „najmniejszych kwadratów”


(LS), „ważonych najmniejszych kwadratów” (WLS) i rekursywną wersją (WRLS) tej ostatniej
będziemy się zajmować w następnym rozdziale, ale kształcące wydaje się przedstawienie
filtrów LS/WLS/WRLS w kontekście zagadnień rozpatrywanych obecnie [Haye96].
Wyznaczenie optymalnej wagi filtra hkopt, k = 0, 1, 2, ..., M, sprowadza się do wyznaczenia po-
chodnej funkcji „kosztu” względem tej wagi hk(n) i przyrównanie tej pochodnej do zera:
n n
∂J ( n ) ∂e(i )
= 2 ∑ λn − i e(i ) = − 2 ∑ λn − i e(i ) x (i − k ) =0 (14.34)
∂hk ( n ) i =0 ∂hk ( n ) i =0

Po podstawieniu wyrażenia na sygnał błędu e(n) otrzymujemy:


n  M 
∑ λn − i d (i ) − ∑ hk ( j ) x(i − j ) x(i − k ) =0 (14.35)
i =0  j =0 

Po zamianie kolejności sumowania i prostych przekształceniach mamy:


M  n n −i  n n −i
∑k ∑h ( j )  λ x ( i − j ) x ( i − k )  = ∑ λ d (i ) x (i − k ) (14.36)
j =0 i = 0  i =0

Ponieważ powyższe wyrażenie jest prawdziwe dla k = 0, 1, 2, ..., M, w zapisie macierzowym


można je zapisać jako:
R xx ( n )h(n ) = rdx (n ) (14.37)
gdzie:
n n
R xx ( n ) = ∑ λn − i x(i )x T (i ), rdx ( n ) = ∑ λn − i d (i )x(i ) (14.38a, b)
i =0 i =0

Wynika stąd że:


−1
h(n ) = [ R xx ( n )] rdx (n ) (14.39)

czyli analogicznie do (14.12a), tylko z innymi definicjami Rxx(n) i rdx(n). Dla następnej chwili
czasowej oczywiście zachodzi równość:
390 Filtry adaptacyjne

−1
h(n + 1) = [ R xx (n + 1)] rdx ( n + 1) (14.40)

Teraz zostaje nam wykazać, że jest prawdziwa zależność (14.33), wiążąca wagi filtra h(n+1)
i h(n) w dwóch kolejnych chwilach czasowych. Na początek zauważmy, że są prawdziwe na-
stępujące zależności rekursywne:

R xx ( n + 1) = λR xx (n ) + x( n + 1)x T ( n + 1), rdx ( n + 1) = λrdx (n ) + d (n + 1)x(n + 1) (14.41a, b)

Podstawiając (14.41b) do (14.40) otrzymujemy:


−1
h(n + 1) = [ R xx (n + 1)] [λrdx (n) + d (n + 1)x(n + 1)] (14.42)

Teraz chcemy w równaniu (14.42) zastąpić rdx(n) innym wyrażeniem. Z równania (14.39)
zauważamy, że:
rdx (n ) = R xx (n )h(n ) (14.43)

Z (14.41a) obliczamy Rxx(n) i podstawiamy do (14.43):


1
rdx (n ) = R xx (n + 1) − x(n + 1)xT (n + 1)  h( n ) (14.44)
λ 

Teraz pozostaje nam uwzględnić zależność (14.44) w równaniu (14.42). Po prostych prze-
kształceniach otrzymujemy:

−1
h(n + 1) = h(n ) + [ R xx (n + 1)] x( n + 1)  d ( n + 1) − xT (n + 1)h(n )  (14.45a)
 
−1
h(n + 1) = h(n ) + [ R xx (n + 1)] x( n + 1) [ d (n + 1) − y (n )] (14.45b)

h( n + 1) = h( n ) + [R xx ( n + 1) ] x ( n + 1) e( n )
−1
(14.45c)

I na tym moglibyśmy skończyć, pozostawiając resztę „na deser” (następny rozdział). Mamy już
bowiem równanie adaptacji wag filtra. Ale jesteśmy już tak blisko celu (algorytm WRLS −
Weighted Recursive Least Squares), że „brniemy” dalej, kosztem nieznacznego powtórzenia
wyników, które będą przedstawione później.
W algebrze macierzy jest znana następująca równość:

(A + uvT )−1 = A −1 + A1 + vuvT AA−1u


−1 T −1
(14.46)

Obliczając macierze odwrotne obu stron równania (14.41a) oraz uwzględniając zależność
(14.46) po prawej stronie, otrzymujemy (A = λRxx(n), u = v = x(n+1)):

λ−2 R −xx1 (n )x( n + 1)x T (n + 1)R −xx1 ( n )


R −xx1 (n + 1) = λ−1R −xx1 (n ) + (14.47)
1 + λ−1x T (n + 1)R −xx1 (n )x(n + 1)

Zależność (14.47) pozwala nam w sposób szybki, rekursywny wyznaczyć macierz odwrotną
[Rxx(n+1)]−1 na podstawie macierzy odwrotnej [Rxx(n)]−1. Powstaje w ten sposób rekursywny
algorytm WLS, czyli WRLS. Dalsze szczegóły implementacyjne filtra WRLS poznamy w na-
stępnym rozdziale.
Filtry adaptacyjne 391

14.7. Przykłady zastosowań


Jak już było wspomniane we wstępie do tego rozdziału, filtry adaptacyjne znajdują bardzo sze-
rokie zastosowanie praktyczne. Poniżej przedstawiono przykłady ich najbardziej reprezenta-
tywnych aplikacji. Wszystkie one wykorzystują bardzo ważną cechę filtrów adaptacyjnych
typu FIR, a mianowicie ich zdolność do usuwania z sygnału d(n) tej części „informacji”, któ-
ra jest skorelowana z „informacją” zawartą w sygnale x(n). Ponieważ ta sama, wspólna „infor-
macja” może występować w obu sygnałach z różną intensywnością (amplitudą) i w różnym
czasie, zadaniem adaptacyjnego filtra h(n) jest takie wzmocnienie (stłumienie) odpowiednich
składowych częstotliwościowych sygnału x(n) oraz ich opóźnienie w czasie (przesunięcie w fa-
zie), aby w sygnałach y(n) i d(n) część „wspólna” sygnałów x(n) i d(n) została dopasowana
w czasie i amplitudzie, a część sygnału x(n), „nieobecna” w sygnale d(n), została usunięta z sy-
gnału y(n). Sygnał y(n) jest więc liniowo przekształconą wersją sygnału x(n), najlepiej skore-
lowaną z d(n), a sygnał błędu e(n) = d(n)−y(n) − informacją zawartą w sygnale d(n), której „nie
ma” w sygnale x(n).
Istnieje wiele różnych, praktycznych zastosowań, w których z powodzeniem wykorzystuje się
właściwość filtra adaptacyjnego do „rozkorelowywania” dwóch sygnałów.

1) Adaptacyjne usuwanie interferencji (ang. correlation canceling). Załóżmy, że:


d ( n ) = s( n ) + z1 ( n ), x(n ) = z2 (n )

gdzie s(n) jest interesującym nas sygnałem, a z1(n) i z2(n) są s k o r e l o wa n y m i zakłóceniami.


Filtr adaptacyjny tak przekształca wówczas zakłócenie z2(n), aby go jak najbardziej skorelo-
wać z sygnałem d(n). Ponieważ s(n) i z2(n) są nieskorelowane, więc filtr „dopasowuje” z2(n)
do z1(n), w związku z czym na jego wyjściu otrzymujemy estymatę z1(n):
y ( n ) = H (z 2 ( n ) ) = zˆ1 ( n )

W wyniku tego w sygnale e(n) mamy:


e( n ) = d ( n ) − y ( n ) = s( n ) + (z1 ( n ) − zˆ1 ( n ) )

czyli sygnał s(n) ze zredukowanym zakłóceniem (szumem).


Przykład 1. Mowa w obecności zakłóceń. Wyobraźmy sobie pilota w samolocie. Ma on na gło-
wie słuchawki, a przed ustami mikrofon. Wydaje polecenia. Mikrofon rejestruje sygnał d(n),
czyli jego słowa s(n) oraz szum silnika z1(n). Ustawmy w kabinie drugi mikrofon, „zbierający”
tylko hałas silnika z2(n). Sygnał z2(n) będzie różny od z1(n) (inna amplituda i opóźnienie), po-
nieważ drugi mikrofon znajduje się w innym miejscu niż pierwszy. Oba sygnały są jednak
skorelowane (ten sam silnik). Filtr adaptacyjny wzmacnia (tłumi) i przesuwa w fazie sygnał
z2(n), dopasowując wynik filtracji y ( n ) = H (z2 (n ) ) = zˆ1 (n ) do z1(n). W sygnale błędu otrzymu-
jemy „czystą” wypowiedź pilota, niezależnie od zmienności faz pracy silnika, gdyż filtr się sam
dostraja. Podobny scenariusz można zastosować w przypadku: 1) operatora młota pneu-
matycznego rozmawiającego ze współpracownikami, 2) płetwonurka komunikującego się z ba-
zą, do którego wypowiedzi dodaje się sygnał akcji serca, oraz ... 3) człowieka rozmawiającego
przez telefon komórkowy w samochodzie, wykorzystującego instalację głośnomówiącą. W tym
ostatnim przypadku w sposób adaptacyjny można także usuwać z wysyłanego sygnału sygnał
echa (patrz przykład 3).
392 Filtry adaptacyjne

Przykład 2. Sygnał EKG w obecności zakłóceń sieciowych. Sygnał EKG s(n) jest sygnałem
impulsowym, którego kształt ma bardzo duże znaczenie diagnostyczne. Załóżmy, że dodaje się
do niego zakłócenie sieciowe z1(n). Klasyczna filtracja tego sygnału może doprowadzić do
zmiany kształtu jego załamków. Jednak jeśli jesteśmy w stanie rejestrować „kopię” zakłócenia
z2(n) (o innej amplitudzie i fazie niż oryginał z1(n)), to ponownie jesteśmy w stanie zmini-
malizować jego skutki, obserwując sygnał e(n) zamiast d(n).
Przykład 3. Usuwanie echa. W systemach telekomunikacyjnych często występuje zjawisko od-
bicia sygnału, tzn. do mówcy A dociera nie tylko wypowiedź sB(n) mówcy B, ale także echo
sA(echo)(n) jego własnych słów sA(n). Rozwiązuje się ten problem metodą filtra adaptacyjnego,
podstawiając:

d (n ) = s B (n ) + s (Aecho ) (n ), x(n ) = s A (n)

Ponieważ wypowiedzi sA(n) i sB(n) zazwyczaj nie są skorelowane, wówczas filtr „dopasowuje”
sA(n) do sA(echo) (n) i wyniku tego otrzymujemy:

y ( n ) = H (s A ( n ) ) = eˆ (Aecho ) ( n )

(
e(n ) = d (n ) − y (n ) = sB (n ) + s (Aecho ) (n ) − sˆ(Aecho) ( n ) )
Rozważany przykład dotyczy także telefonicznych instalacji głośnomówiących (samochody,
pomieszczenia biurowe), w których dodatkowo występuje pogłos.

2) Adaptacyjne: odszumianie, liniowa predykcja i estymacja widmowa (ang. adaptive line


enhancement). Załóżmy, że sygnał d(n) ma postać:
P P
d ( n ) = s( n ) + z ( n ) = ∑ si ( n ) + z (n ) = ∑ Ai sin (Ω i n ) + z ( n )
i =1 i =1

czyli składa się z sumy sygnałów sinusoidalnych o różnych parametrach (s(n)) oraz z szumu
(z(n)). Niech szum z(n) będzie nieskorelowany z sygnałem s(n) oraz sam ze sobą (tzn. że prób-
ka szumu z(n) nie jest związana z próbką z(n−1)). Oczywiście próbka sygnału s(n) jest skore-
lowana z próbką s(n−1), gdyż jak łatwo wykazać każdy z sygnałów si (n) = Ai sin(Ωi n) można
uzyskać za pomocą rekursywnej zależności:
si (n ) = −ai ,1si ( n − 1) − ai,2 si (n − 2)
gdzie
ai ,1 = −2 cos Ω i , ai ,2 = 1, si ( −1) = 0, si ( −2) = − Ai sin Ω i

Jeśli założymy:
x (n ) = d ( n − 1)

to wówczas (M + 1)-elementowy filtr adaptacyjny h(n) będzie dokonywał predykcji próbki d(n)
na podstawie zbioru próbek {d(n − 1), d(n − 2), ..., d(n − (M + 1))}. Ponieważ nieskorelowanego
szumu przewidzieć nie może, więc jego wyjście będzie liniową prognozą tylko części zde-
terminowanej, czyli:

y ( n ) = dˆ ( n ) = sˆ( n ) + zˆ(n ) = sˆ(n )


Filtry adaptacyjne 393

Tak więc szum z(n) zostanie „odfiltrowany”. Opisany powyżej „scenariusz” odszumiania bę-
dzie także skuteczny, jeśli część „zdeterminowana” sygnału d(n) będzie wolnozmienna (np.
zmodulowana w częstotliwości), a algorytm dostrajania filtra − dostatecznie szybki. Aby filtr
mógł śledzić P składowych sinusoidalnych musi mieć co najmniej 2P współczynników (po
dwa na składową):
2 P −1 2P
y ( n ) = dˆ ( n ) = − ∑ hk ( n ) d ( n − 1 − k ) = − ∑ a k ( n ) d ( n − k )
k =0 k =1

Dysponując w każdej chwili czasowej n zestawem wag filtra {hk(n), k = 0, 1, 2, ..., 2P−1}, mo-
żemy je wykorzystać do estymacji chwilowego widma częstotliwościowego Dn(ejΩ) sygnału
d(n), gdyż stanowią one współczynniki aproksymującego go modelu AR (ak(n) = hk−1(n),
k = 1, 2, 3, ..., 2P):
1
Dn (e jΩ ) = Dn ( z ) z =exp( jΩ ) = − jΩ − j 2Ω
1 + a1 (n )e + a 2 ( n )e + ... + a 2 P (n )e − j 2 PΩ

gdzie Ω oznacza pulsację unormowaną równą 2πf / fpr.

3) Adaptacyjna identyfikacja. Adaptacyjna korekcja kanału. Zastosowanie to było już wstęp-


nie zasygnalizowane w rozdziale 14.3, a jego schemat blokowy został przedstawiony na ry-
sunku 14.4. Przypomnijmy, sygnał d(n) jest w tym przypadku wyjściem z układu rzeczy-
wistego (kanału transmisyjnego) o transmitancji F(z), pobudzonego sygnałem x(n), czyli d(n) =
= F(x(n)) + s(n). Sygnał x(n) stanowi też wejście przestrajanego (adaptowanego) filtra o trans-
mitancji Hn(z), skąd y(n) = Hn(x(n)). Po zakończeniu adaptacji sygnał błędu e(n) = d(n) − y(n)
osiąga minimum i wówczas y(n) ≈ d(n). Wnioskujemy wtedy, że Hn(z) ≈ F(z). Jeśli F(z) zmie-
nia się wolno, a filtr Hn(z) przestraja się szybko, jest możliwe nawet śledzenie zmian transmi-
tancji identyfikowanego (obserwowanego) układu.
Przedstawione wyżej zagadnienie jest bardzo ważne w systemach telekomunikacyjnych. Po-
nieważ kanał F(z) „deformuje” przesyłany sygnał, więc w odbiorniku należy przeprowadzić
korekcję otrzymanego sygnału d(n), przepuszczając go przez filtr o transmitancji odwrotnej do
transmitancji kanału (czyli 1/F(z)):
1 1 S ( z)
D( z ) = (F ( z ) X ( z ) + S ( z ) ) = X ( z) +
F ( z) F ( z) F ( z)

i odszumiając wynik tej operacji. Jednak aby to wykonać, trzeba znać F(z). Nadajnik więc wy-
syła okresowo tzw. „pilota”, czyli odpowiedni sygnał, który jest znany odbiornikowi. Oznacz-
my ten sygnał przez p(n), odebrany zaś sygnał przez r(n). Wówczas stosując podstawienie
d(n) = r(n) oraz x(n) = p(n), otrzymujemy Hn→∞(z) ≈ F(z), dla d(n) = p(n) i x(n) = r(n) mamy
zaś Hn→∞(z) ≈ F−1(z).

4) Adaptacyjne projektowanie filtrów cyfrowych. Specyfikacja charakterystyki częstotliwoś-


ciowej filtra cyfrowego sprowadza się do podania pożądanych wartości wzmocnienia/tłu-
mienia {Ak} i przesunięcia fazowego {φk} dla wybranego zbioru pulsacji unormowanych {Ωk}.
Jeśli na filtr spełniający zadane wymagania podamy sygnał:

x ( n ) = ∑ sin Ω k n (14.48)
k
394 Filtry adaptacyjne

to na jego wyjściu powinniśmy otrzymać sygnał:

d ( n ) = ∑ Ak sin (Ω k n + φk ) (14.49)
k

Do znalezienia wag hk filtra FIR przekształcającego sygnał (14.48) w (14.49) można wyko-
rzystać rozpatrywane w tym rozdziale algorytmy adaptacyjne. Wystarczy tylko za sygnały wej-
ściowe x(n) i d(n) filtra adaptacyjnego przyjąć (14.48)(14.49) oraz poczekać na ustalenie się
wag filtra hk(n) (dla dostatecznie dużego n).

14.8. Przykład ćwiczenia komputerowego − filtr adaptacyjny


(N)LMS
Najprostszym i równocześnie najczęściej stosowanym filtrem adaptacyjnym jest filtr (N)LMS.
Jego algorytm jest przedstawiony w tabeli 14-1, natomiast w tabeli 14-2 zaprezentowano
przykładowy program, napisany w języku Matlab, w którym algorytm ten zaimplementowano
programowo oraz z sukcesem zastosowano do adaptacyjnego usuwania zakłóceń sieciowych
(przykład 1) oraz adaptacyjnego odszumiania sygnału (przykład 2).

Tab. 14-1. Algorytm filtra adaptacyjnego (N)LMS

1. Wprowadzenie nowych danych wejściowych: x(n) i d(n)


M
2. Obliczenie sygnału wyjściowego z filtra: y(n) = ∑ hk (n) x(n − k )
k =0
3. Obliczenie funkcji błędu: e( n ) = d ( n ) − y ( n )
4. Uaktualnienie współczynnika szybkości adaptacji:
algorytm LMS µ(n ) = µ
µ
algorytm NLMS µ( n ) =
γ+∑
M
k =0
x 2 (n − k )
5. Uaktualnienie współczynników filtra: dla k = 0, 1, 2, ..., M:
hk ( n + 1) = hk ( n ) + µ( n )e( n ) x( n − k )
6. Początek następnej iteracji: n = n+1; skocz do kroku 1

Tab. 14-2. Przykładowy program napisany w języku Matlab, implementujący filtrację adaptacyjną (N)LMS
do adaptacyjnego usuwania zakłóceń

% Ćwiczenie: Filtry adaptacyjne typu LMS (NLMS) − losowego gradientu

% WEJŚCIE: x = sygnał filtrowany, d = sygnał odniesienia


% WYŚCIE: y = przefiltrowany adaptacyjnie sygnał x, e = d−y , czyli sygnał błędu
clear all;
% Uruchom program dla wszystkich kombinacji parametrów ialg i itest
ialg = 2; % rodzaj algorytmu adaptacji: 1=LMS, 2=NLMS
itest = 1; % test: 1 − usuwanie addytywnej interferencji (sieci)
% 2 − usuwanie addytywnego szumu (za pomocą liniowej predykcji)
% Filtr nieunormowany LMS
M = 50; % liczba współczynników wagowych filtra adaptacyjnego
mi = 0.01; % współczynnik szybkości adaptacji ( 0<mi<1)
% Filtr unormowany NLMS
Filtry adaptacyjne 395

eng = 0.; % estymata energii poczatkowej sygnalu x, eng=>0, np. eng=0


beta = 1-1/M; % stala szybkosci zapominania energii 0<=beta<1
% 0 − wszystko pamiętam, 1 − nic nie pamiętam
gamma = 0.001; % stala bezpieczeństwa mianownika energii np. = 0.001
% Generacja sygnału testowego LFM (liniowa modulacja częstotliwości)
Nx = 1000; % liczba próbek
fpr = 1000; % częstotliwość próbkowania
A = 1; % amplituda
f0 = 0; % częstotliwość początkowa sygnału
df = 25; % przyrost częstotliwości Hz/sek
obw = 1; % wybór obwiedni czasowej: 0=brak, 1=Gauss, 2=alfa*t, 3=exp(-alfa*t)
dt=1/fpr; t=0:dt:(Nx-1)*dt; % chwile czasowe próbkowania
s = A*cos( 2*pi* (f0*t + 0.5*df*t.^2) ); % sygnal LFM
if (obw == 1) alfa=10; w=exp(-alfa*pi*(t-0.5).^2); end % obwiednia 1 − krzywa Gaussa
if (obw == 2) alfa=5; w=alfa*t; end % obwiednia 2 − alfa*t
if (obw == 3) alfa=5; w=exp(-alfa*t); end % obwiednia 3 − exp(-alfa*t)
if (obw~=0) s = s .* w; end % sygnał z obwiednią
if (itest==1) % TEST 1 − kasowanie interferencji
P = 0; % brak predykcji
x = 0.1*sin(2*pi*50*t-pi/5); % sieć przesunięta w fazie
d = s + 0.5*sin(2*pi*50*t); % sygnał + sieć
end
if (itest==2) % TEST 2 − odszumianie drogą predykcji
P = 1; % rząd predykcji (do zmiany: 1,2,3,...)
x = s + 0.25*randn(1,Nx); % sygnał + szum
d = [ x(1+P:length(x)) 0 ]; % odniesieniem sygnał "przyspieszony" o P próbek
end

% Rysunki sygnałów wejściowych


subplot(211); plot(t,x); grid; title('WE : sygnał x');
subplot(212); plot(t,d); grid; title('WE : sygnał d');
xlabel('czas [sek]'); pause

% Filtracja adaptacyjna
bx = zeros(1,M); % inicjalizacja bufora sygnalu wejściowego x
h = zeros(1,M); % inicjalizacja wag filtra
y = [];
e = [];
for i = 1 : length(x)
bx = [ x(i) bx(1:M-1) ];
dest = h * bx';
err = d(i) - dest;
if (ialg==1) h = h + ( 2*mi * err * bx ); end % LMS
if (ialg==2)
eng = bx * bx'; % NLMS
h = h + ( (2*mi)/(gamma+eng) * err * bx ); % NLMS
end
y = [y dest];
e = [e err];
end

% Rysunki sygnałów wyjściowych


subplot(211); plot(t,y); grid; title('WY : sygnał y = dest');
subplot(212); plot(t,e); grid; title('WY : sygnał e = err');
xlabel('czas [sek]'); pause
if (itest==1)
subplot(111); plot(t,s,'r',t,e,'b'); grid; xlabel('czas [sek]');
title('Orginał (czerwony) i wynik filtracji (niebieski)'); pause
end
if (itest==2)
n=1:Nx-P;
subplot(111); plot(t(n),s(n),'r',t(n),y(n),'b'); grid; xlabel('czas [sek]');
title('Orginał (czerwony) i wynik filtracji (niebieski)'); pause
end
396 Filtry adaptacyjne

Przykład 1 − adaptacyjne usuwanie interferencji

W tym przypadku sygnały wejściowe filtra d(n) i x(n) były następujące (N = 1000, n = 0, 1,
2, ..., N−1, fpr = 1000 Hz):

( ) ( ) (
d ( n ) = s( n ) + z1 ( n ) = exp −50π( n / f pr − 0,5)2 cos 30π( n / f pr )2 + 0,5sin 2π(50 / f pr ) n )
(
x(n) = z2 (n) = 0,1sin 2π(50 / f pr )n − π / 5 )
Jak widać sygnał odniesienia d(n) był sumą dwóch składowych: 1) składowej użytecznej s(n)
− sygnału z liniową modulacją częstotliwości, zmodulowanego w amplitudzie funkcją Gaussa,
oraz 2) zakłócenia sinusoidalnego z1(n). Sygnał x(n) był natomiast „kopią” zakłócenia, mającą
inną amplitudę i przesuniętą w fazie. Zadaniem filtra było takie wzmocnienie oraz przesunięcie
w fazie sygnału x(n) = z2(n), aby sygnał y(n) był „dobrą” estymatą zakłócenia z1(n), obecnego
w d(n) (czyli skorelowanie zakłóceń z1(n) i z2(n) i ich „odjęcie”). Na rysunku 14.6a jest
przedstawiony wejściowy sygnał d(n), natomiast na rysunkach 14.6b i 14.6c − wyjściowy sy-
gnał błędu e(n) = d(n) − y(n) w przypadku zastosowania algorytmu NLMS z filtrem o długości

a) 1.5
1
0.5
d(n)

0
-0.5
-1
-1.5
0 100 200 300 400 500 600 700 800 900 1000
n
b) 1

0.5
e(n)

-0.5

-1
0 100 200 300 400 500 600 700 800 900 1000
n
c) 1

0.5
e(n)

-0.5

-1
0 100 200 300 400 500 600 700 800 900 1000
n

Rys. 14.6. Przykład 1: zastosowanie filtracji adaptacyjnej NLMS do usuwania zakłóceń sieciowych: a) sy-
gnał d (n), b) sygnał e(n) = d(n) − y(n) dla µ = 0,01, c) sygnał e(n) dla µ = 0,05. Długość filtra M = 50
Filtry adaptacyjne 397

M = 50 współczynników oraz z wartością parametru µ równą 0,01 oraz 0,05. Na rysunku 14.6b
linią przerywaną pokazano także oryginalny kształt składowej użytecznej s(n). Jak widać filtr
„dostroił” zakłócenie z2(n) do zakłócenia z1(n) i w wyniku odjęcia sygnału y(n) od d(n) otrzy-
mano w sygnale błędu e(n) estymatę składowej użytecznej s(n). W pierwszym przypadku pro-
ces adaptacji przebiegał wolniej (mniejsza wartość stałej µ), a w drugim szybciej (większa
wartość stałej µ). Jednak w przypadku wolniejszego filtra uzyskano wierniejsze odtworzenie
sygnału impulsowego s(n), gdyż filtr był za wolny, aby się odstroić od swojego stanu „ustalo-
nego” napotykając na „swojej drodze” sygnał impulsowy z modulacją amplitudy i często-
tliwości. Z rysunku 14.6c wynika, że szybszy filtr usiłuje się także adaptować do zmian
składowej użytecznej s(n) sygnału d(n), co pogarsza jakość filtracji.

Przykład 2 − adaptacyjne odszumianie metodą predykcyjną


W tym przypadku na wejście filtra podano następujące sygnały (pozostałe parametry bez
zmian):
( )
d (n ) = s (n ) + szum( n ) = cos 20π(n / f pr ) 2 + szum(n ) , x( n ) = d (n − 1)

a) 1.5
1
0.5
d(n)

0
-0.5
-1
-1.5
0 100 200 300 400 500 600 700 800 900 1000
n
b) 1.5
1
0.5
y(n)

0
-0.5
-1
-1.5
0 100 200 300 400 500 600 700 800 900 1000
n
c) 1.5
1
0.5
y(n)

0
-0.5
-1
-1.5
0 100 200 300 400 500 600 700 800 900 1000
n

Rys. 14.7. Przykład 2: zastosowanie filtracji adaptacyjnej NLMS do odszumiania sygnału: a) sygnał d(n),
b) sygnał y(n) dla µ = 0,01, c) sygnał y(n) dla µ = 0,05. Długość filtra M = 50
398 Filtry adaptacyjne

czyli sygnał x(n) był opóźnionym o jedną próbkę sygnałem d(n), natomiast szum był szumem
gaussowskim o wartości średniej równej zero oraz odchyleniu standardowym równym 0,25.
W procesie adaptacji filtr, dążąc do upodobnienia sygnału y(n) do d(n), starał się przewidzieć
następną próbkę sygnału d(n) na podstawie jego ostatnich M = 50 próbek. Ponieważ kolejne
próbki szumu nie były ze sobą skorelowane, predykcja mogła się „udać” tylko w przypadku
składowej użytecznej s(n) sygnału d(n) (sygnał z liniową modulacją częstotliwości). Sygnał
y(n) powinien więc stanowić estymatę składowej s(n) tegoż sygnału. Otrzymane wyniki są
przedstawione na rysunku 14.7. Rzeczywiście w wyniku filtracji sygnału x(n) uzyskano „od-
szumiony” sygnał y(n), estymatę składowej s(n). Filtr z wolniejszą adaptacją (µ = 0,01) ada-
ptuje się wolniej, ale odszumia skuteczniej niż filtr szybszy (µ = 0,05).
15
Liniowa estymacja rekursywna

Niniejszy rozdział stanowi wprowadzenie do teorii tzw. obserwatorów, czyli układów śledzą-
cych zmienność stanu obiektów dynamicznych. Omówione w nim zostaną liniowe, rekursywne
„obserwatory” (filtry): RLS, WRLS oraz Kalmana, na podstawie [Host87] i [Cand86]. Stano-
wią one przykład bardzo ważnej gałęzi przetwarzania sygnałów, opartej na modelowaniu mate-
matycznym zachodzących, obserwowanych, dynamicznie zmiennych procesów. Nie możemy
o niej zapomnieć z racji powszechnego występowania takich procesów w naszym życiu
i świecie, w swej istocie dynamicznym a nie statycznym. Systemy radarowe są najstarszym
i powszechnym odbiorcą przedstawionych dalej metod.

15.1. Metoda najmniejszych kwadratów. Filtry RLS i WRLS


Podstawy. Załóżmy, że jakiś obiekt fizyczny generuje wektor x, składający się z N zmiennych:
x(1), x(2), ...., x(N). Zmiennymi tymi interesujemy się z powodów diagnostycznych. Jednak nie
możemy ich zmierzyć bezpośrednio, gdyż dysponujemy aparaturą pomiarową (metodą), która
umożliwia pomiar M-elementowego wektora z: z(1), z(2), ..., z(M), związanego z x (M ≥ N):
z = Hx + v (15.1)

gdzie macierz układu pomiarowego H ma wymiary M×N, a wektor v oznacza addytywny szum
pomiarowy, „zakłócający” pomiar. Powstaje pytanie w jaki sposób obliczyć najlepszą estymatę
wektora x, dysponując H i z. Oznaczmy tę estymatę przez x̂ . Odpowiada jej zawsze jakiś błąd
(szum) v̂ :
z = Hxˆ + vˆ (15.2)

Estymata x̂ będzie tym lepsza, im mniejszy będzie błąd sumy kwadratów (ang. LS − Least
Squares), związany z v̂ , czyli kiedy funkcja „jakości” estymacji (oszacowania) postaci:
M
J = vˆ T vˆ = vˆ12 + vˆ22 + ... + vˆ M
2
= ∑ vi2 (15.3)
i =1
400 Liniowa estymacja rekursywna

będzie przyjmowała wartość minimalną. Funkcję tę można zapisać jako:

J = (z − Hxˆ )T (z − H xˆ ) (15.4)

Aby wyznaczyć wartość x̂ , dla której błąd J osiąga minimum, należy wyznaczyć jego pochod-
ne cząstkowe względem x̂i i je przyrównać do zera:

∂J
= −H T (z − H xˆ ) = 0 (15.5)
∂ xˆ

skąd otrzymujemy:

H T H xˆ = H T z

(
xˆ = H T H )−1 HT z (15.6)

Z analizy drugiej pochodnej błędu J względem x̂ wynika, że kiedy macierz H jest p e ł n e g o


r z ę d u , to jest to punkt minimum funkcji błędu. Macierz HTH jest wówczas dodatnio okre-
ślona i istnieje macierz do niej odwrotna (HTH)−1.
Oczywiście, aby rozwiązanie było jednoznaczne, powinniśmy dysponować minimum układem
N równań, gdyż poszukujemy N niewiadomych. W takim przypadku jednak wpływ szumu na
jakość estymacji jest największy. Zebranie dodatkowych wyników pomiaru powoduje, że
otrzymujemy układ równań, w którym równań jest więcej niż niewiadomych. Niewiadome te
można więc wyznaczyć z większą dokładnością redukując wpływ szumu drogą „uśredniania”
wyniku (podobnie jak w przypadku pojedynczego pomiaru w obecności szumu). Łatwo
sprawdzić, że pomimo wzrostu liczby pomiarów M, macierz (HTH)−1HT ma zawsze wymiary
M×N.
Zwiększając jednak liczbę pomiarów M i w konsekwencji rozmiary macierz H, powodujemy,
że rozwiązanie równania macierzowego (15.6) staje się coraz bardziej czasochłonne oblicze-
niowo. Powstaje więc pytanie, czy nie można obliczyć pierwszej, „zaszumionej” estymaty
x̂ z najmniejszego dopuszczalnego układu równań, czyli N×N, a następnie sukcesywnie, ada-
ptacyjnie modyfikować uzyskane w ten sposób rozwiązanie uwzględniając dodatkową „infor-
mację”, wnoszoną przez każdy kolejny pomiar.

Przykład. Przykładem takiej rekursywnej estymacji może być rekursywne szacowanie wartości
średniej. Załóżmy, że obliczamy wartość średnią sygnału z N próbek. Jest ona wówczas równa:
N
1
xˆ N =
N
∑ x(n )
n =1

Powyższy wzór możemy zapisać także w postaci:


N −1
1 1 1 N − 1  1 N −1  1 N −1
xˆ N = x( N ) +
N N
∑ x ( n) = N x ( N ) +  ∑ x(n)  = N x( N ) + N xˆN −1 =
N  N − 1 n=1
n =1 
1
= xˆ N −1 +  x ( N ) − xˆ N −1 
N
Liniowa estymacja rekursywna 401

czyli przedstawić nową estymatę wartości średniej z N punktów jako sumę starej estymaty,
obliczonej na podstawie N−1 punktów oraz jej korekty po uwzględnieniu nowej, N-tej próbki
x(N). Korekta jest wyliczana jako wagowa (mnożnik 1/N) wartość błędu pomiędzy wartością
nowej próbki a starą estymatą wartości średniej. Schemat ten, jak się wkrótce przekonamy, jest
obowiązującym standardem w rekursywnej, adaptacyjnej estymacji parametrów:
nowa estymata = jej prognoza + korekta
korekta = wzmocnienie * (pomiar − prognoza pomiaru)
gdzie mierzy się jedną wielkość, a estymuje inną, z nią związaną.

Wyprowadzenie. Powróćmy jednak do problemu estymacji najmniejszych kwadratów. Zapisz-


my równanie (15.6) w formie podkreślającej, że jest to estymata oparta na wykonanych do tej
pory k pomiarach:
−1
xˆ ( k ) =  HT ( k ) H( k )  HT ( k ) z ( k ) (15.7)
 
Z kolei estymata następna wykorzystująca k + 1 pomiarów jest dana równaniem:
−1
xˆ ( k + 1) =  HT ( k + 1)H( k + 1)  HT ( k + 1) z( k + 1) (15.8)
 
gdzie
 H( k )   z(k ) 
H(k + 1) =  T  , z(k + 1) =  z  (15.9)
h ( k + 1)  k +1 
czyli do macierzy H jest dodany nowy wiersz, a do wektora z − jedna wartość, (k + 1)-szy
wynik pomiaru. Dokonajmy prostych przekształceń:
 H( k ) 
HT ( k + 1)H( k + 1) =  HT ( k ) h( k + 1)   T T
 = H ( k )H( k ) + h( k + 1)h ( k + 1) (15.10)
   hT ( k + 1) 
 

Zdefiniujmy dodatkowo macierz P(k) jako


−1
P ( k ) =  HT ( k ) H ( k )  (15.11)
 
Wtedy z (15.10):
−1 −1
P( k + 1) =  HT ( k + 1)H( k + 1)  =  HT ( k )H( k ) + h( k + 1) hT ( k + 1)  =
 
−1
=  P−1 ( k ) + h( k + 1) hT ( k + 1)  (15.12)
 
Zgodnie ze znaną w rachunku macierzowym równością:
−1 A −1uvT A −1
 A + uvT  = A −1 − (15.13)
  1 + vT A −1u
równanie (15.12) można zapisać w następującej postaci:

P(k + 1) = P(k ) − P(k )h( k + 1)c( k + 1)hT ( k + 1)P( k ) (15.14)


402 Liniowa estymacja rekursywna

1
c (k + 1) = (15.15)
T
1 + h (k + 1)P(k )h(k + 1)
Ponieważ wartość w mianowniku (15.15) jest skalarem, dlatego współczynnik c(k+1) jest także
skalarem.
Obecnie zapiszemy w zmienionej postaci wyrażenie (15.8), stosując dekompozycję macierzy
H(k+1) i wektora pomiarów z(k+1):
 z( k ) 
xˆ (k + 1) = P( k + 1)HT ( k + 1) z ( k + 1) = P( k + 1)  HT ( k ) h( k + 1)   (15.16)
   zk +1 
Po wymnożeniu otrzymujemy z (15.16):

xˆ (k + 1) = P(k + 1)  HT ( k )z ( k ) + h( k + 1) zk +1  (15.17)
 

Po zastosowaniu wyrażenia (15.14) na P(k+1) mamy z kolei:

xˆ ( k + 1) =  P( k ) − P( k )h( k + 1)c( k + 1)hT ( k + 1)P( k )  ⋅  HT ( k ) z( k ) + h( k + 1) zk +1  (15.18)


   

Przekształcenie (15.18) daje w wyniku:

xˆ ( k + 1) = P (k )HT ( k ) z ( k ) + P( k )h( k + 1) zk +1 +

− P( k )h( k + 1) c( k + 1) hT ( k + 1)P( k )HT ( k ) z( k ) +

− P(k )h(k + 1)c(k + 1)h T ( k + 1)P(k )h( k + 1) z k +1 (15.19)

Po uwzględnieniu (15.7) i (15.11) otrzymujemy:

xˆ ( k + 1) = xˆ (k ) − P( k )h( k + 1)c (k + 1)hT ( k + 1) xˆ ( k ) +

+  P( k )h( k + 1) − P( k )h( k + 1)c( k + 1)hT ( k + 1)P( k )h( k + 1)  zk +1 (15.20)


 

Po podstawieniu do wyrażenia w nawiasie kwadratowym wzoru na współczynnik c(k + 1)


(15.15) oraz po sprowadzeniu całości do wspólnego mianownika, ostatni składnik powyższej
sumy upraszcza się do postaci:
P(k )h(k + 1)c(k + 1) z k +1 (15.21)
więc
xˆ (k + 1) = xˆ (k ) + P(k )h( k + 1)c( k + 1)  zk +1 − hT ( k + 1)xˆ ( k )  (15.22)
 
Wprowadzając oznaczenie:
K ( k + 1) = P( k ) h( k + 1) c( k + 1) (15.23)

zapisujemy (15.22) w ostatecznej, powszechnie znanej postaci:

xˆ ( k + 1) = xˆ (k ) + K (k )  zk +1 − hT (k + 1) xˆ ( k )  = (15.24a)
 
= xˆ ( k ) + K (k ) [ zk +1 − zˆk +1 ] (15.24b)
Liniowa estymacja rekursywna 403

Rozpoznajemy w podanym równaniu przedstawioną wcześniej regułę rekursywnej estymacji:


nowa estymata xˆ (k + 1) = jej prognoza xˆ (k ) + korekta. Prognoza estymaty w kolejnym kroku
jest równa wartości starej estymaty. Z kolei korekta jest iloczynem wzmocnienia K(k) i błędu
prognozy pomiaru. Wyrażenie w nawiasie kwadratowym stanowi bowiem błąd pomiędzy
pomiarem zk+1 a jego prognozą zˆk +1 , daną wzorem:
zˆk +1 = h T (k + 1)xˆ (k ) (15.25)
Jak widać prognoza pomiaru zˆk +1 wykorzystuje starą estymatę xˆ (k ) i nowy, znany wektor
h(k+1). Jeśli prognoza pomiaru „trafia” w pomiar, wyrażenie w nawiasie kwadratowym jest
równe zero i stara estymata nie jest korygowana.
Algorytm. Końcowa postać algorytmu estymacji rekurencyjnej metody najmniejszych kwadra-
tów RLS (ang. Recursive Least Squares) jest podana w tabeli 15-1 (bez zapominania, λ = 1),
natomiast jego schemat blokowy jest przedstawiony na rysunku 15.1. Rekursywna estymacja
N wartości wektora x przebiega w ten sposób, że na początku wyznacza się jego pierwszą
estymatę na podstawie minimalnej, koniecznej liczby M = N pomiarów z z równania (15.6):

( )
−1
xˆ ( N ) = HT ( N )H( N ) HT ( N ) z ( N ) (15.26)

a następnie w sposób rekurencyjny przeprowadza się uaktualnianie tej estymaty. Po M pomia-


rach (M > N) wynik algorytmu rekurencyjnego jest taki sam, jak otrzymany z równania:

( )
−1
xˆ ( M ) = HT ( M )H( M ) HT ( M ) z( M ) (15.27)

Tab. 15-1. Algorytm estymacji RLS (λ = 1) i WRLS (λ < 1)

1. Inicjalizacja: estymata N-elementowego wektora x, oparta na pierwszych N pomiarach:


W = diag(λN−1, λ N−2, ..., λ, 1),

( ) ⋅ HT ( N ) ⋅ W ⋅ z ( N ) ,
−1
xˆ ( N ) = HT ( N ) ⋅ W ⋅ H( N )

P ( N ) = ( HT ( N ) ⋅ W ⋅ H ( N ) ) ,
−1

k = N;
2. Nowy pomiar zk+1 (nowe h( k + 1) i nowy szum vk+1):
z k +1 = h T ( k + 1) ⋅ x ( k + 1) + v k +1
3. Modyfikacja parametrów wzmocnienia:

( )
−1
c( k + 1) = λ + hT ( k + 1) ⋅ P( k ) ⋅ h(k + 1)
K ( k + 1) = P( k ) ⋅ h( k + 1) ⋅ c( k + 1)
4. Predykcja pomiaru − korekta estymaty wielkości szukanej:
(
xˆ ( k + 1) = xˆ ( k ) + K ( k + 1) ⋅ z k +1 − h T ( k + 1) ⋅ xˆ ( k ) )
5. Modyfikacja macierzy P:
1
( )
P( k + 1) = I − K ( k + 1) ⋅ hT ( k + 1) ⋅ P( k ) , gdzie I to macierz identycznościowa
λ
6. Następna iteracja: k = k + 1 ; skok do punktu 2.
404 Liniowa estymacja rekursywna

zˆk +1
zk+1 Opóźnienie
K(k+1) jednostkowe hT(k+1)

xˆ (k ) zˆk +1
xˆ (k + 1)

Rys. 15.1. Schemat blokowy estymacji RLS

tylko liczony iteracyjnie. Wynika stąd, że po każdym k-tym pomiarze obliczona, „najlepsza”
(lub „najbardziej prawdopodobna”) estymata uwzględnia całą historię procesu obserwacji
obiektu. Jest więc w jakimś sensie estymatą „średnią”. Kiedy jednak estymowane wartości
wektora x nie są stałe, a na przykład się zmieniają, wówczas ich estymata będzie równa „śred-
niej” wartości tych parametrów za cały czas obserwacji. Nie zawsze nam to jednak odpowiada.
Czasem jest korzystniej śledzić zmienność obserwowanych parametrów i wnioskować na ich
podstawie o zmianie stanu obiektu. „Lekarstwem” na zaistniałą sytuację może być spowo-
dowanie, aby najbardziej odległe („najstarsze”) pomiary były zapominane w procesie estyma-
cji, tzn. żeby estymata opierała się na określonej liczbie ostatnich („najświeższych”) pomiarów.
Wprowadzając te idee w życie uzyskuje się ważony, rekursywny algorytm najmniejszych
kwadratów WRLS (ang. Weighted Recursive Least Squares), mający zdolność „zapominania
przeszłości” i w konsekwencji adaptacyjnego śledzenia „dynamicznych” zmian wartości
wektora x. Jest to jednak okupione pogorszeniem jakości estymacji stanów „statycznych”
wektora x, gdyż estymata jest teraz wyznaczana na podstawie mniejszej liczby pomiarów
(kilku, kilkunastu,...), w związku z czym jej statystyczne parametry są gorsze (większa
wariancja, czyli rozrzut jej wartości). Zawsze jest przy tym prawdziwa prawidłowość, że im
estymator szybciej „zapomina” przeszłość, to lepiej nadąża za dynamicznymi zmianami
wartości estymowanych, ale równocześnie jest bardziej „zaszumiony”, gdyż zaczyna „nadążać”
także za szumem. I odwrotnie, estymator z wolnym „zapominaniem” nie jest w stanie wiernie
oddać dynamiki zmian obiektu, ale za to dobrze odszumia.
Jak się wprowadza do wyżej wyprowadzonego algorytmu właściwość „zapominania” prze-
szłości? Definiując minimalizowane kryterium jakości estymacji w postaci:

J = vˆ T Wvˆ = w1vˆ12 + w2 vˆ 22 + ... + w M vˆ M


2
(15.28)

gdzie macierz diagonalna W ma na głównej przekątnej wagi wi, nadające różne znaczenie
błędom estymacji w poszczególnych chwilach czasowych. Stosując powyższą funkcję jakości
otrzymuje się, analogicznie jak poprzednio, optymalne rozwiązanie problemu estymacji posta-
ci:

( )
−1
xˆ = HT WH HT Wz (15.29)

które odpowiada (15.6). Jeśli szum v ma zerową wartość średnią oraz znaną macierz kowa-
riancji R:
E[ v ] = 0 , E[ vv T ] = R (15.30)
Liniowa estymacja rekursywna 405

to wówczas można przyjąć W = R−1. Najczęściej przyjmuje się jednak diagonalną macierz
W, mającą na głównej przekątnej współczynniki wagowe, zdefiniowane zależnością (λ ≤ 1):

wi = λM − i , i = 1, 2, ..., M (15.31)

czyli zakłada się zapominanie eksponencjalne (wykładnicze). Dla niego błąd pomiaru w a k t u -
a l n e j , M-tej chwili czasowej ma wagę równą 1, błąd zaś najstarszego pomiaru w pierwszej
chwili czasowej ma wagę równą λM−1. Im parametr „zapominania” λ ma mniejszą wartość, tym
estymator szybciej zapomina poprzednie pomiary, natomiast dla λ = 1, pamięta „wszystko”.
Równanie (15.29) dla wag postaci (15.31) może być w prosty sposób wyznaczane rekursywnie.
Algorytm ważonej estymacji RLS jest przedstawiony w tabeli 15-1. Na rysunku 15.2 pokazano
przykładowe wyniki estymacji parametrów obiektu, o wartościach x = [− 0,987; 2,345]
metodami RLS i WRLS (λ = 0,95). W tym przypadku parametry obiektu są niezmienne
w czasie. W przypadku algorytmu RLS wraz ze wzrostem numeru iteracji estymata charakte-
ryzuje się coraz mniejszą wariancją, ponieważ algorytm wyznacza „średnią” ze wszystkich
pomiarów. Dla algorytmu WRLS wariancja estymaty „ustala” się natomiast na wyższym
poziomie, ponieważ wynikiem działania algorytmu jest w tym przypadku „średnia” ważona,
bardziej „wrażliwa” na ostatnie pomiary. Jednak w przypadku kiedy stan obiektu zmienia się
skokowo (rysunek 15.3), algorytm WRLS jest w stanie śledzić te zmiany, algorytm zaś RLS
staje się wówczas mniej użyteczny, ponieważ wyznacza estymatę „średniego” stanu obiektu od
początku obserwacji. Im parametr λ ma mniejszą wartość, tym szybciej procedura WRLS
zapomina o przeszłości i szybciej reaguje na zmianę parametrów obiektu, ale kosztem większej
wariancji estymaty tych parametrów. Aby należycie ocenić uzyskane wyniki estymacji, po-
kazane na rysunkach 15.2 i 15.3, na rysunku 15.4 przedstawiono wartości kolejnych pomiarów
zk, które stanowiły punkt startowy do dalszych obliczeń. W tabeli 15-2 przedstawiono program,
napisany w języku Matlab, w którym Czytelnik może znaleźć dalsze szczegóły dotyczące
opisanego powyżej eksperymentu symulacyjnego.

Przykład

Jako przykład zastosowania omówionej metody przedstawimy rekurencyjną estymację współ-


czynników h(n) filtra cyfrowego na podstawie znajomości jego sygnału wejściowego x(n)
i sygnału wyjściowego y(n), zaszumionego szumem s(n):
N −1
y(n) = ∑ x (n − k ) ⋅ h( k ) + s( n ) = x T h + s( n ) (15.32)
k =0

Odpowiedź impulsowa tego filtra h(n) ma N współczynników. Znając sygnał wejściowy x(n)
oraz zbierając M próbek wyjściowych z filtra y(n), otrzymujemy następujący układ równań:

 y [0]   x (0) x ( −1) x ( −2 ) ... x ( − N + 1)   h (0)   s(0) 


 y[1]   x (1) x ( 0) x ( −1) ... x ( − N + 2)   h(1)   s(1) 
       
 y [2]  =  x ( 2) x (1) x ( 0) ... x ( − N + 3)  ⋅  h (2)  +  s( 2) 
       
 #   ... ... ... ... ...   #   # 
 y [M − 1]  x ( M − 1) x ( M − 2) x ( M − 3) ... x ( − N + M ) h( N − 1)  s ( M − 1)
(15.33)
406 Liniowa estymacja rekursywna

a) -0.7 2.8
2.7
-0.8
2.6

x1e(k)

x2e(k)
2.5
-0.9
2.4
-1 2.3
0 500 1000 1500 2000 0 500 1000 1500 2000
k k

b) -0.6 2.8
-0.7 2.7
-0.8 2.6
x1e(k)

x2e(k)
-0.9 2.5
-1 2.4
-1.1 2.3
-1.2 2.2
0 500 1000 1500 2000 0 500 1000 1500 2000
k k
Rys. 15.2. Przykładowe wyniki estymacji parametrów obiektu, o wartościach parametrów x = [− 0,987;
2,345], metodami rekursywnymi: a) RLS, b) WRLS (λ = 0,95). Liniami przerywanymi zaznaczono rzeczy-
wiste wartości parametrów obiektu

a) 1 3
2
0.5
1
x1e(k)

x2e(k)

0 0
-1
-0.5
-2
-1 -3
0 500 1000 1500 2000 0 500 1000 1500 2000
k k

b) 1 3
2
0.5
1
x1e(k)

x2e(k)

0 0
-1
-0.5
-2
-1 -3
0 500 1000 1500 2000 0 500 1000 1500 2000
k k
Rys. 15.3. Przykładowe wyniki estymacji wartości skokowo zmiennych (x = [±0,987; ±2,345]) parametrów
obiektu metodami: a) RLS, b) WRLS (λ = 0,95). Liniami przerywanymi zaznaczono rzeczywiste wartości
parametrów obiektu, zmieniające się skokowo w czasie
Liniowa estymacja rekursywna 407

10 10

5 5

0 0
zk

zk
-5 -5

-10 -10
0 500 1000 1500 2000 0 500 1000 1500 2000
k k
Rys. 15.4. Wartości pomiaru w kolejnych chwilach czasowych dla przypadków estymacji przedstawionych
na rysunkach 15.2 (stałe wartości parametrów obiektu) i 15.3 (zmienne wartości parametrów obiektu)

Tab. 15-2. Program napisany w języku Matlab do rekursywnej estymacji parametrów obiektu metodą RLS
(λ = 1) i WRLS (λ < 1)

% Ćwiczenie: Rekursywna estymacja parametrów metodą RLS i WRLS

clear all;

% PARAMETRY
iter=2000; % liczba iteracji
M=2; % liczba niewiadomych
dwe=1.0; % odchylenie standardowe wejścia (szum normalny)
dsz=0.5; % odchylenie standardowe szumu pomiarowego
lambda=0.95; % parametr „zapominania” ( 0 < lambda <= 1 ); dla RLS = 1
x=[-0.987 2.345]'; % rzeczywisty stan obiektu

% INICJALIZACJA
I=eye(M); % macierz jednostkowa
randn('seed',54321); % ustawienie parametru startu generatora: seed = 54321
h=dwe*randn(1,M); % inicjalizacja wektora wejścia
H=h; %
for k=2:M % # generacja macierzy
h=h(1:(M-1)); % # współczynników „H”
h=[dwe*randn(1,1) h]; %#
H=[H; h]; %#
end %#
z=H*x+dsz*randn(M,1); % generacja wektora wyjścia „z”
w=lambda.^(M-1:-1:0); w=w'; %
W = diag(w,0); % inicjalizacja macierzy wag
P=inv(H'*W*H); % obliczenie pierwszej estymaty macierzy „P”
xe=P*H'*W*z; % obliczenie pierwszej estymaty stanu obiektu „xe”
Z=[]; % wektor historii pomiarów
XE=[]; % macierz historii estymacji
XR=[]; % macierz referencyjna
h=h'; % h − zamiana na wektor „pionowy”

% PĘTLA GŁÓWNA
for k=1:iter
if (rem(k,500)==0) % ewentualna
x=-x; % zmiana stanu obiektu na przeciwny
end %
h=h(1:(M-1)); h=[dwe*randn(1,1); h]; % nowy wektor wejścia „h” # ZNANE !!!
z=h'*x+dsz*rand; % nowy pomiar # ZNANE !!!
K=P*h/(h'*P*h+lambda); % nowe wzmocnienie „K” # Metoda
P=(I-K*h')*P/lambda; % nowa macierz „P” # kowariancyjna
xe=xe+K*(z-h'*xe); % nowa estymata stanu obiektu
XR=[XR; x']; % odniesienie
XE=[XE; xe']; % historia estymacji
408 Liniowa estymacja rekursywna

Z=[Z; z']; % historia pomiarów


end

% PREZENTACJA HISTORII ESTYMACJI


t=1:1:iter;
plot(t,Z); title('POMIAR'); xlabel('ITERACJA'); grid; pause
plot(t,XE(:,1),t,XR(:,1)); title('ESTYMATA X1'); xlabel('ITERACJA'); grid; pause
plot(t,XE(:,2),t,XR(:,2)); title('ESTYMATA X2'); xlabel('ITERACJA'); grid; pause

czyli:
y = Xh + s (15.34)

Równanie (15.34) ma identyczną postać jak (15.1), dlatego optymalna estymata ĥ jest równa:

( )
−1
hˆ = XT X XT y (15.35)

i może być także wyznaczana metodą rekursywną. W przypadku zastosowania algorytmu re-
kursywnego z zapominaniem można także w sposób „optymalny” śledzić zmienność współ-
czynników filtra. Sprawdzenie skuteczności działania takiego algorytmu, drogą jego symulacji
komputerowej, pozostawiamy Czytelnikowi.

15.2. Metoda minimalno-średniokwadratowa. Filtr Kalmana


W przypadku liniowej estymacji minimalno-średniokwadratowej minimalizuje się funkcję ja-
kości postaci:

J = E  ( x − xˆ ) ⋅ ( x − xˆ ) 
T
(15.36)
 
gdzie E[.] oznacza wartość oczekiwaną (najbardziej prawdopodobną) w sensie statystycznym.
Nie jest to więc tak jak w przypadku poprzednim suma kwadratów szumów pomiaru ∑vi2.
Także matematyczny „model” rozważanej sytuacji pomiarowej jest inny:

x(k + 1) = F(k ) ⋅ x (k ) + w(k ) − model procesu


 (15.37)
 z(k + 1) = H(k + 1) ⋅ x(k + 1) + v(k + 1) − model pomiaru

Model ten składa się z dwóch równań, opisujących obserwowany proces (obiekt) oraz przepro-
wadzany na nim pomiar. W przypadku estymacji RLS dysponowaliśmy tylko równaniem po-
miaru, milcząco bowiem zakładaliśmy niezmienność procesu, czyli stałość związanego z nim
wektora x. Teraz jednak przyjmujemy, że obserwowany proces ma charakter dynamiczny,
w związku z czym wektor x zmienia się z próbki na próbkę. Wartość wektora x(k + 1) w na-
stępnej chwili czasowej zależy od: 1) wartości tego wektora w chwili obecnej x(k), 2) macierzy
F(k), związanej z procesem, która także może się zmieniać w czasie, oraz 3) od aktualnej
wartości szumu procesu w(k). Podobnie jak poprzednio, nie mamy bezpośredniego „dostępu”
do zmiennych procesu x, możemy tylko mierzyć liniową kombinację z, określoną przez
macierz pomiaru H(k + 1), która także może się zmieniać. Oczywiście, zakłada się występowa-
nie szumu pomiaru v. Wektor zmiennych obiektu x ma N elementów, natomiast wektor pomia-
rów z składa się z M wartości, które w każdej chwili czasowej (k + 1)-szej są „odczytywane”
równocześnie. W zapisie szczegółowym równania (15.37) przyjmują następującą postać:
Liniowa estymacja rekursywna 409

 x1 (k + 1)   f11 ( k ) f12 (k ) " f1N (k )   x1 (k )   w1 ( k ) 


 x (k + 1)   f (k ) f 22 ( k ) " f 2 N ( k )   x 2 (k )   w2 (k ) 
 2  =  21 ⋅ +  (15.38)
 #   # # % #   #   # 
       
x
 N ( k + 1)   f N 1 (k ) f N 1 (k ) " f NN (k )  x N (k )  wN ( k )

 z1 (k + 1)   h11 (k + 1) h12 (k + 1) " h1N ( k + 1)   x1 (k + 1)   v1 (k + 1) 


 z (k + 1)   h ( k + 1) h ( k + 1) " h2 N ( k + 1)   x2 (k + 1)   v 2 (k + 1) 
 2  =  21 22 ⋅ +  (15.39)
 #   # # % #   #   # 
       
 z M (k + 1) hM 1 (k + 1) hM 2 ( k + 1) " hMN (k + 1)  x N (k + 1) v M (k + 1)

Jak widać rozpatrywany „przypadek” nie należy do najprostszych. Aby go rozwiązać, należy
poczynić pewne z a ł o ż e n i a :
• w(k) − szum procesu ma zerową wartość średnią i jest nieskorelowany:

E[ w( k ) ] = 0, E[ w( k ) w T ( l ) ] = 0, k ≠ l (15.40)

• macierz autokowariancji szumu procesu Q(k) = E[w(k)⋅wT(k)] jest dodatnio określona i sy-
metryczna,
• v(k) − szum pomiaru ma zerową wartość średnią oraz jest nieskorelowany „sam ze sobą”
i z szumem procesu w(k):

E [ v ( k ) ] = 0, E[ v ( k ) v T (l ) ] = 0, E[ v( k ) w T (l ) ] = 0, k ≠ l (15.41)

• macierz autokowariancji szumu pomiaru R(k) = E[v(k)⋅vT(k)] jest dodatnio określona i sy-
metryczna,
• wartość początkowa wektora zmiennych procesu powinna spełniać następujące warunki:

E[ x( 0) ] = 0 , E[ x(0)x T (0) ] = P0 , E[ x (0) w T ( k ) ] = 0 , E[ x( 0) v T ( k ) ] = 0 (15.42)

tzn. powinna być znana funkcja autokowariancji stanu początkowego oraz stan ten nie może
być skorelowany z szumem procesu i pomiaru.

Z a d a n i e polega na znalezieniu najlepszego liniowego estymatora minimalno-średniokwa-


dratowego (ang. MMS − Minimum Mean Square) wektora x(k), na podstawie wartości pomia-
rów z(i), i = 1, 2, 3, ..., k, czyli pomiary już przeprowadzone. Nie jest to zadanie proste, ale ze
względu na duże znaczenie jego rozwiązania oraz poglądowość kolejnych kroków jego
wyprowadzenia, przytoczymy je w całości w dalszej części tego rozdziału. Obecnie wpro-
wadźmy o z n a c z e n i a , niezbędne do zapisania i zrozumienia algorytmu działania filtra Kal-
mana:
• x̂ − estymata x (15.43)
• xˆ (k + 1 | k ) − prognoza wektora x(k+1) oparta na pomiarach z(1), ..., z(k) (15.44)
• xˆ (k + 1 | k + 1) − estymata wektora x(k+1) oparta na pomiarach z(1),..., z(k), z(k+1) (15.45)
• zˆ (k + 1 | k ) − prognoza wektora z(k+1) oparta na pomiarach z(1), ..., z(k) (15.46)
• ∆x (k | k ) = x( k ) − xˆ (k | k ) − błąd estymacji stanu procesu (15.47)
410 Liniowa estymacja rekursywna

• ∆x (k + 1 | k ) = x( k + 1) − xˆ ( k + 1 | k ) − błąd prognozy stanu procesu (15.48)


• ∆z(k + 1 | k ) = z (k + 1) − zˆ (k + 1 | k ) − błąd prognozy pomiaru (15.49)
• P(k | k ) = E[ ∆x(k | k ) ⋅ ∆x T (k | k ) ] − macierz kowariancji błędu estymaty (15.50)
stanu procesu
• P(k + 1 | k ) = E[ ∆x(k + 1 | k ) ⋅ ∆x T (k + 1 | k ) ] − macierz kowariancji błędu (15.51)
prognozy stanu procesu
Schemat blokowy estymacji MMS, czyli filtra Kalmana, jest przedstawiony na rysunku 15.5.
Uproszczony algorytm obliczeniowy zawiera tabela 15-3, a algorytm w wersji pełnej jest po-
dany w tabeli 15-4. „Scenariusz” obliczeń jest identyczny jak w przypadku metody RLS (krok
6 w tabeli 15-3):
nowa estymata = jej prognoza + korekta
korekta = wzmocnienie * błąd prognozy pomiaru
Ponieważ obiekt jest dynamicznie zmienny, prognoza nowego stanu nie jest równa estymacie
stanu poprzedniego, tylko jest obliczana z uwzględnieniem macierzy „dynamiki” procesu
F (krok 5 w tabeli 15-4). Również wzmocnienie K jest inaczej wyznaczane i modyfikowane
niż w algorytmie RLS.
Po drobnych modyfikacjach opisany w tym rozdziale algorytm filtra Kalmana może być stoso-
wany do dynamicznej identyfikacji parametrów układu liniowego oraz do „rozplatania” sygna-
łów, czyli do estymacji jednego ze splatających się ze sobą sygnałów na podstawie znajomości
drugiego sygnału oraz wyniku splotu. Ponieważ wynikiem przejścia sygnału przez układ
liniowy (np. przez kanał „transmisyjny”) jest jego splot z odpowiedzią impulsową tego układu,
więc często w praktyce występuje problem adaptacyjnej estymacji sygnału wejściowego na
podstawie znajomości „wyjścia” z układu i jego funkcji „przejścia”.

Dla dociekliwych. Wyprowadzenie. Jest to przejście Orlą Percią, więc zapraszam na wspinacz-
kę tylko doświadczonych piechurów. Przypomnijmy, mamy znaleźć najlepszy liniowy estyma-
tor minimalno-średniokwadratowego wektora x(k) na podstawie wykonanych do tej pory
pomiarów z(i), i = 1, 2, 3, ..., k. Ponieważ szum w(k) nie jest skorelowany z pomiarami z(i),
i = 1, 2, 3, ..., k, stąd:
ˆ (k | k ) = 0
w (15.52)

zˆ (k + 1 | k ) zˆ (k + 1 | k )
xˆ (k + 1 | k )
z(k + 1) xˆ (k | k )
K(k + 1) z−1 G(k) H(k + 1)

xˆ (0 | 0) = 0 estymata szumu estymata szumu


procesu w=0 pomiaru v=0

xˆ (k + 1 | k + 1)

Rys. 15.5. Schemat blokowy filtra Kalmana


Liniowa estymacja rekursywna 411

Tab. 15-3. Uproszczony opis algorytmu filtra Kalmana (K ( k + 1) − wzmocnienie Kalmana)

1. Stara estymata stanu obiektu: xˆ ( k | k )


2. Prognoza nowego stanu obiektu: xˆ ( k + 1 | k )
3. Prognoza nowego pomiaru: zˆ ( k + 1 | k )
4. Nowy pomiar: z( k + 1)
5. Błąd prognozy pomiaru: ∆z ( k + 1 | k ) = z ( k + 1) − zˆ ( k + 1 | k )
6. Korekta estymaty stanu: xˆ (k + 1 | k + 1) = xˆ ( k + 1 | k ) + K ( k + 1) ⋅ ∆z( k + 1 | k )
7. k = k+1; skok do punktu 1.

Tab. 15-4. Szczegółowy algorytm filtra Kalmana

1. Inicjalizacja:
F(k) = const = F, Q( k) = const = Q , (proces)
H(k+1) = const = H, R ( k) = const = R , (pomiar)
k = 0, P(0 | 0) = P0 , xˆ (0 | 0) = 0
2. Macierz kowariancji błędu prognozy stanu obiektu:
P(k + 1 | k ) = F( k ) ⋅ P( k | k ) ⋅ FT ( k ) + Q( k )
3. Wzmocnienie Kalmana:
−1
K ( k + 1) = P(k + 1| k ) ⋅ HT ( k + 1) ⋅  H(k + 1)P( k + 1 | k )HT ( k + 1) + R ( k + 1) 
 
4. Macierz kowariancji błędu estymaty stanu obiektu:
P(k + 1 | k + 1) = [I − K ( k + 1) ⋅ H( k + 1)]⋅ P( k + 1 | k ) , I − macierz diagonalna
5. Prognoza stanu obiektu:
xˆ ( k + 1 | k ) = F( k ) ⋅ xˆ ( k | k )
6. Prognoza pomiaru:
zˆ ( k + 1 | k ) = H( k + 1) ⋅ xˆ ( k + 1 | k )
6. Nowy pomiar: z( k + 1)
7. Błąd prognozy pomiaru:
∆z ( k + 1 | k ) = z ( k + 1) − zˆ ( k + 1 | k )
8. Nowa estymata stanu obiektu = korekta prognozy stanu obiektu:
xˆ ( k + 1 | k + 1) = xˆ ( k + 1 | k ) + K ( k + 1) ⋅ ∆z( k + 1 | k )
9. k = k + 1; skok do punktu 2.

xˆ ( k + 1 | k ) = F( k ) ⋅ xˆ ( k | k ) + w
ˆ ( k | k ) = F( k ) ⋅ xˆ ( k | k ) (15.53)

Analogicznie, ponieważ szum v(k) nie jest skorelowany z pomiarami z(l) dla k ≠ l, stąd:
vˆ ( k + 1 | k ) = 0 (15.54)
zˆ ( k + 1 | k ) = H( k + 1) ⋅ xˆ ( k + 1 | k ) + vˆ ( k + 1 | k ) = H( k + 1) ⋅ xˆ ( k + 1 | k ) (15.55)
412 Liniowa estymacja rekursywna

W podanych równaniach xˆ (k + 1 | k ) oznacza estymatę (prognozę) MMS wektora x(k + 1), czyli
w chwili (k + 1)-szej, bazującą na k wektorach pomiarów z(i), i = 1, 2, 3, ..., k. Z kolei estymata
xˆ ( k + 1 | k + 1) powinna uwzględniać xˆ ( k + 1 | k ) , czyli całą wiedzą o obiekcie dostarczoną przez
pomiary z do chwili k-tej, oraz d o d a t k o wą informację wniesioną przez pomiar (k + 1)-szy
z(k + 1). W pomiarze tym jest zawarta część „przewidywalna” (związana z historią obserwacji
obiektu) oraz „nieprzewidywalna” („ortogonalna” do całej dotychczasowej wiedzy o obiekcie,
„nieskorelowana” z nią). Część „przewidywalna” potwierdza to, co już wiemy, część zaś „nie-
przewidywalna” − dodaje nowe szczegóły. Ta ostatnia „ortogonalna” składowa jest różnicą
pomiędzy pomiarem a jego predykcją, czyli polega na odjęciu od „całości” tego, co jest już
„znane”: ∆z(k + 1|k) = = z(k + 1) − zˆ (k + 1 | k ) . Wynika stąd, że nowa estymata xˆ (k + 1 | k + 1) po-
winna się składać z sumy dwóch niezależnych estymat:
xˆ ( k + 1 | k + 1) = xˆ ( k + 1 | k ) + xˆ (k + 1 | ∆z( k + 1 | k ) ) (15.56)

gdzie drugi składnik sumy oznacza składową estymaty xˆ (k + 1 | k + 1) bazującą tylko na błędzie
prognozy (k + 1)-szego pomiaru (przewidujemy x(k + 1) tylko z ∆z(k + 1|k)). Z kolei z zasady
ortogonalności wynika, że jeśli mamy dwa wektory losowe x (procesu) i z (pomiaru) o zero-
wych wartościach średnich, które są skorelowane, to najlepsza liniowa estymata MMS wektora
x na podstawie z jest równa:

xˆ = Gz, G = R xz R −zz1, R xz = E  xzT  , R zz = E  zzT  (15.57)


   

ponieważ jej błąd musi być ortogonalny do wektora pomiarów z:

E  ezT  = E  ( x − xˆ ) zT  = E  ( x − Gz ) zT  = E  xzT  − GE  zzT  = R xz − GR zz = 0 (15.58)


         

Po uwzględnieniu zależności (15.57) w stosunku do drugiej składowej sumy (15.56) otrzymu-


jemy:
xˆ (k + 1 | ∆z ( k + 1 | k ) ) = K ( k + 1) ⋅ ∆z( k + 1 | k ) (15.59)

{ }
−1
K (k + 1) = E  x (k + 1) ∆zT ( k + 1| k )  ⋅ E  ∆z( k + 1| k )∆zT ( k + 1| k )  (15.60)
   

Po przekształceniach, zależność (15.60) można zapisać w następującej postaci:


−1
K ( k + 1) =  P( k + 1| k ) HT ( k + 1)  ⋅  H( k + 1) P( k + 1| k ) HT ( k + 1) + R ( k + 1)  (15.61)
   
gdzie

[ ]
P(k | k ) = E ∆x( k | k )∆x T ( k | k ) , P(0 | 0) = P0 (15.62)

[ ]
P(k + 1 | k ) = E ∆x(k + 1 | k ) ∆x T (k + 1 | k ) = F(k )P(k | k )FT ( k ) + Q(k ) (15.63)

[ ]
P( k + 1 | k + 1) = E ∆x( k + 1 | k + 1) ∆x T (k + 1 | k + 1) = [ I − K (k + 1) H(k + 1)] ⋅ P( k + 1 | k )
(15.64)
W przekształceniach prowadzących z równania (15.60) do równania (15.61) uwzględnia się
definicje i równania (15.48), (15.49), (15.37), (15.53) i (15.55), właściwość „nieskorelowania”
(„ortogonalności”) par wektorów {∆x(k + 1|k), w(k + 1)} i {∆x(k +1|k), v(k + 1)} }:
Liniowa estymacja rekursywna 413

[ ] [
E ∆x( k + 1 | k ) w T (k + 1) = 0 , E ∆x( k + 1 | k ) v T (k + 1) = 0 ] (15.65)

oraz zastosowano oznaczenia:


R(k) = E[ v(k)⋅vT(k) ], Q(k) = E[ w(k)⋅wT(k) ] (15.66)
Przykładowo:

E  ∆z (k + 1 | k )∆z T (k + 1| k )  = E  ( z ( k + 1) − zˆ (k + 1 | k ) )( z (k + 1) − zˆ ( k + 1 | k ) )  =
T
   
= E  ( H (k + 1)x(k + 1) + v (k + 1) − H (k + 1) ⋅ xˆ (k + 1| k ) ) ⋅

⋅ ( H (k + 1)x(k + 1) + v(k + 1) − H (k + 1) ⋅ xˆ (k + 1 | k ) )  =
T

(
= E  ( H ( k + 1)∆x(k + 1) + v ( k + 1) ) H ( k + 1)∆x( k + 1) + v( k + 1)T  =
  )
(
= E  ( H (k + 1)∆x(k + 1) + v (k + 1) ) ∆xT (k + 1)HT (k + 1) + vT (k + 1)  =
  )
= H ( k + 1) E  ∆x( k + 1)∆xT ( k + 1)  HT ( k + 1) + E  v( k + 1) vT ( k + 1)  +
   

+ H (k + 1) E  ∆x(k + 1) vT (k + 1)  + E  v (k + 1)∆xT (k + 1)  HT (k + 1) =
   
= H( k + 1) P( k + 1 | k )H T ( k + 1) + R ( k + 1)

W analogiczny sposób wyprowadza się zależności na:

[ ] [ ] [
E x(k + 1)∆z T ( k + 1 | k ) , E ∆x(k + 1 | k )∆x T (k + 1 | k ) , E ∆x(k + 1 | k + 1)∆x T ( k + 1 | k + 1) ]
Przykład − analiza układu RLC

Przedstawimy teraz przykład odszumiania spróbkowanych sygnałów, zebranych z analo-


gowego układu RLC [Cand86], przedstawionego na rysunku 15.6. Układ ten składa się z sze-
regowego połączenia źródła zasilania u(t) (napięcie o przebiegu bipolarnym, prostokątnym)
oraz elementów pasywnych: rezystancji R = 5 kΩ, indukcyjności L = 2,5 H i pojemności
C = 0,1 µF. Napięcie na pojemności jest mierzone miernikiem cyfrowym co T = 10−4 sekundy.
Oznaczmy przez i(t) prąd płynący w układzie. Wówczas:
di (t ) 1
Ri (t ) + L + ∫ i (t )dt = u R (t ) + u L (t ) + uC (t ) = u (t ) (15.67)
dt C

uR(t) uL(t)
i(t)

R+dR L+dL
u(t) C+dC uC(t)

Rys. 15.6. Schemat analizowanego układu. Źródło napięcia generuje przebieg prostokątny unipolarny
414 Liniowa estymacja rekursywna

Ponieważ prąd ten jest równy:


duC (t )
i (t ) = C (15.68)
dt
więc równanie (15.67) przyjmuje postać:

duC (t ) d 2 uC ( t ) 1
RC + LC + uc (t ) = u(t ) (15.69)
dt dt 2 C

Po podzieleniu obu stron przez LC otrzymujemy:

d 2 uC ( t ) R duC (t ) 1 1
+ + uc (t ) = u (t ) (15.70)
dt 2 L dt LC LC

Stosując podstawienia:
x1 (t ) = uc (t ) (15.71a)
duC (t ) dx1 (t )
x2 (t ) = = (15.71b)
dt dt
równanie różniczkowe drugiego rzędu (15.70) zastępujemy następującym układem równań
pierwszego rzędu:

 dx1
 dt = x 2 (t )
 dx (t ) 1 R 1
 2 =− x1 (t ) − x 2 (t ) + u(t )
 dt LC L LC

 x1 (t )   0 1   x1 ( t )   1   1 
 x ( t )  =  −1/ LC    + 
− R / L   x2 (t )  1/ LC 
u (t ) +   w( t )
 2   1/ LC 

 x1 (t )   0 1   x1 (t )   
1  1 
 x (t )  =  6
+
3   x (t )   6
u(t ) +  6
w(t ) (15.72)
 2   −4 ⋅ 10 −2 ⋅ 10   2   4 ⋅ 10   4 ⋅ 10 

gdzie w(t) jest szumem związanym ze zmiennością wartości elementów (szum normalny, zero-
wa wartość średnia, znana wariancja), wynikającej m.in. z fluktuacji temperaturowych.
Dysponujemy obecnie opisem układu za pomocą macierzowego równania różniczkowego:
x (t ) = A x(t ) + Bu(t ) + Bw( t ) (15.73)

Aby jednak zastosować filtr Kalmana należy przekształcić równanie różniczkowe (15.73) do
odpowiadającego mu macierzowego równania różnicowego (dyskretny odpowiednik):
x (k + 1) = A d x( k ) + B d u(k ) + B d w( k ) (15.74)

W tym celu, przy założeniu stacjonarnych równań stanu i wymuszenia u(t) odcinkami stałego,
stosuje się podstawienia:

A d = e AT , B d = ( e AT − I )A −1B (15.75)

z których otrzymuje się końcowe równanie „procesu” dyskretnego filtra Kalmana:


Liniowa estymacja rekursywna 415

 0,9813 0, 0001  0, 0187   0,0187 


x(k + 1) =   x( k ) +   u (k ) +   w( k ) (15.76)
 −360,13 0,8013  360,13   360,13 
Równanie pomiaru jest natomiast równe:
z ( k + 1) = [1 0]x( k + 1) + v ( k + 1) (15.77)
Do oszacowania pozostają jeszcze wartości odchylenia standardowego szumu procesu w(k)
(zmienność wartości elementów) i szumu pomiaru v(k) (dokładność pomiaru napięcia na poje-
mności C). Przyjmując w obu przypadkach odchylenie standardowe równe 0,2, otrzymujemy
wariancję równą σ2 = 0,04 i kowariancję Rww = Rvv = σ2. Na rysunkach 15.7 i 15.8 przedsta-
wiono wyniki symulacji komputerowej układu, opisanego parą równań (15.76), (15.77) przy
założeniu wymuszenia przebiegiem prostokątnym unipolarnym (napięcie z przedziału 0 ÷ 1 V).
Uzyskano je z wykorzystaniem programu napisanego w języku Matlab, przedstawionego
w tabeli 15-5. W programie tym można znaleźć dalsze szczegóły dotyczące opisanego powyżej
eksperymentu symulacyjnego.

Tab. 15-5. Program napisany w języku Matlab do rekursywnej estymacji parametrów obiektu metodą filtra
Kalmana (przykład analizy sygnałów z układu RLC)

% Ćwiczenie: Filtr Kalmana − filtracja sygnałów z układu RLC

clear all; subplot(111);

% INICJALIZACJA PARAMETRÓW SYSTEMU


iter=300; % liczba iteracji
m=2; % rząd modelu
dq=0.2; % odchylenie standardowe szumu procesu
dr=0.2; % odchylenie standardowe szumu pomiaru
ddq=dq*dq; % wariancja szumu procesu
ddr=dr*dr; % wariancja szumu pomiaru
P=[0.01 0; 0 0.04]; % macierz wariancji estymaty procesu
Q=ddq*eye(m); % macierz wariancji szumu w(k) procesu (stała)
R=ddr*eye(m); % macierz wariancji szumu v(k) pomiaru (stała)
F=[0.9813 0.0001; -360.128 0.8013]; % model procesu
H=[1 0; 0 0]; % model pomiaru
ua=1.; % amplituda wymuszenia
B=[ 0.0187 0; 0 360.128 ]; % macierz wymuszenia
G=[ 0.0187 0; 0 360.128 ]; % macierz szumu procesu
I=eye(m); % macierz robocza
x=zeros(m,1); % wartość początkowa wektora stanu
xe=zeros(m,1); % wartość początkowa estymaty wektora stanu x(k/k)
XP=[]; % historia prognoz procesu x(k+1/k)
XE=[]; % historia estymat procesu x(k/k)
XX=[]; % historia procesu x(k)
ZZ=[]; % historia pomiarów z(k)
KK=[]; % historia współczynnika wzmocnienia K
randn('seed',0); % szum normalny: średnia=0, odchylenie standardowe=1

% ESTYMACJA − PĘTLA GŁÓWNA


for k=1:iter
% WYMUSZENIE - PRZEBIEG PROSTOKĄTNY UNIPOLARNY
if (rem(k,150)==50)
ua=ua-1.;
end
if (rem(k,150)==0)
ua=ua+1.;
end
u=[ua ua]';
416 Liniowa estymacja rekursywna

1.5
1.25
1

x1(k), z1(k)
0.75
0.5
0.25
0
-0.25
-0.5
0 50 100 150 200 250 300
k

1.25
1
x1(k), x1e(k)

0.75
0.5
0.25
0
-0.25
0 50 100 150 200 250 300
k

0.2

0.16
K1(k)

0.12

0.08

0.04
0 50 100 150 200 250 300
k
Rys. 15.7. Wyniki symulacji komputerowej układu, opisanego parą równań (15.76), (15.77): zmienna stanu
x1(k) (linia przerywana), jej pomiar z1(k) oraz jej estymata x1e(k) (linie ciągłe), wzmocnienie Kalmana K1(k)

Tab. 15-5. cd.

% OBLICZENIE STANU MODELU x(k+1)


x=F*x+B*u+G*(dq*randn(m,1));
% WYKONANIE POMIARU z(k+1)
z=H*x+dr*randn(m,1);
% OBLICZENIE MACIERZY WARIANCJI PROGNOZY P(k+1/k)
P1=F*P*F'+G*Q*G';
% OBLICZENIE WZMOCNIENIA KALMANA A(k+1)
KA=P1*H'*inv(H*P1*H'+R);
% OBLICZENIE PROGNOZY STANU PROCESU x(k+1/k)
x1=F*xe+B*u;
% OBLICZENIE PROGNOZY POMIARU z(k+1/k)
z1=H*x1;
% OBLICZENIE ESTYMATY STANU x(k+1/k+1)
xe=x1+KA*(z-z1);
% OBLICZENIE MACIERZY WARIANCJI ESTYMATY P(k+1/k+1)
P=(I-KA*H)*P1;
Liniowa estymacja rekursywna 417

0.6
0.4
0.2

z2(k)
0
-0.2
-0.4
-0.6
0 50 100 150 200 250 300
k

1500
1000
x2(k), x2e(k)

500
0
-500
-1000
-1500
0 50 100 150 200 250 300
k

50

0
K2(k)

-50

-100
0 50 100 150 200 250 300
k
Rys. 15.8. Wyniki symulacji komputerowej układu, opisanego parą równań (15.76), (15.77): zmienna stanu
x2(k) (linia przerywana), jej pomiar z2(k) oraz jej estymata x2e(k) (linie ciągłe), wzmocnienie Kalmana K2(k)

Tab. 15-5. cd.

% HISTORIA ESTYMACJI
XP=[XP; x1'];
XE=[XE; xe'];
XX=[XX; x'];
ZZ=[ZZ; z'];
KK=[KK; (KA(:,1))'];
end

% WIZUALIZACJA WYNIKÓW
X1=XX(:,1); X2=XX(:,2); Z1=ZZ(:,1); Z2=ZZ(:,2);
X1E=XE(:,1); X2E=XE(:,2); K1=KK(:,1); K2=KK(:,2);
t=1:1:iter;
subplot(211); plot(t,X1,'r',t,Z1,'b'); grid;
title('X1(K) (CZERW) I JEGO POMIAR Z1(K) (NIEB)'); xlabel('NUMER ITERACJI')
subplot(212); plot(t,X1,'r',t,X1E,'b'); grid;
title('X1(K) (CZERW) I JEGO ESTYMATA X1E(K/K)(NIEB)'); xlabel('NUMER ITERACJI');
pause
418 Liniowa estymacja rekursywna

Tab. 15-5. cd.

subplot(211); plot(t,X2,'r',t,Z2,'b'); grid;


title('X2(K) (CZERW) I JEGO POMIAR Z2(K) (NIEB)'); xlabel('NUMER ITERACJI')
subplot(212); plot(t,X2,'r',t,X2E,'b'); grid;
title('X2(K) (CZERW) I JEGO ESTYMATA X2E(K/K)(NIEB)'); xlabel('NUMER ITERACJI');
pause
subplot(211); plot(t,K1); grid;
title('WSPÓŁCZYNNIK WZMOCNIENIA KA1(k)'); xlabel('NUMER ITERACJI')
subplot(212); plot(t,K2); grid;
title('WSPÓŁCZYNNIK WZMOCNIENIA KA2(k)'); xlabel('NUMER ITERACJI')
pause

Przykład − estymacja parametrów sygnału


Metodę filtracji Kalmana można zastosować do estymacji parametrów zespolonego (analitycz-
nego), zmiennego w czasie sygnału sinusoidalnego. Przyjmuje się wtedy następującą postać
sygnału:
y (n ) = a (n )e jΦ (n ) (15.78)

oraz zakłada jego liniową modulację częstotliwościową:

Φ (n ) = Φ (0) + nΩ(0) + n 2 α(0) / 2 (15.79a)


Ω(n ) = Ω(0) + nα(0) (15.79b)
α(n ) = α(0 ) (15.79c)

gdzie Ω(n) oznacza pulsację chwilową, a α(n) jest współczynnikiem modulacji liniowej:
Ω( n ) = [Φ ( n + 1) − Φ ( n − 1)]/ 2
α( n ) = [Φ ( n + 1) − Φ ( n )] − [Φ ( n ) − Φ ( n − 1)] = Φ ( n + 1) − 2Φ ( n ) + Φ ( n − 1)

Następnie definiuje się wektor stanu procesu jako (kąt całkowity, pulsacja unormowana, zmia-
na tej pulsacji z próbki na próbkę sygnału):

x (n ) = [Φ (n ), Ω(n ), α(n )] T (15.80)

i zapisuje równania (15.79) dla chwili czasowej n + 1:

Φ ( n + 1) = Φ ( 0 ) + (n + 1)Ω ( 0 ) + (n + 1)2 α ( 0 ) / 2 =

= Φ ( 0 ) + nΩ ( 0 ) + Ω ( 0 ) + n 2 α ( 0 ) / 2 + nα ( 0 ) + α ( 0 ) / 2 =

{ }
= Φ ( 0 ) + nΩ ( 0 ) + n 2 α ( 0 ) / 2 + { Ω ( 0 ) + nα ( 0 ) } + α ( 0 ) / 2 =

= Φ ( n ) + Ω( n ) + 0,5α(n ) (15.81a)
Ω(n + 1) = Ω(0) + ( n + 1)α(0) = { Ω(0 ) + nα(0) } + α(0) = Ω( n ) + α( n ) (15.81b)
α(n + 1) = α(0) = α( n ) (15.81c)

Z (15.81) znajduje się zależność wiążąca x(n + 1) i x(n) i otrzymuje macierz modelu procesu F:
Liniowa estymacja rekursywna 419

1 1 0, 5
F = 0 1 1  (15.82)
0 0 1 
Ponieważ jest możliwy tylko pomiar kąta Φ(n) na podstawie równania:
Im( y ( n ))
Φ (n ) = arctg (15.83)
Re( y (n ))
wynika stąd, że macierz pomiaru jest równa:
H = [1 0 0] (15.84)

Wartość chwilową amplitudy a(n) sygnału, równą lub większą od zera, można śledzić „obser-
wując” wartość bezwzględną z y(n):
a (n ) = y (n ) (15.85)

Algorytm estymacji wymaga „uciąglenia” kąta Φ(n) otrzymanego ze wzoru (15.83) (w progra-
mie Matlab należy zastosować funkcję unwrap() po funkcji atan2()). Więcej szczegółów
dotyczących tego przykładu, także implementacyjnych, można znaleźć w [Carp94], [Gajd00].
W rozdziale 24 w tabeli 24-2 jest zaprezentowany algorytm filtra Kalmana, wykorzystywanego
w podobnym przypadku, w którym nie jest mierzony kąt fazowy (15.83) sygnału zespolonego
(15.78) tylko kąt przesunięcia fazowego (24.1) pomiędzy dwoma sygnałami rzeczywistymi
(24.2). Po przyjęciu macierzy F i H zgodnie z równaniami (15.82), (15.84), algorytm ten może
być z powodzeniem zastosowany przez Czytelnika do estymacji parametrów Ω(n) i α(n)
sygnału (15.78) na podstawie znajomości jego kąta fazowego Φ(n).

Przykład − identyfikacja układów liniowych


Celem identyfikacji układów liniowych, opisanych równaniem
z ( n ) + a1 z (n − 1) + ... + a N z (n − N ) = b0 u( n ) + b1u( n − 1) + ... + bM u(n − M ) + s (n ) (15.86)

jest wyznaczenie współczynników układu {a1, a2, ..., aN, b0, b1,...,bM} na podstawie znajomości
próbek sygnału wejściowego u(n) oraz próbek sygnału wyjściowego z(n). W powyższym rów-
naniu s(n) oznacza „biały” szum wejściowy, czyli mający „płaskie” widmo częstotliwościowe.
Aby rozwiązać powyższe zadanie identyfikacji za pomocą metodologii filtra Kalmana, należy
omawiane równanie przekształcić do postaci (15.37). Po wprowadzeniu oznaczeń:
x (n ) = [a1 , a2 ,..., a N , b0 , b1 ,..., bM ] T (15.87)
H( n ) = [− z ( n − 1),..., − z ( n − N )), u( n ), u ( n − 1),..., u( n − M )] (15.88)

otrzymujemy równania „procesu” i „pomiaru” następującej postaci:

x(n ) = x(n − 1) + w(n − 1)


 (15.89)
 z ( n ) = H( n ) ⋅ x ( n ) + v ( n )
w stosunku do którego można już zastosować algorytm filtra Kalmana z tabeli 15-4 (zakła-
damy, że szumy w i v są szumami o rozkładzie normalnym, zerowej wartości średniej i znanej
wariancji). Zauważmy, że macierz pomiaru H (w rzeczywistości wektor) zmienia się w każdym
kroku iteracji oraz że założono identycznościową macierz procesu F = I.
16
Zaawansowane metody analizy
częstotliwościowej sygnałów

16.1. Wprowadzenie
Na początek zróbmy „bilans otwarcia”: jakimi narzędziami obliczeniowymi, służącymi do es-
tymacji funkcji gęstości widmowej mocy sygnałów, dysponujemy do tej chwili i jakie są ich
właściwości? Przypomnijmy sobie poznane do tej pory (w rozdziale pierwszym i ósmym) kla-
syczne metody estymacji widmowej:
1) periodogram, czyli kwadrat modułu dyskretnej transformaty Fouriera DFT N próbek anali-
zowanego sygnału x(n), podzielony przez N:

N −1 2
1 f
PˆxPer ( e jΩ ) =
N
∑ x (n)e − j Ωn
, Ω = 2π
f pr
(16.1)
n =0

2) zmodyfikowany periodogram, czyli kwadrat modułu transformaty DFT iloczynu N próbek


analizowanego sygnału x(n) z próbkami funkcji okna w(n), podzielony przez energię próbek
okna:
N −1 2

∑ x(n )w(n )e− jΩn f


n =0
PˆxModPer (e jΩ ) = N −1
, Ω = 2π (16.2)
f pr
∑ | w(n) | 2

n =0

3) uśredniony periodogram (metoda Bartletta), czyli średni periodogram z K periodogramów


L-elementowych (N = K⋅L), z których każdy jest wyznaczony dla kolejnego, k-tego (k = 0, 1, 2,
..., K−1), rozłącznego fragmentu sygnału, składającego się z L próbek: x(k)(n) = x(n + kL), n =
= 0, 1, 2, ..., L−1:

K −1  L −1 2
1 1 f
PˆxBartlett (e jΩ ) =
K
∑  L ∑ x ( n + kL ) e − j Ωn 

, Ω = 2π
f
(16.3)
k =0  n =0  pr
Zaawansowane metody analizy częstotliwościowej sygnałów 421

4) uśredniony zmodyfikowany periodogram (metoda Welcha), czyli średnia z K zmodyfiko-


wanych periodogramów L-elementowych, z których każdy jest wyznaczony dla kolejnego,
k-tego (k = 0, 1, 2, ..., K−1), w ogólności nierozłącznego fragmentu sygnału, składającego
się z L próbek: x(k)(n) = x(n + kD), n = 0, 1, 2, ..., L−1 (początki fragmentów sygnału są przesu-
nięte względem siebie o D próbek i zachodzi zależność N = L + D⋅(K−1); zazwyczaj stosuje się
nakładanie 50% lub 75%):

 L −1 2 

1 K −1 
∑ x(n + kD)w(n)e− jΩn 
 f
ˆ
PxWelch
(e ) = ∑ 
jΩ n =0
L −1 , Ω = (16.4)
K k =0  f pr

∑ | w(n) |2 

n=0
 

5) wygładzony periodogram (metoda Blackmana-Tukeya), czyli transformata Fouriera ilo-


czynu estymaty funkcji autokorelacji Rˆ x ( m ) sygnału x(n) i funkcji okna w(n) (wygładzony,
gdyż iloczynowi w dziedzinie czasu odpowiada splot widm w dziedzinie częstotliwości, czyli
widmo estymaty funkcji autokorelacji Rˆ x (m ) zostaje wygładzone przez widmo okna w(n)) :
M
f
PˆxBT ( e jΩ ) = ∑ Rˆ x ( m) w( m)e − jΩm , Ω = 2π
f pr
(16.5)
m =− M

gdzie N oznacza liczbę próbek sygnału, użytych do wyznaczenia Rˆ x ( m ) (zalecane M ≤ N/5).

Algorytmy obliczeniowe wszystkich powyższych metod można znaleźć w programie, przed-


stawionym w tabeli 8-4.

Oczywiście, w tym momencie nasuwa się podstawowe pytanie: która z klasycznych metod es-
tymacji funkcji gęstości widmowej mocy jest najlepsza? Aby na nie odpowiedzieć, należy po-
dać parametry (kryteria), które powinny być wzięte pod uwagę podczas ich porównywania.
Należą do nich: 1) unormowana rozdzielczość częstotliwościowa ∆f/fpr (unormowana szero-
kość listka głównego widma okna wypadkowego powinna być jak najmniejsza), 2) wartość
oczekiwana estymaty (powinna być zgodna z teoretyczną, czyli nieobciążona), 3) jej wariancja
(powinna być jak najmniejsza), 4) zmienność estymaty ∆P (czyli wariancja estymaty podzie-
lona przez kwadrat jej wartości oczekiwanej, powinna być jak najmniejsza) oraz 5) iloczyn
rozdzielczości częstotliwościowej i zmienności estymaty jako wskaźnik łączny (powinien być
jak najmniejszy). W tabeli 16-1 porównano właściwości klasycznych metod estymacji widmo-
wej, stosowanych w obecności szumu gaussowskiego, natomiast w tabeli 16-2 przedstawiono
wartości ich wskaźników jakości. Jakie najważniejsze wnioski wynikają z zaprezentowanych
tabel? P o p ier wsze, metody te są efektywne tylko wtedy, kiedy dysponuje się dużą liczbą
próbek analizowanego sygnału. P o d r ugie, najlepszym łącznym wskaźnikiem jakości chara-
kteryzuje się metoda Blackmana-Tukeya. Jednak i w jej przypadku zwiększenie wartości para-
metru M powoduje nie tylko wzrost rozdzielczości analizy, ale także wzrost wariancji (zmien-
ności) estymaty widmowej, czemu można przeciwdziałać tylko zwiększając liczbę analizowa-
nych próbek N.
Nie należy jednak zapominać, że wyznaczanie dyskretnej transformaty Fouriera z iloczynu fra-
gmentu analizowanego sygnału (lub estymaty jego funkcji autokorelacji) z opcjonalnym oknem
czasowym nie jest jedyną metodą analizy częstotliwościowej sygnałów cyfrowych. Od wielu
422 Zaawansowane metody analizy częstotliwościowej sygnałów

Tab. 16-1. Porównanie właściwości wybranych klasycznych metod estymacji widmowej w obecności szumu
gaussowskiego. Oznaczenia: Px(ejΩ) − poprawna wartość funkcji gęstości widmowej mocy sygnału,
WB(ejΩ) = [sin(NΩ/2)/sin(Ω/2)]2/N − transformata Fouriera N-punktowego okna trójkątnego (Bartletta),
W(ejΩ) − transformata Fouriera N-punktowego okna w(n), ⊗ − operacja splotu, ( ∆f / f pr )(3dB
w)
− 3-decybelowa
szerokość widma Fouriera użytego okna (uwaga: w tabeli 8-1 jest podana nie szerokość 3-decybelowa tylko
całkowita, związana z miejscami zerowania się widma okna)

Rozdzielczość
Metoda Wartość oczekiwana Wariancja
∆f/fpr

Periodogram 1 ≈ Px2 ( e jΩ )
Px ( e jΩ ) ⊗ WB ( e jΩ ) 0,89/N
(16.1) 2π
1
Periodogram Px (e jΩ )⊗ | W (e jΩ ) |2
≈ Px2 ( e jΩ ) ( ∆f / f pr )(3dB
N −1 w)
z oknem (16.2) 2π ⋅ ∑ | w( n ) | 2

n =0

Metoda Bartletta 1
Px ( e jΩ ) ⊗ WB ( e jΩ )
(16.3) 2π ≈ Px2 ( e jΩ ) / K 0,89K/N

1
Metoda Welcha (#) Px ( e jΩ )⊗ | W ( e jΩ ) |2
≈ (9 L /16 N ) ⋅ Px2 ( e jΩ ) ( ∆f / f pr )(3dB
L −1 w)

(16.4) 2π ⋅ ∑ | w(n ) | 2

n =0

Metoda Blackma- 1 Px2 ( e jΩ ) M


Px ( e jΩ ) ⊗ W (e jΩ ) ≈ ∑ | w(m) |2 ( ∆f / f pr )(3dB
w)
na-Tukeya (16.5) 2π N m =− M
(#)
Obliczając wariancję założono 50% nakładanie się okien oraz użycie okna trójkątnego

Tab. 16-2. Porównanie wartości wskaźników jakości wybranych, klasycznych metod estymacji widmowej

Metoda Rozdzielczość ∆f/fpr Zmienność ∆P ∆f/fpr ⋅ ∆P


Periodogram (16.1) 0,89/N 1 0,89/N
Metoda Bartletta (16.3) 0,89K/N 1/K 0,89/N
(#)
Metoda Welcha (16.4) 1,28/L (9/8)(1/K) 0,72/N
(#)
Metoda Blackmana-Tukeya (16.5) 0,64/M (2M)/(3N) 0,43/N
(#)
Dla okna trójkątnego i 50% nakładania się okien w metodzie Welcha

lat z dużym powodzeniem są stosowane inne, alternatywne metody, przedmiot naszego zainte-
resowania w niniejszym rozdziale, które są szczególnie efektywne w przypadku analizy krót-
kich zapisów sygnałów − krótkich wektorów danych. Zaliczamy do nich metody modelowania,
zwłaszcza parametrycznego (transmitancyjnego) AR, MA i ARMA, oraz metody dekompo-
zycji macierzowych, tzw. metody podprzestrzeni.
W p ier wszej gr up ie meto d wyznacza się transmitancję układu liniowego (10.50), związa-
nego z sygnałem: tak dobiera się współczynniki wielomianów licznika i mianownika tej trans-
mitancji, aby po pobudzeniu układu białym szumem otrzymać na jego wyjściu analizowany
sygnał. Ponieważ w szumie białym występują wszystkie częstotliwości z jednakowym natęże-
niem i jego widmo jest stałe w funkcji częstotliwości, układ powinien przepuścić tylko te
z nich, które występują w sygnale. Aby tak się stało, częstotliwościowa funkcja przejścia ukła-
du musi odpowiadać widmu sygnału. W zależności od tego, czy transmitancja układu ma tylko
Zaawansowane metody analizy częstotliwościowej sygnałów 423

wielomian mianownika, tylko wielomian licznika czy też oba wielomiany równocześnie, roz-
różnia się metody modelowania: AR (Autoregressive), MA (Moving Average) oraz ARMA
(czyli obie metody jednocześnie). Model MA (tylko licznik) dobrze nadaje się do modelowa-
nia widm ciągłych, na przykład kolorowego szumu, model AR (tylko mianownik) jest efektyw-
ny w przypadku modelowania widm prążkowych, np. złożonych sygnałów sinusoidalnych, mo-
del zaś ARMA (licznik i mianownik) − widm ciągłych z wybijającymi się prążkami, np. kilka
składowych sinusoidalnych „zanurzonych” w kolorowym szumie. Jeśli model jest dobrze do-
brany, to stopień wielomianów transmitancji nie jest wysoki. Podstawowym problem w tej
grupie metod jest więc wybór odpowiedniego modelu i poprawne przyjęcie jego rzędu. Współ-
czynniki transmitancji znajduje się rozwiązując odpowiednie układy równań, wynikające z wy-
żej zdefiniowanego problemu optymalizacji. Do grupy metod modelowania transmitancyjnego
należy również metoda Prony’ego, w której poszukuje się transmitancji układu mającej odpo-
wiedź impulsową równą analizowanemu sygnałowi. Metody parametryczne będą dalej oma-
wiane w projektowej części książki (rozdziały 19 i 20) na przykładzie modelowania AR chwi-
lowej charakterystyki częstotliwościowej traktu głosowego człowieka, wykorzystującego kolej-
ne fragmenty sygnału mowy.
W bardzo dużym uproszczeniu można powiedzieć, że metody z grupy modelowania transmi-
tancyjnego sprowadzają do projektowania filtrów cyfrowych metodą „zer i biegunów”, którą
poznaliśmy w rozdziale 10: zero transmitancji, umieszczone w określonym punkcie na okręgu
jednostkowych w płaszczyźnie zmiennej zespolonej z, powoduje wyzerowanie charakterystyki
częstotliwościowej filtra (widma sygnału) dla wybranej częstotliwości, natomiast jej biegun
umieszczony w określonym punkcie blisko tego okręgu (lecz w jego wnętrzu) − wzmacnianie
wybranej częstotliwości (widma sygnału). Ponieważ współczynniki wielomianów transmitancji
są rzeczywiste, miejsca zerowe wielomianów są liczbami zespolonymi, parami sprzężonymi.
W d r ugiej gr up ie meto d , buduje się macierze z próbek sygnału lub jego funkcji autokore-
lacji, a następnie dokonuje się ich dekompozycji macierzowych, np. względem wartości wła-
snych EVD (Eigen Value Decomposition) lub osobliwych SVD (Singular Value Decomposi-
tion). Estymatę widma wyznacza się na podstawie wartości wektorów własnych, będących wy-
nikiem ww. dekompozycji. Zazwyczaj jest to wektor związany z największą lub najmniejszą
wartością własną (osobliwą). Do tej grupy metod należą metody: Pisarenki, MUSIC (Multiple
Signal Classification), EV (EigenVector), MN (Minimum Norm), ESPRIT (Estimation of Sig-
nal Parameters via Rotational Invariance Techniques) i wiele innych.
Obecnie przedstawimy metody obu grup bardziej szczegółowo. Nie ma co ukrywać: w tym
rozdziale po raz kolejny wypuszczamy się na „głęboką wodę”. Na pocieszenie powiedzmy, że
jest to „głębina” bardzo dobrze znana i opisana w bardzo wielu pozycjach literatury [Cand86,
Cand88, Haye96, Hayk90, Kalo93, Kay88, Kay93, Mano00, Marp87, Marp95, Orfa88,
Pora94, Proa92, Stoi97, Ther92] , które będą nam służyć za przewodnika.

16.2. Modelowanie parametryczne AR, MA i ARMA

16.2.1. Podstawy

Na wstępie załóżmy, że w całym rozdziale 16.2 będziemy modelować sygnały, przyjmujące


wartości będące wyłącznie liczbami rzeczywistymi, czyli jak najbardziej naturalnymi z prak-
tycznego punktu widzenia.
Reprezentacje parametryczne ARMA sygnału są uzyskiwane metodą jego modelowania we-
dług schematu przedstawionego na rysunku 16.1. Na liniowy filtr cyfrowy o transmitancji H(z)
424 Zaawansowane metody analizy częstotliwościowej sygnałów

s(n) y(n) x(n)


H(z)

Rys. 16.1. Schemat blokowy modelowania parametrycznego analizowanego sygnałux(n)

podaje się dyskretny, biały szum s(n) o wariancji σs2 równej 1. Modelowanie sprowadza się do
takiego doboru parametrów transmitancji H(z), aby sygnał y(n) po filtrze był jak najbardziej
podobny do sygnału modelowanego x(n) w sensie średniokwadratowym (błąd średniokwadra-
towy pomiędzy tymi sygnałami powinien być minimalny). Równanie czasowe filtra jest zde-
finiowane następująco:
p q
y(n) + ∑ ak y(n − k ) = ∑ bk s(n − k ) (16.6)
k =1 k =0

gdzie ak i bk oznaczają nieznane, poszukiwane współczynniki modelu (a0 = 1), a jego transmi-
tancja Z jest dana wzorem:
q

Y ( z)
∑ bk z − k B( z )
H ( z) = = k =0 = (16.7)
S ( z) p A( z )
1 + ∑ ak z −k

k =1

Model filtra może być typu: MA (Moving Average) − w (16.7) występuje tylko wielomian
licznika, AR (Autoregressive) − w (16.7) występuje tylko wielomian mianownika, a licznik jest
równy 1, lub ARMA − AR i MA równocześnie, czyli występują oba wielomiany, licznika
i mianownika. Zakłada się, że funkcja gęstości widmowej mocy Pxx(ejΩ) sygnału x(n) jest rów-
na (z = ejΩ, Ω = 2πf/fpr)
2
jΩ jΩ 2 jΩ
B ( e jΩ )
Pxx ( e ) = H (e ) Pss ( e ) = 2
σ 2s (16.8)
jΩ
A(e )

Jeśli widmowe właściwości sygnału x(n) zmieniają się w czasie, to współczynniki ak i bk mogą
być wyznaczane metodami adaptacyjnymi (patrz rysunek 14.4 z rozdziału 14, dotyczącego fil-
tracji adaptacyjnej sygnałów).
Oczywiście podstawowe znaczenie ma właściwy wybór rodzaju modelu (AR, MA lub ARMA)
oraz jego rzędu (stopień wielomianu licznika i mianownika transmitancji). Aby zrozumieć isto-
tę zagadnienia załóżmy, że chcemy zapisać model ARMA (p = 1, q = 1) w równoważnych mu
postaciach AR i MA:

1 + b1 z −1 1
H ( z) = = = 1 + d1 z −1 + d 2 z − 2 + d 3 z − 3 + ... (16.9)
1 + a1 z −1 1 + c1 z −1 + c 2 z − 2 + c3 z − 3 + ...

Prawdziwe są wówczas następujące zależności (k ≥ 1):

ck = ( a1 − b1 )( −b1 ) k −1 , d k = (b1 − a1 )( − a1 ) k −1 (16.10a, b)


Zaawansowane metody analizy częstotliwościowej sygnałów 425

z których wynikają następujące wnioski:


1) jeśli równoważny model AR jest rzędu L, to cL+1≈0, co z (16.10a) pociąga za sobą równość
b1L≈0; wynika stąd, że im bliżej do okręgu jednostkowego leży zero wielomianu licznika
H(z), u nas −b1, tym większy jest rząd L równoważnego modelu AR;
2) jeśli równoważny model MA jest rzędu L, to dL+1≈0, co z (16.10b) pociąga za sobą równość
a1L≈0; wynika stąd, że im bliżej do okręgu jednostkowego leży zero wielomianu mianowni-
ka H(z) (czyli biegun transmitancji), u nas −a1, tym większy jest rząd L równoważnego mo-
delu MA.
Innymi słowy, transmitancją typu MA trudno jest modelować widma „prążkowe”, ale dobrze
nadaje się ona do modelowania widm „gładkich”. Transmitancja typu AR jest natomiast odpo-
wiednia do modelowania widm prążkowych, ale nie jest właściwym narzędziem do aproksy-
macji widm zerujących się dla określonych częstotliwości. Natomiast model ARMA jest od-
powiedni do estymacji widm złożonych, jednocześnie „prążkowych” i „gładkich”, na przykład
sumy kilku sinusoid „zanurzonych” w szumie kolorowym, którego kształt również jest dla nas
istotny.
Ponieważ po dopasowaniu parametrów filtra H(z) zachodzi w przybliżeniu równość y(n) ≈ x(n),
możemy przepisać równanie (16.6), podstawiając x(n) za y(n):
p q
x (n) = − ∑ ak x(n − k ) + ∑ bk s(n − k ) (16.11)
k =1 k =0

Po pomnożeniu obu stron powyższego równania przez x(n − m) i obliczeniu wartości oczekiwa-
nej otrzymujemy:
p q
E [ x (n ) x (n − m )] = − ∑ ak E [ x(n − k ) x( n − m )] + ∑ bk E [ s(n − k ) x( n − m )]
k =1 k =0

a po dodatkowym uwzględnieniu definicji funkcji korelacji własnej i wzajemnej mamy :


p q
R xx ( m) = − ∑ a k R xx ( m − k ) + ∑ bk Rsx (m − k ) (16.12)
k =1 k =0

Ponieważ szum s(n) jest biały i nieskorelowany (czyli Rss(0) = σ2 oraz Rss(m) = 0 dla m ≠ 0),
stąd dla funkcji korelacji wzajemnej Rsx(m) jest prawdziwa następująca zależność:

 ∞ 
Rsx (m) = E [s( n + m) x ( n )] = E  s( n + m) ∑ h(k ) s( n − k ) =
 k =0 
∞ ∞
= ∑ h( k ) E [ s (n − k ) s(n + m )] = ∑ h(k ) Rss ( k + m) = σ2s h ( − m ) (16.13)
k =0 k =0

gdzie h(k) oznacza odpowiedź impulsową układu o transmitancji (16.7). Zakładając dodatko-
wo przyczynowość tego układu:
h (k ) = 0 dla k < 0 (16.14)

otrzymujemy:
 0, m > 0
Rsx (m ) =  2 (16.15)
σ
 s h ( − m ), m ≤ 0
426 Zaawansowane metody analizy częstotliwościowej sygnałów

Ostatecznie uwzględniając zależność (16.15) w (16.12) dostajemy:


p q
R xx (m) = − ∑ a k R xx (m − k ) + σ 2s ∑ bk h( k − m) (16.16)
k =1 k =0

Po dodatkowym podstawieniu l = k − m oraz wzięciu pod uwagę przyczynowości (16.14) ukła-


du, otrzymujemy następującą zależność dla różnych „zakresów” zmienności indeksu m ≥ 0:

 p
 − ∑ ak Rxx ( m − k ), m>q
 k =1
Rxx (m) =  (16.17)
p q−m
 − a R ( m − k ) + σ2
 ∑ k xx s ∑ bl + m h (l ), 0 ≤ m ≤ q
 k =1 l =0

Natomiast dla m < 0 mamy Rxx(m) = Rxx(−m). Rozpatrzmy obecnie po kolei przypadki wszystki
możliwych modeli transmitancji (16.7): AR (q = 0, tylko mianownik transmitancji), MA (p = 0,
tylko licznik) i ARMA (q ≠ 0 i p ≠ 0, licznik i mianownik).

16.2.2. Model AR

Przypomnijmy, model AR jest odpowiedni dla widm „prążkowych”, na przykład sumy kilku
sinusoid. W przypadku kiedy zakładamy występowanie tylko mianownika transmitancji (16.7),
to równanie (16.17) upraszcza się do następującej zależności (q = 0, b0 = 1, h(0) = 1):

 p
− ∑ a k R xx ( m − k ), m>0

R xx (m) =  k p=1 (16.18)
− a R ( m − k ) + σ 2 , m = 0
 ∑ k xx s
 k =1

którą można zapisać w sposób macierzowy (po uwzględnieniu symetrii funkcji autokorelacji
Rxx(−m) = Rxx(m)):

 R xx (0) R xx (1) " R xx ( p )   1  σ 2s 


 R (1)    
R xx (0) " R xx ( p − 1)  a1   0 
 xx ⋅ = (16.19)
 # # % #   #   # 
     
 R xx ( p ) R xx ( p − 1) " R xx (0)  a p   0 

Powyższą zależność można przedstawić jako parę dwóch oddzielnych równań (osobno zapisu-
jemy p ostatnich równań (16.19) oraz równanie pierwsze):

 R xx (0) R xx (1) " R xx ( p − 1)   a1   R xx (1) 


 R (1)  
R xx (0) " R xx ( p − 2)  a 2   R (2) 
 xx ⋅ = −  xx  , Ra = −r (16.20)
 # # % #   #   # 
  a   
 R xx ( p − 1) R xx ( p − 2) " R xx (0)   p   R xx ( p )
p
Rxx (0) + ∑ am Rxx ( m) = Rxx (0) + aT r = σ2s (16.21)
m =1
Zaawansowane metody analizy częstotliwościowej sygnałów 427

(16.19) nosi nazwę równania Yule’a-Walkera. Jeśli dysponujemy estymatą funkcji autokorela-
cji Rxx(m) sygnału x(n), to możemy na początku wyznaczyć z (16.20) wartości współczynników
ak odpowiadającego mu modelu AR (a = −R−1r), następnie z (16.21) obliczyć wariancję σs2
szumu wejściowego, a na końcu znaleźć „widmo” sygnału ze wzoru (16.8) (Ω = 2πf / fpr):
1 1
PxxAR (e jΩ ) = 2
σ2s = 2
σ2s (16.22)
jΩ p
A( e )
1+ ∑ a k e − jΩ k
k =1

Rząd modelu p powinien być równy podwojonej liczbie sinusoidalnych sygnałów składowych,
występujących w analizowanym sygnale, czyli każda częstotliwość powinna mieć w transmi-
tancji (16.7) jeden, związany z nią, biegun zespolony oraz jego sprzężenie.
Podczas modelowania AR bardzo ważny jest właściwy wybór rzędu modelu p, czyli stopnia
wielomianu mianownika transmitancji. Do tego celu można wykorzystać następujące kryteria,
w których tak dobiera się wartość parametru p, aby zminimalizować wartość określonej funkcji
celu:
N + ( p + 1) 2
1) FPE (Final Prediction Error): FPE ( p ) = σˆ sp
N − ( p + 1)
2) AIC (Akaike Information Criterion): AIC( p ) = N ln σˆ 2sp + 2 p (16.23)

3) MDL (Minimization of Description Length): MDL( p ) = N ln σˆ 2sp + p ln N

gdzie N jest liczbą próbek analizowanego sygnału x(n), a σˆ 2sp oznacza estymowaną ekspery-
mentalnie wariancję błędu predykcji (szumu białego) dla konkretnej wartości rzędu modelu p.
Modelowanie AR omówiono bardziej szczegółowo w rozdziałach 19 i 20, poświęconych kom-
presji sygnału mowy metodą LPC-10.
Dla dociekliwych. W literaturze specjalistycznej dotyczącej analizy widmowej sygnałów znana
i popularna jest metoda maksymalnej entropii. Bierze ona swoją genezę w zauważeniu konie-
czności takiej ekstrapolacji dla |m| > p obliczonego wektora próbek estymaty funkcji autokore-
lacji Rxx(m), |m| ≤ p, aby po tej operacji funkcja ta odpowiadała sygnałowi x(n) o maksymalnej
entropii, czyli maksymalnie losowemu. Wówczas estymata funkcji gęstości widmowej mocy
sygnału, oparta na odpowiednio ekstrapolowanym Rxx(m), jest maksymalnie płaska i również
ma maksymalną entropię. Co ciekawe, rozwiązaniem tak postawionego problemu jest estymata
widma, zdefiniowana przez (16.22) z wartościami parametrów ak oraz σs2, wyznaczonymi
z (16.19) lub pary równań (16.20) i (16.21).

16.2.3. Model MA

Na początku przypomnijmy, że model MA jest odpowiedni do modelowania widm „gładkich”,


np. widma kolorowego szumu. W sytuacji kiedy transmitancja (16.7) ma tylko wielomian
w liczniku, równanie (16.17) przyjmuje następującą postać (podobnie jak poprzednio dla m < 0
mamy Rxx = Rxx(−m)):

 0, m>q

Rxx (m ) =  2 q −m (16.24)
 σ s ∑ bl + m h (l ), 0 ≤ m ≤ q
 l =0
428 Zaawansowane metody analizy częstotliwościowej sygnałów

Ponieważ odpowiedź impulsowa h(k) układu MA jest równa współczynnikom bk wielomianu


B(z) jego transmitancji (16.7), czyli h(k) = bk, to dolne równanie (16.24) upraszcza się do po-
staci:
q −m
Rxx (m ) = σ2s ∑ bl +m bl = σ2s Rbb (m) (16.25)
l =0

w którym Rbb(m) oznacza funkcję autokorelacji współczynników bk modelu MA. Z (16.8) oraz
(16.25) wynika, że estymata widmowa modelu MA jest równa:

(4.15) (16.25)
PxxMA (e jΩ ) =  B (e jΩ ) B* (e jΩ )  σ2s = FT ( Rbb ( m) ) σ2s = FT( Rxx ( m)) = (16.26a)
 
q
f
= ∑ Rxx ( m)e − jΩm , Ω = 2π (16.26b)
m =− q f pr

gdzie FT oznacza transformację Fouriera, która jest zastosowana w stosunku do funkcji auto-
korelacji sygnału analogicznie jak w równaniu (1.49a) (z podstawieniami: N = q + 1, Ω =
= 2πf / fpr). W (16.26a) wykorzystaliśmy właściwość (4.15), obowiązującą także dla sygnałów
dyskretnych, zgodnie z którą transformata Fouriera funkcji autokorelacji sygnału jest równa
iloczynowi widma Fouriera tego sygnału i jego sprzężenia zespolonego. Z równania (16.26b)
wynika, że w celu wyznaczenia estymaty widmowej, opartej na modelu MA, wcale nie ma po-
trzeby obliczania wartości współczynników bk tego modelu (16.7), natomiast należy znać jego
rząd q. Optymalna wartość parametru q minimalizuje kryterium Akaike AIC, mające identycz-
ną postać (16.23) jak w przypadku modelu AR, w którym teraz parametr q zastępuje p.
Jeśli jest to wymagane, to wartości współczynników bk transmitancji (16.7) oblicza się, wyko-
rzystując fakt, że ta sama charakterystyka częstotliwościowa może być modelowana zarówno
układem MA jak i AR (16.9). Dlatego w tym przypadku na początku estymuje się wartości
modelu AR, przyjmując wartość p wielokrotnie większą od q (minimum 4 razy, często 8 razy),
a potem wyznacza się współczynniki odpowiadającego mu modelu MA: B(z) ≈ 1/A(z) (patrz
(16.10)). Wówczas A(z)B(z) ≈ 1, czyli splot współczynników ak i bk jest w przybliżeniu impul-
sem (deltą) Kroneckera. Znając wartości współczynników ak zapisuje się równania splotu dla
kolejnych chwil czasowych, a następnie rozwiązuje się otrzymany w ten sposób układ równań
w sensie średniokwadratowym:

A ⋅ b = δ ⇒ b = ( AT A ) −1 A ⋅ δ (w Matlabie : b =A \ δ ) (16.27)

gdzie A jest macierzą Toeplitza o wymiarach (p + q + 1) × (q + 1), mającą w kolejnych wier-


szach przesuwane o jedną pozycję w prawą stronę współczynniki {ap, ap−1, ..., a1, 1}, zaczynając
od [1, 0, ..., 0] w wierszu pierwszym, b oznacza (q + 1)-elementowy wektor pionowy, zawiera-
jący współczynniki {b0, b1, ..., bq}, natomiast δ jest (p + q + 1)-elementowym, wektorem pio-
nowym, składającym się z jedynki na pierwszej pozycji oraz zer na pozostałych.
Przykład. Dla p =3 i q = 2 zmienne równania (16.27) mają następujące wartości (w celu zwię-
kszenia prostoty zapisu świadomie przyjęto małą wartość parametru p, która nie jest cztery ra-
zy większa od q):
Zaawansowane metody analizy częstotliwościowej sygnałów 429

 1 0 0 1
a 1 0 0
 1   b0   
 a2 a1 1  0
A= , b =  b1  , δ= 
 
 a3 a2 a1  b2  0
0 a a  0
3 2
   
 0 0 a3  0

Po uwzględnieniu faktu, że podczas modelowania MA zakłada się b0 = 1, otrzymujemy:

 1 0  a1 
a 1 a 
 1  b   2
A =  a2 a1  , b =  1 , δ = −  a3 
  b2   
 a3 a 2  0 
 0 a3   0 

W literaturze wskazuje się na metodę Durbina jako na efektywne narzędzie obliczeniowe do


rozwiązania postawionego powyżej problemu minimalizacyjnego:

b = −R aa −1ra , b = [ b1, b2 , b3, ..., bq ]T (16.28)

gdzie (ak, p − wyznaczone wartości parametrów modelu AR):

1 p −|i − j|
Raa (i, j ) = ∑ ak ak +|i − j| , i, j = 1, 2, 3,..., q
p + 1 k =0
(16.28a)

1 p −i
raa (i ) = ∑ ak ak +i , i = 1, 2, 3,..., q
p + 1 k =0
(16.28b)

16.2.4. Model ARMA

Ponownie przypomnijmy na początku, że model ARMA jest odpowiedni do modelowania


widm jednocześnie „prążkowych” i „gładkich”, np. sumy kilku sinusoid „zanurzonych” w ko-
lorowym szumie. W przypadku kiedy transmitancja (16.7) ma wielomian w liczniku i mia-
nowniku stajemy przed koniecznością estymacji współczynników bk i ak obu wielomianów.
Najczęściej wybieranym scenariuszem rozwiązania jest wówczas:
1) wyznaczenie współczynników wielomianu A(z) z równania (16.17) dla m > q (wybieramy
M > p + q oraz pamiętamy, że Rxx(m) = Rxx(−m) dla m < 0):

 Rxx ( q ) Rxx ( q − 1) " Rxx ( q − p + 1)   a1   Rxx ( q + 1) 


 R ( q + 1)  a   R ( q + 2) 
Rxx ( q ) " Rxx ( q − p + 2)  2 
 xx ⋅ = −
xx  , Ra = −r (16.29a)
 # # % #  #   # 
     
R
 xx ( M − 1) R xx ( M − 2) " Rxx ( M − p )   a p   Rxx ( M ) 

a = − ( R T R ) −1 R ⋅ r (w Matlabie : a=R \ r ) (16.29b)


430 Zaawansowane metody analizy częstotliwościowej sygnałów

2) przefiltrowanie analizowanego sygnału x(n) filtrem a: ponieważ związany z nim wielomian


Aest(z) jest tylko estymatą rzeczywistego A(z), w przybliżeniu otrzymujemy:
Aest(z)⋅B(z)/A(z) ≈ B(z);
3) znalezienie modelu MA dla sygnału y(n), będącego wynikiem filtracji. Wówczas widmo wy-
nikowe jest równe:
MA jΩ
Pyy (e )
PxxARMA ( e jΩ ) = (16.30)
PxxAR ( e jΩ )
Optymalne stopnie q i p wielomianów licznika i mianownika transmitancji znajduje się w wy-
niku minimalizacji kryterium Akaike, analogicznego do (16.23):

AIC(p, q) = ln σˆ 2spq + 2(p + q)/ /N

16.2.5. Podsumowanie

Modelowanie parametryczne AR/MA/ARMA jest szeroko stosowane, nie tylko do estymacji


widmowej sygnału. Może być ono podstawą klasyfikacji (rozróżniania, identyfikacji) dwóch
różnych sygnałów na podstawie zbioru odpowiadających im współczynników bk i ak (czyli
w wielowymiarowej przestrzeni tych współczynników) oraz może służyć do kompresji sygna-
łów (po wyznaczeniu współczynników transmitancji, związanych z fragmentem analizowanego
sygnału, współczynniki te są kodowane, zapamiętywane lub transmitowane, a następnie frag-
mentami rekonstruuje się na ich podstawie sygnał wejściowy). Takie podejście jest powszech-
nie stosowane w koderach mowy LPC. Szczegółowo jest ono opisane w rozdziałach 19 i 20.
W rozdziale 20 przedstawiono także metodę Durbina-Levinsona, w której równanie (16.20)
rozwiązuje się w sposób rekurencyjny. Unika się w ten sposób kłopotliwego odwracania ma-
cierzy, co umożliwia zastosowanie metod modelowania AR nawet z wykorzystaniem bardzo
tanich, stałoprzecinkowych procesorów sygnałowych.

16.3. Metody podprzestrzeni

16.3.1. Podstawy

Jak wiemy estymatory funkcji gęstości widmowej mocy sygnału w większości operają się na
estymacie funkcji autokorelacji Rxx(m) analizowanego sygnału x(n), czego przykładem są rów-
nania (8.60) i (16.20). W wielu metodach analizy częstotliwościowej jako krok pośredni two-
rzy się macierz Rxx (16.20), której elementami są wartości próbek wyżej wymienionej estyma-
ty. Jest ona symetryczna dla sygnałów rzeczywistych (Rxx(i,j) = Rxx(j,i)) oraz symetryczna-
-sprzężona dla sygnałów zespolonych (Rxx(i,j) = Rxx*(j,i)). Dla tej macierzy można obliczyć
wartości własne λk i wektory własne vk, oraz przedstawić ją jako sumę (2.89) macierzy elemen-
tarnych vkvkT wziętych z wagami λk. W sytuacji, kiedy sygnał jest sumą kilku składowych sinu-
soidalnych i szerokopasmowego szumu białego, część wektorów własnych zależy przede
wszystkim od składowych harmonicznych sygnału (składowe główne − principal components),
a pozostałe − wyłącznie od szumu. Wektory własne są ortogonalne i rozpinają dwie dopełnia-
jące się przestrzenie: sygnału i szumu. Jeśli jesteśmy w stanie wyznaczyć na podstawie Rxx ba-
danego sygnału jakikolwiek wektor leżący w przestrzeni szumu, to możemy skorzystać z faktu
Zaawansowane metody analizy częstotliwościowej sygnałów 431

jego ortogonalności do każdego wektora z przestrzeni sygnałów i w ten sposób wyznaczyć


(„odkryć”) ich częstotliwości. W tym celu wystarczy obliczyć iloczyn skalarny wektora szumu
z dowolnym spróbkowanym sygnałem harmonicznym postaci ej2π(f/fpr)n: jeśli jest on równy zero
to w sygnale występuje częstotliwość f, w przeciwnym przypadku − nie występuje. Grupa me-
tod, która bazuje na tym zjawisku, wykorzystuje do estymacji gęstości widmowej mocy sygna-
łu podprzestrzeń szumu. Metody te zaprezentowano w pierwszej kolejności.
Dodatkowo, jeśli używamy do estymacji częstotliwości sumy kilku sinusoid jakiejkolwiek me-
tody, wykorzystującej macierz Rxx, to macierz tę można aproksymoważ za pomocą sumy ma-
cierzy λkvkvkT związanych wyłącznie z głównymi wektorami vk jej dekompozycji, leżącymi
w podprzestrzeni sygnału. Wówczas estymata taka jest bardziej wiarygodna, gdyż pozbawiona
szkodliwego wpływu szumu. Metody należące do tej grupy przedstawiono w drugiej kolej-
ności.
Załóżmy na początek najprostszy przypadek, tzn. analizę pojedynczego sygnału harmoniczne-
go w obecności szumu białego:

y ( n ) = x ( n ) + s( n ) = A1e jΩ1n + s( n ) (16.31)

Funkcja autokorelacji tego Ryy(m) sygnału oraz związana z nią macierz Ryy = Rxx + Rss są dane
następującymi wzorami:

R yy ( m) =| A1 |2 e jΩ1m + σ2s δ( m ) (16.32)

 1 e − jΩ1 " e − jΩ1 ( M −1)  1 0 " 0


  
 e 1
jΩ
1 " e − jΩ1 ( M − 2)
 2 0 1 " 0
R yy =| A1 |2  + σ  (16.33)
# # % #  s
# # % #
   
 e M −1)
j Ω1 (
e jΩ1 ( M − 2) " 1  0 0 " 1

R yy = R xx + R ss =| A1 |2 e1e1H + σ2s I, e1 = [1, e jΩ1 , e j 2Ω1 ,..., e j ( M −1)Ω1 ]T (16.34)

Z (16.34) wynika, że prawdziwa jest następująca zależność:

R xx e1 = | A1 |2 (e1e1H )e1 = | A1 |2 e1 (e1H e1 ) = M | A1 |2 e1 (16.35)

więc wektor e1 jest wektorem własnym v1 macierzy, związanym z wartością własną λ1 = M|A1|2.
Ponieważ macierz Rxx jest hermitowska (sprzężona symetria), to wektor ten jest ortogonalny do
pozostałych jej wektorów własnych v2, v3, ..., vM, związanych z pozostałymi, innymi wartoś-
ciami własnymi: λ2, λ3, ..., λM. Ponieważ Rxx jest macierzą pierwszego rzędu, to wartości te są
równe zero. W związku z tym otrzymujemy (k = 1, 2, 3, ..., M − 1):

R yy v k = (R xx + σ2ss I) v k = λ k v k + σ2ss v k = (λ k + σ2ss ) v k (16.36)

Wynika stąd, że M wartości własnych macierzy Rxx jest równych:


M |A1|2 + σs2, σs2, σs2, ..., σs2 (16.37)
tzn. że największa wartość własna jest związana z sygnałem i szumem, a pozostałe tylko z szu-
mem. W związku z tym, możemy po tej dekompozycji wybrać dowolny wektor własny macie-
rzy Ryy zależny tylko od szumu, wyznaczyć jego DFT, znaleźć częstotliwość, dla której zeruje
się w przybliżeniu moduł transformaty i potraktować ją jako częstotliwość sygnału harmo-
432 Zaawansowane metody analizy częstotliwościowej sygnałów

nicznego, występującego w sygnale (wniosek z ortogonalności wektorów własnych macierzy


Ryy: „sygnałowych” i „szumowych”).
Dla sumy sygnałów harmonicznych o różnych pulsacjach Ω1, Ω2, ..., Ωp:
p
y ( n ) = x (n ) + s (n ) = ∑ Ak e jΩk n + s (n ) (16.38)
k =1

zależność (16.34) przyjmuje następującą postać:


p
R yy = R xx + R ss = ∑ | Ak | 2 e k e kH + σ2s I, e k = [1, e jΩk , e j 2Ωk ,..., e j ( M −1)Ωk ]T (16.39)
k =1

i tym przypadku dekompozycja macierzy Ryy względem wartości własnych jest następująca:
p M
R yy = ∑ (λ k + σ2s ) v k v kH + ∑ σ2s v k v kH (16.40)
k =1 k = p +1

W związku z tym, podobnie jak poprzednio, możemy wykorzystać jeden z wektorów należą-
cych do podprzestrzeni szumu (k > p) do znalezienia ortogonalnych do niego sygnałów harmo-
nicznych (baz Fouriera). Rozdział 16.3.3 stanowi kontynuację rozważań, zapoczątkowanych
powyższymi rozważaniami, dotyczącymi sygnałów zespolonych.
Teraz natomiast zajmijmy się metodą Pisarenki, była ona prekursorem metod podprzestrzeni
analizy widmowej, a dotyczyła sygnałów rzeczywistych.

16.3.2. Metoda Pisarenki

Załóżmy, że sygnał x(n) o wartościach rzeczywistych ma następującą postać:

p p p  f 
x (n) = ∑ xk (n) = ∑ Ak sin(Ω k n ) = ∑ Ak sin 2π f k n

(16.41)
k =1 k =1 k =1  pr 

czyli że składa się z sumy sygnałów sinusoidalnych o różnych parametrach. Każdy z sygnałów
xk(n) = Aksin(Ωkn) można uzyskać za pomocą rekursywnej zależności:

x k ( n ) = −a k(1) xk (n − 1) − a k( 2) x k ( n − 2) (16.42)
gdzie
a k(1) = −2 cos Ω k , a k( 2) = 1, xk ( −1) = 0, xk ( −2) = − Ak sin Ω k (16.43)

Z (16.42) i (16.43) wynika, że w przypadku sinusoid można „generować” ich kolejną próbkę
na podstawie dwóch próbek poprzednich. Uogólniając wykazuje się, że sygnał postaci (16.41)
da się przedstawić za pomocą zależności rekurencyjnej:
2p
x (n ) = − ∑ a m x( n − m) (16.44)
m =1

czyli jest on generowany przez liniowy układ dyskretny o następującej transmitancji:


Zaawansowane metody analizy częstotliwościowej sygnałów 433

1 1
H ( z) = 2p
= (16.45)
A( z )
1+ ∑ am z −m

m =1

Układ (16.45) jest wstępnie wprowadzany w stan początkowy (16.43), a później pobudzany
sygnałem zerowym. Załóżmy, że nie dysponujemy „czystym” sygnałem x(n) tylko jego „zaszu-
mioną” wersją y(n), stanowiącą odstępstwo od założonego modelu (16.41):
y ( n ) = x (n ) + s( n ) (16.46)

Wówczas podstawiając x(n) = y(n) − s(n) do (16.44) otrzymujemy:


2p
y ( n ) − s( n ) = − ∑ a m [ y (n − m) − s (n − m)] (16.47)
m =1

lub (a0 = 1)
2p 2p
∑ a m y (n − m) = ∑ a m s(n − m) (16.48)
m=0 m =0

Równanie (16.48) w zapisie macierzowym ma następującą postać:

y T a = sT a (16.49)
gdzie
y = [ y ( n ), y ( n − 1), ..., y (n − 2 p )] T

s = [ s (n ), s( n − 1), ..., s(n − 2 p )] T

a = [a0 , a1 , a2 ,..., a2 p ] T

Po lewostronnym wymnożeniu równania (16.49) przez wektor y oraz po wyznaczeniu wartości


oczekiwanej obu stron nowego równania, uzyskujemy:

E[ yy T ] a = E [ ysT ] a (16.50)
czyli:
R yy a = E [( x + s)sT ] a = E[xsT ]E[ssT ] a = E[ssT ] a = σ 2s a (16.51)

ponieważ szum ma zerową wartość średnią i jest nieskorelowany z sygnałem. Ostatecznie


otrzymaliśmy więc równanie:

R yy a = σ 2s a (16.52)

z którego wynika, że poszukiwany wektor współczynników a jest wektorem własnym macierzy


Ryy, związanym z jej wartością własną σs2. Na tej podstawie Pisarenko zaproponował algorytm
estymacji funkcji gęstości widmowej mocy Pxx(ejΩ) sygnału x(n), „modelowanego” przez rów-
nanie (16.41), jest on przedstawiony w tabeli 16-3.
434 Zaawansowane metody analizy częstotliwościowej sygnałów

Tab. 16-3. Algorytm metody Pisarenki estymacji funkcji gęstości widmowej mocy sygnału, składającego się
z kilku sinusoid

1) Wyznaczamy eksperymentalnie wartości funkcji autokorelacji Ryy(m), m = 0, 1, 2, ..., 2p, sygnału y(n).

2) Konstruujemy macierz Ryy o wymiarach (2p + 1)×(2p + 1), identyczną jak ta w równaniu (16.20) tylko
zbudowaną z wartości funkcji autokorelacji Ryy(m):

 R yy (0) R yy (1) " R yy ( 2 p ) 


 R (1) R yy (0) " R yy (2 p − 1)
= 
yy (16.53)
R yy
 # # % # 
 
R
 yy ( 2 p ) R yy ( 2 p − 1) " R yy (0) 

3) Dokonujemy dekompozycji tej macierzy względem wartości własnych, wykorzystując jedną z istnieją-
cych metod numerycznych, np. metodę Jacobiego lub QR (funkcje eig() i eigs() w programie Mat-
lab):
2 p +1
R yy = ∑ λ k v k vT , λ1 ≥ λ 2 ≥ λ 3 ≥ ... ≥ λ 2 p +1 (16.54)
k =1

4) Najmniejsza wartość własna λ2p+1 jest równa wariancji szumu σs2, a związany z nią wektor v2p+1 jest
równy wektorowi a; elementy tego wektora stanowią współczynniki wielomianu A(z) w równaniu
(16.45).
5) Wyznaczamy 2p zespolone zera wielomianu A(z) (czyli bieguny transmitancji H(z)), które występują
w parach sprzężonych:
ˆ ˆ
{ zk , zk* , k = 1, 2, 3, ..., p } ⇒ { rk e jΩk , rk e− jΩk , k = 1, 2, 3, ..., p } (16.55)

W ten sposób zostają obliczone estymaty Ω̂ k unormowanych pulsacji Ωk = 2πfk/fpr poszczególnych skła-
dowych sygnału x(n) (16.41).

6) Aby pójść krok dalej i wyznaczyć estymaty Âk amplitud Ak tych składowych, należy skorzystać z za-
leżności (1.20b):
p p
R yy (0) = ∑ ( Ak2 / 2) + σ 2s = ∑ Pk + σ 2s (16.56)
k =1 k =1
p
R yy (m ) = ∑ Pk cos(mΩ k ), m = 1, 2, 3, ..., p (16.57)
k =1

Otrzymujemy w ten sposób układ p równań z p niewiadomymi Pk:

 cos Ω1 cos Ω 2 " cos Ω p   P1   R yy (1) 


 cos 2Ω cos 2Ω " cos 2Ω p   P2   R yy ( 2) 
 1 2 ⋅  =   (16.58)
 # # % #   #   # 
     
cos pΩ1 cos pΩ1 " cos pΩ p   Pp   R yy ( p )

którego rozwiązaniem jest moc poszczególnych składowych sinusoidalnych sygnałux(n).


Zaawansowane metody analizy częstotliwościowej sygnałów 435

16.3.3. Metody pochodne: MUSIC, EV i MV

Będąc bogatsi o doświadczenia wyniesione z prześledzenia wyprowadzenia metody Pisarenki,


przedstawimy teraz nieco szersze spojrzenie na zaprezentowane powyżej rozwiązanie. Założy-
my, podobnie jak w (16.38), zesp o lo ny model sygnału niezaszumionego:
p p
x (n) = ∑ Ak e j (Ω n + φ
k k )
, R xx (m ) = E[ x (n ) x * (n − m)] = ∑ Pk e jΩ m ,
k Pk = Ak2 (16.59)
k =1 k =1

i zaszumionego:

y ( n ) = x(n ) + s(n ), R yy ( m) = E[ y (n ) y * (n − m)] = R xx ( m) + σ 2s δ(m ) (16.60)

gdzie amplitudy Ak i pulsacje Ωk są nieznane, a fazy φk są niezależnymi zmiennymi losowymi


o rozkładzie równomiernym w przedziale [0,2π). W takim przypadku prawdziwa jest następu-
jąca zależność macierzowa (patrz (16.39)):

R (yyM ) = R (xxM ) + R (ssM ) = R (xxM ) + σ 2s I ( M ) (16.61)

gdzie I(M) jest macierzą diagonalną o wymiarach M×M, mającą jedynki na głównej przekątnej,
a zespolone macierze Ryy(M) i Rxx(M) są zdefiniowane w sposób następujący (zz = xx lub yy):

 R zz (0) R zz ( −1) " R zz ( −( M − 1)) 


 R (1) R zz (0) " R zz ( −( M − 2))
= 
zz
R (zzM ) (16.62)
 # # % # 
 
R
 zz ( M − 1) R zz ( M − 2) " R zz (0) 

Dokonując dekompozycji macierzy Ryy(M) względem wartości własnych otrzymujemy (patrz


(16.40)):
p M p M
R (yyM ) = R (xxM ) + σ 2s I ( M ) = ∑ λ k v k v kH + ∑ σ 2s v k v kH = ∑ (λ k + σ 2s )v k v kH + ∑ σ 2s v k v kH (16.63)
k =1 k =1 k =1 k = p +1

gdzie „H” oznacza równoczesne sprzężenie zespolone oraz transpozycję. Wektory własne de-
kompozycji vk są ortonormalne (ortogonalne i unormowane). Pierwszych p z nich leży w prze-
strzeni sygnału, a następne, od p + 1 do M, leżą w przestrzeni szumu. Wektory zespolone zwią-
zane z poszczególnymi częstotliwościami sygnałów składowych sygnału x(n):

[
e k = 1, e jΩ k , e j 2Ω k , e j 3Ω k ,..., e j ( M −1)Ω k ] T
, k = 0, 1, 2, ..., p (16.64)

są liniową kombinacją wektorów własnych z przestrzeni sygnału, dlatego:


p
R (xxM ) = ∑ λ k e k e kH (16.65)
k =1

Równocześnie wektory ek są ortogonalne do każdego wektora z przestrzeni szumu. W metodzie


Pisarenki dla zespolonych sygnałów harmonicznych przyjmuje się M = p + 1 (dla rzeczywis-
tych sinusoid mieliśmy M = 2p + 1) oraz wykorzystuje się ortogonalność jedynego wektora
436 Zaawansowane metody analizy częstotliwościowej sygnałów

vp+1, należącego do przestrzeni szumu, do każdego wektora sygnału ek, leżącego w przestrzeni
sygnału:
e kH v p +1 = 0, k = 1, 2, 3, ..., p (16.66)

Jak wiemy z wyprowadzenia metody Pisarenki, zamiast rozwiązywać powyższy układ równań
ze względu na Ωk, k = 1, 2, 3,..., p, wystarczy znaleźć miejsca zerowe następującego wielomia-
nu (patrz (16.45)):
p
V p +1 ( z ) = ∑ v p+1 (k ) z −k (16.67)
k =0

i „odczytać” kąty (pulsacje Ωk) tych zer. Alternatywnie estymator częstotliwościowy Pisarenki
dla sygnału zespolonego (16.59) można zapisać jako

1 T
PPIS (e jΩ ) = , e = 1, e jΩ , e j 2Ω , e j 3Ω ,..., e j ( M −1)Ω  , Ω ∈ [0,2 π) (16.68)
2  
e H v p +1

Argumenty maksimów powyższej funkcji będą zdradzały wartości pulsacji Ωk składowych


sygnału x(n). W innych metodach, w których M > p + 1, estymuje się częstotliwości na pod-
stawie argumentów maksimów funkcji:

1 T
PMU, EV (e jΩ ) = , e = 1, e jΩ , e j 2Ω , e j 3Ω ,..., e j ( M −1)Ω  (16.69)
M 2  
∑ H
αk e v k
k = p +1

Kiedy wszystkie wagi αk w (16.69) są równe 1, otrzymujemy metodę MUSIC (Multiple Signal
Classification), natomiast przyjmując αk = 1/λk − metodę EV (EigenVector). Jeśli szum s(n)
w (16.60) jest biały, to wartości własne λk, k = p+1, ..., M, są takie same i równe wariancji
szumu. Wówczas metoda EV sprowadza się do metody MUSIC, w przeciwnym przypadku
widmo otrzymywane z metody EV ma mniej fałszywych maksimów (tzw. maksimów „du-
chów”).

W metodzie Pisarenki wykorzystywany był wektor należący do podprzestrzeni szumu, ortogo-


nalny do podprzestrzeni sygnału, natomiast w metodach MUSIC i EV − kilka takich wektorów.
W metodzie minimalnej normy MN (Minimum Norm) [Haye96] idzie się tym tropem dalej
i stosuje się jeden wektor z przestrzeni szumu, nazwijmy go a, ale za to optymalnie wybrany:

1 T
PMN (e jΩ ) = , e = 1, e jΩ , e j 2Ω , e j 3Ω ,..., e j ( M −1)Ω  (16.70)
2  
eH a

W mianowniku wyrażenia (16.70) występuje kwadrat modułu charakterystyki częstotliwościo-


wej filtra FIR o współczynnikach a0, a1, ..., aM−1. Chcemy, aby transmitancja tego filtra:

M −1 M −1
∏ (1 − e jΩk z −1 ) ⋅ ∏
p
A( z ) = ∑
k =0
ak z − k =
k =0 k = p +1
(1 − zk z −1 ) (16.71)
Zaawansowane metody analizy częstotliwościowej sygnałów 437

miała p miejsc zerowych exp(jΩk), leżących na okręgu jednostkowym, gdyż wówczas wyraże-
nie (16.71) zeruje się dla nich, a jego odwrotność dąży do nieskończoności, czyli funkcja
PMN(ejΩ) ma maksima dla częstotliwości harmonicznych sygnałów składowych w (16.69).
Równocześnie jednak jesteśmy zainteresowani, aby pozostałe miejsca zerowe zk były położone
poza okręgiem i nie powodowały maksimów funkcji (16.71). Pomocniczo zakłada się także, że
kwadrat normy wektora a ma być najmniejszy (suma kwadratów współczynników) oraz że
a0 = 1.
Oto warunki gwarantujące spełnienia dwóch z trzech założeń, dotyczących wektora a.
1) Wektor a należy do przestrzeni szumu. Ponieważ macierz Ts = VsVsH, Vs = [vp+1, ..., vM−1]
rzutuje dowolny wektor b do przestrzeni szumu, załóżmy, że poszukiwany przez nas wektor a
jest właśnie wynikiem takiego rzutu: a = Ts⋅b.
2) Pierwszy element wektora a jest równy jeden, jeśli aHu = 1 dla u = [1, 0, ..., 0].
Łącząc oba warunki w jeden otrzymujemy (podstawiając 1) do 2)): bH(TsHu) = 1. Ponieważ
kwadrat normy poszukiwanego wektora jest równy ||a||2 = || Ts⋅b ||2 = bH(TsHTs) b, a macierz
T jest idempotentna (TsHTs = Ts), to metoda MN sprowadza się do znalezienia rozwiązania
poniższego problemu minimalizacyjnego ze względu na wektor b:

( )
min b H Ts b , z ograniczeniem bH(TsHu) = 1 (16.72)

Rozwiązanie to jest następujące:

Ts−1 (TsH u) u Ts u ( Vs VsH )u


b= = ⇒ a = Ts b = = (16.73)
u H Ts u u H Ts u u H Ts u u H ( Vs VsH )u

ponieważ macierz Ts jest hermitowska (TsH = Ts), skąd otrzymujemy Ts−1TsH = I, czyli macierz
identycznościową). Wektor a dany równaniem (16.73) wykorzystujemy następnie w estymacie
widmowej (16.70).

W sytuacji, kiedy w metodach MUSIC, EV i MN dysponujemy już estymatami częstotliwości


składowych sinusoidalnych sygnału, ich moc wyznaczamy tak jak w metodzie Pisarenki z za-
leżności (16.58).

16.3.4. Metoda ESPRIT

Zajmiemy się teraz metodą ESPRIT (Estimation of Signal Parameters via Rotational Inva-
riance Techniques). Podobnie zakłada się w niej, że problem dotyczy estymacji częstotliwości
fk (Ωk = 2πfk/fpr) składowych sygnału wieloharmonicznego (16.59) w obecności szumu białego
(16.60), tym razem jednak na podstawie M + 1 kolejnych próbek sygnału y(n) (16.60), dla któ-
rych formułuje się następujące, dwa równania:

 y(n)   1 1 " 1   A1e jφ1   s( n ) 


 y ( n + 1)   e jΩ1 jΩ p  jφ2

 
e jΩ2 " e   A2 e   s ( n + 1) 
y0 =  =
 #   # # % #  #  +  # 
= Wa + s0
   j ( M −1)Ω  
 
j ( M −1) Ω p   jφ p 
 y ( n + M − 1)   e 1 e j ( M −1)Ω2 " e   Ap e  
s ( n + M − 1) 

(16.74)
438 Zaawansowane metody analizy częstotliwościowej sygnałów


 y ( n + 1)   e jΩ1 0 " 0   A1e 1   s( n + 1) 
 y ( n + 2)    jφ

 
 = W 0 e jΩ 2 " 0   A2 e 2   s ( n + 2) 
y1 =    #  +  = W ⋅ Φ ⋅ a + s1 (16.75)
 #  # 
   # # % #  
 0 jΩ  jφ   
 y(n + M )  0 " e p   Ap e p   s( n + M ) 

Jak widać grupuje się wartości próbek sygnału y(n) w dwa M-elementowe wektory, zaczynają-
ce się od n-tej oraz (n + 1)-ej próbki. Następnie w sprytny sposób wykorzystuje się fakt, że
w obu wektorach y0 i y1 występuje dokładnie ten sam sygnał wieloharmoniczny tylko opóźnio-
ny o jedną próbkę, czyli przesunięty w fazie (poprzez macierz Φ). W tym celu wyprowadza się
wzór na macierz kowariancji własnej wektora y0 = y(n):

R y 0, y 0 = E  y ( n ) y H ( n )  = W ⋅ P ⋅ W H + σ2s I = C yy + σ2s I (16.76)


 

oraz kowariancji wzajemnej wektorów y0 = y(n) oraz y1 = y(n + 1):

R y 0, y1 = E  y ( n ) y H ( n + 1)  = W ⋅ P ⋅ Φ H ⋅ W H + σ2s J = C yz + σ2s J (16.77)


 

gdzie

| A1 |2 0 " 0  1 0 0 " 0 0 0 0 " 0


  0 1 0 " 0 1 0 0 " 0
 0 | A2 |2 " 0     
P= , I = 0 0 1 " 0 , J =  0 1 0 " 0 (16.78)
 # # % #     
 0  # # # % #   # # # % # 
 0 " | Ap |2  0 0 " 0 1  0 0 " 1 0 

Jeśli założymy dodatkowo, że Ry0(m) = E[y*(n)y(n + m)] oznacza funkcję autokorelacji sygnału
y(n), to wówczas macierze Ry0,y0 oraz Ry0,y1 są równe:

 R y 0 (0) R y 0 (1) " R y 0 ( M − 1) 


 *

 R y 0 (1) R y 0 (0) " R y 0 ( M − 2) 
R y 0, y 0 =  (16.79)
 # # % # 
 R* ( M − 1) R* ( M − 2) " R y 0 (0) 
 y0 y0

 R y 0 (0) R y 0 (1) " R y 0 ( M − 1) 


 *

 R y 0 (1) R y 0 (0) " R y 0 ( M − 2) 
R y 0, y1 =   (16.80)
 # # % # 
 R* ( M − 1) R* ( M − 2) " R y 0 (0) 
 y0 y0

I w tym momencie Sezam się otwiera. Zauważamy mianowicie, że prawdziwa jest następująca
zależność:

C y 0, y 0 − λC y 0, y1 = W ⋅ P ⋅ W H − λW ⋅ P ⋅ ΦH ⋅ W H = W ⋅ P ⋅ ( I − λΦ H ) ⋅ W H (16.81)
Zaawansowane metody analizy częstotliwościowej sygnałów 439

Z powodu określonej budowy macierzy W, P oraz Φ, w ogólności macierz (Cy0,y0 − λ Cy0,y1)


jest rzędu p. Ponieważ jednak dla λ = exp(jΩk) zeruje się jeden z wierszy macierzy (I − λΦH),
to wówczas rząd macierzy (I − λΦH) obniża się z p do p−1 i wtedy zeruje się także wyznacz-
nik macierzy (Cy0,y0 − λ Cy0,y1). W związku z tym wartości λk = exp(jΩk), k = 1, 2, ..., p, zgod-
nie z definicją:

(
C y 0, y 0 v = λC y 0, y1v ⇒ (C y 0, y 0 − λC y 0, y1 ) v = 0 ⇒ det C y 0, y 0 − λ C y 0, y1 = 0 ) (16.82)

są uogólnionymi wartościami własnymi macierzy Cy0,y0 oraz Cy0,y1.


Szczegółowy algorytm metody ESPRIT jest następujący (przy założeniu składowych sinuso-
idalnych (16.41) sygnału, a nie harmonicznych (16.59)):
1) Przyjmujemy M = 2p + 1, wyznaczamy estymatę wartości funkcji autokorelacji Ry0(m) syg-
nału y(n), m = 0, 1, ..., M, oraz tworzymy macierze Ry0,y0 oraz Ry0,y1.
2) Dekomponujemy macierz Ry0,y0 według wartości własnych oraz znajdujemy najmniejszą
wartość własną, którą przyjmujemy za estymatę wariancji szumu σs2.
3) Tworzymy macierze Cy0,y0 = Ry0,y0 − σs2I oraz Cy0,y1 = Ry0,y1 − σs2J.
4) Wyznaczamy uogólnione wartości własne dla macierzy Cy0,y0 oraz Cy0,y1. Na podstawie
p wartości leżących na okręgu jednostkowym lub blisko niego (λk = ck⋅exp(jϕk)), znajdujemy
interesujące nas częstotliwości składowe fk sygnału x(n) (fk/fpr = arctg(ϕk)/(2π)). Jedyna pozo-
stała, uogólniona wartość własna leży blisko środka układu współrzędnych.
5) Znając częstotliwości składowych sygnału wyznaczamy ich moc z równania (16.43).

16.3.5. Metody podprzestrzeni sygnału (składowych głównych)

Kończąc niniejszy rozdział wypada jeszcze dwa słowa powiedzieć na temat możliwości wyko-
rzystania dekompozycji macierzy autokorelacji sygnału względem wartości własnych w innych
metodach estymacji widmowej. Jest to możliwe wszędzie tam, gdzie na dowolnym etapie prze-
twarzania danych jest wykorzystywana macierz autokorelacji lub jej odwrotność. Jeśli wiemy,
że sygnał zawiera p/2 składowych sinusoidalnych (sygnał rzeczywisty) lub p harmonicznych
(sygnał zespolony), to należy dokonać ww. dekompozycji macierzy Rxx lub Rxx−1:
p M p M
1 1
R xx = ∑ λ k v k v kH + ∑ λ k v k v kH , R −xx1 = ∑ v k v kH + ∑ v k v kH (16.83)
k =1 k = p +1 λ
k =1 k λ
k = p +1 k

i w konkretnej metodzie wykorzystać tylko estymaty obu macierzy, reprezentowane przez pier-
wsze składniki powyższych sum, uwzględniające tylko główne wektory własne (principal com-
ponents) z przestrzeni sygnału:
p p
ˆ = ∑λ v vH ,
R ˆ −1 = ∑ 1 v v H
R (16.84)
xx k k k xx k k
k =1 k =1 λ k

Przykładowo można taką metodologię zastosować nawet w stuprocentowo klasycznym estyma-


torze widmowym Blackmana-Tukeya (16.5), gdyż w przypadku użycia w nim okna trójkątnego
można go zapisać w następującej postaci:
M
1 1
PˆxBT (e jΩ ) =
M
∑ Rˆ x ( m)( M − | m |) e − jΩm = e H R x e
M
(16.85a)
m =− M
440 Zaawansowane metody analizy częstotliwościowej sygnałów

p
1 ˆ e= 1
PˆxPC − BT ( e jΩ ) = e H R
M
x
M
∑ λ k | e H v k |2 (16.85b)
k =1

gdzie e = [1, ejΩ, ej2Ω, ej3Ω, ..., ej(M−1)Ω]T oraz Ω = 2πf/fpr.


Innym przykładem może być modyfikacja nie omawianej przez nas metody minimalnej wa-
riancji (MV − Minimum Variance):
M M M
PˆxMV ( e jΩ ) = , PˆxPC − MV ( e jΩ ) = = (16.86a, b)
e H
R −x1e Hˆ −1e
e R p
1
x
∑ λ | e H v k |2
k =1 k

16.4. Przykład ćwiczenia komputerowego


W celu ilustracji znaczenia opisanych powyżej, nowszych metod analizy częstotliwościowej
dokonamy obecnie implementacji programowej tych metod w języku Matlab oraz zastosujemy
je do analizy konkretnego sygnału dyskretnego. W tabeli 16-4 znajdują się programy wyzna-
czające dyskretny, nieunormowany periodogram PPER(ejΩ) = |X(N)(ejΩ)|2 (16.1) oraz estymatory
PAR(ejΩ) (16.22), PPisarenko(ejΩ) (16.68), PMUSIC(ejΩ) (16.69) i PESPRIT(ejΩ) (16.82), gdzie X(N)(ejΩ)
oznacza widmo Fouriera (8.13a) sygnału, wyznaczone na podstawie N próbek sygnału x(n).
Jako analizowany sygnał wybrano zaszumioną sumę dwóch sinusoid postaci:

 f π  f π
x ( n ) = sin 2π 1 n −  + sin 2π 2 n +  + s( n )
 f pr 
5  f pr 7 
 

o następujących wartościach parametrów:


f1 = 5 Hz, f2 = 12 Hz, fpr = 32 Hz, N = 16, n = 0, 1, 2, ..., N−1
Szum s(n) był szumem o rozkładzie normalnym (0, 0.1), czyli o wartości średniej równej zeru
i odchyleniu standardowym równym 0.1. Na rysunku 16.2a jest przedstawiony przebieg cza-
sowy sygnału x(n), a na rysunku 16.2b − kształt estymat funkcji gęstości widmowej mocy dla
poszczególnych metod. Jak widać pomimo bardzo krótkiego „zapisu” sygnału, „piki” estymat
niefourierowskich są o wiele ostrzejsze, choć nie zawsze występują one we właściwym miej-
scu. Interesujące jest, że wszystkie metody dobrze detektują częstotliwość 12 herców, nato-
miast mają problemy ze „znalezieniem” częstotliwości 5 herców. Najlepsze wyniki uzyskano
dla metody MUSIC. Ze względu na obecność szumu, proces estymacji należy powtórzyć dla
większej liczby realizacji („zapisów”) sygnału.

Tab. 16-4. Przykład programu do testowania wybranych niefourierowskich metod estymacji częstotliwo-
ściowej

% Ćwiczenie: Niefourierowskie metody estymacji widmowej

clear all;

% Analizowany sygnał − dwie sinusoidy


N = 16; % liczba próbek
f1 = 5; % częstotliwość sinusoidy 1
f2 = 12; % częstotliwość sinusoidy 2
fpr = 32; % częstotliwość próbkowania
Zaawansowane metody analizy częstotliwościowej sygnałów 441

a) 2
1.5
1
0.5

x(n)
0
-0.5
-1
-1.5
-2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
n
b) 50
Pisarenko
40
30
20
Px(f) [dB]

periodogram
10
0
-10
MUSIC
-20
AR
-30
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
f [Hz]
Rys. 16.2. Sygnał x(n) oraz przykładowe estymaty jego funkcji gęstości widmowej mocy Px(f), otrzymane za
pomocą różnych metod: x(n) = sin(2π(f1/fpr)n − π/5) + sin(2π(f2/fpr)n + π/7) + s(n), s(n) − szum normalny
(0, 0,1), f1 = 5 Hz, f2 = 12 Hz, fpr = 32 Hz, N = 16, n = 0, 1, 2, ..., N−1

p = 2; % liczba sinusoid
pp = 2*p; % liczba potrzebnych biegunów transmitancji
M = pp+4; % wybór metody: M=pp metoda AR, M=pp+1 metoda Pisarenki i ESPRIT, M>pp+1 metoda MUSIC

NF = 1024; % liczba próbek widma


f = (0:NF-1)*(fpr/NF); % częstotliwości próbek widma
m = 1:NF/2+1; % indeksy wybranych częstotliwości

% Generacja sygnału
dt=1/fpr; n=0:N-1; t=n*dt; randn('state',1);
x = sin(2*pi*f1*t-pi/5) + sin(2*pi*f2*t+pi/7) + 0.1*randn(1,N); x = x - sum(x)/N;
stem(x); title('suma dwóch sinusoid'); xlabel('numer próbki'); pause

% Periodogram (kwadrat modułu klasycznego widma Fouriera, zastosowano okno prostokątne)


X1 = abs(fft(x,NF)).^2; Px1=10*log10(X1);
plot(f(m),Px1(m)); title('periodogram'); xlabel('f[Hz]'); ylabel('dB'); grid; pause

% Metody AR, Pisarenko, MUSIC - oblicz funkcję autokorelacji, zbuduj macierz autokorelacji
for k=0:M
r(k+1)=sum( x(1:N-k) .* x(1+k:N) )/(N-k); % oblicz estymatę funkcji autokorelacji:
end % r(0), r(1), r(2),..., r(M)
for k=1:M
R(k,1:M)=[r(k:-1:2) r(1:1:M-(k-1))]; % zbuduj macierz autokorelacji R
end
442 Zaawansowane metody analizy częstotliwościowej sygnałów

if (M==2*p) % metoda AR
rr(1:pp,1)=(r(2:pp+1))'; % utwórz wektor r(1), r(2),..., r(2*p)
a=-inv(R)*rr; % oblicz współczynniki transmitancji; inaczej a = −R\rr
sigma=r(1)+r(2:pp+1)*a; % oblicz wariancję szumu sigma
a = [ 1; a ]; % dodaj na początku współczynnik równy 1
X2=abs(fft(a,NF)).^2; Px2=-10*log10(X2) + 10*log10(sigma);
plot(f(m),Px2(m)); title('Widmo AR'); xlabel('f[Hz]'); grid; pause
end

if (M>2*p) % metody Pisarenki, ESPRIT i MUSIC


[V,D]=eig(R); % dekompozycja macierzy R względem wartości własnych
if(M==2*p+1) % metoda Pisarenki
sigma=min(diag(D)); indx=find(diag(D)==sigma); vmin=V(:,indx);
X2=abs(fft(vmin,NF)).^2; Px2=-10*log10(X2);
plot(f(m),Px2(m)); title('Widmo PIS'); xlabel('f[Hz]'); ylabel('dB'); pause
% metoda ESPRIT
R0 = R; R1 = [ R0(:,2:M) r(M+1:-1:2)'];
sigma2 = (min(diag(D)));
I = eye(M); J = [zeros(1,M); I(1:M-1,1:M) ];
C0 = R0 - sigma2*I; C1 = R1 - sigma2*J;
D = eig(C0, C1);
D = D( find( abs(D) > 0.5 ));
plot(real(D),imag(D),'bx'); title('Uogólnione wartości własne'); pause
disp(’Częstotliwości’); fx = fpr * atan2( imag(D), real(D) )/(2*pi), pause

else % metoda MUSIC


[d,indx]=sort(diag(D));
X2=zeros(NF,1);
for k=1:M-pp
X2=X2+abs( fft(V(:,indx(k)),NF) ).^2;
end
Px2=-10*log10(X2);
plot(f(m),Px2(m)); title('Widmo MUSIC'); xlabel('f[Hz]'); ylabel('dB'); pause
end
end
plot(f(m),Px1(m),'r',f(m),Px2(m),'b'); title('Porównanie widm'); grid; pause
17
Metody czasowo-częstotliwościowej
analizy sygnałów

Celem niniejszego rozdziału jest przedstawienie podstaw analizy częstotliwościowej zmien-


nych w czasie sygnałów niestacjonarnych za pomocą tzw. czasowo-częstotliwościowych repre-
zentacji sygnałów. Omówiono w nim: transformację Gabora, krótkoczasową transformację
Fouriera, transformację falkową, transformację Wignera-Ville’a oraz rodzinę transformacji
należących do tzw. klasy Cohena. Porównano także właściwości użytkowe tych transformacji
oraz podano liczne przykłady zastosowań transformacji czasowo-częstotliwościowych.
Metody analizy częstotliwościowej sygnałów stacjonarnych są powszechnie znane i szeroko
stosowane. Jednak w praktyce diagnostycznej, często występuje konieczność posiadania umie-
jętności częstotliwościowej analizy i przetwarzania sygnałów niestacjonarnych w celu wydo-
bycia zawartej w nich zmiennej „informacji” o charakterze samoistnym lub wymuszonym. Ko-
nieczność ta wynika co najmniej z dwóch powodów. Po pierwsze, niestacjonarność stanowi
immanentną właściwość wielu obserwowanych, rozpoznawanych, identyfikowanych lub stero-
wanych zjawisk, procesów i obiektów rzeczywistych, naturalnych i technicznych, oraz genero-
wanych przez nie sygnałów (np. śpiew ptaków, mowa ludzka, sygnał EKG i EEG, drgania
sejsmiczne, wibracje pracujących części maszyn w chwilach rozruchu, oscylacje w układach
elektrycznych, zmienność krzywizny powierzchni wytwarzanych materiałów, zmienność gę-
stości struktur atomowych w dyfraktometrii rentgenowskiej, obrazy dwuwymiarowe itp.). Po
drugie, w wielu metodach technicznych są celowo stosowane niestacjonarne sygnały impul-
sowe, skokowe i zmodulowane (np. identyfikacja obiektów metodą ich pobudzenia; technika
echografii impulsowej, wykorzystywana w geosejsmice, radiolokacji, ultrasonograficznej diag-
nostyce medycznej i defektoskopii materiałowej; modulacja częstotliwościowa i fazowa trans-
mitowanych sygnałów w telekomunikacji itp.). Jako przykład stosowania przetwarzania syg-
nałów niestacjonarnych można podać separację ech sygnału wysłanego w echografii impulso-
wej, często poddanych zjawisku Dopplera.
Łączne czasowo-częstotliwościowe (lub przestrzenno-częstotliwościowe) reprezentacje sygna-
łów stały się ostatnio narzędziem, które jest najczęściej wykorzystywane do analizy widmowej
i przetwarzania sygnałów niestacjonarnych. Stawiają one sobie za cel jak najdokładniejszą
łączną amplitudowo-częstotliwościową dekompozycję (demodulację) analizowanego sygnału
złożonego w funkcji czasu (lub przestrzeni), czyli przedstawienie zmienności amplitud, często-
tliwości i faz chwilowych jego sygnałów składowych. W praktyce reprezentacje te najczęściej
zadowalają się wyłącznie wyznaczeniem ewolucji w czasie funkcji gęstości widmowej mocy
444 Metody czasowo-częstotliwościowej analizy sygnałów

sygnału i dlatego bywają nazywane widmami ewolucyjnymi. Rodzina reprezentacji czaso-


wo-częstotliwościowych jest bardzo duża. Ogólnie mogą być one podzielone na reprezentacje
typu czas-częstotliwość i czas-skala oraz zinterpretowane jako metody tzw. „krótkoczasowej”
analizy częstotliwościowej, gdyż estymuje się w nich „chwilowe” widma sygnału na podstawie
jego kolejnych, „krótkich” fragmentów, pokrywających się lub nie, „wycinanych” przez cza-
sowe okno obserwacji przesuwające się wzdłuż sygnału. Sposób definicji widma „chwilowe-
go” (klasyczny, Wignera lub inny) i metoda jego estymacji (za pomocą przekształcenia Fou-
riera, drogą modelowania parametrycznego lub inna) są różne dla poszczególnych reprezen-
tacji.
Celem niniejszego rozdziału jest przedstawienie podstaw analizy czasowo-częsotliwościowej
sygnałów oraz przegląd i porównanie właściwości współczesnych metod, stosowanych do ta-
kiej analizy. Ponieważ różne metody mają różne właściwości, w zamierzeniu autora rozdział
ten ma pomóc w świadomym wyborze odpowiedniego narzędzia obliczeniowego.

17.1. Problem analizy czasowo-częstotliwościowej


Metody opisu, analizy i przetwarzania sygnałów pomiarowych stanowią przedmiot zaintereso-
wania teorii sygnałów. Jedną z podstawowych i najstarszych metod analizy sygnałów jest ana-
liza częstotliwościowa. Przedstawia się w niej badany sygnał x(t) jako sumę sygnałów elemen-
tarnych (bazowych) gk(t):

x ( t ) = ∑ a k g k (t ) (17.1)
k
gdzie
ak = ∫ x (t ) γ*k ( t ) dt (17.2)

i γk(t) jest sygnałem dualnym do gk(t), a znak „*” oznacza sprzężenie zespolone. Każdy z sy-
gnałów bazowych ma inną częstotliwość. Wartości współczynników ak określają jakie często-
tliwości występują w sygnale, a jakie nie. Sygnały bazowe gk(t) mogą być rzeczywiste lub zes-
polone. W zależności od pasma częstotliwościowego sygnałów x(t) oraz gk(t) suma (17.1)
może być skończona lub nieskończona. Jako sygnały bazowe stosuje się funkcje Fouriera,
Bessela, Czebyszewa i Haara oraz wielomiany Czebyszewa, Hermite’a, Legendre’a i La-
guerre’a. Im kształt funkcji bazowych i ich przesunięcie są lepiej dopasowane do rodzaju
rzeczywistych sygnałów składowych obecnych w x(t), tym mniej współczynników ak ma
wartości niezerowe i tym bardziej jest skupione (selektywne) widmo amplitudowe sygnału
Sx(k), zdefiniowane jako:

S x (k ) = a k
2
(17.3)

Funkcje bazowe gk(t) muszą rozpinać całą przestrzeń sygnałów określonego typu, wówczas
każdy sygnał pomiarowy należący do tej przestrzeni może być przedstawiony za pomocą
(17.1). Ze względu na rodzaj funkcji bazowych gk(t) rozróżnić można trzy przypadki.
1) Jeśli funkcje bazowe są o r t o n o r m a l n e , tzn.

1 dla k = l
∫ g k (t )g l (t )dt = 0
*
(17.4)
dla k ≠ l

wówczas bazowe sygnały analizujące są takie same jak bazowe sygnały syntezujące:
Metody czasowo-częstotliwościowej analizy sygnałów 445

γ k (t ) = g k (t ) (17.5)

i każdy analizowany sygnał x(t) ma unikalne rozwinięcie w tej przestrzeni (reprezentuje go tyl-
ko jeden zestaw współczynników {ak}).
2) Kiedy funkcje bazowe gk(t) są l i n i o w o n i e z a l e ż n e , tzn. żadna z nich nie może być
przedstawiona jako liniowa kombinacja pozostałych, wówczas funkcje analizujące γk(t) są inne
niż funkcje syntezujące gk(t) i wyznacza się je z warunku biortonormalności:

1 dla k = l
∫ gk ( t ) γ l ( t ) dt = 0
*
(17.6)
 dla k ≠ l

Istnieje tylko jeden zbiór {γk(t)}. Przyporządkowanie x(t) ↔ {ak} jest dalej wzajemnie jedno-
znaczne.
3) Kiedy funkcje bazowe gk(t) są l i n i o w o z a l e ż n e , ale rozpinają przestrzeń sygnałów,
wówczas istnieje wiele zbiorów funkcji γk(t) spełniających (17.6). Zazwyczaj wybiera się ten,
w którym funkcje analizujące są najbardziej zbliżone do funkcji syntezujących. Przyporządko-
wanie x(t) ↔ {ak } nie jest już wzajemnie jednoznaczne i zależy od wyboru zbioru {γk(t)}.
Teoria wyboru zbiorów {gk(t)} i projektowania zbiorów {γk(t)} jest nazywana teorią rozpięć
(ang. frames).
Funkcje gk(t) i γk(t) mogą mieć różny charakter w zależności od rodzaju analizowanego sygna-
łu. W przypadku sygnałów s t a c j o n a r n y c h (niezmiennych w czasie) one także powinny być
s t a c j o n a r n y m i drganiami (oscylacjami) o nieskończonym nośniku, takimi np. jak sygnały
(ko)sinusoidalne w bazie fourierowskiej (rysunek 17.1a). Dla sygnałów n i e s t a c j o n a r n y c h
(zmiennych w czasie, impulsowych) funkcje bazowe powinny zaś mieć postać n i e -
s t a c j o n a r n y c h oscylacji impulsowych o skończonym nośniku, takich np. jak w trans-
formacie Haara, Gabora lub transformacie falkowej (rysunek 17.1b). W pierwszym przypadku
sygnał aproksymowany jest sumą nieskończonych w czasie drgań o różnych częstotliwościach,
w przypadku zaś drugim − sumą ograniczonych w czasie przebiegów impulsowych, występu-
jących w różnych chwilach czasowych i mających różne pasmo częstotliwościowe. Im kształt
funkcji bazowych będzie bardziej dopasowany do analizowanego sygnału, tym mniejsza liczba
tych funkcji wystarczy do jego aproksymacji. Na rysunku 17.2 przedstawiono przykładowy
zestaw funkcji bazowych, który może być stosowany do czasowo-częstotliwościowej dekom-
pozycji sygnałów niestacjonarnych. Ponieważ każdy z przebiegów impulsowych „pokrywa”
określony przedział czasowy i częstotliwościowy, w wyniku (17.2) wyznacza się ilość sygnału,
przypadającą na określoną komórkę czasowo-częstotliwościową. Pola wszystkich takich komó-
rek nie powinny się nakładać i dać po zsumowaniu całą przestrzeń czasowo-częstotliwością.
Dwie podstawowe strategie podziału tej przestrzeni i związane z nimi szachownice czaso-
wo-częstotliwościowe są przedstawione na rysunku 17.3. Pierwsza z nich dotyczy krótko-
czasowej transformacji Fouriera, a druga transformacji falkowej. W przypadku pierwszym ko-
mórki szachownicy mają zawsze taką samą wielkość i kształt, w przypadku zaś drugim − taką
samą wielkość, lecz różny kształt: dla niskich częstotliwości mają lepszą rozdzielczość często-
tliwościową a gorszą czasową, natomiast dla wysokich częstotliwości odwrotnie − gorszą
rozdzielczość częstotliwościową a lepszą czasową. Oczywiście sposób dekompozycji powinien
być odpowiednio wybrany w zależności od rodzaju sygnału i celu analizy. Najlepiej żeby
struktura szachownicy czasowo-częstotliwościowej była adaptacyjnie dopasowywana do
lokalnych cech analizowanego sygnału. Kryterium jej doboru powinna być minimalizacja nie-
zerowych współczynników dekompozycji sygnału, czyli bardzo dobre dopasowanie kształtu
funkcji bazowych do kształtu sygnału oraz chwil ich występowania. Przykładowo, na rysunku
446 Metody czasowo-częstotliwościowej analizy sygnałów

1.0
1.0

0.5 0.5

0.0 0.0

-0.5 -0.5

-1.0 -1.0

0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
czas [s] czas [s]

Rys. 17.1. Przykładowy kształt funkcji analizujących w transformacji Fouriera (po lewej) i transformacji
falkowej (po prawej). Różnica pomiędzy globalną falą a lokalną falką (falka Daubechies ψD20)

4.00
poziom dekompozycji j

3.00

2.00

1.00

0.00

0 5 10 15 20 25 30
czas [s]

Rys. 17.2. Ilustracja dekompozycji sygnału względem falek Daubechies ψD16. W celu większej czytelności
rysunku jest pokazana co szesnasta falka

a) b)
f f

t t
Rys. 17.3. Podstawowe szachownice dekompozycji czasowo-częstotliwościowej sygnałów: transformacja
Gabora − krótkoczasowa transformacja Fouriera (a) oraz transformacja falkowa (b). Ciemnym kolorem
zostały zaznaczone niezerowe współczynniki przykładowej dekompozycji czasowo-częstotliwościowej syg-
nału z liniowo narastającą częstotliwoscią
Metody czasowo-częstotliwościowej analizy sygnałów 447

f f

t t
Rys. 17.4. Przykłady innych schematów dekompozycji sygnału w dziedzinie czas-częstotliwość

17.3 ciemnym kolorem zostały zaznaczone niezerowe współczynniki dekompozycji czaso-


wo-częstotliwościowej sygnału z liniowo narastającą częstotliwoscią. Z kolei na rysunku 17.4
przedstawiono szachownice innych możliwych dekompozycji TF (ang. Time-Frequency).
Oczywiście bardzo jest ważne, aby pole atomu TF funkcji g(t) było jak najmniejsze. Z zasady
nieoznaczoności wiadomo jednak, że iloczyn szerokości pasma częstotliwościowego i czasu
trwania sygnału nie może być mniejszy od pewnej minimalnej wartości (dowód w [Brac68])
1
σ2 = A2 + B 2 ≥ 2 ⋅ A ⋅ B ≥ (17.7)

gdzie
1 +∞ 2 2 1 +∞ 2 2
+∞
2
+∞
2
A2 = ∫ t g ( t ) dt , B 2
= ∫ f G ( f ) df , E = ∫ g ( t ) dt = ∫ G ( f ) df (17.8)
E −∞ E −∞ −∞ −∞

oznaczają, odpowiednio, średniokwadratową szerokość czasową (A) i częstotliwościową (B)


funkcji g(t) i jej widma Fouriera G(f). Znak równości w (17.7) jest spełniony jedynie dla fun-
kcji Gaussa:

g ( t ) = ( 2α )
1/ 4
(
exp − απt 2 ) (17.9)

która ma w związku z tym optymalne właściwości dla łącznej czasowo-częstotliwościowej


analizy sygnałów, gdyż charakteryzuje się najmniejszym możliwym iloczynem AB, czyli naj-
mniejszym polem powierzchni atomu w przestrzeni TF. Przesuwając okno Gaussa w funkcji
czasu oraz modulując go w częstotliwości, przesuwa się związany z nim atom TF w różne pola
szachownicy czasowo-częstotliwościowej. Rysunek 17.5 stanowi ilustrację tego faktu. Przed-
stawione są na nim dwie falki, uzyskane w wyniku modulacji funkcji Gaussa sygnałami sinu-
soidalnymi o różnych częstotliwościach, ich widma Fouriera oraz wynikowe widmo TF jednej
z nich. Widmo TF, w tym przypadku widmo Wignera-Ville’a (17.66a), jest przedstawione jako
wykres 3D oraz mapa konturowa z izoliniami.
Korzystając z właściwości przeskalowania (4.9) transformacji Fouriera można wykazać, że
wielkość pola AB nie zmieni się, jeśli funkcja Gaussa zostanie przeskalowana w osi czasu, tzn.
rozciągnięta lub ściśnięta. W takim przypadku zmieni się jedynie kształt powierzchni atomu
TF na bardziej poziomy (lepsza rozdzielczość częstotliwościowa) lub pionowy (lepsza roz-
dzielczość czasowa). Rysunek 17.6 ilustruje powyższą właściwość. Przedstawione są na nim
TF widma Wignera dla trzech przeskalowanych okien Gaussa. Z ich pomocą można budować
różne strategie próbkowania przestrzeni TF, analogiczne do przedstawionych na rysunkach
17.3 i 17.4.
Na rysunku 17.7 zebrano konsekwencje czasowo-częstotliwościowe operacji wykonywanych
na oknie Gaussa, tzn. przesunięcia i skalowania.
448 Metody czasowo-częstotliwościowej analizy sygnałów

a) b)
1 1

g(t) 0 .5 0 .5

g(t)
0 0

-0 .5 -0 .5

-1 -1
0 0 .0 5 0 .1 0 .1 5 0 .2 0 0 .0 5 0 .1 0 .1 5 0 .2
t [s ] t [s ]

c) d)
0 .2 0 .2

0 .1 5 0 .1 5

0 .1 0 .1

0 .0 5 0 .0 5

0 0
0 20 40 60 80 100 0 20 40 60 80 100
f [H z] f [H z]

e) f)

100

10 80

5
60
f [Hz]

0
100
40
80
0.15
60
20
40 0.1
f [Hz]
20 0.05
t [s]
0 0
0 0 0.05 0.1 0.15
t [s]

Rys. 17.5. Przykład przesuwania w częstotliwości (modulacji) (4.11) funkcji Gaussa (17.9): a), b) sygnały
zmodulowane, czyli falki, dla dwóch częstotliwości modulujących, mniejszej i większej (pokazana tylko
część rzeczywista), c), d) ich widma Fouriera, e), f) widmo czasowo-częstotliwościowe TF falki z rysunku
b) przedstawione jako wykres 3D oraz mapa konturowa z izoliniami
Metody czasowo-częstotliwościowej analizy sygnałów 449

a) α1 b) α2 c) α3

f f f

t t t

Rys. 17.6. Czasowo-częstotliwościowe widma Wignera-Ville’a (17.66a) dla okna Gaussa (17.9), zakłada-
jąc: α1 < α2 < α3

f f
α = 1/2

4 4
3 3 α=1

2 2 α=2
1 1

0 1 2 3 4 t 0 1 2 3 4 t
Rys. 17.7. Konsekwencje czasowo-częstotliwościowe operacji wykonywanych na oknie Gaussa: a) przesu-
nięcie w czasie i w częstotliwości (opóźnienie czasowe, modulacja częstotliwościowa), b) przeskalowanie
w osi czasu dla współczynników α = 1/2 i α = 2 (17.9), prowadzące do odwrotnego przeskalowania w osi
częstotliwości (zawężenie w jednej dziedzinie prowadzi do rozszerzenia w drugiej dziedzinie i odwrotnie)

Tradycyjne metody analizy częstotliwościowej, w tym analiza fourierowska, nie nadają się do
analizy sygnałów zmiennych w czasie. Rysunek 17.8 stanowi ilustrację powyższego stwier-
dzenia. Przedstawiono na nim wyniki analizy częstotliwościowej sygnału z liniową modulacją
częstotliwości. Moduł widma Fouriera informuje nas o szerokim paśmie częstotliwościowym
wejściowego sygnału, ale nie daje nam żadnej informacji o rodzaju zmienności częstotliwości
w czasie. Śledzenie zmienności widma chwilowego umożliwiają natomiast reprezentacje
czasowo-częstotliwościowe, które zwykle są przedstawiane jako wykresy 3D lub mapy kontu-
rowe z zaznaczonymi izoliniami. W tym przypadku także zastosowano czasowo-częstotliwoś-
ciową transformację Wignera-Ville’a (podrozdział 17.5). Wyznaczona numerycznie reprezen-
tacja TF sygnału LFM wyraźnie pokazuje narastanie częstotliwości chwilowej sygnału w fun-
kcji czasu (rysunki 17.8c i 17.8d).
Podsumowując, problem analizy czasowo-częstotliwościowej sygnałów niestacjonarnych spro-
wadza się do wyboru odpowiedniego schematu (szachownicy) dekompozycji przestrzeni TF,
jej najlepszej synchronizacji z analizowanym sygnałem oraz wyboru właściwych funkcji bazo-
wych rozwinięcia: g(t) i γ(t) (17.1), (17.2), których kształt odpowiada naturze tego sygnału.
Jest wskazane stosowanie lokalnego dopasowania ww. dekompozycji do lokalnych cech syg-
nału, czyli jej adaptacja. Efektywna dekompozycja charakteryzuje się małą liczbą niezerowych
współczynników rozwinięcia. Jest to szczególnie korzystne w zastosowaniach kompresji i od-
szumiania sygnałów w dziedzinie TF.
450 Metody czasowo-częstotliwościowej analizy sygnałów

a) b)

1 0.05

0.04
0.5

0.03
x(t)

0
0.02

-0.5
0.01

-1 0
0 0.2 0.4 0.6 0.8 1 0 100 200 300 400 500
t [s] f [Hz]

c) d)

200

60
150
40
f [H z]

20
100
0

200
150 0.8 50
100 0.6
50 0.4
0 0.2
0.2 0.4 0.6 0.8
t [s]

Rys. 17.8. Analiza częstotliwościowa sygnału sinusoidalnego z częstotliwością narastającą w sposób linio-
wy: a) sygnał czasowy, b) jego widmo Fouriera, c), d) reprezentacje czasowo-częstotliwościowe sygnału:
wykres 3D i kontur

Teraz zostaną przedstawione najprostsze i najpopularniejsze metody czasowo-częstotliwoś-


ciowej analizy sygnałów oraz ich właściwości. W swojej podstawowej wersji nie są to metody
adaptacyjne, ale takie ich odmiany już istnieją, np. adaptacyjna krótkoczasowa transformacja
Fouriera, adaptacyjne pakiety falkowe, adaptacyjne reprezentacje z klasy Cohena.

17.2. Transformacja Gabora


W czasowo-częstotliwościowej reprezentacji Gabora analizowany sygnał jest przedstawiany
jako suma funkcji bazowych, które powstają z funkcji prototypowej, np. okna gaussowskiego,
w wyniku jej przesuwania w osi czasu i częstotliwości (poprzez modulację zespoloną, czyli
Metody czasowo-częstotliwościowej analizy sygnałów 451

wymnożenie z zespolonymi sygnałami harmonicznymi). Atom TF funkcji prototypowej jest


zlokalizowany w przestrzeni czas-częstotliwość wokół punktu (t = 0, f = 0) i ma dowolny
kształt, np. taki jak na rysunku 17.5f. W wyniku przesuwania funkcji prototypowej otrzymuje
się strukturę dekompozycji TF analogiczną do tej z rysunku 17.3a. W dekompozycji Gabora
pole i orientacja atomów TF jest stała.
Przejdźmy obecnie do konkretów. Czasowo-częstotliwościowa dekompozycja Gabora ciągłego
sygnału x(t) jest zdefiniowana jako:
+∞
x (t ) = ∑ cm, n g m, n (t ) (17.10)
m, n = −∞

gdzie gm,n(t) oznacza przesuniętą w czasie o m⋅∆t oraz w częstotliwości o n⋅∆f dowolną fun-
kcję bazową (prototypową) g(t) o energii równej jedności (∆t, ∆f − zadane przesunięcie w cza-
sie i częstotliwości):

g m,n (t ) = g (t − m ⋅ ∆t ) e j 2 π ( n⋅∆f ) t , ∆t ⋅ ∆f ≤ 1 (17.11)

a cm,n są współczynnikami dekompozycji, wyznaczanymi ze wzoru:


+∞
cm ,n = ∫−∞ x (t ) γ*m,n ( t ) dt , γ m ,n (t ) = γ (t − m ⋅ ∆t ) e j 2 π ( n⋅∆f )t (17.12)

W równaniu (17.12) γ(t) oznacza funkcję prototypową (okno) analizy, która musi być biorto-
gonalna do funkcji prototypowej (okna) syntezy g(t) (17.11). Przy zadanym g(t) okno γ(t) jest
obliczane na podstawie zależności:

∑ gm,n (t ) γ*m,n (t ') = δ(t − t ') (17.13)


m ,n

Ponieważ funkcja bazowa g(t) powinna charakteryzować się równoczesną dużą koncentracją
energii w dziedzinie czasu i częstotliwości, najczęściej jest stosowane okno gaussowskie.
Równanie (17.12) jest równaniem analizy (sygnał x(t) → współczynniki dekompozycji cm,n),
a (17.10) − równaniem syntezy (współczynniki dekompozycji cm,n → sygnał x(t)).
Na rysunkach 17.5a i 17.5b przedstawiono przykładowe kształty funkcji bazowych gm,n(t).
W związku z tym, że stosujemy ciągle to samo okno g(t), pole i kształt atomu TF związanego
z funkcjami gm,n(t) są stałe (rysunek 17.5f). W wyniku przesuwania okna w czasie i w często-
tliwości uzyskuje się szachownicę dekompozycji, przedstawioną na rysunku 17.3a. Przeska-
lowując okno g(t) w funkcji czasu (np. zmieniając parametr α w oknie gaussowskim), można
zmieniać kształt elementarnej komórki TF (rysunki 17.6 i 17.7b) i modyfikować realizowaną
w praktyce strategię podziału przestrzeni czas-częstotliwość (rysunek 17.9). Strategię tę należy
dopasować do rodzaju analizowanego sygnału.
Wynikowa czasowo-częstotliwościowa reprezentacja Gabora ciągłego sygnału x(t) jest definio-
wana jako
2
S x ( mT , nF ) = cm,n (17.14)

Z kolei dyskretna, o k r e s o wa wersja transformacji Gabora jest zdefiniowana przez następu-


jące równania, odpowiadające kolejno (17.10), (17.12), (17.13):
452 Metody czasowo-częstotliwościowej analizy sygnałów

a) b)
f f

t t

Rys. 17.9. Przykłady możliwych dekompozycji sygnału w przestrzeni TF w transformacji Gabora dla:
a) długiego okna g(k), b) krótkiego okna g(k)

M −1 N −1
x (k ) = ∑ ∑ cm,n g ( k − m ⋅ ∆M ) WL( n⋅∆N )⋅k (17.15)
m =0 n =0
L −1
cm,n = ∑ x ( k ) γ* ( k − m ⋅ ∆M ) WL−(n⋅∆N )⋅k (17.16)
k =0
M −1 N −1
∑ ∑ γ* ( k '− m ⋅ ∆M ) g ( k − m ⋅ ∆M ) WL(n⋅∆N )(k −k ') = δ ( k − k ' ) (17.17)
m =0 n =0

gdzie
MN
WL = e j⋅2 π / L , L = ( ∆M ) M = ( ∆ N ) N , η= ≥1 (17.18)
L
Zakłada się w nich, że x(k), g(k) i γ(k) są funkcjami (sygnałami) okresowymi (cyklicznymi)
o okresie L (podobnie jak sygnały z rysunku 13.11), a ∆M i ∆N oznaczają krok w czasie
i w częstotliwości. Okno czasowe syntezy g(k) wybiera się arbitralnie, natomiast okno analizy
γ(k) oblicza się z równania (17.17), po przekształceniu go do następującej postaci (0 ≤ q ≤
≤ ∆N − 1, 0 ≤ p ≤ ∆M − 1):
L −1 T
∆M  ∆M 
∑ g (k + qN ) W∆−Mpk γ * (k ) = N
δ( p )δ(q ) ↔ G γ * = µ, µ = 
 N
,0,0,...,0

(17.19)
k =0
skąd:

( )
−1
γ* = G −1µ lub γ*optim = G T GGT µ (17.20a, b)

W zależności od przyjętych wartości przesunięcia w czasie ∆M i częstotliwości ∆N


otrzymywane są różne pary okien {g(k), γ(k)} i analizowany sygnał o zadanej długości L jest
transformowany do różnych reprezentacji czasowo-częstotliwościowych, mających M widm
N-punktowych (wartości parametrów M i N wynikają z (17.18)). Krytyczne próbkowanie
czasowo-częstotliwościowe ma miejsce wtedy, kiedy MN = L (η = 1), natomiast dla MN > L
(η > 1) występuje nadpróbkowanie.
W (17.20a) występuje macierz odwrotna do G, a w (17.20b) − macierz pseudoodwrotna.
W przypadku nadpróbkowania macierz G staje się macierzą prostokątną, mającą ∆M⋅∆N ko-
lumn oraz L wierszy (∆M⋅∆N < L), w związku z czym rozwiązanie równania (17.19) nie jest
Metody czasowo-częstotliwościowej analizy sygnałów 453

wówczas jednoznaczne. Jeśli macierz G jest pełnego rzędu, to z (17.20b) otrzymuje się w ta-
kim przypadku dualne okno analizy γ(k) o najmniejszej energii. Zadaniem projektowym jest
wówczas optymalne wyznaczenie macierzy pseudoodwrotnej. Problem wyznaczania okien
dualnych (biortogonalnych lub quasi-biortogonalnych) jest bardzo szeroko dyskutowany w li-
teraturze. My jednak z powodu braku miejsca nie poświęcimy mu więcej uwagi.
Dyskretną transformację Gabora (17.15)(17.16) wyznacza się efektywnie za pomocą szybkiej
transformacji Fouriera lub transformacji Zaka. W prosty sposób można rozszerzyć powyższą
definicję transformacji Gabora dla sygnałów o nieskończonej długości.
Na rysunku 17.10 przedstawiono trzy dyskretne okna analizy γ(k), biortogonalne do gausso-
wskiego okna syntezy g(k) i obliczone z (17.20) dla różnych wartości przesunięć ∆M i ∆N,
oraz wynikowe reprezentacje Gabora, uzyskane z pomocą γ(k), dla sygnału z liniowo narasta-
jącą częstotliwością. Jak widać kształt okna γ(k) bardzo zależy od rodzaju próbkowania prze-
strzeni TF. Dla próbkowania krytycznego jest ono silnie oscylacyjne i nie ma zwartego noś-
nika (ma bardzo złą lokalizacją czasową). Wraz ze wzrostem nadpróbkowania oscylacje zani-
kają, okno staje się coraz węższe i coraz bardziej upodabnia się do g(k), a wynikowe widma
stają się coraz bardziej czytelne. Wynika stąd, że nadpróbkowanie reprezentacji Gabora jest
w praktyce konieczne. Co prawda podnosi ono znacznie liczbę wykonywanych obliczeń
arytmetycznych, ale zapewnia dekompozycję sygnału o zdecydowanie lepszej jakości.

a) η = 1, ∆M = 8, ∆N = 8 b) η = 2, ∆M = 4, ∆N = 8 c) η = 64, ∆M = 1, ∆N = 1
0.09 0.025 8E-4
γ (k) γ (k) γ (k)
0.07 7E-4
0.020
0.05 6E-4
0.015
0.03 5E-4
0.01 0.010 4E-4
-0.01 3E-4
0.005
-0.03 2E-4
0.000
-0.05 1E-4
k k k
-0.07 -0.005 0E+0
0 10 20 30 40 50 60 0 10 20 30 40 50 60 0 10 20 30 40 50 60

d) η = 1, ∆M = 8, ∆N = 8 e) η = 2, ∆M = 4, ∆N = 8 f) η = 64, ∆M = 1, ∆N = 1

f f f

t t t

Rys. 17.10. Dualne okna analizy γ(k) dla gaussowskiego okna syntezy g(k) dla próbkowania krytycznego
(η = 1), dwukrotnego nadpróbkowania (η = 2) i maksymalnego nadpróbkowania (η = 64) oraz uzyskane dla
nich widma TF Gabora sygnału z linową modulacją częstotliwości i skokową zmianą amplitudy o długości
L = 64 próbki
454 Metody czasowo-częstotliwościowej analizy sygnałów

Ostatnio są proponowane definicje tzw. rzeczywistych reprezentacji TF Gabora. Stosuje się


w nich modulację okien g(k) i γ(k) sygnałami rzeczywistymi typu sinus lub kosinus a nie zes-
polonymi sygnałami harmonicznymi. W wyniku tego zabiegu dualne okna γ(k) są zdecydowa-
nie lepiej zlokalizowane w czasie i mniej oscylacyjne, dlatego nadpróbkowanie reprezentacji
TF nie jest już wymagane. W związku z powyższym rzeczywiste reprezentacje Gabora są
niezwykle atrakcyjne ze względów obliczeniowych: unika się w nich operacji na liczbach
zespolonych (sygnały modulujące są rzeczywiste), nadpróbkowania oraz długich okien cza-
sowych.
Dyskretna transformacja Gabora: 1) może być przedstawiona jako częstotliwościowy, decy-
mowany bank filtrów analizujących i syntezujących (podrozdział 18.4.3), 2) jest równoważna
decymowanej w czasie i częstotliwości krótkoczasowej transformacji Fouriera (podrozdział
17.3) oraz 3) jest podobna to transformacji falkowej (podrozdział 17.4), gdyż także lokalnie
aproksymuje sygnał za pomocą falek (sinus i kosinus z odpowiednią obwiednią czasową, okre-
śloną przez okno g(k)) oraz jest odwracalna.
W tabeli 17-1 jest przedstawiony kod źródłowy programu, napisanego w języku Matlab,
w którym dokonuje się czasowo-częstotliwościowej dekompozycji sygnału metodą transfor-
macji Gabora oraz syntezuje się sygnał z obliczonych współczynników transformaty, odpo-
wiednio równania (17.16) i (17.15). Wyznacza się w nim także dualne okno analizy γ(k) na
podstawie okna syntezy g(k) z zależności (17.20b).

Tab. 17-1. Program do czasowo-częstotliwościowej analizy/syntezy sygnału metodą transformacji Gabora

% Ćwiczenie: Czasowo-częsotliwościowa reprezentacja Gabora

clear all;
% Parametry wejściowe
nw = 64; % długość okna
L = 128; % długość okna po uzupełnieniu zerami po obu stronach
dM = 4; % krok w czasie ### UWAGA !!!
dN = 4; % krok w częstotliwości ### dM*dN<=L
% Wybór okna czasowego syntezy i uzupełnienie go zerami po obu stronach do długości L
w = blackman( nw ); w = w';
w = [ zeros(1, (L-nw)/2 ) w zeros( 1, (L-nw)/2 ) ];
plot( real(w) ); title(' Okno z zerami '); grid; pause
% Generacja odwrotnego (dualnego) okna analizy
M=L/dM; % ile punktów czasowych
N=L/dN; % ile prążków częstotliwościowych
ww = [w w] ; % okresowe rozwinięcie okna syntezy
H = []; k = 0 : L-1;
for p = 0 : dM-1
for q = 0 : dN-1
h = ww( k+q*N+1 ) .* exp( -i*2*pi*p*k/dM );
H = [ H ; h ];
end
end
mi = zeros( dM*dN, 1); mi(1,1)=dM/N;
dw = pinv( H ) * mi; dw=dw';
plot( real(dw) ); title(' Okno dualne '); grid; pause
% Generacja sygnału testowego z liniową modulacją częstotliwości
fpr=128; f0=0; df=24; dt=1/fpr; n=0:L-1; t=n*dt;
x=sin(2*pi*(f0*t+0.5*df*t.^2));
plot(x); title('Sygnał we'); grid; pause
% Analiza: L/dM - punkty czasu, L/dN - prążki widma
dwz = [ dw zeros(1,2*L) ]; % okno analizy z zerami
for k = 0:2*L/dM-1 % dla wybranych chwil czasowych
okno = dwz( L+1:L+L ); % wytnij środek okna analizy
widmo = fft( x.*okno ); % fft
Metody czasowo-częstotliwościowej analizy sygnałów 455

tf(k+1,:) = widmo( 1 : dN : L ); % decymacja widma


dwz = [ zeros(1,dM) dwz(1:3*L-dM) ]; % przesuń okno
end %
mesh( abs(tf') ); pause % wykres 3D
contour( abs(tf') ); pause % kontur
% Synteza
wz = [ w zeros(1,2*L) ]; % okno syntezy z zerami
y = zeros( 1, L ); % inicjalizacja sygnału wyjściowego
temp = (2*pi/L)*dN; % stała pomocnicza
n = 0 : 1 : L-1; %
for m = 0 : 1 : 2*L/dM-1 % dla wszystkich punktów czasowych
ww = wz( L+1:L+L ); % wytnij środek okna syntezy
for k = 0 : 1 : L/dN-1 % dla wszystkich prążków widma
y = y + tf(m+1,k+1) * ( ww .* ( cos(temp*k*n) + i*sin(temp*k*n) ));
end
wz = [ zeros(1,dM) wz(1:3*L-dM) ]; % przesuń okno syntezy
end
y = real(y);
% Rysunki końcowe
plot( n, y ); title(' Sygnał zsyntezowany '); grid; pause
plot( n, x, 'r', n, y, 'b' ); title(' Sygnał WE i WY '); grid; pause
blad_max = max( abs( x - y ) )
blad_std = std( x - y )

17.3. Krótkoczasowa transformacja Fouriera STFT


Ciągła, krótkoczasowa transformacja Fouriera STFT (ang. Short-Time Fourier Transform) mo-
że być interpretowana jako niezdyskretyzowana w czasie i w częstotliwości transformacja
Gabora. Charakteryzuje się ona bardzo dużą redundancją zawartej w niej informacji TF. Pod-
czas analizy i syntezy stosuje się tylko jedno i to samo okno, a nie dwa osobne okna biorto-
gonalne. Definicja tej transformacji w dziedzinie czasu i częstotliwości jest następująca:
+∞
STFTxT (t , f ) = ∫ x ( τ) γ
*
( τ − t )e − j 2 πfτ dτ (17.21a)
−∞
+∞
STFTxF (t , f ) = e − j 2 πf t ∫ X ( v )Γ
*
(v − f )e j 2 πv t dv (17.21b)
−∞

Z powodu braku dyskretyzacji syntezę sygnału przeprowadza się w STFT na podstawie nastę-
pującej zależności, zdecydowanie prostszej niż w przypadku transformacji Gabora:

1 +∞
x (t ) = ∫ STFTx ( t, f ) e df
j 2 πft
(17.22)
γ (0) −∞

Jest to odwrotne przekształcenie Fouriera funkcji STFT(t, f) względem zmiennej f, unormowa-


ne przez wartość okna γ(t) dla chwili zerowej.
Z krótkoczasową transformacją Fouriera jest związany tzw. spektrogram, który definiuje się ja-
ko kwadrat jej modułu:
2
S xSPEC (t , f ) = STFTx ( t , f ) (17.23)

Funkcja γ(t) oznacza czasowe okno obserwacji, Γ(f) jest zaś jej widmem Fouriera. Równanie
(17.21) nosi także metody „przesuwającego się okna” MWM (ang. Moving Window Method)
456 Metody czasowo-częstotliwościowej analizy sygnałów

w dziedzinie czasowej (17.21a) lub częstotliwościowej (17.21b). W d z i e d z i n i e c z a s o -


w e j STFT polega na wykonywaniu prostego przekształcenia Fouriera na kolejnych frag-
mentach sygnału, „wycinanych’’ przez przesuwające się okno γ(t). W d z i e d z i n i e c z ę s t o -
t l i w o ś c i o w e j STFT jest natomiast równoważne: 1) odwrotnemu przekształceniu Fouriera
fragmentu widma sygnału X(ν), „wyciętemu” przez przesunięte w częstotliwości widmo okna
Γ(ν − f) (jest to filtracja sygnału filtrem pasmowoprzepustowym o częstotliwości środkowej
równej f ), 2) przesunięciu w częstotliwości sygnału czasowego otrzymanego z 1) do często-
tliwości zerowej poprzez jego wymnożenie z exp(−j2πft). Metodę STFT w dziedzinie często-
tliwościowej udoskonalono. Oblicza się w niej wartości funkcji STFTx(t, f) według (17.21b),
lecz przyporządkowuje się je innym wartościom parametrów t i f, które są związane z często-
tliwością chwilową i opóźnieniem grupowym.
STFT można także interpretować jako grzebień równocześnie pracujących filtrów. W inter-
pretacji dolnoprzepustowej dla każdej częstotliwości f sygnał jest najpierw przesuwany w czę-
stotliwości o −f poprzez wymnożenie z exp(−j2πft), a następnie przepuszczany przez filtr pas-
mowoprzepustowy o odpowiedzi impulsowej γ*(−t). W interpretacji górnoprzepustowej dla
każdej częstotliwości f sygnał jest najpierw przepuszczany przez filtr pasmowoprzepustowy
o częstotliwości środkowej f i odpowiedzi impulsowe równej γ*(−t)exp(j2πft), a następnie prze-
suwany w częstotliwości do częstotliwości zerowej poprzez wymnożenie z exp(−j2πft).
W STFT szerokie okno γ(t) powoduje dużą rozdzielczość w osi częstotliwości, a mniejszą
w osi czasu (rysunek 17.9a). Wąskie okno daje efekt odwrotny (rysunek 17.9b). Niemożliwa
jest jednoczesna duża rozdzielczość metody w obu osiach.

Dla dociekliwych. W jaki sposób należy dobierać długość okna analizy γ(t)? Niech podobnie
jak w (17.8) A oznacza średniokwadratową długość czasu trwania okna, B zaś − średniokwa-
dratową szerokość jego widma Fouriera. Podczas analizy sygnałów zmodulowanych liniowo
w częstotliwości (LFM) długość okna powinna być taka, aby stosunek szerokości częstotliwoś-
ciowej B do czasowej A okna był równy stosunkowi przyrostu częstotliwości do czasu, w któ-
rym on wystąpił (warunek równości kątów nachylenia):

( B A)optim1 ≅ ∆f ∆t

Jeśli dodatkowo analizowany sygnał jest zmodulowany w amplitudzie za pomocą okna czaso-
wego, które ma średniokwadratową szerokość czasową Aokna i częstotliwościową Bokna (patrz
(17.8)), to optymalne parametry o k n a a n a l i z y γ(t) są określone równaniem:

( B A)optim2 ≅ ∆f ∆t − Bokna / Aokna

Na rysunku 17.11 pokazano przykładowe spektrogramy (17.23) dla trzech długości okien: op-
tymalnej, za krótkiej i za długiej. Jak widać różnica jest niebagatelna.

Dyskretna wersja równania (17.21a) ma następującą postać:

+∞  2π 
− j k  m
STFT ( n, k ) = ∑ x ( m ) γ* ( n − m ) e N  , k = 0,1, 2, ..., N − 1 (17.24)
m =−∞

Parametr N, związany z dyskretyzacją częstotliwości, powinien być równy lub większy od licz-
by próbek M okna γ(m). Kiedy okno to przyjmuje wartości niezerowe tylko dla m = 0, 1, 2, ...,
M − 1, można je uzupełnić zerami do długości N = 2p oraz wyznaczać (17.24) według:
Metody czasowo-częstotliwościowej analizy sygnałów 457

N −1  2π 
− j k  m
STFT (n, k ) = ∑ γ* ( m ) x ( n − m ) e N  , k = 0, 1, 2, ..., N − 1 (17.25)
m =0

za pomocą algorytmu FFT szybkiej transformacji Fouriera. W zależności od wybranych war-


tości chwil czasowych n, dla których wyznacza się widmo, oraz długości okna M, kolejne wid-
ma są wyznaczane na podstawie mniejszej lub większej liczby tych samych próbek sygnału.
Jak wiemy z rozdziału dziewiątego, dla szczególnych okien i wartości parametrów metody,
istnieją szybkie, rekursywne algorytmy, służące do wyznaczania sekwencji widm określonych
przez (17.25).
W tabeli 17-2 przedstawiono przykład zastosowania krótkoczasowej transformacji Fouriera do
czasowo-częstotliwościowej analizy sygnałów z liniową LFM i sinusoidalną SFM modulacją
częstotliwości. Zaprezentowany program oraz uzyskane wyniki analizy należy porównać z al-
ternatywnym zastosowaniem transformacji Wignera (tabela 17-5), które będzie później przed-
stawione. W przypadku sygnału SFM reprezentacja STFT nie jest w stanie poprawnie „od-
tworzyć” zmienności częstotliwości, ale udaje się to dzięki transformacji Wignera.
Interesująca jest następująca zależność, pokazująca, że spektrogram (17.23) jest uśrednioną
(wygładzoną) wersją reprezentacji Wignera (Wignera-Ville’a) (podrozdział 17.5):
+∞ +∞
S xSPEC (t , f ) = ∫ ∫ SW
x
(V )
( τ, v ) ShW (V ) ( τ − t , v − f ) d τ dv (17.26)
−∞ −∞

W przeciwieństwie do reprezentacji Wignera-Ville’a nie występują w nim pasożytnicze inter-


ferencje utrudniające jego interpretację, ale uzyskano to za cenę znacznego uśrednienia wyni-
kowego widma dwuwymiarowego.

Tab. 17-2. Program do czasowo-częstotliwościowej analizy sygnału metodą krótkoczasowej transformacji


Fouriera

% Ćwiczenie: Krótkoczasowa transformacja Fouriera

clear all;

% Parametry wejściowe
M=32; % połowa długości okna (całe okno N=2M-1)
Nx=128; % długość sygnału testowego

% Sygnał testowy z modulacją częstotliwości typu LFM i SFM


fpr=128; f0=0; df=32; fn=16; fm=3; dfm=12; dt=1/fpr; n=0:Nx-1; t=n*dt;
% x = sin(2*pi*(f0*t+0.5*df*t.^2));
x = sin( 2*pi* (fn*t + (dfm/(2*pi*fm))*sin(2*pi*fm*t)) );

% Analiza TF − krótkoczasowa reprezentacja Fouriera


x=hilbert(x);
w = hanning(2*M-1)';
for n = M : Nx-M+1
xx = x(n-(M-1): 1 :n+(M-1)); xx = xx .* w; xx = [ xx 0 ];
X(:,n-M+1) = fftshift(abs(fft(xx))');
end

% Rysunek widma TF
t=t(M:Nx-M+1); f=fpr/(2*M)*(-M:M-1);
mesh(t,f,X); view(-40,70); axis tight;
xlabel('czas [s]'); ylabel('częstotliwość [Hz]'); pause
imagesc(t,f,X); xlabel('czas [s]'); ylabel('częstotliwość [Hz]'); pause
458 Metody czasowo-częstotliwościowej analizy sygnałów

a) 4 4

3.5 3.5

3 3

2.5 2.5
f [Hz]

f [Hz]
2 2

1.5 1.5

1 1

0.5 0.5

0 0
10 15 20 10 15 20
t [s] t [s]

b) 4 4

3.5 3.5

3 3

2.5 2.5
f [Hz]

f [Hz]
2 2

1.5 1.5

1 1

0.5 0.5

0 0
10 15 20 10 15 20
t [s] t [s]

c) 4 4

3.5 3.5

3 3

2.5 2.5
f [Hz]

f [Hz]

2 2

1.5 1.5

1 1

0.5 0.5

0 0
10 15 20 10 15 20
t [s] t [s]

Rys. 17.11. Przykład wpływu wyboru długości okna analizy γ(k) w krótkoczasowej transformacji Fouriera:
po lewej − suma dwóch sygnałów z liniową modulacją częstotliwości LFM, po prawej − suma tych samych
sygnałów LFM po ich dodatkowej modulacji w amplitudzie za pomocą funkcji okna czasowego, a) okno
o optymalnej długości, b) okno za krótkie, c) okno za długie
Metody czasowo-częstotliwościowej analizy sygnałów 459

17.4. Transformacja falkowa


Transformacja falkowa jest obecnie jednym z najpopularniejszych i najdynamiczniej rozwija-
nych narzędzi analizy częstotliwościowej sygnałów niestacjonarnych. Koncepcyjnie jest ona
równoważna metodzie analizy częstotliwościowej o „stałoprocentowym paśmie” ∆f/f0 = const
(ang. CPB − Constant Percentage Bandwidth), stosowanej w akustyce, lecz inaczej realizowa-
nej. Niniejszy podrozdział stanowi skrótowe wprowadzenie do teorii dyskretnej transformacji
falkowej. Główny punkt ciężkości jest w nim położony na wyprowadzenie równań definiują-
cych ortogonalne systemy falkowe. Nie będą w nim w ogóle dyskutowane liczne zastosowania
transformacji falkowej, dotyczące między innymi czasowo-częstotliwościowej identyfikacji
stanu obiektów biologicznych i technicznych poprzez analizę generowanych przez nie sygna-
łów, odszumiania w dziedzinie współczynników transformacji, detekcji punktów skokowej
zmiany charakteru sygnałów oraz kodowania i kompresji sygnałów. W podrozdziale 17.7
zostaną jedynie przedstawione nieliczne, wybrane przykłady zastosowania transformacji falko-
wej do analizy sygnałów biomedycznych. Zainteresowanego Czytelnika odsyłamy do pkt. 22.4,
gdzie powiedziano nieco więcej na temat biortogonalnych systemów falkowych oraz ich wyko-
rzystania do analizy, przetwarzania i kompresji obrazów.

Ciągła transformacja falkowa sygnału x(t) jest zdefiniowana w następujący sposób w dziedzi-
nie czasu i częstotliwości:
+∞
1 * τ − t 
CWTxT (t , a ) =
a
∫ x ( τ )γ  dτ
 a 
(17.27a)
−∞
+∞
CWTxF (t, a ) = a ∫ X ( f )Γ* ( af ) e j 2 πf t df (17.27b)
−∞

transformacja zaś do niej odwrotna jest określona zależnością:


+∞  +∞  da
2 t−τ
x (t ) = ∫  ∫ CWTx (τ, a )g   dτ  2 (17.28)
Cγ a   a
0 −∞
gdzie:
2
+∞ Γ( f )
Cγ = ∫ df < ∞, Γ ( 0 ) = 0 (17.29)
−∞
f

Funkcja g(t) oznacza falkę syntezującą, γ(t) − dualną do niej falkę analizująca, a G(f) i Γ(f) są
ich widmami Fouriera. Dzielenie i mnożenie przez | a | , występujące w (17.27), ma zapewnić
niezmienność energii falek i ich widm po przeskalowaniu.
Skalogram, związany z transformacją falkową, jest zdefiniowany jako:
2
S xSCAL (t , a ) = CWTx ( t , a ) (17.30)

Tak jak spektrogram (17.23) był kwadratem modułu krótkoczasowej transformacji Fouriera
STFT, tak skalogram jest kwadratem modułu transformacji falkowej, czyli reprezentacji typu
czas-skala.
460 Metody czasowo-częstotliwościowej analizy sygnałów

Równanie (17.27a) reprezentuje filtrację sygnału analizowanego x(t) przez sygnał analizujący
γ(t), przeskalowywany w dziedzinie czasu współczynnikiem a („rozciągany” dla a > 1 oraz
„ściskany” dla a < 1) w sposób przedstawiony na rysunku 17.2. Równoważne mu równanie
(17.27b) przedstawia natomiast odwrotne przekształcenie Fouriera iloczynu widma sygnału
i przeskalowanego widma falki γ(t). Ponieważ sygnał analizujący γ(t), spełniający rolę funkcji
bazowej tak określonej dekompozycji, jest sygnałem impulsowym zlokalizowanym w osi czasu
wokół t = 0 oraz mającym ograniczone, pasmowe widmo częstotliwościowe (f0 ± ∆f/2), zapis
SxSCAL(t, a) w dziedzinie czas-skala jest równoważny zapisowi SxSCAL(t, (f0 ± ∆f/2)/a) w dzie-
dzinie czas-częstotliwość. Oznacza to, że możemy interpretować skalogram jako reprezentację
czasowo-częstotliwościową SxSCAL(t, f). W praktycznej analizie czasowo-częstotliwościowej sy-
gnałów akustycznych, kiedy odwracalność transformaty nie jest wymagana, często jako γ(t)
przyjmuje się zespolony sygnał harmoniczny z obwiednią gaussowską, czyli tzw. „falkę”
Morleta:
2
γ (t ) = e−0,5( α t ) e j 2 π fo t (17.31)

Prawdziwa jest następująca zależność:


+∞ +∞
 τ−t 
S xSCAL (t , a ) = ∫ ∫ SW
x
(V )
( τ, v ) S γW (V )  , av  d τ dv (17.32)
−∞ −∞  a 

wiążąca skalogram z reprezentacją Wignera (Wignera-Ville’a) oraz zależność ogólniejsza


+∞ +∞
τ−t 
S xSCAL (t , a ) = ∫ ∫ S xC ( τ, v; φ) SγC *  , av; φ  d τ dv (17.33)
−∞ −∞  a 

pokazująca związek z dowolną reprezentacją z klasy Cohena (podrozdział 17.6) (warunek:


φ(ξ,τ) = φ(ξτ) i |φ(ξ,τ)| = 1).
Ciągła czasowo-częstotliwościowa reprezentacja falkowa jest bardzo nadmiarowa. W wyniku
spróbkowania jej parametrów, tzn. czasu t i współczynnika skali a, otrzymuje się współczyn-
niki szeregu falkowego, analogiczne do współczynników szeregu Fouriera. Kiedy założy się
podstawienie:

t = n2−m , a = 2−m (17.34)

uzyskuje się diadyczny szereg falkowy. Jest on obecnie najczęściej stosowany. Sygnał jest
przedstawiany z jego pomocą jako suma:
+∞ +∞ +∞
x (t ) = ∑ ∑ d m,n g m,n ( t ), d m ,n = ∫ x (t ) γ*m,n ( t ) dt (17.35a)
m =−∞ n =−∞ −∞

(
g m ,n ( t ) = 2 m / 2 g 2 m t − n , ) (
γ m ,n ( t ) = 2m / 2 γ 2m t − n ) (17.35b)

gdzie γ(t) jest funkcją dualną do g(t). Mnożenie przez 2m/2 ma zapewnić jednakową energię
(unormowanie) wszystkich sygnałów bazowych gm,n(t) i γm,n(t). W celu uproszczenia dalszych
rozważań załóżmy, że γ(t) = g(t) (ortogonalny system falek). Kiedy m zwiększa się o 1, falki
stają się dwa razy krótsze, ich widmo częstotliwościowe jest dwa razy szersze (zgodnie
z (4.9)), pole atomu TF pozostaje niezmienne, a widmo TF jest próbkowane dwa razy częściej.
W wyniku tego w diadycznej transformacie falkowej realizuje się schemat dekompozycji TF
Metody czasowo-częstotliwościowej analizy sygnałów 461

sygnału przedstawiony na rysunku 17.3b. Oczywiście należy starać się dobrać rodzaj falki
odpowiednio do analizowanego sygnału oraz zsynchronizować z nim szachownicę próbkowa-
nia TF. Szachownicę falkową można modyfikować wykorzystując koncepcję multifalek oraz
pakietów falkowych. Możliwa jest jej adaptacja na podstawie lokalnych właściwości sygnału.
Co ciekawe, w praktycznej realizacji numerycznej diadycznej transformacji falkowej w ogóle
nie wykorzystuje się falek tylko związane z nimi filtry. Zależność pomiędzy falkami i filtrami
jest wzajemnie jednoznaczna. Wyjaśnia ją teoria wielorozdzielczej aproksymacji sygnału,
związana z transformacją falkową.
Załóżmy, że sygnał x(t) może być przedstawiony na zerowym poziomie aproksymacji za po-
mocą sumy poprzesuwanych funkcji bazowych φ(t), wzajemnie ortonormalnych:
+∞

n
( )
x ( t ) ≈ ∑ c0,n φ 20 t − n = ∑ c0,n φ ( t − n ) ,
n
c0,n = ∫ x (t )φ* ( t − n ) dt (17.36)
−∞

Π2
Π1
Π0

Ω0 Ω1 Ω 2 Ω3 Ω0 Ω1 Ω 2 Ω3

Rys. 17.12. Przestrzenie funkcji skalujących i funkcji falkowych: Ω 0 ⊂ Ω1 ⊂ Ω 2 ⊂ Ω3, Ω0 ⊥Π 0 ⊥Π1 ⊥Π 2

|Φ( f)| |Ψ0 ( f )| |Ψ ( f )| |Ψ ( f )|


1 2

Rys. 17.13. Widma częstotliwościowe kilku kolejno przeskalowanych falek 2m/2ψ(2m⋅t), m = 0, 1, 2, oraz
widmo częstotliwościowe funkcji skalującej ϕ(t)= ϕ0(t)

Funkcje te mają widmo Fouriera, odpowiadające filtrowi dolnoprzepustowemu, czyli zawiera-


jące składową stałą. Na poziomie pierwszym, czyli o jeden rząd wyższym:
+∞

n
( )
x ( t ) ≈ ∑ c1,n 2φ 21 t − n = ∑ c1,n 2φ ( 2t − n ) , c1,n =
n
∫ x (t ) 2φ* ( 2t − n ) dt (17.37)
−∞

funkcje bazowe są także ortonormalne oraz dwa razy krótsze, czyli ich widmo jest dwa razy
szersze i aproksymacja dwa razy lepsza (bardziej szczegółowa). Jeśli przestrzeń rozpinaną
przez funkcje φ(20t) i 2 φ(21t) oznaczymy odpowiednio Ω0 i Ω1, a dopełnienie Ω0 do Ω1
przez Π0, to:

Ω1 = Ω0 + Π 0 , Ω1 ⊃ Ω0 (17.38)
462 Metody czasowo-częstotliwościowej analizy sygnałów

Analogicznie można definiować kolejne, bardziej szczegółowe aproksymacje i związane z nimi


przestrzenie. Jeśli przestrzeń Ω0 jest rozpinana przez funkcje φ(t), to dla przestrzeni Π0 tę rolę
pełnią funkcje ψ(t), nazywane falkami, które są ortonormalne do φ(t). Widmo falki przypomina
widmo filtra pasmowoprzepustowego i stanowi dopełnienie widma (węższego) funkcji
skalującej z poziomu niższego do widma (szerszego) funkcji skalującej z poziomu wyższego.
Na rysunku 17.12 przedstawiono zależność poszczególnych przestrzeni funkcyjnych, natomiast
na rysunku 17.13 są pokazane orientacyjne widma Fouriera: funkcji φ(t) oraz kolejnych funkcji
2m/2ψ(2mt), m = 0, 1, 2, ... W związku z powyższym dekomponowany sygnał można
przedstawić na poziomie k-tym (k > m0) jako
k −1
x (t ) = ∑ cm0 , n φm0 , n (t ) + ∑ ∑ d m,n ψm,n (t ) (17.39)
n m = m0 n

gdzie:
+∞ +∞
cm,n = ∫ (
x (t )2m / 2 φ* 2m t − n dt , ) d m ,n = ∫ ( )
x (t )2m / 2 ψ* 2m t − n dt (17.40a, b)
−∞ −∞

W wielorozdzielczej dekompozycji sygnału, funkcja skalująca na poziomie niższym musi być


liniową kombinacją kilku funkcji skalujących z poziomu wyższego:

φ(t ) = ∑ h0 (k ) 2φ(2t − k ) (17.41)


k

Ponieważ na poziomie niższym aproksymacja jest mniej szczegółowa (bardziej niskoczęstotli-


wościowa), współczynniki wagowe h0(n) pełnią rolę filtra dolnoprzepustowego. Analogicznie
falka na poziomie niższym jest liniową kombinacją kilku funkcji skalujących z poziomu wyż-
szego:

ψ(t ) = ∑ h1 (k ) 2φ(2t − k ) (17.42)


k

tylko tym razem współczynniki h1(n) reprezentują filtr górnoprzepustowy, czyli „przepusz-
czają” szczegóły.
Zastępując w (17.41) zmienną t przez 2mt − n oraz stosując podstawienie l=2n + k, otrzymuje-
my:

( ) ( )
φ 2 m t − n = ∑ h0 (k ) 2 φ 2(2 m t − n ) − k = ∑ h0 (l − 2n ) 2φ 2 m +1 t − l ( ) (17.43)
k l

Uwzględniając z kolei (17.43) w równaniu definicyjnym współczynników cm,n (17.40a) mamy


(cm(n) = cm,n)
+∞

cm ( n ) = ∫ (
x (t )2m / 2  ∑ h0 (l − 2n ) 2φ* 2m +1 t − l
l
) dt =
−∞

 +∞ 
l  −∞
( )
= ∑ h0 (l − 2n )  ∫ x (t )2( m +1) / 2 φ* 2m +1 t − l dt  = ∑ h0 (l − 2n )cm +1 (l )
 l
(17.44a)

W sposób analogiczny wyprowadza się zależność (dm(n) = dm,n):

d m (n ) = ∑ h1 (l − 2n ) c m +1 (l ) (17.44b)
l
Metody czasowo-częstotliwościowej analizy sygnałów 463

Z równań (17.44a), (17.44b) wynika, iż konsekwencją zależności pomiędzy funkcjami ska-


lującymi i falkami, na dwóch sąsiednich poziomach dekompozycji, jest zależność pomiędzy
współczynnikami rozwinięcia na tych poziomach. Współczynniki cm,n poziomu niższego otrzy-
muje się drogą filtracji dolnoprzepustowej współczynników cm+1,n z poziomu wyższego za
pomocą filtra h0(k) oraz następującej po niej decymacji rzędu drugiego (usunięcie co drugiej
wartości), współczynniki zaś dm,n − w wyniku filtracji górnoprzepustowej współczynników
cm+1,n za pomocą filtra h1(k) i analogicznej decymacji. Przykładowy schemat praktycznej rea-
lizacji numerycznej trzypoziomowej analizy i syntezy sygnału dyskretnego metodą diadycznej
transformacji falkowej jest przedstawiony na rysunkach 17.14 i 17.15. Zakłada się, że na
najwyższym poziomie aproksymacji współczynniki rozwinięcia cm są zawsze równe próbkom
przetwarzanego sygnału, gdyż funkcja skalująca ma wówczas postać impulsu jednostkowego.
Filtry analizujące (dekomponujące) są odwróconymi w czasie filtrami syntezującymi. Jak wi-
dać algorytm obliczeniowy ma postać zespołu filtrów o strukturze drzewa binarnego, w którym
jest rozwijana (lub zwijana) zawsze tylko gałąź dolnoprzepustowa. W przypadku selektywnego
rozwijania (i późniejszego zwijania) także gałęzi górnoprzepustowych za pomocą pary tych
samych filtrów, otrzymuje się zmodyfikowaną wersję transformacji zwaną pakietami falko-
wymi. Kiedy zmiana struktury drzewa dokonuje się adaptacyjnie, np. na podstawie wielkości
entropii informacji zawartej w poszczególnych kanałach podpasmowych, mamy do czynienia
z adaptacyjnymi pakietami falkowymi.

h1(−k) 2 Π2

Ω3 h1(−k) 2 Π1

h0(−k) 2 Ω2 h1(−k) 2 Π0

h0(−k) 2 Ω1

h0(−k) 2 Ω0

Rys. 17.14. Trzy poziomy analizy falkowej

Π2 h1(k) 2

Π1 h1(k) 2 Ω3
Ω2
Π0 2 h1(k) h0(k) 2

Ω1
h0(k) 2

Ω0 2 h0(k)

Rys. 17.15. Trzy poziomy syntezy falkowej

W sytuacji kiedy dopełnieniem przestrzeni Ω0 do Ω1 jest kilka podprzestrzeni falkowych Π0,1,


Π0,2, Π0,3... itd., z każdą z tych podprzestrzeni jest związana inna falka ψ1(t), ψ2(t), ψ2(t), ...
464 Metody czasowo-częstotliwościowej analizy sygnałów

itd., mamy do czynienia z systemem wielofalkowym (ang. multi-wavelets), np. M-falkowym,


który charakteryzuje się jeszcze innym podziałem przestrzeni TF.
Teraz zajmiemy się problemem projektowania transformacji falkowych, tzn. projektowania
funkcji skalujących φ(t) i falek ψ(t). Ponieważ diadyczna transformacja falkowa jest w prakty-
ce implementowana za pomocą filtrów h0(n) i h1(n), to ich wybór decyduje o tym, jakie funkcje
φ(t) i ψ(t) są stosowane. Jeśli chcemy poznać kształt tych funkcji, to najprostszą metodą jest
zastosowanie schematu blokowego odwrotnej transformacji falkowej z rysunku 17.15 i „zsyn-
tezowanie” funkcji skalującej i falki z odpowiednio „spreparowanych” współczynników trans-
formaty. W przypadku syntezy funkcji skalującej φ(t) należy podstawić c0 = 1 i d0 = 0 na naj-
niższym poziomie oraz zwrotnie syntezować sygnał, podstawiając dl = 0, l = 1, 2, 3,... na wszy-
stkich następnych poziomach. Z kolei falkę ψ(t) otrzymuje się w identyczny sposób, tylko na
najniższym poziomie należy zastosować inicjalizację c0 = 0 i d0 = 1. Omówiony sposób wyge-
nerowania funkcji „falkowych” jest zupełnie naturalny i odpowiada zsyntezowaniu sygnału ze
współczynników jego dekompozycji falkowej. Ponieważ w strukturze drzewiastego zespołu
filtrów syntezy tylko jeden ze współczynników jest różny od zera, to na jego wyjściu otrzy-
mujemy sygnał, który mu odpowiada. W pierwszym przypadku jest to funkcja skalująca φ(t)
(Ω0 = 1), a w drugim − falka ψ(t) (Π0 = 1) (patrz rysunek 17.15). Wygenerowanie w ww.
opisany sposób funkcji skalujących i falek dla różnych znanych systemów falkowych pozosta-
wiamy Czytelnikowi. Najprostszy program przeznaczony do tego celu ma strukturę, przedsta-
wioną w tabeli 17-3.

Tab. 17-3. Program do wygenerowanie funkcji skalujących i falek dla różnych znanych systemów
falkowych

% Ćwiczenie: Generacja funkcji skalujących i falek.

clear all; clf;


niter = 7; % liczba iteracji
c = 0; d = 1; % {c=1, d=0} − funkcja skalująca, {c=0, d=1} − falka

% definicja współczynników filtrów h0 i h1 systemu falkowego Db4 (17.62) (17.57)


h0 = [ (1+sqrt(3))/(4*sqrt(2)) (3+sqrt(3))/(4*sqrt(2)) ...
(3-sqrt(3))/(4*sqrt(2)) (1-sqrt(3))/(4*sqrt(2)) ];
N = length(h0); n = 0:N-1;
h1 = (-1).^n .* h0(N:-1:1);
% synteza − według schematu drzewa filtrów z rysunku 17.15
c = [ 0 c 0 ]; % aproksymacje Ω0
d = [ 0 d 0 ]; % detale Π0
c = conv(c,h0) + conv(d,h1);
for n = 1 : niter
for k = 1:length(c)
c0(2*k-1) = c(k);
c0(2*k) = 0;
end
c0 = [ 0 c0 ];
c = conv(c0,h0);
end
plot(c); pause

W jaki sposób należy dobierać filtry h0(n) i h1(n), aby „generowały” one transformatę falkową?
Muszą one spełniać równania wynikające z założonych wcześniej właściwości dekompozycji.
Metody czasowo-częstotliwościowej analizy sygnałów 465

Warunki na funkcję skalującą φ(t) i filtr h0(n)

P o p i e r w s z e , funkcja skalująca φ(t) musi być „dolnoprzepustowa” i unormowana:


+∞

∫ φ(t )dt = 1 (17.45)


−∞
Podstawiając do powyższego równania zależność (17.41) oraz zakładając τ = 2t − n, otrzymu-
jemy:
+∞  +∞ 
  2 2
∫ 0∑ h ( n ) 2 φ ( 2t − n )  dt = ∑ h0 ( n )  ∫ φ( τ)d τ  = ∑ h0 (n ) =1 (17.46)
−∞  n  2 n  −∞  2 n
skąd wynika, że:

∑ h0 (n) = 2 (17.47)
n

czyli filtr h0(n) musi przenosić składową stałą. Jeśli dodatkowo chcemy, żeby nie przenosił on
składowej o pulsacji π radianów, to powinna być także spełniona zależność:

∑ (−1)n h0 (n ) = 0 (17.48)
n

czyli filtr, który powstaje w wyniku modulacji h0(n) sygnałem (−1)n = exp(jπn), powinien być
filtrem górnoprzepustowym (modulacja przesuwa pulsację środkową widma Fouriera filtra
h0(n) z zera do π). Po uwzględnieniu (17.47), z (17.48) wynika, że suma parzystych i nie-
parzystych próbek filtra h0(n) powinna być taka sama i równa:

2
∑ h0 (2n) = ∑ h0 (2n + 1) = 2
(17.49)
n n

P o d r u g i e , wymagamy, aby przesunięcia funkcji skalującej o wartości całkowite były orto-


normalne, czyli aby
+∞

∫ φ(t )φ(t − n )dt = δ(n ) (17.50)


−∞

Wykorzystując ponownie równanie (17.41), przekształcamy (17.50) (τ = 2t − m):


+∞
  
∫  ∑
m
h0 ( m ) 2 φ ( 2t − m )   ∑ h0 ( k ) 2 φ ( 2(t − n) − k )  dt =
 k 
−∞

 +∞ 
= 2∑ h0 ( m ) ∑ h0 ( k )  ∫ φ ( 2t − m ) φ ( 2(t − n) − k ) dt  =
 
m k  −∞ 
 +∞ 
= ∑ h0 ( m ) ∑ h0 ( k )  ∫ φ ( τ ) φ ( τ + m − 2n − k ) d τ  =
 
m k  −∞ 
= ∑ h0 ( m ) ∑ h0 ( k ) δ( −m + 2n + k ) = ∑ h0 ( m ) h0 ( m − 2n )
m k m
466 Metody czasowo-częstotliwościowej analizy sygnałów

i otrzymujemy:

∑ h0 (m )h0 (m − 2n ) = δ(n ) (17.51)


m

Z powyższego równania wynikają następujące zależności dla n = 0 i n ≠ 0:

n = 0: ∑ h02 (m ) = 1 (17.52a)
m

n ≠ 0: ∑ h0 (m )h0 (m − 2n ) = 0 (17.52b)
m

Załóżmy obecnie, że filtr h0(n) składa się ze skończonej, nieparzystej liczby próbek N = 2p + 1
próbek: h0(0), h0(1), ..., h0(2p), wówczas z (17.52b) mamy:
2p
∑ h0 (m )h0 (m − 2n ) = 0 (17.53)
m=0

Dla n = p i m = 2p otrzymujemy wtedy warunek h0(2p)h0(0) = 0, z którego wynika, że jeśli


h0(0) ≠ 0, to musi zachodzić równość h0(2p) = 0. Wyciągamy stąd wniosek, że filtr h0(n) musi
mieć parzystą liczbę próbek.

Warunki na falkę ψ(t) i filtr h1(n)

Podobnie z warunków na falkę ψ(t) wyprowadza się zależności na filtr h1(n). Ponieważ chce-
my, aby falka ψ(t) była „górnoprzepustowa”, wymagamy aby:
+∞

∫ ψ(t )dt = 0 (17.54a)


−∞

stąd z (17.42) otrzymujemy:


+∞ +∞  +∞ 
  2
∫ ψ(t )dt = ∫  ∑ h1 ( n ) 2 φ ( 2t − n )  dt = ∑ h1 ( n ) 
 ∫ φ( τ)d τ  = 0

(17.54b)
−∞ −∞  n  2 n  −∞ 
Po uwzględnieniu (17.45) dochodzimy do warunku:

∑ h1(n ) = 0 (17.55)
n

czyli widzimy, że filtr h1(n) musi być filtrem górnoprzepustowym. Dodatkowo, chcemy aby
funkcja skalująca φ(t) była ortogonalna do falki ψ(t) i jej całkowitych przesunięć:
+∞

∫ φ(t )ψ(t − n)dt = 0 (17.56a)


−∞

Po uwzględnieniu w powyższym równaniu zależności (17.41), (17.42) i przekształceniach jak


poprzednio, otrzymujemy równanie analogiczne do (17.52b):

∑ h0 (m )h1 (m − 2n ) = 0 (17.56b)
m
Metody czasowo-częstotliwościowej analizy sygnałów 467

Jeśli filtr h0(n) spełnia warunki (17.47) i (17.51), to warunki (17.55) i (17.56b), dotyczące filtra
h1(n), są także zawsze spełnione, jeśli filtr ten powstaje w wyniku odwrócenia kolejności pró-
bek i modulacji filtra h0(n), n = 0, 1, 2, ..., N−1:

h1 (n ) = ± (− 1)n h0 ( N − 1 − n ) (17.57)

Modulacja sygnałem (−1)n = exp(jπn) przesuwa pulsację środkową widma Fouriera filtra dol-
noprzepustowego z zera do π, czyli czyni go filtrem górnoprzepustowym.

Ortonormalne systemy falek

W ortogonalnych systemach falkowych filtry syntezy są odwróconymi w czasie filtrami analizy


h0(N − 1−n) i h1(N − 1 − n), n = 0, 1, 2, ..., N − 1. Dodatkowo filtr h1(n) (17.57) zależy w nich od
h0(n), więc wynika stąd, że projektowanie takich systemów sprowadza się do wyznaczenia
jedynie współczynników filtra h0(n).
Jak wykazaliśmy warunkiem istnienia ortogonalnego systemu falkowego jest spełnienie nastę-
pującego układu równań przez filtr h0(n) (filtr h1(n) jest wyznaczany z (17.57)):

 N −1
 ∑ h0 (n ) = 2
 n =0
 N −1 (17.58)
 h (n )h (n − 2k ) = δ(k ) dla
 n∑ 0 0 k = 0, 1, 2, ..., N / 2 − 1
=0

który powstaje z równań (17.47), (17.51). Jest to układ N/2 + 1 równań z N niewiadomymi.
Przykładowo dla N = 2 mamy:

h0 (0) + h0 (1) = 2 (17.59a)


h02 (0) + h02 (1) =1 (17.59b)

którego jedynym rozwiązaniem jest filtr

 1 1 
hD 2 = {h0 (0), h0 (1) } =  ,  (17.60)
 2 2

generujący prostokątne falki Haara, inaczej zwane także falkami Daubechies [Daub92] dru-
giego rzędu (w języku Matlab wywoływane parametrem db1). Z kolei dla N = 4 z (17.58)
otrzymuje się:

h0 (0) + h0 (1) + h0 ( 2) + h0 ( 3) = 2 (17.61a)


h02 (0) + h02 (1) + h02 (2) + h02 (4) =1 (17.61b)
h0 (0)h0 (2) + h0 (1)h0 (3) = 0 (17.61c)

W tym przypadku mamy N/2 + 1 = 3 równania i N = 4 niewiadome. Istniejący stopień swobody


można wykorzystać w różny sposób, np. do zapewnienia jak największej gładkości wynikowej
falki. Jest to rozwiązanie Daubechies czwartego rzędu (w języku Matlab oznaczone jako db2):
468 Metody czasowo-częstotliwościowej analizy sygnałów

1 + 3 3 + 3 3 − 3 1 − 3 
hD 4 =  , , ,  (17.62)
 4 2 4 2 4 2 4 2 

W sposób analogiczny projektuje się filtry wyższych rzędów. W różnych metodach w inny
sposób wykorzystuje się istniejące stopnie swobody. Najczęściej „zagospodarowuje” się je do-
dając dodatkowe warunki, mające zapewnić maksymalną gładkość falki ψ(t) [Daub92]. Są to
równania zerowania się kilku pierwszych (załóżmy, że M) momentów falki:
+∞

∫t
k
mk = ψ(t )dt , k = 0, 1, 2, ..., M − 1 (17.63)
−∞

Ponieważ z właściwości transformaty Fouriera wynika, że:

d k Ψ (ω)
mk = ( − j ) − k ω= 0 , k = 0, 1, 2, ..., M − 1 (17.64)
dωk

więc widmo Fouriera falki ma M-krotne zero dla ω = 0, kiedy jest spełnione równanie (17.63).
Oba powyższe warunki są równoważne następującemu układowi M równań (po uwzględnieniu
(17.57)):
∞ ∞
∑ n k h1 (n ) = ∑ n k ( −1)n h0 ( N − 1 − n ) = 0, k = 0, 1, 2, ..., M − 1 (17.65)
n =−∞ n =−∞

Jego spełnienie gwarantuje, że iloczyn skalarny falki z sygnałem postaci:


M −1
x(t ) = ∑ ak t k
k =0

jest równy zeru. W konsekwencji współczynniki górnopasmowe dm,n rozwinięcia są równe ze-
ru, czyli wielomiany rzędu M − 1 są wyłącznie reprezentowane przez współczynniki dolnopas-
mowe cm,n.
Przykładowe kształty funkcji skalujących i falek Daubechies, zaprojektowane na „maksymalną
gładkość” funkcji falek, są przedstawione na rysunkach 17.16 i 17.17.
W tabeli 17-4 jest przedstawiony program, napisany w języku Matlab, służący do czaso-
wo-częstotliwościowej analizy/syntezy dowolnego sygnału metodą transformacji falkowej.

Dla dociekliwych. Problemem, który jeszcze pozostaje do rozwiązania, jest „przejście” od


równań (17.63), (17.64) do równania (17.65), stanowiącego dodatkowych M zależności na
współczynniki filtra h0(n). Przychodzi nam tutaj z pomocą częstotliwościowa interpretacja
zależności (17.41) i (17.42). Wiadomo, że w wyniku transformacji Fouriera obu stron tych
równań otrzymujemy:
1
Φ ( ω) = H 0 ( e jω / 2 )Φ ( ω / 2) (17.d1)
2
1
Ψ ( ω) = H 1 ( e jω / 2 )Φ ( ω / 2 ) (17.d2)
2
Dla K-krotnego powtórzenia operacji (17.41), odpowiadające mu równanie (17.d1) przyjmuje
postać:
Metody czasowo-częstotliwościowej analizy sygnałów 469

Tab. 17-4. Program do czasowo-częstotliwościowej analizy/syntezy sygnału metodą transformacji falkowej

% Ćwiczenie: Transformacja falkowa

clear all;
% Parametry programu
niter = 3; % liczba iteracji
nx = 2^niter*32; % długość sygnału
% Definicja współczynników filtra LP syntezy h0s, np. Db4
h0s = [ (1+sqrt(3))/(4*sqrt(2)) (3+sqrt(3))/(4*sqrt(2)) ...
(3-sqrt(3))/(4*sqrt(2)) (1-sqrt(3))/(4*sqrt(2)) ];
% Oblicz pozostałe filtry
N = length(h0s); n = 0:N-1;
h1s = (-1).^n .* h0s(N:-1:1); % filtr HP syntezy
h0a = h0s(N:-1:1); h1a=h1s(N:-1:1); % filtry LP i HP analizy
% Sygnał testowy
% x=sin(2*pi*(1:nx)/32);
x=rand(1,nx);
% Analiza
cc = x;
for m=1:niter
c0 = conv(cc,h0a); % filtracja LP
d0 = conv(cc,h1a); % filtracja HP
k=N:2:length(d0)-(N-1); kp=1:length(k); ord(m)=length(kp); dd(m,kp) = d0( k );
k=N:2:length(c0)-(N-1); cc=c0( k );
end
% Synteza
c=cc;
for m=niter:-1:1
c0=[]; d0=[];
for k = 1:length(c)
c0(2*k-1)=c(k); c0(2*k)=0;
end
c = conv(c0,h0s); nc=length(c);
for k = 1:ord(m)
d0(2*k-1) = dd(m,k); d0(2*k) = 0;
end
d = conv(d0,h1s); nd=length(d);
c = c(1:nd);
c = c + d;
end
% Rysunki końcowe
n = 2*(N-1)*niter : length(c)-2*(N-1)*niter+1;
plot(x); title('WE'); pause; plot(n,x(n)-c(n)); title('WE-WY'); pause

K 1 
Φ (ω) = ∏ H 0 ( e jω / 2 k )  Φ ( ω / 2 k ) (17.d3)
 k =1 2 
Kiedy K → ∞ , mamy:

1
Φ (ω) = ∏ H 0 ( e jω / 2 k ) (17.d4)
k =1 2

gdyż Φ (0) = ∫ ϕ(t )dt = 1 .
−∞
Uwzględniając (17.d4) w (17.d2), otrzymujemy:

1 1
Ψ (ω) = H1 (e jω / 2 ) ∏ H 0 ( e jω / 2 k ) (17.d5)
2 k =2 2
470 Metody czasowo-częstotliwościowej analizy sygnałów

1.5 1.5

1.0 1.0

0.5 0.5

0.0 0.0

-0.5 -0.5
0.0 0.5 1.0 1.5 2.0 2.5 3.0 0 1 2 3 4 5
t [s] t [s]

1.2 1.2

0.8 0.8

0.4 0.4

0.0 0.0

-0.4 -0.4
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9
t [s] t [s]

1.0 1.0

0.5 0.5

0.0 0.0

-0.5 -0.5
0 2 4 6 8 10 12 14 16 18 0 5 10 15 20 25 30 35
t [s] t [s]

Rys. 17.16. Funkcje skalujące Daubechies: ϕ D4, ϕ D6, ϕ D8, ϕ D10, ϕ D20, ϕ D40 (kolejno poziomo). W języku
Matlab oznaczane jako ϕ db2, ϕ db3, ϕ db4, ϕ db5, ϕ db10 , ϕ db20

Ponieważ filtr H 0 (e jω / 2 ) jest filtrem dolnoprzepustowym ( H 0 (0) = 2 ), stąd na podstawie


(17.d5), (17.63) i (17.64) wynika, że M pierwszych momentów mk falki będzie równych zeru,
kiedy M pierwszych pochodnych filtra H1 ( e jω ) będzie równych zero dla ω = 0:

d k H1 (e jω )
= 0, k = 0, 1, 2, ..., M − 1 (17.d6)
dωk ω= 0

czyli kiedy filtr H1 ( e jω ) ma M-krotne zero dla ω = 0 . Ponieważ:



H 1 ( e jω ) = ∑ h1 (n)e − jωn (17.d7)
n = −∞
Metody czasowo-częstotliwościowej analizy sygnałów 471

2.0
1.5
1.5
1.0 1.0

0.5 0.5
0.0 0.0
-0.5 -0.5
-1.0
-1.0
-1.5
0.0 0.5 1.0 1.5 2.0 2.5 3.0 0 1 2 3 4 5
t [s] t [s]

1.2

1.0 0.8

0.5 0.4

0.0 0.0

-0.4
-0.5
-0.8
-1.0
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9
t [s] t [s]

1.0 0.8

0.5 0.4

0.0 0.0

-0.5 -0.4

-1.0
-0.8
0 2 4 6 8 10 12 14 16 18 0 5 10 15 20 25 30 35
t [s] t [s]

Rys. 17.17. Falki Daubechies: ψ D4, ψ D6, ψ D8, ψ D10, ψ D20, ψ D40 (kolejno poziomo). W języku Matlab
oznaczane jako ψ db2, ψ db3, ψ db4, ψ db5, ψ db10, ψ db20

stąd:
d k H1 ( e jω ) ∞

dωk
= ∑ (− jn )k h1 (n)e − jωn (17.d8)
n = −∞

Z (17.d6) i (17.d8) mamy:



∑ ( − jn )k h1 ( n ) = 0, k = 0, 1, 2, ..., M − 1 (17.d9)
n =−∞

czyli

∑ n k h1 (n ) = 0, k = 0, 1, 2, ..., M − 1 (17.d10)
n =−∞
472 Metody czasowo-częstotliwościowej analizy sygnałów

Uwzględniając (17.57) otrzymujemy ostatecznie:



∑ n k ( −1)n h0 ( N − 1 − n ) = 0, k = 0,1, 2, ..., M − 1 (17.d11)
n =−∞

czyli dodatkowych M = N/2 − 1 równań do układu równań (17.58).

17.5. Transformacja Wignera-Ville’a


Czasowo-częstotliwościowa reprezentacja Wignera-Ville’a (WV) spełnia wyjątkową rolę
w analizie częstotliwościowej sygnałów niestacjonarnych, ponieważ idealnie odwzorowuje ona
w przestrzeni TF liniową zmianę częstotliwości oraz inne reprezentacje mogą być z niej uzys-
kiwane metodą uśredniania (patrz (17.26), (17.32), (17.33)). Jest ona zdefiniowana w sposób
następujący:
+∞
 τ  τ
SW
x
(V )
(t , f ) = ∫x  t +  x *  t −  e − j 2 π f τ dτ (17.66a)
−∞ 
2  2
+∞
 v  v
SW
X
(V )
(t , f ) = ∫ X  f +  X *  f − e j 2 πvt dv (17.66b)
−∞  2   2 

gdzie x(t) oznacza sygnał rzeczywisty (definicja Wignera) lub analityczny (definicja Ville’a).
Sygnał analityczny (12.70), związany z sygnałem rzeczywistym s(t), jest sygnałem zespolo-
nym, którego część rzeczywistą stanowi s(t), natomiast część urojona to wynik transformaty
Hilberta (12.63) z s(t). Jak widać reprezentacja WV jest t r a n s f o r ma c j ą F o u r i e r a (prostą
lub odwrotną) t z w. j ą d r a W V :

xx (t , τ ) = x (t + τ / 2 )x * (t − τ / 2 ) , XX ( f , v ) = X ( f + v / 2 ) X * ( f − v / 2 ) (17.67)

wz g l ę d e m z mi e n n e j τ l u b v .
Reprezentacja WV charakteryzuje się największą koncentracją energii w przestrzeni czaso-
wo-częstotliwościowej, czyli ma najlepszą łączną zdolność rozdzielczą. Dodatkowo idealnie
„odwzorowuje” liniową modulację częstotliwości sygnału, gdyż dla sygnału LFM jądro
Wignera-Ville’a (17.67) jest względem zmiennej τ zespoloną sinusoidą o pulsacji
ω0 + αt (wyprowadzenie pozostawiamy Czytelnikowi):
2
x (t ) = e j ( ω0t + 0,5αt )
⇒ xx ( t , τ ) = x ( t + τ / 2 ) x* ( t − τ / 2 ) = e j ( ω0 +αt ) τ

w wyniku czego z transformacji Fouriera (17.66a) otrzymujemy SxW(V)(t, f) = δ(ω − (ω0 + αt)).
W przypadku sygnałów o innym rodzaju modulacji lub sygnałów złożonych w reprezentacji TF
Wignera-Ville’a występują pasożytnicze interferencje wzajemne o charakterze oscylacyjnym
pomiędzy różnymi składowymi własnymi widma, które znacznie utrudniają jej interpretację.
Konieczna jest wówczas redukcja elementów pasożytniczych metodą lokalnego wygładzania
widma SxW(V)(t, f). Jednym z głównych powodów zastosowania sygnału analitycznego jest
wyzerowanie widma TF dla częstotliwości ujemnych i całkowite usunięcie pasożytniczych
interferencji pomiędzy składowymi o ujemnych i dodatnich częstotliwościach.
Po dyskretyzacji równanie (17.66a) przyjmuje postać:
Metody czasowo-częstotliwościowej analizy sygnałów 473

 4π 
+∞ − j k  m
SW
x
(V )
( n, k ) = ∑ x ( n + m ) x* ( n − m ) e N  , k = 0, 1, 2, ..., N / 2 − 1 (17.68)
m =−∞

Aby uniknąć zjawiska aliasingu, czyli pokrywania się widm, maksymalna częstotliwość wystę-
pująca w sygnale powinna być dwukrotnie mniejsza od częstotliwości próbkowania dla sygna-
łów analitycznych, a czterokrotnie dla rzeczywistych. W praktyce najczęściej stosuje się zmo-
dyfikowane wersje równania (17.68), czyli tzw. dyskretną pseudoreprezentację WV oraz jej
wersję wygładzoną. Są one ”zdefiniowane w sposób następujący (k = 0, 1, 2, ..., N − 1):

 N −1 j k  m 
 2π 
 N  
S xP −W (V ) ( n, „k / 2” ) = 2 ⋅ Real  ∑ hN ( m) z ( n, m ) e
2
 (17.69)
 m =0 
 N −1  2π  
2  j
( M −1) km
 N  
S WP
x
−W (V )
( n , „ k / 2” ) = 2 ⋅ Real  ∑ hN ( m )  ∑ g M (l )
2
z ( n + l , m ) e   (17.70)
 m =0  l =−( M −1)  

gdzie:
 xx (n, m ) dla m ≠ 0
z (n, m ) =  (17.71)
 xx (n , m ) / 2 dla m = 0

xx (n, m ) = x (n + m )x * (n − m ) (17.72)

Jak widać obie reprezentacje (17.69), (17.70) można wyznaczyć za pomocą algorytmu szybkiej
transformacji Fouriera, jeśli N jest potęgą liczby 2. Zapis „k/2” oznacza, że otrzymane wartości
częstotliwości należy podzielić przez 2, gdyż są one dwukrotnie zawyżone. Jest to związane
z faktem, iż w (17.68) występuje 4π, natomiast w (17.69), (17.70) − 2π. Funkcje hN(m) i gM(l)
są dowolnymi oknami czasowymi, odpowiednio o długości 2N − 1 i 2M − 1, o środkach w pun-
kcie m = l = 0. Szczegółową interpretację równań (17.69) − (17.72) przedstawiono w następ-
nym rozdziale wraz z przykładami ich zastosowań.
Synteza sygnału z dyskretnej reprezentacji WV jest zagadnieniem złożonym, szczegółowo wy-
tłumaczonym w literaturze (np. w [Ziel94c]).
Kończąc to z konieczności krótkie przedstawianie reprezentacji Wignera, należy jeszcze po-
wiedzieć dwa słowa na temat podstawowej wady tej metody analizy, związanej ze zjawiskiem
występowania szkodliwych, pasożytniczych interferencji w otrzymywanych czasowo-często-
tliwościowych macierzach widmowych. Operacja mnożenia sygnału przez ten sam sygnał od-
wrócony w czasie, występująca w definicji reprezentacji Wignera (17.66a), powoduje, że re-
prezentacja ta nie jest liniowa, tzn. widmo TF sumy dwóch sygnałów nie jest równe sumie
widm TF każdego tych sygnałów z osobna, ale występuje w nim także widmo wzajemne
(skrośne) WV tych sygnałów:

SW (V ) W (V )
x1+ x 2 (t , f ) = S x1 (t , f ) + SW
x2
(V )
(t , f ) + S W (V )
x1, x 2 (t , f )

Wzajemne widmo WV dwóch sygnałów x(.) i y(.) otrzymuje się podstawiając y*(.) lub
Y*(.) za x*(.) lub X*(.) we wszystkich powyższych definicjach. Jeśli zrobimy to dla przykładu
w (17.66a), to otrzymamy:
+∞
 τ  τ
SW (V )
x , y (t , f ) = ∫x  t +  y *  t −  e− j2π f τd τ
−∞  2  2
474 Metody czasowo-częstotliwościowej analizy sygnałów

a) f f

t t

b) f f

t t

c)
f f

t t

d) f
f

t t

e) f f

t t

Rys. 17.18. Przykładowe pseudoreprezentacje Wigera-Ville’a (17.69) (po lewej) oraz wygładzone
pseudoreprezentacje WV (po prawej) dla wybranych sygnałów: a) jedna składowa LFM z obwiednią
gaussowską, b) dwie składowe LFM z obwiedniami gaussowskimi, c) trzy sinusoidy z obwiedniami
gaussowskimi, d) sygnał monoharmoniczny ze skokiem częstotliwości, e) sygnał z sinusoidalną modulacją
częstotliwości SFM
Metody czasowo-częstotliwościowej analizy sygnałów 475

Widmo skrośne ma postać oscylacji leżących pomiędzy składowymi własnymi widm poszcze-
gólnych sygnałów. Oscylacje występują pomiędzy każdą parą sygnałów składowych, a ich czę-
stotliwość jest odwrotnie proporcjonalna do odległości pomiędzy tymi składowymi w prze-
strzeni TF, tzn. im ta odległość jest mniejsza, tym oscylacje mają mniejszą częstotliwość. Na
rysunku 17.18 zilustrowano graficznie to zjawisko: w interferencje wchodzą pomiędzy sobą sy-
gnały elementarne na zasadzie „każdy z każdym” (rys. 17.18c). Co prawda stosowanie do-
datkowego wygładzania (17.70) w pseudoreprezentacji Wignera częściowo eliminuje efekty
pasożytnicze, ale prowadzi do poszerzania („rozmywania”) widma. Oscylacje są także gene-
rowane tylko przez jeden sygnał, jeśli interferuje on sam ze sobą. Przykładem mogą być sygna-
ły ze skokiem częstotliwości (rys. 17.18d) oraz z sinusoidalną modulacją częstotliwości (rys.
17.18e).
W tabeli 17-5 przedstawiono przykład zastosowania transformacji Wignera do czasowo-czę-
stotliwościowej analizy sygnałów z liniową LFM i sinusoidalną SFM modulacją częstotliwości.
Zaprezentowany program oraz uzyskane wyniki analizy należy porównać z alternatywnym
zastosowaniem krótkoczasowej transformacji Fouriera STFT z tabeli 17-2. W przeciwieństwie
do STFT transformacja Wignera poprawnie „odtwarza” zmienność częstotliwości chwilowej
sygnału SFM.

Tab. 17-5. Program do czasowo-częstotliwościowej analizy sygnału metodą transformacji Wignera

% Ćwiczenie: Czasowo-częstotliwościowa transformacja Wignera

clear all;
% Parametry wejściowe
M=32; % połowa długości okna (całe okno N=2M−1)
Nx=128; % długość sygnału testowego
% Sygnał testowy z modulacją częstotliwości typu LFM i SFM
fpr=128; f0=0; df=32; fn=16; fm=3; dfm=12; dt=1/fpr; n=0:Nx-1; t=n*dt;
% x=sin(2*pi*(f0*t+0.5*df*t.^2));
x=sin( 2*pi* (fn*t + (dfm/(2*pi*fm))*sin(2*pi*fm*t)) );
plot(x); title('Sygnał we'); grid; pause
% Analiza TF − reprezentacja Wignera
x = hilbert(x);
w = hanning(2*M-1)';
for n = M:Nx-M+1
xx = x(n-(M-1): 1 :n+(M-1)) .* conj(x(n+(M-1):-1:n-(M-1)));
xx = xx .* w.^2;
xx = [ xx(M:2*M-1) 0 xx(1:M-1) ];
X(:,n-M+1) = fftshift(real(fft(xx))');
end
% Rysunek widma TF
t=t(M:Nx-M+1); f=0.5*fpr/(2*M)*(-M:M-1);
mesh(t,f,X); view(-40,70); axis tight;
xlabel('czas [s]'); ylabel('częstotliwość [Hz]'); pause
imagesc(t,f,X); xlabel('czas [s]'); ylabel('częstotliwość [Hz]'); pause

Dla dociekliwych. Kluczem do sukcesu transformacji Wignera-Ville’a jest fakt, że dla sygnału
LFM wynikiem jądra WV (17.67)(17.72) jest zespolony sygnał monoharmoniczny o częstotli-
wości równej częstotliwości chwilowej analizowanego sygnału w chwili t. Pomimo tego, że
częstotliwość sygnału zmienia się liniowo w czasie, to przekształcenie Fouriera dla różnych
wartości czasu ciągłego t (lub dyskretnego n) „widzi” więc w funkcji τ (lub m) tylko jedną
częstotliwość i wspaniale ją detektuje. W tym miejscu rodzi się pytanie, czy nie można zbudo-
wać „idealnych” jąder zwracających sygnał monoharmoniczny tylko o jednej częstotliwości,
476 Metody czasowo-częstotliwościowej analizy sygnałów

ale dostosowanych do innych zmian częstotliwości chwilowej sygnału niż liniowa. Na przykład
hiperbolicznej, czyli liniowej modulacji okresu, stosowanej w systemach radarowych, oraz
innych rodzajów modulacji. Jest to możliwe z wykorzystaniem wielomianowej [Boas94]:
+∞ − b− k
  − j 2πfτ
∫ ∏ k =0 [ x (t + ck τ)] k  x (t + c−k τ) 
b
S xPoly −W (V ) (t , f ) = q/2 *
e dτ
−∞ 

oraz afinicznej reprezentacji Wignera-Ville’a [Bert91]:


+∞
S XBB (t , f ; λ, µ ) = f ⋅ ∫ { X ( f λ(u)) X }
( f λ( −u )) µ(u ) e j 2 π tf ( λ (u ) −λ ( − u )) du
*

−∞

W p i e r ws z y m p r z y p a d k u , współczynniki ck i bk dobierane są w zależności od przewidy-


wanego rodzaju modulacji częstotliwościowej, występującej w analizowanym zespolonym syg-
nale analitycznym. Widmo to może idealnie ,,śledzić” dowolne modulacje częstotliwościowe,
w tym także hiperboliczną. Klasyczna reprezentacja WV (17.66a) jest szczególnym przy-
padkiem reprezentacji wielomianowej WV dla q = 2, b−1 = −1, b0 = 0, b1 = 1, c−1 = −1/2, c0 =
= 0, c1 = 1/2. Z kolei w d r u g i m p r z y p a d k u , reprezentacja jest definiowana w dziedzinie
częstotliwości, a λ(u) i µ(u) są dowolnymi funkcjami, spełniającymi określone warunki (np.
λ(0) = 1 i µ*(−u) = µ(u)). W zależności od ich postaci wynikowa reprezentacja może idealnie
odtwarzać w przestrzeni czasowo-częstotliwościowej modulacje częstotliwościowe różne od
liniowej (np. zmiana okresu zespolonego sygnału harmonicznego proporcjonalna do czasu lub
do kwadratu czasu). Do rodziny afinicznych reprezentacji czasowo-częstotliwościowych przy-
kładowo należą: reprezentacja tomograficzna Bertranda, aktywna i pasywna reprezentacja Un-
terbergera oraz reprezentacja Flandrina, dla których mamy:
reprezentacja Bertranda: λ(u) = u/(1 − exp(−u)) µ(u) = u/(2sinh(u/2))
reprezentacja Flandrina: λ(u) = (1 + 0,25u)2 µ(u) = 1 − (0,25u)2
reprezentacja Unterbergera: λ(u) = exp(u/2) µ(u) = cosh(u/2)
Dla sygnałów dyskretnych istnieją efektywne algorytmy obliczeniowe do jej wyznaczania, wy-
korzystujące szybką transformację Fouriera [Ziel94].
Równocześnie niewykorzystane możliwości tkwią także w samym jądrze WV. A jakby go za-
stosować iteracyjnie? Kiedy analizujemy sygnał zespolony x(t) = ejφ(t), którego kąt fazowy jest
opisany np. wielomianem φ(t) = φ0 + at + bt2 + ct3, to po pierwszej iteracji jądra WV otrzymamy
z niego sygnał ejφ1(t), φ1(t) = a + 2bt + 3ct2, po drugiej − sygnał ejφ2(t), φ2(t) = 2b + 6ct, a po
trzeciej − sygnał ejφ3(t), φ3(t) = 6c. Związane jest to z faktem, że jądro WV realizuje operację
różniczkowania fazy sygnału zespolonego. Widząc w widmie Fouriera po trzeciej iteracji tylko
składową stałą, moglibyśmy z częstotliwości prążka widma po drugiej iteracji obliczyć wartość
parametru c, następnie odjąć sygnał exp(jct3) od x(t), mnożąc ten ostatni przez exp(−jct3),
i ponownie zacząć całą operację od początku, tym razem „polując” na wartość parametru
b. Kaskada jąder WV nosi w literaturze nazwę transformacji wielomianowej fazy (Polynomial
Phase Transform) [Pele95]. Z jej zastosowaniem moglibyśmy wyliczyć dla dowolnej chwili
czasowej nie tylko pulsację chwilową, definiowaną jako pochodna kata fazowego po czasie,
ale także pozostałe współczynniki wielomianu kąta fazowego.
Reprezentacje czasowo-częstotliwościowe z klasy Cohena 477

17.6. Reprezentacje czasowo-częstotliwościowe z klasy Cohena


Reprezentacje czasowo-częstotliwościowe z klasy Cohena stanowią bardzo wartościowe uo-
gólnienie transformacji Wignera (Ville’a). Podejście to ostatnio bardzo dynamicznie się roz-
wija. Proponuje się w nim różne sposoby wygładzania reprezentacji Wignera, w wyniku któ-
rego następuje redukcja pasożytniczych interferencji występujących w jego widmie TF. Dobra
rozdzielczość TF reprezentacji Wignera jest w nich w świadomy sposób poświęcana na rzecz
jego większej czytelności. Możliwe jest adaptacyjne dopasowywanie rodzaju wygładzania
w zależności od lokalnych właściwości sygnału.
Biliniowe reprezentacje TF, należące do tej klasy, są zdefiniowane następującym równaniem:

  τ  τ 
S xC (t , f ; φ) = ∫∫∫ e j 2 π( ξt − τ f −ξu) φ( ξ, τ; t , f )  x  u +  x *  u −  du dτ dξ (17.73)
  2  2 

Równanie (17.73) może być interpretowane jako transformacja Fouriera jądra Wignera
(17.67), zmodyfikowanego przez jądro przekształcenia całkowego φ(ξ, τ; t, f). Modyfikacja ta
powoduje znaczną redukcję pasożytniczych interferencji o charakterze oscylacyjnym, występu-
jących w wynikowym widmie TF. W zależności od postaci jądra φ(ξ, τ; t, f) są generowane re-
prezentacje o różnych właściwościach. Przykładowo dla φ(ξ, τ; t, f) = 1 (17.78) sprowadza się
do (17.66a), czyli jest równoważne reprezentacji Wignera. Istnieje wiele różnych definicji
funkcji φ, atrakcyjnych z punktu widzenia właściwości generowanej reprezentacji i wynikają-
cych z nich możliwości analizy sygnałów niestacjonarnych. Własności jądra decydują o wła-
ściwościach użytkowych generowanej przez niego reprezentacji TF. Ostatnio prace badawcze
koncentrują się na porównaniu właściwości użytkowych poszczególnych jąder, na ich opty-
malnym projektowaniu, oraz na adaptacyjnym dopasowywaniu się jądra do zmienności sygna-
łu. W przypadku braku adaptacji mamy φ(ξ, τ) = φ(ξ, τ; t, f). Interesujące jest, że stosując od-
powiednie jądra φ można z zależności (17.73) także wygenerować spektrogram (17.21a)
będący klasyczną reprezentacją liniową oraz wiele innych reprezentacji czasowo-często-
tliwościowych, mających zupełnie odmienne definicje, przez nas nie przytaczanych (na przy-
kład reprezentacje Rihaczka i Margenau-Hilla). W tabeli 17-6 zaprezentowano przykładowe
jądra φ(ξ, τ).
Wszystkie reprezentacje należące do klasy Cohena zachowują przesunięcie czasowe i często-
tliwościowe. Mogą być one wyznaczane z (17.73) tak dla sygnału rzeczywistego x(t), jak i dla
związanego z nim sygnału analitycznego. Definiowane są także alternatywnie w dziedzinie
częstotliwościowej (podobieństwo do związku pomiędzy (17.21a) i (17.21b) oraz (17.66a)
i (17.66b)).
Definicja (17.73) może być przedstawiona w trzech interesujących postaciach alternatywnych.
M e t o d a 1 − jako przekształcenie Fouriera wygładzonej, chwilowej, symetrycznej funkcji
autokorelacji Rxav (t, τ) sygnału (Rx(t, τ) to analogiczna, niewygładzona funkcja autokorelacji):
+∞
S xC (t , f ) = ∫ Rx
av
(t , τ)e − j 2 π f τ dτ (17.74)
−∞
gdzie:
+∞
Rxav (t , τ) = ∫ Rx ( u, τ ) w(t − u, τ) du (17.75)
−∞
478 Metody czasowo-częstotliwościowej analizy sygnałów

Tab. 17-6. Jądra φ(ξ, τ) (17.73) oraz związane z nimi funkcje w(t, τ) (17.77)

Nazwa reprezentacji TF Funkcja jądra φ(ξ, τ) Funkcja maski w(t, τ)


Born-Jordan sin (πξτ )  1 / τ , dla t / τ < 1 / 2
(BJ) (SINC) πξτ 
 0, dla t / τ > 1 / 2
Zhao-Atlas-Marks II sin ( π ξ τ )  h( τ), dla t / τ < 1 / 2
(ZAM) (CKD) h ( τ) τ 
πξτ  0, dla t / τ > 1 / 2
Jeong-Williams H (ξτ) ; 1 t
H (β) ∈ ℜ, H (0) = 1 h  ;
(JW) lub (RID) τ  τ
d
H (β) | = 0 h( α) = 0 dla α > 1 / 2
dβ β =0
2
σ t 
Choi-Williams  (2 πξτ )2  σ 1 − 4  τ 
(CW) (ED) exp  −  e
 σ  4π τ
Choi-Williams Fourier −1 (φ(ξ, τ ))
exp  − ( ξ / ξ0 ) ( τ / τ0 )2 M τ 
2Nξ
ξ→ t
uogólniony (GCW) 
Fourier −1 (φ(ξ, τ ))
{ }
Nutall (TGD)
exp − π  a 2 + b2 + 2rab  ξ→ t
 
a=ξ/ξ0, b=τ/τ0
Costa-Boudreaux  2 λ Fourier −1 (φ(ξ, τ ))
-Bartels (MTED) exp  − π  ( A + B + C )   ξ→ t
   
A=a2αb2, B=a2b2α, C=2r((ab)β)γ
a=ξ/ξ0, b=τ/τ0
Butterworth (BUT) 1 Fourier −1 (φ(ξ, τ ))
ξ→ t
1 + (ξ / ξ0 ) 2N
(τ / τ0 )2M

Levin (LEV)
e
j πξ τ δ(t + τ / 2 )
Page (PAG) e
− j πξ τ δ(t − τ / 2 )
Rihaczek (RIH) e jπξτ δ(t − τ / 2 )
+∞
Spektrogram (SPEC)
∫ h (t + τ / 2) h (t − τ / 2 ) e h (− t − τ / 2 )h* (− t + τ / 2 )
* − j 2 πξt
(klasyczny) dt
−∞

Wigner (W) 1 δ(t)


Wigner uogólniony e j 2 παξτ δ(t + ατ)
(GW)
1
Wigner uogólniony
cos(2 παξτ) [δ(t + ατ) + δ(t − ατ)]
o wart. rzecz. (GWP) 2
Pseudoreprezentacja h ( τ / 2 ) h* ( −τ / 2 ) δ(t ) h ( τ / 2 ) h* ( −τ / 2 )
Wignera (PW)
Pseudoreprezentacja
Wignera wygładzona h ( τ / 2 ) h* ( −τ / 2 ) G (ξ) h ( τ / 2 ) h* ( −τ / 2 ) g (t )
(SPW)
Reprezentacje czasowo-częstotliwościowe z klasy Cohena 479

 τ  τ
R x ( t , τ) = x  t +  x *  t −  (17.76)
 2  2
+∞ ,
w( t , , τ ) = ∫ φ(ξ, τ)e j 2 πξ t d ξ (17.77)
−∞
i funkcja wygładzająca w(t, τ) jest wynikiem odwrotnego przekształcenia Fouriera jądra φ(ξ, τ)
względem zmiennej ξ. Przykładowe funkcje w(t, τ) są zaprezentowane w tabeli 17-6.
M e t o d a 2 − jako wynik dwuwymiarowego przekształcenia Fouriera iloczynu jądra φ(ξ, τ)
oraz wąskopasmowej, symetrycznej funkcji nieoznaczoności sygnału WFNx(ξ, τ):
+∞ +∞
j 2 π( ξ t − τ f )
S xC (t , f ) = ∫ ∫ WFN x (ξ, τ)φ(ξ, τ)e
s
dτdξ (17.78)
−∞ −∞
gdzie:
+∞
 τ  τ
WFN xs , y ( ξ, τ) = ∫x  t +  y *  t −  e − j 2 πξ t dt (17.79)
−∞ 
2  2

M e t o d a 3 − jako wynik dwuwymiarowego splotu reprezentacji Wignera (Wignera-Ville’a)


SxW(V)(t, f ) sygnału z funkcją W(t, f ), otrzymaną z dwuwymiarowego przekształcenia Fouriera
jądra φ(ξ, τ):
+∞ +∞
S xC (t , f ) = ∫ ∫ SW
x
(V )
(u, v )W ( t − u, f − v ) dudv (17.80)
−∞ −∞
gdzie:
+∞ +∞ +∞
W (t , f ) = ∫ ∫ φ( ξ, τ) e j 2 π( ξ t −τ f ) d ξ d τ = ∫ w( t , τ) e − j 2 πτ f d τ (17.81)
−∞ −∞ −∞

Jak wynika z pobieżnego porównania możliwości numerycznego wyznaczania funkcjonału


(17.73), na szczególną uwagę zasługuje metoda pierwsza, oparta na równaniach od (17.74) do
(17.77). Jest to bowiem metoda najmniej złożona obliczeniowo i równocześnie najlepiej na-
dająca się do analizy potokowej długich zapisów sygnałów. Jak będzie dalej pokazane metoda
druga jest najbardziej efektywna, jeśli chodzi o możliwości eliminacji z widma TF pasożytni-
czych składowych (zakłóceń) interferencyjnych.
Dyskretyzacja równań (17.74) − (17.77) prowadzi do następujących zależności:
N −1 2π
π − jk l
S xC, y ( n, l ;w) = 2 ∑ Rxav, y (n, k )e L (17.82)
L k = − N +1
n + ( M −1)
Rxav, y (n, k ) = ∑ w ( n − m, k ) R x , y ( n , k ) (17.83)
m = n − ( M −1)

Rx , y (n, k ) = x(n + k ) y * (n − k ) (17.84)

gdzie l = 0, 1, ..., L − 1, L = 2N − 1, Rx(n, k) oznacza dyskretną funkcję „chwilowej”, symet-


rycznej autokorelacji spróbkowanego sygnału x(n), natomiast Rxav(n, k) jest jej wersją wygła-
dzoną względem argumentu n za pomocą filtra w(m, k), −M + 1 ≤ m ≤ M − 1, −N + 1 ≤ k ≤ N − 1
(patrz tabela 17-7).
480 Metody czasowo-częstotliwościowej analizy sygnałów

Tab. 17-7. Równania dyskretnych funkcji wygładzających w(m,k) dla wybranych reprezentacji czasowo-
-częstotliwościowych z klasy Cohena (hN (k), gM (m) − standardowe symetryczne okna widmowe, unormo-
wane lub nie, o długości 2N−1 i 2M−1)

Dyskretna funkcja w(m,k) Wartość M


Nazwa reprezentacji
−(M−1) ≤ m ≤ (M−1), −(N−1) ≤ k ≤ (N−1)
Born-Jordan 1 /(2 k + 1), dla m ≤ k M=N
(BJ) lub (SINC) 
 0, dla m > k
Zhao-Atlas-Marks II (ZAM) h N ( k ), dla m ≤ k M=N
lub (CKD) 
 0, dla m > k
Jeong-Williams  1 M=N
(JW) lub (RID)  h k (m ), dla m ≤ k
2k +1
0, dla m > k

Choi-Williams σ 1  σm 2  M=N
(CW) lub (ED) exp  − 2 
4 π 2 k + 1  4k 
Choi-Williams σ 1  σm 2  M>1
RECT
z funkcjami okien gM ( m ), hN ( k ) exp − 2 
4 π 2 k + 1  4k 
(WCW) lub (WED)
Levin (LEV) δ(m + k ) M=N
Page (PAG) δ(m − k ) M=N
Rihaczek (RIH) δ( m − k ) M=N
Rihaczek rzeczywisty 0,5 ⋅  δ ( m + k ) + δ ( m − k ) M=N

Spektrogram (SPEC)  g M ( m + k ) g M ( m − k ), dla m + k ≤ M − 1 M=N



 0, dla pozostałych
Spektrogram 1 1, dla m ≤ σ((N − 1) − k ) M = σ⋅N
zmodyfikowany  σ ∈ [0,1]
2 N − 1 0, dla pozostałych
Pseudoreprezentacja 2 M=1
δ ( m ) hN ( k )
Wignera (PW)
Pseudoreprezentacja
2 M>1
Wignera wygładzona (SPW) g M ( m ) hN ( k )

Rxav(n, k) może być interpretowane jako estymata „lokalnej” funkcji autokorelacji. Macierz
w(m, k) jest dyskretną wersją ciągłej funkcji w(t, τ), związanej z jądrem φ(ξ, τ) odwrotnym
przekształceniem Fouriera (17.77). Jest ona dana lub wyznaczana tylko raz na początku, a na-
stępnie stała podczas obliczeń. Parametry N i M oznaczają odpowiednio rząd widma oraz rząd
wygładzania, a n jest dyskretnym czasem. Sygnał dyskretny x(n) o wartościach rzeczywistych
jest uzyskiwany drogą spróbkowania sygnału ciągłego x(t) z częstotliwością fpr. Częstotliwość
ta powinna być co najmniej czterokrotnie większa od maksymalnej częstotliwości fmax, wystę-
pującej w sygnale (fpr > 4fmax; fpr ↔ 2π).
Z zależności (17.82) − (17.84) można wyznaczyć dowolną dyskretną reprezentację czaso-
wo-częstotliwościową sygnału x(n), należącą do klasy Cohena. Należy jedynie dysponować
dyskretnymi postaciami w(m, k) ciągłych funkcji wygładzających w(t, τ) poszczególnych re-
prezentacji. W praktyce macierz w(m, k) jest uzyskiwana albo metodą dyskretyzacji ciągłej
funkcji w(t, τ), albo w wyniku odwrotnej dyskretnej transformaty Fouriera dyskretnej wersji
Reprezentacje czasowo-częstotliwościowe z klasy Cohena 481

jądra φ(ξ, τ) na podstawie (17.77) (np. reprezentacje uogólnionego Choi-Williamsa, Nutalla,


Costy-Boudreaux-Bartels i Butterwortha). Przykładowe definicje ciągłych funkcji φ(ξ, τ)
i w(t, τ) są przedstawione w tabeli 17-6, a definicje przykładowych dyskretnych funkcji w(m, k)
są podane w tabeli 17-7. Przedziały zmienności parametrów m i k przyjęto w niej jako: −M+
+1 ≤ m ≤ M − 1, −N + 1 ≤ k ≤ N − 1. Wartość M jest zmienna i różna dla poszczególnych repre-
zentacji. Funkcje hN(k) i gM(m), występujące w tabeli 17-7, oznaczają dowolne nieparzyste,
unormowane lub nieunormowane, symetryczne okna widmowe (Bartletta, Blackmana, Ham-
minga, Hanninga, Kaisera itd.) o długości 2N−1 (−N + 1 ≤ k ≤ N − 1) i 2M − 1 (−M + 1 ≤
≤ m ≤ M − 1), a δ(n) jest funkcją delta Kroneckera (δ(n = 0) = 1, δ(n ≠ 0) = 0).
Na rysunku 17.19 graficznie zaprezentowano kilka z wybranych najważniejszych funkcji wa-
gowych w(m, k), zdefiniowanych w tabeli 17-7. Ilustruje on najważniejsze rodzaje kształtów
funkcji wagowych. W celu uwidocznienia wielkości pola iloczynu x(n + k)x*(n − k) objętego uś-
rednianiem, wykorzystano w tym przypadku jedynie okna prostokątne.
Strukturę obliczeniową algorytmu służącego do wyznaczania dowolnej reprezentacji z klasy
Cohena (17.82) − (17.84) można bardzo prosto zinterpretować graficznie w przestrzeni iloczy-
nu wektorowego sygnałów x(n + k) i x*(n − k). Ponieważ struktura ta jest taka sama w przypad-
ku wyznaczania widm własnych i wzajemnych (y*(n − k) zamiast x*(n − k) we wzorze (17.84)),
dlatego w celu większej ogólności na rysunkach 17.20 i 17.21 przyjęto oznaczenie y*(n − k) =
= x*(n − k).
Po wprowadzeniu nowych zmiennych i oraz j w (17.84): i = n + k, j = n − k, funkcja Rx(n, k)
może być zinterpretowana jako wynik iloczynu wektorowego dwóch wektorów: x(i) i x*(j).
Równanie (17.83) przedstawia wówczas operację wygładzania realizowanego w przestrzeni
iloczynu wektorowego. Dla konkretnej wartości n daje ono jako rezultat (2N − 1)-elementowy
wektor Rxav(n, k), k = −(N − 1), ..., 0, ..., (N − 1), który może być interpretowany jako estymata
„lokalnej” funkcji autokorelacji wzajemnej dla chwili czasowej n. Ostateczną estymatę widma
wzajemnego sygnałów, związanego z chwilą n, otrzymuje się w wyniku obliczenia dyskretnej
transformaty Fouriera wektora Rxav(n, k) względem argumentu k.
Załóżmy obecnie, że naszym celem jest wyznaczenie wzajemnej pseudoreprezentacji Wignera
(M = 1, w(m, k) − dane w tabeli 17-7, hN(k) − okno prostokątne), wówczas wiersze czasowo-
-częstotliwościowej macierzy SxC(n, lπ/L; w), zdefiniowanej przez (17.82), są otrzymane meto-
dą wykonania dyskretnej transformaty Fouriera na kolejnych 2N−1 elementowych wektorach
danych x(i)x*(j), leżących na prostych prostopadłych do osi n. Wektory te są położone
symetrycznie względem ich punktów środkowych (N-tych), należących do osi n. Sytuację tę
ilustruje rysunek 17.20. Zaznaczonych jest na nim siedem odcinków łączących pary x(i)x*(j),
które są niezbędne do wyznaczenia siedmiu kolejnych widm pseudoreprezentacji Wignera
(N = 4, 2N − 1 = 7) dla chwil czasowych n = 4, 5, 6, 7, 8, 9, 10. Należy w tym miejscu zwrócić
uwagę na istotny fakt, że nie wszystkie elementy przestrzeni iloczynu wektorowego par
x(i)x*(j), leżących na prostych prostopadłych do osi n, są wykorzystywane do obliczania
kolejnych estymat widm „chwilowych”. Używane pary są zaznaczone na rysunku 17.20 za
pomocą symbolu „o”.
Rysunek 17.20 daje możliwość prostej interpretacji w przestrzeni iloczynu wektorowego
x(i)x*(j) numerycznego wyznaczania nie tylko pseudoreprezentacji Wignera, ale także dowol-
nej reprezentacji należącej do klasy Cohena.
Dla przykładu porównajmy obecnie wyznaczanie jednego widma „chwilowego” w pseudo-
reprezentacji Wignera (rysunek 17.21a) i wygładzonej pseudoreprezentacji Wignera (rysunek
17.21b) dla n = 7, N = 4 i M = 4. W pierwszym przypadku, zaprezentowanym już na rysunku
17.20, wymnaża się elementy x(n + k)y*(n − k) wektora Rx(n, k) (n = const i −N + 1 ≤ k ≤ N − 1),
482 Metody czasowo-częstotliwościowej analizy sygnałów

leżące na zaznaczonym odcinku, przez odpowiednie współczynniki podniesionej do kwadratu


funkcji okna |hN(k)|2 i oblicza się (2N − 1)-punktowe DFT iloczynu. W przypadku drugim naj-
pierw sumuje się z wagami gM(m) odpowiednie pary elementów x(n + k + m)y*(n − k + m), leżące
na odcinkach zaznaczonych cienkimi liniami (n = const, −N + 1 ≤ k ≤ N − 1 lecz k = const dla
każdego odcinka, −M + 1 ≤ m ≤ M − 1), a następnie wymnaża się wynikowy wektor Rxav(n, k)
przez |hN(k)|2 i oblicza się (2N − 1)-punktowe DFT iloczynu podobnie jak poprzednio.

a) b)

c) d)

e) f)

Kierunek i oznaczenie osi:

k n
Rys. 17.19. Przykładowe dyskretne funkcje wygładzające w(m, k) dla prostokątnych funkcji okien widmo-
wych hN(k) i gM(m) z tablicy 17.7 (N = 16): a) pseudoreprezentacja Wignera, b) wygładzona pseudorepre-
zentacja Wignera (M = 8), c) Zhao-Atlas-Marks II, d) klasyczny spektrogram, e) Born-Jordan, f) Choi-Wil-
liams
Reprezentacje czasowo-częstotliwościowe z klasy Cohena 483

y*( j )
1 2 3 4 5 6 7 8 9 10 11 12 13 j
1 o x o x o x o x o x o x o
2
2 x o x o x o x o x o x o x
3
3 o x o x o x o x o x o x o
4
4 x o x o x o x o x o x o x
5 i=n+k
x(i)
5 o x o x o x o x o x o x o
6 j=n-k
6 x o x o x o x o x o x o x
7
7 o x o x o x o x o x o x o
8
8 x o x o x o x o x o x o x
9
9 o x o x o x o x o x o x o
10
10 x o x o x o x o x o x o x x ( 10 ) y* ( 13 )
11
11 o x o x o x o x o x o x o
12
12 x o x o x o x o x o x o x
13
13 o x o x o x o x o x o x o

k
i
n

Rys. 17.20. Graficzna interpretacja wyznaczania dyskretnej w z a j e m n e j pseudoreprezentacji Wignera


w przestrzeni iloczynu wektorowego spróbkowanych sygnałów analizowanych x(i) i y*(j). Symbolem „o” są
oznaczone wartości iloczynów x(i)y*(j), których używa się do obliczania reprezentacji, symbolem zaś „x”
− wartości nie używane. Odcinkami są połączone dane, na których jest wykonywana dyskretna transformata
Fouriera. Obliczane jest widmo rzędu N = 4 (2N − 1 = 7) dla chwil czasowych: 4, 5, 6, 7, 8, 9, 10. Dla
w ł a s n e j pseudoreprezentacji Wignera jednego sygnału: y(j) = x(j)

Wyznaczanie pojedynczych widm „chwilowych” w przypadku innych reprezentacji jest ana-


logiczne jak dla wygładzonej pseudoreprezentacji Wignera. Jedyną różnicą jest inny kształt
funkcji w(m, k). Na rysunkach 17.21c i 17.21d jest przedstawione obliczanie pojedynczego
widma spektrogramu oraz reprezentacji Born-Jordana (podobnie Zhao-Atlas-Marks II i Jeong-
-Williams; różne są tylko wartości wag w(m, k)). Funkcje wagowe w(m, k) wszystkich repre-
zentacji są zebrane w tabeli 17-7.
W podobny sposób, jak opisany powyżej, można interpretować pozostałe metody wyznaczania
reprezentacji z klasy Cohena na podstawie układów równań {(17.78), (17.79)} i {(17.80),
(17.81)}. Przykładowo wąskopasmową symetryczną funkcję nieoznaczoności (17.79) otrzy-
muje się w wersji dyskretnej jako wynik odwrotnej transformaty Fouriera iloczynów x(i)x*(j),
leżących na prostych zaznaczonych cienkimi liniami na rysunku 17.21b. W dziedzinie fun-
kcji nieoznaczoności nieoscylacyjne składowe własne widma są skoncentrowane w otoczeniu
punktu (ξ = 0, τ = 0), a oscylacyjne składowe wzajemne w pewnym oddaleniu od niego. Daje
to możliwość łatwego usunięcia składowych interferencyjnych metodą wymnożenia funkcji
nieoznaczoności sygnału z wartościami maski, przyjmującymi tylko wartości 0 i 1. Po powro-
cie do dziedziny iloczynu wektorowego x(i)x*(j) za pomocą serii odpowiednich prostych trans-
formacji Fouriera (wzdłuż cienkich linii z rysunku 17.21b) uzyskuje się zmodyfikowane jądra
484 Metody czasowo-częstotliwościowej analizy sygnałów

Wignera, na którym wykonuje się dopiero właściwą serię właściwych transformacji Fouriera
(wzdłuż grubej linii z rysunku 17.21b oraz linii do niej równoległych). Metoda ta pozwala na
skuteczne usunięcie składowych interferencyjnych z widma TF oraz poprawę jego czytelności.
W zaawansowanych metodach maska modyfikująca funkcję nieoznaczoności sygnału jest
dobierana w sposób adaptacyjny.

1 2 3 4 5 6 7 8 9 10 11 12 13 y*( j ) 1 2 3 4 5 6 7 8 9 10 11 12 13 y*( j )
1 o x o x o x o x o x o x o 1 o x o x o x o x o x o x o

2 x o x o x o x o x o x o x 2 x o x o x o x o x o x o x

3 o x o x o x o x o x o x o 3 o x o x o x o x o x o x o

4 x o x o x o x o x o x o x 4 x o x o x o x o x o x o x

5 o x o x o x o x o x o x o 5 o x o x o x o x o x o x o

6 x o x o x o x o x o x o x 6 x o x o x o x o x o x o x

7 o x o x o x o x o x o x o 7 o x o x o x o x o x o x o

8 x o x o x o x o x o x o x 8 x o x o x o x o x o x o x

9 o x o x o x o x o x o x o 9 o x o x o x o x o x o x o

10 x o x o x o x o x o x o x 10 x o x o x o x o x o x o x

11 o x o x o x o x o x o x o 11 o x o x o x o x o x o x o

12 x o x o x o x o x o x o x 12 x o x o x o x o x o x o x

13 o x o x o x o x o x o x o 13 o x o x o x o x o x o x o

x(i) x(i)
a/ b/

1 2 3 4 5 6 7 8 9 10 11 12 13 y*( j ) 1 2 3 4 5 6 7 8 9 10 11 12 13 y*( j )
1 o x o x o x o x o x o x o 1 o x o x o x o x o x o x o

2 x o x o x o x o x o x o x 2 x o x o x o x o x o x o x

3 o x o x o x o x o x o x o 3 o x o x o x o x o x o x o

4 x o x o x o x o x o x o x 4 x o x o x o x o x o x o x

5 o x o x o x o x o x o x o 5 o x o x o x o x o x o x o

6 x o x o x o x o x o x o x 6 x o x o x o x o x o x o x

7 o x o x o x o x o x o x o 7 o x o x o x o x o x o x o

8 x o x o x o x o x o x o x 8 x o x o x o x o x o x o x

9 o x o x o x o x o x o x o 9 o x o x o x o x o x o x o

10 x o x o x o x o x o x o x 10 x o x o x o x o x o x o x

11 o x o x o x o x o x o x o 11 o x o x o x o x o x o x o

12 x o x o x o x o x o x o x 12 x o x o x o x o x o x o x

13 o x o x o x o x o x o x o 13 o x o x o x o x o x o x o

x(i) x(i)
c/ d/
Rys. 17.21. Interpretacja graficzna wyznaczania różnych w z a j e m n y c h reprezentacji czasowo-często-
tliwościowych należących do klasy Cohena w przestrzeni iloczynu wektorowego sygnałów x(i) i y*(j) dla
n = 7, N = 4, M = 4: a) pseudoreprezentacja Wignera, b) wygładzona pseudoreprezentacja Wignera, c)
spektrogram, d) Born-Jordan, Zhao-Atlas-Marks II i Jeong-Williams. Dla w ł a s n y c h reprezentacji TF:
y(j) = x(j)

Na rysunku 17.22 przedstawiono przykładowe widma TF wyznaczone różnymi metodami.


Analizowano sygnał złożony, który składał się z dwóch sygnałów z liniową modulacją często-
tliwości i gaussowskimi obwiedniami czasowymi. Reprezentacja Wignera (rys. 17.22a) bardzo
dokładnie pokazuje zmianę częstotliwości, ale występuje w niej także oscylacyjna składowa
pasożytnicza (interferencyjna). Spektrogram (rys. 17.22b) nie jest w stanie odtworzyć zbyt
szybkich dla niego zmian częstotliwości. Inne reprezentacje (rys. 17.22c, 17.22d, 17.22e)
zmniejszają amplitudę pasożytniczych oscylacji, ale w wyraźny sposób deformują widmo. Naj-
lepszy wynik otrzymuje się w przypadku zastosowania metody eliminacji zakłóceń w dziedzi-
nie funkcji nieoznaczoności (rys. 17.22f).
Reprezentacje czasowo-częstotliwościowe z klasy Cohena 485

a) pseudoreprezentacja WV b) spektrogram (STFT)

L L

K K

c) wygładzona pseudoreprezentacja WV d) Choi-Williams

L L

K K

e) Born-Jordan f) filtracja w przestrzeni WFN

L L

K K

f
t

Rys. 17.22. Przykładowe reprezentacje czasowo-częstotliwościowe sygnału złożonego (dwa sygnały skła-
dowe o liniowej modulacji częstotliwości i gaussowskiej obwiedni czasowej). WV− Wigner-Ville
486 Metody czasowo-częstotliwościowej analizy sygnałów

17.7. Przykłady zastosowań


Potencjalny obszar zastosowań przedstawionych w tym rozdziale czasowo-częstotliwościo-
wych metod analizy sygnałów niestacjonarnych jest bardzo duży i dotyczy tych wszystkich
sytuacji pomiarowych, w których interesuje nas wydobywanie informacji zawartej w zmie-
niającym się w czasie lub w przestrzeni widmie częstotliwościowym badanego sygnału. Infor-
mację tę może stanowić zarówno ogólny kształt widma chwilowego sygnału, jak i konkretny
rozkład amplitud, faz i częstotliwości chwilowych jego składowych. Z jednej strony zmienność
widma może mieć charakter samoistny i być bezpośrednio lub pośrednio związana z naturalną
zmiennością stanu obserwowanego, identyfikowanego lub sterowanego obiektu (procesu) ge-
nerującego dany sygnał (np. sygnał mowy ludzkiej, drgania mechaniczne pracujących części
maszyn). Z drugiej zaś strony może być wymuszona i wynikać ze świadomego stosowania
specjalnych modulacyjnych metod technicznych (np. kodowanie i przesyłanie sygnałów w te-
lekomunikacji, defektoskopia i radiolokacja realizowana metodą echografii impulsowej, para-
metrycznie przestrajane generatory częstotliwości stosowane w miernictwie elektrycznym).
Ogólnie można więc powiedzieć, że przedstawione w pracy metody analizy szczególnie nadają
się do szeroko rozumianej identyfikacji i detekcji częstotliwościowej.
W związku z tym, że analizie częstotliwościowej są poddawane nie tylko sygnały czasowe, ale
także przestrzenne (np. obrazy, krzywizny powierzchni materiałów, gęstości struktur atomo-
wych w dyfraktometrii rentgenowskiej), dyskutowane metody mogą być także wykorzystywane
i w takim przypadku. Będą one informować wówczas o zmianie częstotliwości występowania
określonych cech w przestrzeni a nie w czasie.
Ogólnie reprezentacje sygnałów typu czas-częstotliwość i czas-skala są wykorzystywane do
ww. celów między innymi w wibroakustyce, analizie sygnałów biologicznych (w tym sygnału
mowy, EKG, EEG), echografii impulsowej (geosejsmice, radiolokacji, ultrasonograficznej dia-
gnostyce medycznej oraz defektoskopii materiałowej) oraz telekomunikacji. W wibroakustyce
analiza czasowo-częstotliwościowa drgań pracujących maszyn i urządzeń lub ich części, zwła-
szcza w stanach przejściowych czyli np. w fazie rozruchu, może dostarczyć informacji nie tyl-
ko o poziomie hałasu, ale także o ewentualnych defektach i ich zużyciu. Podczas analizy
sygnałów pochodzenia biologicznego daje ona przykładowo możliwość rozpoznania różnych
cech osobniczych (np. śpiew ptaków), stanu w jakim znajduje się źródło sygnału (np. analiza
EKG i EEG) lub zawartej w nich „treści” (analiza zmienności formantów wykorzystywana
w procedurach rozpoznawania sygnału mowy ludzkiej). W echografii impulsowej, polegającej
na wysyłaniu sygnału impulsowego przez nadajnik i na analizie jego odbić rejestrowanych
przez odbiornik, metody czasowo-częstotliwościowe są wykorzystywane do:
• diagnostyki poprawności budowy i funkcjonowania organów wewnętrznych człowieka
w ultrasonografii medycznej (np. poprawność budowy i pracy serca w kardiologii);
• detekcji defektów struktur materiałowych w defektoskopii ultrasonograficznej (np. wew-
nętrzne niejednorodności materii typu dziury, pęcherze powietrzne, pęknięcia);
• analizy geologicznej struktur pokrywy kuli ziemskiej w geosejsmice (m.in. defekty, złoża
surowcowe);
• estymacji prędkości, odległości i kształtu obiektów w systemach aktywnej radiolokacji po-
wietrznej i morskiej.
W telekomunikacji stosuje się je do demodulacji fazowo-częstotliwościowej transmitowanych
sygnałów.
Ponadto poza analizą metody czasowo-częstotliwościowe dają także możliwość dwuwymia-
rowego przetwarzania sygnałów w dziedzinie czas-częstotliwość. Stanowią w tym przypadku
uzupełnienie metod przetwarzania tylko w dziedzinie czasu i tylko w dziedzinie częstotliwości.
Metody czasowo-częstotliwościowej analizy sygnałów 487

Przetwarzanie czasowo-częstotliwościowe polega na wyznaczaniu macierzy reprezentacji TF,


jej modyfikacji oraz na syntezie sygnału ze zmodyfikowanej macierzy widma. Modyfikacja
najczęściej stanowi operację wymnożenia elementów macierzy widma z odpowiednimi ele-
mentami maski, przyjmującymi wartości 0 lub 1. W ten sposób jest realizowane eliminowanie
jednych składowych sygnału (0) przy równoczesnym pozostawianiu innych jego elementów
(1). Przy użyciu wyżej wymienionej metody przeprowadza się separację różnych składowych
sygnału złożonego (np. separacja ech w echografii impulsowej, przykładowo badaniach geo-
sejsmicznych separacji sygnałów S-wave i P-wave) oraz odfiltrowanie szumu od sygnału zmo-
dulowanego częstotliwościowo w całej szerokości użytecznego pasma (od 0 do połowy często-
tliwości próbkowania). W tym ostatnim przypadku maska powinna śledzić zmianę częstotli-
wości i przestrajać się adaptacyjnie.
Dalej przedstawiono cztery przykłady zastosowania różnych metod analizy czasowo-często-
tliwościowej w odniesieniu do rzeczywistych sygnałów biomedycznych. Na rysunkach 17.23
i 17.24 przedstawiono wyniki analizy fragmentu mowy ludzkiej (wypowiedzi „jeden dwa” oraz
dźwięcznej głoski „a”), na rysunku 17.25 − sygnału fonokardiogramu, a na rysunku 17.26 −
jednego z sygnałów z sześciokanałowego elektrokardiogramu. W każdym z przypadków
przedstawiono analizowany sygnał czasowy, jego klasyczne widmo Fouriera oraz kilka wyzna-
czonych reprezentacji TF. Jak widać widmo Fouriera analizowanych sygnałów niestacjonar-
nych daje ogólną informację o występowaniu poszczególnych częstotliwości w całym sygnale
i nie określa ich zmienności w czasie. Z kolei reprezentacje TF umożliwiają śledzenie ewolucji
widm chwilowych i lepszą lub gorszą estymację, występujących w sygnale modulacji amplitu-
dowo-częstotliwościowych. Ich znajomość może być wykorzystana do celów diagnostycznych
(odróżnienie stanu „zdrowia” od „choroby”).
Zmienność złożonego widma TF jest szczególnie widoczna w przypadku analizy sygnału mo-
wy. Na rysunkach 17.23c÷17.23f można wyraźnie zauważyć częstotliwość podstawową sygna-
łu mowy i jej harmoniczne oraz ich zmiany amplitudowo-częstotliwościowe. Analiza mowy
może mieć na celu określenie wypowiadanej treści, osoby mówcy lub p a t o l o g i i g ł o s u
(narządów mowy). Ten ostatni przypadek jest przedstawiony na rysunku 17.24. Jak widać
widmo TF głoski „a” mówcy zdrowego (rys. 17.24a) jest o wiele bardziej regularne od tego
samego widma dla mówcy z patologią organów mowy (rys. 17.24b).
Wybór reprezentacji TF ma kluczowe znaczenie na postać uzyskiwanego widma i możliwość
jego interpretacji. W przypadku sygnału mowy (rysunek 17.23) inne wyniki uzyskuje się dla
każdej z reprezentacji TF, każda z nich ma swoje wady i zalety. T r a n s f o r m a c j a f a l -
k o w a oferuje lepszą rozdzielczość częstotliwościową i gorszą rozdzielczość czasową dla
częstotliwości niskich, natomiast dla częstotliwości wyższych sytuacja jest odwrotna: rozdziel-
czość częstotliwościowa jest gorsza a czasowa lepsza. Taki rodzaj analizy odpowiada natural-
nej percepcji dźwięków przez organy słuchowe człowieka, który lepiej rozróżnia częstotli-
wości niższe niż wyższe. R e p r e z e n t a c j e z k l a s y C o h e n a charakteryzują się stałą
rozdzielczością w czasie i w częstotliwości oraz są bardziej selektywne niż spektrogram, ale za
to występują w nich pasożytnicze składowe interferencyjne. Z kolei s p e k t r o g r a m jest wol-
ny od interferencji, ale za to bardziej rozmyty w osi czasu i częstotliwości.
Duże różnice są także widoczne dla reprezentacji TF fonokardiogramu (rys. 17.25) i elektro-
kardiogramu (rys. 17.26). W pierwszym przypadku z transformacji Wignera analizowanych
danych wynika, że mamy do czynienia z sygnałem harmonicznym o nieliniowo malejącej czę-
stotliwości chwilowej, której spektrogram nie jest w stanie poprawnie odtworzyć. W przypad-
ku drugim, kiedy analizowany sygnał ma wyjątkowo impulsowy charakter, różne definicje
widma chwilowego prowadzą do diametralnie różnych wyników. Rozwaga jest tutaj szczegól-
nie wskazana.
488 Metody czasowo-częstotliwościowej analizy sygnałów

a) analizowany sygnał czasowy mowy ludzkiej − słowa „jeden dwa"


1.00

0.75

0.50

0.25
sygnał x(t)

0.00

-0.25

-0.50

-0.75

-1.00

0.00 0.25 0.50 0.75 1.00 1.25 1.50


czas [s]

b) moduł widma Fouriera sygnału


0.04

0.04

0.03

0.03
widmo |X(f)|

0.02

0.02

0.01

0.01

0.00

0 500 1000 1500 2000 2500 3000 3500 4000


częstotliwość [Hz]

c) klasyczny skalogram sygnału (17.30), czyli kwadrat modułu jego transformaty falkowej
(10 oktaw, 12 „głosów” na oktawę)

2400 f [Hz]

1200

600

300

150

75

37.5
t [s]
0
0.0 0.3 0.6 0.9 1.2 1.5

Rys. 17.23. Przykład analizy czasowo-częstotliwościowej sygnału mowy ludzkiej z wykorzystaniem wy-
branych metod
Metody czasowo-częstotliwościowej analizy sygnałów 489

d) uogólniona reprezentacja Choi-Williamsa sygnału (tabela 17-6, N = M = 128, Nξ = 1, Mτ = 5, ξ0 = 5,


τ0 = 5; hN(k) − nieunormowane okno Hamminga; zakres częstotliwości 0− 2000 Hz).

e) klasyczny spektrogram sygnału (17.23), czyli kwadrat modułu jego krótkoczasowej transformaty
Fouriera lub transformaty chirp-Z (N = M = 128, okno Hamminga, zakres częstotliwości 0 − 2000 Hz)

f) klasyczny spektrogram sygnału czyli kwadrat modułu jego krótkoczasowej transformaty Fouriera lub
chirp-Z (N = M = 128, okno Hamminga, zakres częstotliwości 0 − 4000 Hz)

Rys. 17.23. (cd.)


490 Metody czasowo-częstotliwościowej analizy sygnałów

a) głos normalny (męski)


1.5 4000

1 3500

0.5 3000

0 2500

f [Hz]
u [V]

-0.5 2000

-1 1500

-1.5 1000

-2 500

-2.5 0
0 0.01 0.02 0.03 0.04 0.05 0 0.5 1 1.5
t [s] t [s]

b) głos patologiczny nr 1 (męski)


1.5 4000

3500
1
3000
0.5
f [H z] 2500
u [V]

0 2000

1500
-0.5
1000
-1
500

-1.5 0
0 0.01 0.02 0.03 0.04 0.05 0 0.5 1 1.5
t [s] t [s]

c) głos patologiczny nr 2 (kobiecy)


2.5 4000

2 3500

1.5 3000

1 2500
f [Hz]
u [V]

0.5 2000

0 1500

-0.5 1000

-1 500

-1.5 0
0 0.01 0.02 0.03 0.04 0.05 0 0.2 0.4 0.6 0.8
t [s] t [s]

Rys. 17.24. Przykładowe przebiegi czasowe głoski dźwięcznej „a” i ich spektrogramy (17.23) (moduł
krótkoczasowej transformacji Fouriera − STFT) dla głosu normalnego i patologicznego
Metody czasowo-częstotliwościowej analizy sygnałów 491

a) b)

1 0.35

0.5 0.3

0.25
0
0.2
u [V]

-0.5
0.15
-1
0.1

-1.5 0.05

-2 0
0 2 4 6 8 10 0 5 10 15 20 25
t [s] f [Hz]

c) d)

25 20

20
15

15
f [H z]

f [H z]

10
10

5
5

0 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5
t [s] t [s]

Rys. 17.25. Fonokardigram serca: a) analizowany sygnał wejściowy, b) jego widmo Fouriera liczone za
pomocą DFT, c) krótkoczasowa reprezentacja Fouriera (STFT), d) reprezentacja TF Wignera
492 Metody czasowo-częstotliwościowej analizy sygnałów

a) przebieg czasowy: cały (po lewej), analizowany fragment (po prawej)


0.2

0 0

-0.2 -0.2
u [V]

u [V]
-0.4 -0.4

-0.6 -0.6

-0.8 -0.8
0 1 2 3 4 5 6 0.5 1 1.5 2 2.5
t [s] t [s]

b) widmo Fouriera całego sygnału: wynik DFT (po lewej), wynik transformacji chirp-Z (po prawej)

0.1 0.1

0.08 0.08

0.06 0.06

0.04 0.04

0.02 0.02

0 10 20 30 40 0 5 10 15 20 25
f [Hz] f [Hz]

c) reprezentacje czasowo-częstotliwościowe: STFT (po lewej), pseudoreprezentacja Wignera (po prawej)


25

20

15
f [H z]

10

0
0.5 1 1.5 2 2.5
t [s]

Rys. 17.26. Przykład analizy jednego z sygnałów z sześciokanałowego elektrokardiogramu


Metody czasowo-częstotliwościowej analizy sygnałów 493

17.8. Przykład ćwiczenia komputerowego


W tabeli 17-8 jest przedstawiony program komputerowy, napisany w języku Matlab, wykorzy-
stujący algorytmy krótkoczasowej transformacji Fouriera STFT oraz transformacji Wignera,
szczegółowo opisane w niniejszym rozdziale. Zastosowano je do analizy sumy sygnałów
sinusoidalnych oraz sumy sygnałów z liniową modulacją częstotliwości. Jego szczegółowa
analiza oraz testowanie ma zapoznać Czytelnika z niuansami podstawowych narzędzi stosowa-
nych do czasowo-częstotliwościościowej analizy sygnałów niestacjonarnych: „rozmyciem”
widma STFT oraz pasożytnimi interferencjami pomiędzy różnymi składowymi sygnałów
złożonych, występującymi w widmie Wignera. Program pokazuje też ograniczenia zastoso-
wania dyskretnej transformacji Fouriera do analizy częstotliwościowej sygnałów zmiennych
w czasie.
Jako ćwiczenie pozostawiamy Czytelnikowi napisanie programu do wyznaczania dowolnej
reprezentacji czasowo-częstotliwościowej z klasy Cohena na podstawie równań (17.82) −
(17.84) (dyskretna transformacja Fouriera z jądra Wignera, wygładzonego „wagowo” w osi
czasu).

Tab. 17-8. Porównawcza analiza czasowo-częstotliwościowa sygnałów z zastosowaniem krótkoczasowej


transformacji Fouriera i Wignera

% Ćwiczenie: Czasowo-częstotliwościowa analiza sygnałów

clear all; clf; subplot(111);

sygnal = 3; % wybór sygnału: 1 = SIN, 2 = 2xSIN, 3 = LFM, 4 = 2xLFM


AM = 0; % wybór modulacji AM: 0=nie, 1=tak
alfa = 10; % współczynnik kształtu krzywej Gaussa modulacji AM
nx = 1000; % długość sygnału testowego
M = 256; % długość okna analizy − STFT <=> M= 2^p, Wigner <=> M-1=2^p-1
dM = 20; % przesunięcie okna analizy krótkoczasowej
nM = 50; % ile widm chwilowych należy wyznaczyć

% Generacja sygnału -------------------------------------------------------------------

fpr = 1000; % częstotliwość próbkowania [Hz]


dt = 1/fpr; t = 0 : dt : (nx-1)*dt; % chwile próbkowania

if (sygnal==1)
fx = 100; % częstotliwość sinusoidy [Hz]
fmin = 50; fmax = 150; df=1; % zakres częstotliwości pokazywanych w widmie Fouriera
x = sin( 2*pi*fx*t ); % sinusoida
end
if (sygnal==2)
fx1 = 100; % częstotliwość sinusoidy 1 [Hz]
fx2 = 200; % częstotliwość sinusoidy 2 [Hz]
fmin = 50; fmax = 250; df=1; % zakres częstotliwości w widmie Fouriera
x1 = sin(2*pi*fx1*t); % sinusoida 1
x2 = sin(2*pi*fx2*t); % sinusoida 2
x = x1 + x2; % suma
end
if (sygnal==3)
fx = 100; % częstotliwość początkowa sygnału LFM
dfx = 300; % przyrost częstotliwości Hz/sek
fmin = 0; fmax = 500; df = 2; % zakres częstotliwości widma Fouriera
494 Metody czasowo-częstotliwościowej analizy sygnałów

x = sin( 2*pi* (fx*t + 0.5*dfx*t.^2) ); % sygnal LFM


end
if (sygnal==4)
fx1 = 50; % częstotliwość początkowa sygnału LFM 1
dfx1 = 300; % przyrost częstotliwości Hz/sek
fx2 = 125; % częstotliwość początkowa sygnału LFM 2
dfx2 = 300; % przyrost częstotliwości Hz/sek
fmin = 0; fmax = 500; df = 2; % zakres częstotliwości widma Fouriera
x1 = sin(2*pi*(fx1*t + 0.5*dfx1*t.^2)); % sygnał LFM1
x2 = sin(2*pi*(fx2*t + 0.5*dfx2*t.^2)); % sygnał LFM2
x = x1 + x2; % suma
end

nmax = nx/2-0.5; n = -nmax:1:nmax; % funkcja obwiedni czasowej


w = exp( -alfa * pi * (n/nmax).^2); % (modulacji amplitudowej)

y = x .* w; % sygnał z obwiednią
subplot(311); plot(t,x); grid; title('Sygnał analizowany bez obwiedni');
subplot(312); plot(t,w); grid; title('Obwiednia czasowa');
subplot(313); plot(t,y); grid; title('Sygnał z obwiednią'); xlabel('czas [s]'); pause

% Widmo Fouriera sygnału ---------------------------------------------------------------


f1 = fmin : df : fmax; f2 = 0 : df : (length(f1)-1)*df;
X = freqz(x,1,f1,fpr); X=X/(nx/2);
W = freqz(w,1,f2,fpr); W=W/(nx/2);
Y = freqz(y,1,f1,fpr); Y=Y/(nx/2);

if (sygnal==1 | sygnal==2)
subplot(311); stem(f1,abs(X)); grid; title('WIDMO Sygnał');
subplot(312); stem(f2,abs(W)); grid; title('WIDMO Obwiednia');
subplot(313); stem(f1,abs(Y)); grid; title('WIDMO Sygnał+Obwiednia'); xlabel('f[Hz]');
pause
end
if (sygnal==3 | sygnal==4)
subplot(311); plot(f1,abs(X)); grid; title('WIDMO Sygnał');
subplot(312); plot(f2,abs(W)); grid; title('WIDMO Obwiednia');
subplot(313); plot(f1,abs(Y)); grid; title('WIDMO Sygnał+Obwiednia'); xlabel('f[Hz]');
pause
end

% Krótkoczasowe widma Fouriera i Wignera -----------------------------------------------

if (AM==0) s = x; end % sygnał


if (AM==1) s = y; end % sygnał z obwiednią AM

% STFT

MF = M; % podstaw M dla krótkoczasowej transformacji Fouriera (STFT)


w=blackman(MF); w=w'; % wybór okna analizy
m=1; % numer pierwszej próbki analizowanej
nr=1; % inicjalizacja: numer widma
STFT=[]; % macierz wynikowa krótkoczasowej transformacji Fouriera
while( m+(MF-1)<=nx & nr<=nM ) %
y=s(m:m+(MF-1)); % wytnij fragment sygnału
y=y.*w; % wymnóż go z oknem
Y=fft(y); % oblicz transformatę Fouriera
Y=abs(Y)/(MF/2); % moduł, skalowanie
Y=Y(1:MF/2+1); % wybierz częstotliwości z zakresu [0, fpr/2]
STFT=[STFT; Y]; % zapamietaj wynik
m=m+dM; nr=nr+1; % zmodyfikuj zmienne robocze
end %
nMF = nr-1; % liczba wyznaczonych widm chwilowych
STFT = STFT';
Metody czasowo-częstotliwościowej analizy sygnałów 495

% Wigner

MW=M-1; M2=(MW+1)/2; % podstaw M dla transformacji Wignera


s=hilbert(s); % sygnał analityczny z x (opcjonalnie)
w=blackman(MW); w=w'; % wybór okna analizy
w=w.^2; % okno do kwadratu
m=1; % numer pierwszej próbki analizowanej
nr=1; % inicjalizacja: numer widma
WD=[]; % macierz wynikowa krótkoczasowej transformacji Wignera
while( m+(MW-1)<=nx & nr<=nM ) %
y=s(m:m+(MW-1)); % wytnij fragment sygnału
z=fliplr(conj(y)); % sprzęgnij i odwróć kolejność próbek
y=y.*z; % oblicz jądro Wignera
y=y.*w; % wymnóż z oknem (podniesionym do kwadratu)
% ver. 1 (WOLNA)
% y=[y(M2:MW) 0 y(1:M2-1)]; % zmień kolejność (pod „symetrię” transformaty Fouriera)
% Y=fft(y)/M2; % oblicz transformację Fouriera
% Y=real(Y); % weź część rzeczywistą
% ver. 2 (SZYBKA)
y=y((MW+1)/2:MW); y(1)=y(1)/2; % zmodyfikuj: weź tylko [środek/2 ... koniec]
Y=fft(y)/(M2/2); % oblicz transformatę Fouriera z M2 punktów
Y=2*real(Y(1:M2)); % przeskaluj, obetnij wynik
%
indx=find(Y<0); Y(indx)=0; % wyzeruj ujemne współczyniki widma (opcjonalnie)
WD=[WD; Y]; % zapamiętej wynik
m=m+dM; nr=nr+1; % zmodyfikuj zmienne robocze
end %
nMW = nr-1; % liczba wyznaczonych widm chwilowych
WD=WD';

% Rysunki widm krótkoczasowych ---------------------------------------------------------

% STFT
t0=(MF/2)*dt; t = t0 : (dM*dt) : t0+(nMF-1)*(dM*dt); nt=length(t);
df=1/(MF*dt); f = 0 : df : (MF/2)*df; f=f'; nf=length(f);
XF=ones(nf,1)*t; YF=f*ones(1,nt);
% Wigner
M2=(MW+1)/2;
t0=M2*dt; t = t0 : (dM*dt) : t0+(nMW-1)*(dM*dt); nt=length(t);
% df=1/((MW+1)*dt); f = 0 : df : MW*df; f=f'/2; nf=length(f); % ver.1 Wignera − WOLNA
df=1/(M2*dt); f = 0 : df : (M2-1)*df; f=f'/2; nf=length(f); % ver.2 Wignera − SZYBKA
XW=ones(nf,1)*t; YW=f*ones(1,nt);
% 3D
subplot(121);
hidden; waterfall(XF,YF,STFT); title('STFT'); xlabel('t [s]'); ylabel('f [Hz]')
colormap([0 0 0]); axis tight; rotacja=[-35 50]; view(rotacja);
subplot(122);
hidden; waterfall(XW,YW,WD); title('Wigner'); xlabel('t [s]'); ylabel('f [Hz]')
colormap([0 0 0]); axis tight; rotacja=[-35 50]; view(rotacja);
pause
clf;
% Kontury
subplot(121);
contour(XF,YF,STFT,10,'-k'); title('STFT'); xlabel('t [s]'); ylabel('f [Hz]'); grid;
subplot(122);
contour(XW,YW,WD,10,'-k'); title('Wigner'); xlabel('t [s]'); ylabel('f [Hz]'); grid;
pause
clf;
18
Zespoły filtrów

18.1. Wprowadzenie
Przetwarzanie sygnałów w podpasmach częstotliwościowych jest wskazane w wielu praktycz-
nych zastosowaniach. Najlepszym tego przykładem mogą być istniejące algorytmy kompresji
sygnałów audio (standardy MPEG-1 i MPEG-2 z poziomami mp1, mp2 i mp3 oraz standard
MPEG-4) i obrazów (standard JPEG 2000) oraz nowoczesne modulacje cyfrowe (szerokopas-
mowe transmultipleksery częstotliwościowe xDSL) stosowane we współczesnych systemach
telekomunikacyjnych. W praktyce inżynierskiej czasowo-częstotliwościowa analiza (rozłoże-
nie) i synteza (złożenie) sygnałów jest dokonywana zazwyczaj metodą reprezentacji czasowo-
-częstotliwościowych lub metodą zespołów filtrów. Obie grupy metod były rozwijane od lat
niezależnie od siebie, chociaż w dużej części stanowią inną formę zapisu tych samych „nakła-
dających się” transformacji ortogonalnych LOT (ang. Lapped Orthogonal Transforms). Roz-
dział w całości będzie poświęcony zespołom filtrów.
Zespoły filtrów składają się z części analizującej i syntezującej. W bloku analizującym cyfro-
wy sygnał wejściowy jest dzielony na M sygnałów pasmowych przez zespół cyfrowych filtrów
pasmowoprzepustowych, pokrywających cały zakres widma sygnału. Sygnały pasmowe są na-
stępnie decymowane (jest pozostawiana co N-ta próbka) i przesyłane (zapisywane), mogą być
dodatkowo poddane kwantyzacji. W części syntezującej sygnały pasmowe są interpolowane
(dodanie N−1 zer w miejsce usuniętych próbek), następnie ponownie filtrowane przez dualne
filtry pasmowoprzepustowe oraz dodawane. W przypadku kiedy zespół filtrów analizujących
i syntezujących spełnia określone wymagania, sygnał zsyntezowany jest równy sygnałowi
wejściowemu (z dokładnością prowadzonych obliczeń numerycznych), czyli zespół ten jako
całość charakteryzuje się właściwością perfekcyjnej rekonstrukcji (PR). Uproszczony schemat
zespołu filtrów jest przedstawiony na rysunku 18.1. Zespół składa się z M podpasm, czyli
z M filtrów analizujących Hm(z) oraz z M filtrów syntezujących Gm(z), m = 0, 1, ..., M−1. Bloki
"↓N" i "↑N" oznaczają operacje decymacji i interpolacji. Kiedy N = M, mamy doczynienia
z próbkowaniem krytycznym sygnałów podpasmowych, dla N > M występuje podpróbkowanie,
a dla N < M − nadpróbkowanie. W ogólnym przypadku należy zaprojektować odpowiedzi
impulsowe wszystkich filtrów. Wymagana charakterystyka amplitudowo-częstotliwościowa
zespołu filtrów analizujących jest przedstawiona na rysunku 18.2a.
Zespoły filtrów 497

analiza reduktory ekspandery synteza


u0(n) y0(m) v0(n) xˆ 0 ( n)
H0(z) ↓N ↑N G0(z)

x(n) uu0(n)x y1(m) v1(n) xˆ1 (n) xˆ(n)


1(n)
H1(z) ↓N ↑N G1(z)

uM−1(n) yM−1(m) vM−1(n) xˆ M −1 (n)


HM−1(z) ↓N ↑N GM−1(z)

Rys. 18.1. M-kanałowy zespół filtrów

a) H1(e jΩ) H3(e jΩ) HM-1(e jΩ)

0 1 2 3 4 M-1

0 2π/M 4π/M 6π/M 8π/M 2π(M−1)/M 2π Ω

H1(e jΩ) H1(e jΩ)


b)

M-1 1 0 0 1 M-1

−π −2π/M −π/M 0 π/M 2π/M π Ω

Rys. 18.2. Idealna charakterystyka częstotliwościowa M-kanałowego zespołu filtrów z modulacją: a) zes-
poloną i b) kosinusową

interpolacja
decymacja synteza analiza decymacja
y0(m) v0(n) x0(n) u0(n) yˆ 0 ( m)
↑N G0(z) H0(z) ↓N

y1(m) v1(n) x1(n) x(n) u 1(n) yˆ 1 ( m)


↑N G1(z) H1(z) ↓N

yM−1(m) vM−1(n) xM−1(n) uM−1(n) yˆM−1(m)


↑N GM−1(z) HM−1(z) ↓N

Rys. 18.3. M-kanałowy transmultiplekser


498 Zespoły filtrów

Decymacja po filtrach analizy Hm(z) odpowiada próbkowaniu pasmowemu (inaczej: prób-


kowaniu sygnałów o ograniczonym paśmie częstotliwościowym), pominiętemu w roz-
dziale 4.5.
Poszczególne filtry można projektować indywidualnie lub też założyć, że będą one zmodulo-
waną wersją jednego prototypu dolnoprzepustowego. Zaprojektowanie zespołu filtrów o okre-
ślonych właściwościach sprowadza się wówczas do wyznaczenia odpowiedniego filtra proto-
typowego. Modulacja może być zespolona lub rzeczywista, na przykład kosinusowa. Ponie-
waż cos(ωt) = 1/2(exp(jωt)+exp(−jωt)), więc zespół M filtrów z modulacją kosinusową od-
powiada zespołowi 2M filtrów z modulacją zespoloną, w którym wyjścia z odpowiednich
filtrów są do siebie dodane (patrz rys. 18.2b). Dla biortogonalnych zmodulowanych zespołów
filtrów należy wyznaczyć oddzielny prototyp dla filtrów analizujących i oddzielny dla synte-
zujących.
Szczególną odmianę zespołów filtrów stanowią multipleksery stosowane w telekomunikacji.
W ich przypadku bloki filtrów analizy i syntezy są zamienione kolejnością, tzn. najpierw wy-
stępuje zestaw filtrów syntezujących a potem analizujących (rys. 18.3). W transmultiplekse-
rach dane cyfrowe są przesyłane równocześnie na różnych częstotliwościach nośnych: w na-
dajniku są dodawane różne nośne zmodulowane cyfrowo, następnie sygnał wynikowy jest
przesyłany przez kanał transmisyjny, w odbiorniku zaś poszczególne nośne są odseparowy-
wane od siebie. W przypadku próbkowania krytycznego (N = M) metody projektowania trans-
multiplekserów i zespołów filtrów są takie same. W przeciwnym przypadku się różnią i trzeba
je stosować z uwzględnieniem tego faktu.
Zespoły filtrów mogą być interpretowane jako szczególne reprezentacje czasowo-częstotli-
wościowe sygnałów (patrz rysunek 18.4), w których dyskretnymi funkcjami bazowymi analizy
( γ k ( t ) w r ó wn a n i u ( 1 7 . 2 ) ) są odpowiedzi impulsowe filtrów hk(n), a dyskretnymi funk-
cjami bazowymi syntezy ( g k ( t ) w r ó wn a n i u ( 1 7 . 1 ) ) są odpowiedzi impulsowe filtrów
gk(n). Sygnały podpasmowe yk(n) są w takim przypadku równe ws p ó ł c z y n n i k o m α k , n
dekompozycji czasowo-częstotliwościowej sygnału x(n) (k-ty współczynnik w n-tej chwili
czasowej). Ponieważ filtry Hk(z) są filtrami pasmowoprzepustowymi, sygnały podpasmowe
yk(n) są związane z pulsacjami unormowanymi Ωk = 2πfk / fpróbkowania, będącymi pulsacjami
środkowymi tych filtrów. Aby dekompozycja była odwracalna, jej funkcje bazowe, czyli od-
powiedzi impulsowe hk(n) i gk(n), muszą być ortogonalne lub biortogonalne. Z tego powodu
zespoły filtrów są także czasami nazywane w literaturze „nakładającymi się” transformacjami
ortogonalnymi lub biortogonalnymi LOT. Dlaczego? Ponieważ odpowiedzi impulsowe filtrów
są przesuwane w czasie o N próbek i wymnażane z analizowanym sygnałem, ale w przypadku
kiedy mają one więcej niż N próbek, ich kolejne „przesunięcia” zachodzą na siebie. Sytuacja
ta jest przedstawiona na rysunku 18.5. Cała sztuka projektowania zespołów filtrów sprowadza
się więc do zapewnienia ortogonalności (biortogonalności) zbioru wszystkich poprzesuwanych
odpowiedzi impulsowych. Zagadnienie to jest więc identyczne jak w przypadku projektowania
systemów falkowych, opisanych w rozdziale 17.4, w których należy zapewnić ortogonalność
(biortogonalność) funkcji skalujących i falek. W odróżnieniu jednak od transformacji falko-
wych, zespoły filtrów są M-kanałowe, a nie dwukanałowe. Dodatkowo odpowiedzi impulsowe
są w nich przesuwane tak samo we wszystkich podpasmach, a nie diadycznie. Za pomocą
dwukanałowych zespołów filtrów „falkowych” można jednak zbudować zespoły M-pasmowe,
należy tylko sekcje dwukanałowe łączyć kaskadowo, tworząc w ten sposób zespoły filtrów
o strukturze drzewiastej.
Zespół filtrów ma właściwość perfekcyjnej rekonstrukcji, jeśli „sumaryczna” odpowiedź im-
pulsowa całego układu jest równa opóźnionemu w czasie dyskretnemu impulsowi jednostko-
wemu (delcie Kroneckera) δ(n−n0).
Zespoły filtrów 499

W niniejszym rozdziale przedstawiono ogólne podstawy teorii projektowania zespołów filt-


rów, ze szczególnym uwzględnieniem zespołów modulowanych. Zaprezentowano w nim także
interpretację dyskretnej transformacji Fouriera DFT oraz krótkoczasowej transformacji Fou-
riera STFT jako modulowanych zespołów filtrów.
W związku z tym, że podstawową rolę w zespołach filtrów odgrywają moduły zmiany często-
tliwości próbkowania, właśnie je omówiono jako pierwsze.

yk (n / N ) Ωk
yM −1 ΩM −1

y2 ..... Ω2 .....
y1 Ω1
n n

0 N 2N 3N ..... 0 N 2N 3N .....

Rys. 18.4. Interpretacja próbek podpasmowych yk(n/N) w zespołach filtrów z rysunku 18.1 jako współ-
czynników wyznaczanej transformacji (dekompozycji) czasowo-częstotliwościowej sygnału x(n). Pulsacje
unormowane Ωk = 2πfk / fpróbkowania są pulsacjami środkowymi filtrów pasmowoprzepustowych, o odpowie-
dziach impulsowych hk(n) i transmitancjach Hk(z)

h0 ( n )
0
7 6 5 4 3 2 1 0 h1 ( n )

h2 ( n )

y H x

Rys. 18.5. Przedstawienie zespołu filtrów jako sekwencji „nakładających się” transformacji ortogonalnych
LOT (ang. Lapped Orthogonal Transforms). Zakładamy, że przesuwane w czasie odpowiedzi impulsowe
poszczególnych filtrów są ortogonalne

x(n) yd (n) x(n) yi (n)


↓K ↑L

reduktor ekspander
Rys. 18.6. Oznaczenie reduktora i ekspandera cyfrowego: odpowiednioK-tego i L-tego rzędu
500 Zespoły filtrów

18.2. Pojęcia podstawowe


Przedstawimy teraz zagadnienie decymacji i interpolacji sygnałów dyskretnych w sposób szer-
szy niż w rozdziale 12.6.3.

18.2.1. Decymator i interpolator

W zespołach („grzebieniach”) filtrów sygnał wejściowy jest filtrowany przez kilka równolegle
pracujących filtrów pasmowoprzepustowych, jest więc oczywiste, że wynikowe sygnały pod-
pasmowe zajmują węższe pasmo częstotliwościowe niż sygnał oryginalny. W związku z tym
sygnały po filtrach są więc nadpróbkowane, ponieważ ich częstotliwość próbkowania nie
uległa zmianie, natomiast pasmo częstotliwościowe zostało zawężone. Jak widać, możliwe jest
w tym przypadku odpowiednie zmniejszenie częstotliwości próbkowania sygnałów podpas-
mowych, proporcjonalnie do zmniejszenia szerokości ich pasma częstotliwościowego. Opera-
cja ta jest nazywana podpróbkowaniem (ang. down-sampling) lub decymacją sygnału, operacja
zaś do niej odwrotna, czyli zwiększenie częstotliwości próbkowania, to nadpróbkowanie (ang.
up-sampling) lub interpolacja sygnału. W niniejszym podrozdziale dokładnie przedstawiono
konsekwencje częstotliwościowe obu operacji ze względu na ich podstawowe znaczenie
w teorii zespołów filtrów. Układ decymatora cyfrowego składa się z filtra pasmowoprzepusto-
wego ograniczającego K-krotnie pasmo częstotliwościowe sygnału, oraz z K-krotnego redukto-
ra, który pozostawia tylko co K-tą próbkę sygnału. Układ interpolatora cyfrowego składa się
natomiast z L-krotnego ekspandera, dodającego L−1 próbek o wartościach zerowych pomiędzy
każde dwie próbki sygnału, oraz z filtra pasmowoprzepustowego ograniczającego L-krotnie
pasmo częstotliwościowe sygnału. Oba układy są przedstawione na rysunku 18.6. Stosowany
w nich reduktor „↓K” i ekspander „↑L” są zdefiniowane w sposób następujący:

y d (n ) = x ( nK ) (18.1)

 x (n / L ), n = 0, ± L, ± 2 L, ...
yi ( n ) =  (18.2)
0, pozostałe wartości n

Zasada ich działania dla K = L = 2 jest przedstawiona na rysunku 18.7.

reduktor ekspander

x(n) x(n)

0 1 2 3 4 5 6 7 8 n 0 1 2 3 4 5 6 7 8 n

yd (n) yi (n)

0 1 2 3 4 5 6 7 8 9 n 0 1 2 3 4 5 6 7 8 9 n

Rys. 18.7. Ilustracja graficzna zasady pracy reduktora i ekspandera cyfrowego drugiego rzędu (K = L = 2)
Zespoły filtrów 501

Transformata Z sygnału yd (n) (18.1) po reduktorze jest określona następująco:

∑ x0 (nK ) z −n = ∑ x0 (k ) z −k / K =X 0 (z1/ K )
∞ ∞ ∞
Yd ( z ) = ∑ x ( nK ) z −n = (18.3)
n = −∞ n = −∞ k = −∞

gdzie sygnał x0(n) jest to sygnał x(n), w którym jest pozostawiona co K-ta próbka, a pozostałe
próbki są wyzerowane:

 x (n ), n = 0, ± K , ± 2 K ,...
x0 (n ) =  (18.4)
 0, pozostałe wartości n

Ponieważ sygnał ten można przedstawić jako:


x0 (n ) = c(n ) x(n ) (18.5)
gdzie:
K −1
 1, n = 0, ± K , ± 2 K ,... 1
c(n) =  , c(n) = ∑WK− kn , W
K = e − j 2π / K (18.6)
0, pozostałe wartości K k =0

stąd
∞ ∞ 1 K −1 
X 0 ( z) = ∑ ( c(n) x(n) ) z −n = ∑  K ∑ WK− kn x(n) z −n =
n =−∞ n =−∞  k =0 

∑  ∑ x(n)WK− kn z − n  = K ∑  ∑ x(n)(WKk z ) ∑ X (WKk z )


K −1  ∞  K −1  ∞  1 K −1
1 1 −n
=
=  K (18.7)
K k = 0  n = −∞  k = 0  n = −∞  k =0

Ostatecznie uwzględniając (18.3) w (18.7) otrzymujemy

∑ X (WKk z1 / K )
K −1
1
Yd ( z ) = (18.8)
K k =0

Z kolei transformata Z sygnału yi(n) (18.2) jest dana wzorem (n = kL):

∑ x(kL / L) z − kL = ∑ x(k ) z − kL = X (z L )
∞ ∞
Yi ( z ) = (18.9)
k = −∞ k = −∞

Implikacje częstotliwościowe wzorów (18.8) i (18.9) są zilustrowane na rysunku 18.8. Ponie-


waż z (18.8) i (18.9) mamy (Ω = 2πf / fpróbkowania − pulsacja unormowana):

( ) ∑ X (e j (Ω−2 πk )/ K )
K −1
1
Y d e jΩ = (18.10)
K k =0

( ) (
Yi e jΩ = X e jΩL ) (18.11)

W pierwszym przypadku widmo sygnału jest K-krotnie rozszerzane, K razy przesuwane co 2πk
radianów, 0 ≤ k ≤ K−1, oraz sumowane, a wynik końcowy jest przeskalowywany w amplitudzie
w wyniku mnożenia przez 1/K (szczegóły na rysunku 18.9). W drugim przypadku widmo jest
L-krotnie zawężane, tzn. powtarza się teraz okresowo co 2π/L radianów.
502 Zespoły filtrów

a) X(e j Ω)

−2π −π 0 π 2π Ω

b) Yd (e j Ω)

−2π −π 0 π 2π Ω

c) Yi (e j Ω)

−2π −2π/3 0 2π/3 2π Ω

Rys. 18.8. Przykładowe widma sygnałów cyfrowych po układzie dwukrotnego decymatora (K = 2) i trzy-
krotnego interpolatora (L = 3): a) X(e jΩ) − widmo sygnału wejściowego, b) Yd (e jΩ) − widmo sygnału po
dwukrotnym decymatorze, c) Yi (e jΩ) − widmo sygnału po trzykrotnym interpolatorze

Jak widać z przykładów przedstawionych na rysunkach 18.8 i 18.9 przedstawione powyżej


operacje decymacji i interpolacji wymagają dodatkowej filtracji. Aby uniknąć efektu wzaje-
mnego nakładania się (ang. aliasing) poprzesuwanych widm sygnału wejściowego w przy-
padku decymacji, całkowita szerokość widma (łącznie dla pulsacji dodatnich i ujemnych)
decymowanego sygnału powinna być mniejsza od 2π/K. Jeśli tak nie jest, to pasmo przetwa-
rzanego sygnału należy sztucznie ograniczyć filtrując go przed właściwą decymacją filtrem
pasmowoprzepustowym (w szczególnym przypadku filtrem dolnoprzepustowym) o szerokości
2π/K. W przypadku przedstawionym na rysunku 18.8b nakładanie się widm nie występuje,
gdyż K = 2 i szerokość widma sygnału decymowanego jest mniejsza od 2π/K = π. W ogólnym
przypadku sygnału wejściowego zajmującego całe pasmo od −π do π, wstępna filtracja pas-
mowoprzepustowa byłaby konieczna. W przypadku interpolacji, po interpolatorze cyfrowym
powinien wystąpić filtr o szerokości 2π/L, wybierający tylko jedną z kopii widma sygnału
wejściowego, przedstawionych przykładowo na rysunku 18.8c. Kaskadowe połączenie redu-
ktora i ekspandera, uzupełnionych o wymagane filtry, jest przedstawione na rysunku 18.10.
Ponieważ przetwarzane sygnały dyskretne są najczęściej rzeczywiste, ich widmo jest s y m e -
t r y c z n e względem pulsacji zerowej i powtarza się okresowo co 2π (tak jak na rysunku 18.9),
więc filtr przed decymatorem i po interpolatorze także powinien być symetryczny względem
pulsacji zerowej. Kiedy przetwarzany sygnał jest dolnoprzepustowy, filtr ten także powinien
mieć taki charakter. Na rysunku 18.10 przedstawiono przykłady charakterystyk amplitudo-
wo-częstotliwościowych filtrów związanych z decymatorem i interpolatorem. Przypadek decy-
mowania i interpolowania poszczególnych podpasm częstotliwościowych sygnału, różnych od
pasma częstotliwości niskich, będzie szczegółowo przedstawiony w dalszej części rozdziału.
Zespoły filtrów 503

a) X(e j Ω)
1

−4π −2π −π 0 π 2π 4π Ω
ω π
b)
X(e j Ω/2)
1

−4π −2π −π 0 π 2π 4π Ω
c)
X(e j(Ω−2π)/2)
1

−4π −2π −π 0 π 2π 4π Ω
ω
d)
2Yd (e j Ω)
1

−4π −2π −π 0 π 2π 4π Ω
Rys. 18.9. Konsekwencje częstotliwościowe decymacji rzędu drugiego K = 2 (18.10). Kolejno widma: a)
sygnału wejściowego X(e jΩ), b) X(e jΩ/2), c) X(e j(Ω − 2π )/2), d) sygnału zdecymowanego 2Yd (e jΩ) = X(e jΩ/2) +
+ X(e j(Ω − 2π )/2)

Jak widać układ z rysunku 18.10 stanowi jedną z gałęzi zespołu filtrów z rysunku 18.1. W pod-
rozdziale 18.3.1 szczegółowo omówiono właściwości takiego połączenia i ich konsekwencje
dla całego zespołu filtrów.
Obecnie podamy definicję dekompozycji polifazowej sygnałów i wynikające z niej możliwości
modyfikacji struktury układu z rysunku 18.10. Jak się później okaże prowadzą one do bardzo
ważnego, alternatywnego zapisu równań zespołu filtrów. Umożliwia on stosunkowo łatwe pro-
jektowanie filtrów, występujących w zespole, oraz jego szybką implementację obliczeniową.

18.2.2. Dekompozycja polifazowa sygnałów

Niech x(n) oznacza dowolny sygnał cyfrowy, czyli nieskończony ciąg próbek, wówczas
M podciągów xk(n) takich że:

x k (n ) = x ( nM + k ), 0 ≤ k ≤ M − 1 (18.12)

nazywamy składowymi polifazowymi sygnału x(n). M jest dowolną liczbą naturalną, czyli spo-
sób dekompozycji polifazowej sygnału jest arbitralny i zależny od jej konkretnego zastosowa-
504 Zespoły filtrów

a) decymator cyfrowy interpolator cyfrowy

x(n) uk(n) yk(m) vk(n) xˆ k (n)


Hk(z) ↓N ↑N Gk(z)

filtr pasmowy reduktor ekspander filtr pasmowy

b) |H2(e j Ω)|
1

−π −3π/2 −π/2 −π/4 0 π/4 π/2 3π/2 π Ω

c) |G0(e j Ω)|
|H0(e j Ω)|

−π/N π/N Ω −π/N π/N Ω

Rys. 18.10. a) Kaskadowe połączenie decymatora i interpolatora, uzupełnionych o konieczne filtry. W jego
wyniku otrzymuje się jedną gałąź zespołu filtrów z rysunku 18.1; b) przykład charakterystyki amplitudo-
wo-częstotliwościowej filtra Hk(ejΩ) (drugie podpasmo w zespole filtrów: k = 2, M = N = 4). Identyczny
kształt ma charakterystyka filtra Gk(ejΩ); c) w szczególnym, najprostszym przypadku filtr pasmowy jest sy-
metrycznym filtrem dolnoprzepustowym: H0(ejΩ), G0(ejΩ)

nia. W każdym podciągu (18.12) występuje co M-ta próbka oryginalnego sygnału. Przykładem
dwupasmowej dekompozycji polifazowej dowolnego sygnału cyfrowego jest podział jego
próbek na te o indeksach parzystych i nieparzystych. W przypadku dekompozycji polifazowej
czwartego rzędu (czteropasmowej) otrzymujemy następujące cztery podciągi próbek sygnału:
x (0), x(4), x(8), x (12), x(16), x( 20), ...
x (1), x (5), x(9), x (13), x(17), x( 21), ...
x (2), x(6), x(10), x (14), x(18), x( 22), ...
x (3), x(7), x (11), x(15), x(19), x( 23), ...

Na rysunku 18.11 przedstawiono schemat blokowy M-krotnej (M-pasmowej) dekompozycji


polifazowej. Łatwo wykazać, że transformata Z całego sygnału x(n):

X ( z) = ∑ x(n ) z − n (18.13)
n = −∞

oraz transformaty Z składowych polifazowych xk(n), 0 ≤ k ≤ M−1:


∞ ∞
X k (z ) = ∑ xk (n) z − n = ∑ x(nM + k ) z − n (18.14)
n = −∞ n = −∞
Zespoły filtrów 505

x(n)
↓M x0(n) = x(nM+0)
-1
z
↓M x1(n) = x(nM+1)

z-1
↓M x2(n) = x(nM+2)

z-1
↓M xM−1(n) = x(nM+M−1)

Rys. 18.11. Schemat blokowy M-krotnej (M-pasmowej) dekompozycji polifazowej sygnału x(n)

są związane ze sobą zależnością:


M −1
 ∞  M −1  ∞ −n  M −1
X ( z ) = ∑  ∑ x(nM + k ) z − ( nM + k )  = ∑ z − k  ∑ x (nM + k ) ( z M )  = ∑ z − k X k ( z M ) (18.15)
k = 0  n =−∞  k =0  n =−∞  k =0

Powyższe równanie można zapisać w postaci macierzowej jako

 X0(zM ) 
 
[ ]
M
X ( z ) = 1 z −1 " z − ( M −1)  X 1( z )  (18.16)
 # 
 M 
 X M −1 ( z )

Po wprowadzeniu oznaczeń XkI(z) = Xk(z) oraz XkII(z) = XM−1−k(z) równanie (18.15) można zapi-
sać w dwóch alternatywnych postaciach:
M −1 ∞
X ( z) = ∑
k =0
( )
z − k X kI z M , X kI ( z ) = ∑
n =−∞
x (nM + k ) z − n (18.17)

M −1 ∞
X ( z) = ∑
k =0
( )
z −( M −1−k ) X kII z M , X kII ( z ) = ∑
n =−∞
x (nM + M − 1 − k ) z − n (18.18)

Pierwsza z nich, omówiona powyżej, jest nazywana dekompozycją polifazową pierwszego ty-
pu, druga zaś − dekompozycją drugiego typu. Dekompozycje te różnią się tylko odwrotną nu-
meracją składowych polifazowych (w kolejności rosnących lub malejących indeksów). Składo-
we polifazowe pierwszego i drugiego typu będą w dalszej części rozdziału konsekwentnie
oznaczane za pomocą innych cyfr rzymskich (odpowiednio I i II).
Dekompozycję polifazową można z powodzeniem zastosować do alternatywnego, polifa-
zowego opisu filtracji cyfrowej tak nierekursywnej FIR, jak i rekursywnej IIR, przedstawiając
sygnały wejściowe, wyjściowe oraz odpowiedzi impulsowe filtrów w postaci polifazowej. Ta-
kie podejście jest szczególnie przydatne w przypadku układów decymatorów i interpolatorów
(tzn. reduktorów i ekspanderów z odpowiednimi filtrami pasmowoprzepustowymi), a w kon-
sekwencji także zespołów filtrów, ponieważ zdecydowanie upraszcza ich analizę, projekto-
wanie oraz implementację.
Przykład. Podamy teraz prosty przykład dekompozycji polifazowej transmitancji typu filtr
FIR. Wartości jej współczynników dobrano w celu lepszego zilustrowania samej dekompozycji
506 Zespoły filtrów

i nie mają specjalnego „znaczenia” częstotliwościowego. Załóżmy, że dokonujemy dekom-


pozycji trzypasmowej (M = 3) transmitancji postaci:

H ( z ) = 0,1 + z −1 + 2 z −2 + 3z −3 + 4 z −4 + 5z −5 + 6 z −6 + 7 z −7 + 8 z −8

Można ją zapisać jako:

( ) ( ) (
H ( z ) = 0,1 + 3z −3 + 6 z −6 + z −1 1 + 4 z −3 + 7 z −6 + z −2 2 + 5z −3 + 8 z −6 )
W związku z tym otrzymujemy:

H 0I ( z 3 ) = H 2II ( z 3 ) = 0,1 + 3z −3 + 6 z −6

H 1I ( z 3 ) = H 1II ( z 3 ) = 1 + 4 z −3 + 7 z −6
H 2I ( z 3 ) = H 0II ( z 3 ) = 2 + 5z −3 + 8 z −6

i składowe polifazowe transmitancji są następujące:

H 0I ( z ) = H 2II ( z ) = 0,1 + 3z −1 + 6 z −2
H 1I ( z ) = H 1II ( z ) = 1 + 4 z −1 + 7 z −2
H 2I ( z ) = H 0II ( z ) = 2 + 5z −1 + 8 z −2

Dekompozycja transmitancji typu filtr IIR H(z) = B(z)/A(z) jest także możliwa, ale już nie jest
taka prosta.

18.2.3. Decymator i interpolator w zapisie polifazowym

Łatwo wykazać, że są prawdziwe równoważności przedstawione na rysunku 18.12. Z równania


(18.8) mamy bowiem:
N −1 N −1
1
( 
) ( )  1
( )
N
Y2 ( z ) = ∑ X WNk z1/ N H  WNk z1/ N = ∑ X WNk z1/ N H ( z ) = Y1 ( z ) (18.19)
N k =0   N k =0

natomiast z (18.9) wynika, że

( ) ( )
Y4 ( z ) = H z N X z N = X 3 ( z ) (18.20)

Przedstawimy teraz wersję polifazową układu z rysunku 18.10, wykorzystując wyprowadzone


powyżej równoważności. Stosując N-pasmową dekompozycję polifazową pierwszego typu do
odpowiedzi impulsowej filtra cyfrowego hk(n), występującego w układzie decymatora, otrzy-
mujemy

∑ z − l H kI, l (z N )
N −1
H k ( z) = (18.21)
l =0

gdzie H Ik,l(z) oznacza transmitancję l-tej składowej polifazowej typu pierwszego k-tego filtra.
Analogicznie po zastosowaniu dekompozycji drugiego typu do filtra gk(n), występującego
w układzie interpolatora, mamy:
Zespoły filtrów 507

∑ z −( N −1−l ) GkII,l (z N )
N −1
Gk ( z ) = (18.22)
l =0

Na rysunku 18.13 przedstawiono strukturę decymatora cyfrowego w zapisie polifazowym oraz


jego kolejne modyfikacje, wynikające z możliwości przesunięcia reduktorów „↓N” z lewej
strony na prawą. W wyniku tego filtry H Ik,l(z), 0 ≤ l ≤ N−1, pracują teraz na N-krotnie zdecy-
mowanych (zredukowanych) danych, w porównaniu z filtrami H Ik,l(zN), oraz są obliczane tylko
te próbki, które nie miały zostać „zdecymowane” na wyjściu układu z rysunku 18.13a. W kon-
sekwencji liczba wymaganych obliczeń jest znacznie mniejsza. Z kolei na rysunku 18.14
przedstawiono analogiczne przekształcenia dla interpolatora cyfrowego. W tym przypadku
ekspander „↑N” może być przesunięty z lewej strony na prawą, powodując, że tym razem filtry
H IIk,l(z), 0 ≤ l ≤ N−1, pracują na zredukowanej liczbie danych.
Do efektywnej realizacji obliczeniowej kaskadowego połączenia układów decymatora i inter-
polatora z rysunku 18.10 także można użyć struktur z rysunków 18.13b i 18.14b. Wniosek ten
dotyczy także zespołu filtrów, czyli równoległego połączenia wielu takich gałęzi. Jak się póź-
niej okaże, w przypadku zespołu filtrów zastosowanie struktur polifazowych daje nawet więk-
sze korzyści, ponieważ umożliwia zblokowanie (tylko jednokrotne wykonanie) tych samych
operacji, które bez zastosowania dekompozycji polifazowej są wielokrotnie powtarzane w róż-
nych gałęziach.

18.3. Opis matematyczny zespołu filtrów

18.3.1. Analiza jednej gałęzi

Przykładowa gałąź zespołu filtrów, przedstawiona na rysunku 18.10, składa się z pasmowo-
przepustowego filtra analizującego, reduktora „↓N”, ekspandera „↑N” oraz pasmowoprzepus-
towego filtra syntezującego. Uwzględniając zależności (18.8) i (18.9), transformaty Z sygna-
łów um(n), ym(n), vm(n) oraz xˆm (n) są dane wzorami (0 ≤ k ≤ M−1):

U m ( z) = H m ( z) X ( z) (18.23)
N −1
∑ U m ( WNk z1/ N )
1
Ym ( z ) = (18.24)
N k =0

Vm ( z ) = Ym ( z N ) (18.25)

Xˆ m ( z ) = Gm ( z )Vm ( z ) (18.26)
skąd:
N −1
∑ H m ( WNk z ) X ( WNk z )
1
Xˆ m ( z ) = Gm ( z ) (18.27)
N k =0

Rysunki 18.15 i 18.16 ilustrują widma poszczególnych sygnałów w torze przetwarzania dla
pierwszej i drugiej gałęzi w czterokanałowym (M = 4) zespole filtrów. Jak widać w obu przy-
padkach właściwa część widma sygnału wejściowego zostaje poprawnie odtworzona, czyli od-
powiednio podpasmo pierwsze i drugie. Jednak dla gałęzi pierwszej, widmo sygnału Y1(ejΩ)
508 Zespoły filtrów

charakteryzuje się niewłaściwą symetrią względem pulsacji zerowej. W ogólnym przypadku


właściwość tę obserwuje się dla wszystkich podpasm nieparzystych. Aby wymusić właściwą
symetrię widma, wszystkie sygnały u2i+1(n) muszą być pomnożone przez (−1)n.

x(n) y2(n) x(n) y1(n)


N
a) H(z ) ↓N ↓N H(z)

x(n) y4(n) x(n) y3(n)


b) ↑N H(zN) H(z) ↑N

Rys. 18.12. Równoważność układów: a) decymacji, b) interpolacji

a) b)

x(n) uk(n) yykk((nn)) x(n) yk(n)


H kI ,0 ( z N ) ↓N ↓N H kI ,0 ( z )

z−1 z−1
H kI ,1 ( z N ) ↓N H kI ,1 ( z )

z−1 z−1
H kI ,2 ( z N ) ↓N H kI ,2 ( z )

z−1 z−1
H kI , N −1 ( z N ) ↓N H kI , N −1 ( z )

Rys. 18.13. Modyfikacja układu decymatora z rysunku 18.10: zapisanie filtra hk(n) w postaci polifazowej
p i e r w s z e g o typu oraz przesunięcie układu „podpróbkowania” z prawej strony na lewą

a) b)

yk(n) vk(n) yk(n)


↑N GkII,0 ( z N ) GkII,0 ( z ) ↑N
−1
z z−1
GkII,1 ( z N ) GkII,1 ( z ) ↑N
−1
z z−1
GkII,2 ( z N ) GkII,2 ( z ) ↑N
z−1 z−1
xˆ k (n ) xˆ k (n )
GkII, N −1 ( z N ) GkII, N −1 ( z ) ↑N

Rys. 18.14. Modyfikacja układu interpolatora z rysunku 18.10: zapisanie filtra gk(n) w postaci polifazowej
d r u g i e g o typu oraz przesunięcie układu „podpróbkowania” z lewej strony na prawą
Zespoły filtrów 509

filtr pasmowy reduktor ekspander filtr pasmowy


x(n) u(n) y(m) v(n) xˆ(n)
H1(z) ↓4 ↑4 G1(z)

X(e j Ω)
1

2 1 0 0 1 2

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

U(e j Ω)
1

1 1

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

Y(e j Ω)
1/4

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

V(e j Ω)
1/4

1 1

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

Xˆ (e j Ω )
1

1 1

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

Rys. 18.15. Przykład rekonstrukcji sygnału po operacji decymacji i interpolacji rzędu drugiego (K = L = 4)
dla pierwszego podpasma
510 Zespoły filtrów

filtr pasmowy reduktor ekspander filtr pasmowy


x(n) u(n) y(m) v(n) xˆ(n)
H2(z) ↓4 ↑4 G2(z)

X(e j Ω)
1

2 1 0 0 1 2

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

U(e j Ω)
1

2 2

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

Y(e j Ω)
1/4

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

V(e j Ω)
1/4

2 2

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

Xˆ (e j Ω )
1

2 2

−π −3π/4 −π/2 −π/4 0 π/4 π/2 3π/4 π Ω

Rys. 18.16. Przykład rekonstrukcji sygnału po operacji decymacji i interpolacji rzędu drugiego (K = L = 4)
dla drugiego podpasma
Zespoły filtrów 511

18.3.2. Analiza wszystkich gałęzi

Sygnał wyjściowy z całego zespołu filtrów jest sumą wyjść z jego poszczególnych gałęzi,
czyli:
M −1 M −1 M −1
Xˆ ( z ) = ∑ Xˆ m ( z ) = ∑ Gm ( z )Vm ( z ) = ∑ Gm ( z ) Ym ( z N ) =
m =0 m=0 m =0

M −1  N −1 
∑  Gm ( z ) N ∑ H m (WNk z ) X (WNk z )  =
1
=
m=0  k =0 

∑  X (WNk z ) N ∑ H m (WNk z ) Gm ( z ) 
N −1  M −1 
1
= (18.28)
k =0  m =0 
Po wprowadzeniu oznaczenia:

∑ H m (WNk z )Gm ( z )
M −1
1
Ak (z ) = (18.29)
N m =0

otrzymuje się zależność:

∑ Ak (z )X (WNk z )
N −1
Xˆ (z ) = (18.30)
k =0

Ponieważ dla z = e j Ω mamy:

( ) (
X W Nk e jΩ = X e j (Ω−2πk / N ) ) (18.31)

widmo sygnału wyjściowego Xˆ (e jΩ ) z całego zespołu filtrów jest liniową kombinacją widma
sygnału wejściowego X (e jΩ ) oraz jego N − 1 poprzesuwanych (zmodulowanych) wersji („ob-
razów”, „odbić”). Jest więc oczywiste, że zespół będzie odtwarzał wejście tylko wtedy kiedy:

1 M −1
A0 ( z ) = ∑ H m ( z ) Gm ( z ) = cz − n0 (18.32a)
N m =0

∑ H m (WNk z )Gm ( z ) = 0,
M −1
1
Ak (z ) = 1 ≤ k ≤ N −1 (18.32b)
N m =0

Sygnał oryginalny będzie przepuszczany „niezmieniony” (tylko przeskalowany i opóźniony:


xˆ (n) = c0 x(n − n0 ) ), a jego wersje zmodulowane będą tłumione. Ponieważ filtry Hm(z) i Gm(z),
0 ≤ m ≤ M − 1, zajmują takie samo pasmo częstotliwościowe, z (18.32a) wynika, że suma
wszystkich podpasm powinna dać cały zakres przetwarzanych częstotliwości. Z (18.32b)
można natomiast wywnioskować, iż Ak(z), 1 ≤ k ≤ N − 1, będzie równe zero tylko w dwóch
przypadkach:
1) kiedy dla każdego m iloczyn pasma filtra Gm(z) i dowolnej zmodulowanej wersji Hm(WNkz)
filtra Hm(z) jest równy zero (przypadek filtrów idealnych, mających „prostokątną” charakte-
rystykę amplitudowo-częstotliwościową, taką jak na rysunku 18.2);
512 Zespoły filtrów

2) kiedy iloczyny transmitancji sumowane w (18.32b) wzajemne się skompensują (odejmą);


(przypadek filtrów nieidealnych lecz odpowiednio zaprojektowanych).
Zespół filtrów, w którym oba warunki (18.32a), (18.32b) są spełnione, nosi nazwę zespołu
filtrów typu PR (perfekcyjnej rekonstrukcji). Jeśli natomiast oba warunki są spełnione tylko
w przybliżeniu, to taki układ nosi nazwę zespołu filtrów quasi-PR (lub zwyczajowo pseudo-
-QMF (ang. Quadrature Mirror Filters)).

18.3.3. Zapis polifazowy zespołu filtrów

Jak już było pokazane, transmitancje filtrów analizy Hk(z) z rysunku 18.1 można zapisać w po-
staci polifazowej pierwszego typu (18.21). W związku z tym transmitancje w s z y s t k i c h filt-
rów sekcji analizy można zapisać w następującej postaci macierzowej:

 1   1 
 H 0 ( z )   H 0, 0 ( z ) H 0I,1 ( z N ) " H 0I, N −1 ( z N )   −1 
I N
  z  z −1 
 # = # # % #   = H I
( z )  
   
 I N I N I N  #   # 
 H M −1 ( z )  H M −1,0 ( z ) H M −1,1 ( z ) " H M −1, N −1 ( z )  z − ( N −1)   − ( N −1) 
  z 
(18.33)
I
gdzie H k,l (z) jest l-tym (0 ≤ l ≤ N−1) komponentem polifazowym k-tej transmitancji Hk(z)
(0 ≤ k ≤ M−1) typu I, N oznacza stopień decymacji, H I(z) jest zaś macierzą składowych polifa-
zowych typu I filtrów analizy o wymiarach M × N. Polifazowa reprezentacja bloku filtrów ana-
lizujących jest przedstawiona na rysunku 18.17.

x (n ) x (n )
H 0 ( z) u0 ( z ) u0 ( z )
z −1 x ( n − 1)
H1 ( z ) u1 ( z ) z −1 x ( n − 2) u1 ( z )
−1
H I (zN )
z
z −1 x ( n − N + 1)
H M −1 ( z ) u M −1 ( z ) u M −1 ( z )

Rys. 18.17. Polifazowa reprezentacja zestawu filtrów analizujących (bez decymatorów)

Stosując w podobny sposób zapis polifazowy (18.22) drugiego typu do filtrów syntezy Gk(z),
0 ≤ k ≤ M−1, otrzymujemy następujące równanie macierzowe sekcji syntezy:

 G0,0
II
(z N ) " G0,IIM −1 ( z N ) 
 II N 
 G (z ) " G1,IIM −1 ( z N ) 
[G0 ( z ) " GM −1 ( z )] =  z −( N −1) z − ( N − 2) " 1  1,0 =
 # % # 
G II N
" GNII−1,M −1 ( z N ) 
 N −1,0 ( z )
[
= z − ( N −1) ]
z − ( N − 2 ) " 1 G II ( z ) (18.34)

gdzie G IIl, k (z) jest l-tym komponentem polifazowym typu II k-tego filtra Gk(z), N oznacza sto-
pień interpolacji, a G II(z) jest macierzą komponentów polifazowych filtrów syntezy. Na rysun-
ku 18.18 jest przedstawiona polifazowa reprezentacja bloku filtrów syntezujących.
Zespoły filtrów 513

v0 ( n ) xˆ 0 ( n )
G0 ( z )
z −1
v1 ( n ) xˆ1 (n )
G1 ( z ) z −1
G II ( z N )
z −1
vM −1 ( n ) xˆ M −1 ( n ) xˆ ( n ) z −1
GM −1 ( z )

Rys. 18.18. Polifazowa reprezentacja zestawu filtrów syntezujących (bez interpolatorów)

Używając reprezentacji polifazowej zestawu filtrów analizy (rysunek 18.17) oraz zestawu
filtrów syntezy (rysunek 18.18), możemy przedstawić cały zespół filtrów z rysunku 18.1
w równoważnej formie, zaprezentowanej na rysunku 18.19. Jest ona nazywana polifazową
reprezentacją M-pasmowego zespołu filtrów. Stosując tożsamości z rysunku 18.12, możemy
przesunąć reduktory (układy „podpróbkowania”) przed macierz polifazową analizy, a ekspan-
dery (układy „nadpróbkujące”) za macierz polifazową syntezy, analogicznie do przekształceń
przedstawionych na rysunkach 18.13 i 18.14. W wyniku tych operacji uzyskujemy układ jak na
rysunku 18.20. Zaletą otrzymanego rozwiązania jest to, że pracujące w nim filtry działają na
N razy niższych częstotliwościach (gdyż nie wyznacza się wszystkich próbek sygnałów pod-
pasmowych, które się potem N-krotnie redukuje, tylko oblicza się te próbki, które mają pozo-
stać; inaczej mówiąc N-krotna redukcja danych następuje przed filtrami a nie po nich). Po
połączeniu macierzy polifazowych H I(z) i G II(z) w jedną macierz F(z) = G II(z)H I(z), otrzy-
mujemy układ przedstawiony na rysunku 18.21.

x (n ) y0 ( n )
↓N ↑N
z −1 x ( n − 1) z −1
y1 ( n )
z −1 x ( n − 2) ↓N ↑N z −1
H I (z N ) G II ( z N )
z −1 z −1
x ( n − N + 1) y M −1 ( n ) xˆ ( n )
↓N ↑N

Rys. 18.19. Polifazowa reprezentacja M-pasmowego zestawu filtrów z reduktorami „↓N” i ekspanderami
„↑N”

x ( n) x0 ( n ) y0 (n )
↓N ↑N
z −1 x1 (n )
y1 ( n ) z −1
↓N y2 ( n ) ↑N
−1 H I (z ) G II (z ) z −1
z
z −1 x N −1 ( n ) y M −1 ( n ) z −1 x (n)
↓N ↑N

Rys. 18.20. Polifazowa reprezentacja M-pasmowego zestawu filtrów po przesunięciu reduktorów „↓N”
i ekspanderów „↑N”, zgodnie z tożsamościami z rysunku 18.12. Sygnały xk(n) są komponentami polifazo-
wymi sygnału x(n), określonymi w następujący sposób: xk(n) = x(nN + k), 0 ≤ k ≤ M − 1,−∞ ≤ n ≤ +∞
514 Zespoły filtrów

x (n )
↓N ↑N
−1
z z −1
↓N ↑N
F (z )
z −1 z −1

z −1 z −1 xˆ ( n )
↓N ↑N

Rys. 18.21. Schemat zastępczy M-pasmowego zestawu filtrów z decymacją/interpolacją N-tego rzędu,
otrzymany w wyniku połączenia macierzy polifazowych H I(z) i G II(z) w F(z) = G II(z)H I(z)

18.3.4. Warunek perfekcyjnej rekonstrukcji

Poszukiwania warunku na perfekcyjną rekonstrukcję sygnału w zespole filtrów rozpoczniemy


od najprostszego, trywialnego przypadku: zespołu filtrów krytycznie próbkowanego (M = N)
z filtrami wszechprzepustowymi. Przypadek ten jest przedstawiony na rys. 18.22. Jak widać
zespół ten składa się z N reduktorów (układów „podpróbkowujących”), N ekspanderów
(układów „nadpróbkowujących”) oraz N filtrów wszechprzepustowych o transmitancji postaci
Hk(z) = z−k, Gk(z) = z−(N − 1− k), k = 0, 1, ..., N − 1. Łatwo stwierdzić, że system ten charakteryzuje
się właściwością perfekcyjnej rekonstrukcji, gdyż Xˆ ( z ) = z − ( N −1) X ( z ) , tzn. xˆ ( n ) = x( n − ( N − 1)) .
Wynika to z faktu, że w rzeczywistości w jego części analizującej jest dokonywana jedynie po-
lifazowa dekompozycja N-tego rzędu sygnału wejściowego, a w części syntezującej składowe
polifazowe są tylko nadpróbkowywane, wzajemnie opóźniane i sumowane.

x (n )
↓N ↑N
z −1 z −1
↓N ↑N
z −1 z −1

z −1 z −1 xˆ ( n )
↓N ↑N

Rys. 18.22. Trywialny N-kanałowy krytycznie próbkowany zespół filtrów (M = N)

Oczywiście użyteczność takiego zespołu filtrów jest w praktyce wątpliwa. Zależy nam bowiem
na tym, aby filtry wchodzące w skład zestawu charakteryzowały się określonymi właściwoś-
ciami częstotliwościowymi. W związku z tym załóżmy, że nasz trywialny system wzbogacimy
o dwie macierze H I(z) i G II(z) (teraz M ≠ N), uzyskując w ten sposób system przedstawiony na
rysunku 18.19. Jedynym ograniczeniem, jakie nakładamy na H I(z) i G II(z) jest, aby

F ( z ) = G II ( z ) H I ( z ) = cz − m 0 I (18.35)

Opóźnienie sygnału wyjściowego w takim zespole filtrów powiększa się teraz o m0N i wynosi
(N − 1) + m0N. Jest rzeczą oczywistą, że powyższy system nadal ma właściwość perfekcyjnej
rekonstrukcji i w dodatku nie jest trywialny. Korzystając z tego faktu możemy rozpocząć two-
rzenie systemu od zaprojektowania filtrów analizujących Hk(z), a następnie wyznaczyć związa-
ną z nimi macierz polifazową analizy H I(z) oraz znaleźć macierz syntezy G II(z), spełniającą
równanie (18.35). W ostatnim etapie obliczamy filtry syntezy Gk(z) na podstawie G II(z).
Zespoły filtrów 515

Dla dociekliwych. Wyprowadzimy teraz warunek perfekcyjnej rekonstrukcji PR (18.35)


w dziedzinie czasu. W tym celu znajdziemy zależność pomiędzy sygnałem wyjściowym xˆ ( n )
a sygnałem wejściowym x(n) w zespole filtrów z rysunku 18.1. Związki pomiędzy sygnałami
po poszczególnych blokach są następujące:

uk (m) = ∑ x ( n ) hk ( m − n )
n =−∞

y k ( m ) = uk ( m ) ↓ N = uk ( mN ) = ∑ x ( n )hk ( mN − n )
n =−∞

 y ( m / N ), m = 0, ± N , ± 2 N ,..
vk (m) =  k
0, pozostałe wartości n
∞ ∞ ∞ ∞
xˆk (l ) = ∑ vk ( m ) g k ( l − m ) = ∑ yk ( m) gk (l − mN ) = ∑ ∑ x( n ) hk ( mN − n ) g k (l − mN )
m =−∞ m =−∞ m =−∞ n =−∞

Sumaryczny sygnał wyjściowy jest dany wzorem:

M −1 M −1 ∞ ∞
xˆ (l ) = ∑ xˆk (l ) = ∑ ∑ ∑ x ( n ) hk ( mN − n ) gk (l − mN )
k =0 k = 0 m =−∞ n =−∞

Zespół filtrów ma właściwość perfekcyjnej rekonstrukcji, kiedy sygnał wyjściowy jest równy
przeskalowanemu w amplitudzie i opóźnionemu w czasie sygnałowi wejściowemu, czyli kiedy
xˆ (l ) = cx (l − n0 ) . Powstaje pytanie, jakie warunki powinny spełniać filtry hk(n) i gk(n),
0 ≤ k ≤ M−1, aby generowany przez nie zespół filtrów był PR. Załóżmy, że sygnał wejściowy
jest opóźnioną deltą Kroneckera x (n ) = δ( n − n1 ) (jest to założenie ogólne, ponieważ analizu-
jemy układ liniowy, każdy zaś sygnał cyfrowy może być przedstawiony jako liniowa kombi-
nacja impulsów typu opóźniona delta Kroneckera). Sygnał wyjściowy powinien mieć wówczas
postać xˆ (l ) = cδ(l − n1 − n 0 ) . Z ostatniego równania oraz z założonej postaci sygnału wejścio-
wego i wyjściowego wynika, że jest to możliwe tylko wtedy kiedy

M −1 ∞

∑ ∑ h (mN − n )g (l − mN ) = cδ(l − n
k =0 m = −∞
k 1 k 1 − n0 )

Aby zapewnić właściwość PR, filtry analizujące i syntezujące powinny spełniać powyższą
zależność, narzucającą określone związki pomiędzy składowymi polifazowymi wszystkich
filtrów sekcji analizy i syntezy. Oczywiście jako części składowe zespołu filtrów, wszystkie
filtry powinny mieć także selektywne charakterystyki amplitudowo-częstotliwościowe − patrz
rysunek 18.2.

18.4. Zespoły filtrów z modulacją zespoloną


Obecnie zainteresujemy się teoretycznymi podstawami modulowanych zespołów filtrów. Sta-
nowią one bardzo ważną klasę wśród wszystkich zespołów filtrów. Jej nazwa pochodzi stąd,
że filtry analizy i syntezy są w niej uzyskiwane w wyniku modulacji jednego dolnoprze-
pustowego filtra „prototypowego” p(n), który w ogólnym przypadku układów biortogonalnych
jest inny dla sekcji analizy i syntezy. W ortogonalnych modulowanych zespołach filtrów jest
516 Zespoły filtrów

wykorzystywany jeden i ten sam filtr prototypowy. Najpopularniejszymi przedstawicielami


modulowanych zespołów filtrów są: dyskretna transformacja Fouriera, krótkookresowa trans-
formacja Fouriera i transformacja Gabora, przedstawione w rozdziale poprzednim. W ich
przypadku mamy do czynienia z modulacją zespoloną (4.11), czyli funkcjami modulującymi
postaci exp(jωmT). Jednak w praktyce największe zastosowanie znalazły zespoły filtrów wy-
korzystujące prostszą implementacyjnie modulację rzeczywistą, w szczególności dyskretną
transformację kosinusową DCT (np. w kompresji dźwięku MPEG audio). W wyniku modula-
cji charakterystyka częstotliwościowa filtra zachowuje swój kształt, tylko przesuwa się do wy-
branej (wybranych) pulsacji, w przypadku (4.11) od pulsacji zerowej do ωm.

18.4.1. DFT jako modulowany zespół filtrów

Wykażemy teraz, że prosta i odwrotna dyskretna transformacja Fouriera (algorytmy DFT oraz
IDFT), opisane w rozdziale 9, stanowią łącznie przykład najprostszego zespołu filtrów
z modulacją zespoloną. Aby otrzymać odpowiedzi impulsowe filtrów analizy postaci ejωt a nie
e−jωt oraz zgodność z innymi modulowanymi zespołami filtrów, które będą rozpatrywane
w dalszej kolejności, w przedstawionym przykładzie sekcja analizy będzie oparta na algoryt-
mie IDFT, sekcja syntezy zaś − na algorytmie DFT.
W algorytmie M-punktowego IDFT transformacji poddaje się M kolejnych próbek sygnału.
Oznaczmy te próbki jako

xi (n ) = x (n − i ), i = 0,1,..., M − 1 (18.36)

tzn. załóżmy, że wykonujemy transformatę w chwili n-tej i operujemy na M ostatnich próbkach


sygnału, czyli na wektorze danych:

{x0 (n ), x1 ( n), ..., x M −1 (n)} (18.37)

W związku z tym równanie IDFT ma postać (świadomie zaniedbujemy dzielenie przez 1/M):
M −1 M −1
uk (n) = ∑ xi (n )WM− ik = ∑ x(n − i )WM− ik , 0 ≤ k ≤ M − 1, WM = e − j 2 π / M (18.38)
i =0 i =0

Ponieważ można je interpretować jako dyskretny splot analizowanego sygnału z M kolejnymi


odpowiedziami impulsowymi filtrów:

hk ( n ) = WM− nk (18.39)

stąd wynika, że IDFT jest M-kanałowym zespołem filtrów. Filtry analizy hk(n) mają następu-
jące transformaty Z (ze wzoru na sumę szeregu potęgowego):

H k ( z) = ∑ hk (n) z − n = ∑ (zWM− k )
M −1 M −1 n
=
(
1 − zWM− k )M = 1 − (zWMk )− M , 0 ≤ k ≤ M − 1 (18.40)
n =0 n =0 1 − (zWM− k ) 1 − (zWMk )
−1

Transmitancję k-tego filtra można przedstawić jako zmodulowaną wersję filtra zerowego:

H k (z ) = H 0 zWMk ( ) (18.41)
Zespoły filtrów 517

gdzie
M −1
1 − z −M
H 0 ( z) = ∑ z −n = 1 + z −1 + .... + z −( M −1) = 1 − z −1 (18.42)
n =0

Z (18.39) i (18.42) wynika, że filtr zerowy jest oknem prostokątnym o długości równej M. Jego
charakterystyka amplitudowo-częstotliwościowa ma pierwszy listek boczny na poziomie −13,5
decybela (patrz rozdział 8). Wynika stąd, że IDFT jest zespołem filtrów, charakteryzujących
się bardzo słabym tłumieniem w paśmie zaporowym. Naturalną wydaje się więc jego modyfi-
kacja, opisana w następnym podrozdziale, polegająca na zastosowaniu okna innego niż prosto-
kątne.
Na rysunku 18.23 jest przedstawiony zespół filtrów, odpowiadający IDFT. Jak widać sygnał
wejściowy jest przechowywany w buforze przesuwnym. Po wejściu do niego następnej próbki
(i usunięciu ostatniej, najstarszej) są wykonywane kolejno po sobie algorytmy IDFT i DFT. Ze
względu na ich właściwości na wyjściu DFT pojawia się przeskalowany w amplitudzie wektor
wejściowy:

M { x0 ( n ), x1 ( n ), ..., x M −1 ( n )} = { Mx ( n ), Mx ( n − 1), ..., Mx ( n − M + 1)} (18.43)

Mnożenie przez M jest spowodowane zaniedbaniem dzielenia przez M w równaniu (18.38).


Następnie dane wyjściowe z poszczególnych kanałów są opóźniane i dodawane. Z analizy stru-
ktury tego zespołu filtrów wynika, że ma on właściwość PR, ponieważ sumaryczny sygnał
wyjściowy jest równy:
xˆ (n ) = Mx ( n − M + 1) (18.44)

W zespole filtrów IDFT/DFT filtry sekcji syntezy są równe:

( )
Gk ( z ) = WM− k G0 zWMk , G0 ( z ) = H 0 ( z ) (18.45)

czyli powstają z tego samego filtra prototypowego (okno prostokątne).

a) x (n ) y0 ( n )

z −1 x ( n − 1) y1 (n ) z −1

z −1 IDFT DFT z −1
x ( n − M + 1) y M −1 (n) xˆ ( n )

b) x (n ) y0 ( n )
↓M ↑M
z −1 y1 (n) z −1
↓M ↑M
z −1
IDFT DFT z −1
y M −1 ( n ) xˆ ( n )
↓M ↑M

Rys. 18.23. IDFT/DFT jako zespół filtrów: a) wersja niedecymowana, b) wersja maksymalnie decymowana
518 Zespoły filtrów

Oczywiście przedstawiony zespół filtrów charakteryzuje się znaczym nadpróbkowaniem


w dziedzinie częstotliwościowej, gdyż nie ma w nim decymacji sygnałów podpasmowych. Po
wprowadzeniu układów M-krotnego „podpróbkowania” i „nadpróbkowania” w każdym kanale
pomiędzy IDFT i DFT oraz po odpowiednim przesunięciu tych układów przed IDFT oraz za
DFT, otrzymujemy krytycznie próbkowany zespół filtrów IDFT/DFT. Jak widać teraz algo-
rytm IDFT jest wykonywany na oddzielnych, nienakładających się na siebie blokach o długości
M próbek wejściowych. Sumaryczna liczba próbek sygnałów podpasmowych jest równa liczbie
próbek filtrowanego sygnału wejściowego.

18.4.2. Krótkoczasowa transformacja Fouriera STFT jako modulowany zespół


filtrów

W typowej analizie czasowo-częstotliwościowej, wykorzystującej krótkookresową transforma-


cję Fouriera STFT (ang. Short Time Fourier Transform), okno analizy w(n) ma długość równą
długości dyskretnej transformacji Fouriera, której jest poddawany sygnał, czyli L = M. Okno to
odpowiada dolnoprzepustowemu filtrowi prototypowemu p(n), stosowanemu w modulowanych
zespołach filtrów. W STFT jest ono przesuwane z krokiem równym N, wymnażane z sygnałem
wejściowym, a następnie „wycięty” i zmodyfikowany przez okno fragment sygnału jest pod-
dawany M-punktowej dyskretnej transformacji Fouriera DFT. Przesunięcie odpowiada w tym
przypadku rzędowi decymacji. Procesem odwrotnym do analizy jest synteza, która jest prze-
prowadzana z wykorzystaniem odwrotnej transformaty Fouriera IDFT i dualnego okna czaso-
wego w~( n ) (okno analizy i syntezy można zamienić miejscami). W praktyce krok N jest mniej-
szy niż M (np. N = M/2), co oznacza, że DFT jest wykonywane na częściowo pokrywających
się fragmentach sygnału. Prowadzi to do nadmiarowej reprezentacji czasowo-częstotliwoś-
ciowej (lub zespole filtrów z nadpróbkowaniem). Ich nadmiarowość jest związana z faktem, że
reprezentacja sygnału w dziedzinie częstotliwości ma więcej próbek niż analizowany sygnał
w dziedzinie czasu. Problemy właściwego próbkowania klasycznych reprezentacji TF opartych
na dyskretnej transformacji Fouriera, czyli STFT i reprezentacji Gabora, szczegółowo omó-
wiono w pkt. 17.2 poświęconym reprezentacji Gabora i teraz będą pominięte. Teraz zostanie
przedstawiona interpretacja reprezentacji STFT jako zespołu filtrów w szcze-
gólnej sytuacji, kiedy: 1) stopień decymacji N jest równy liczbie kanałów M
(próbkowanie krytyczne), 2) okno transformacji ma długość M (czyli kiedy
kolejne fragmenty sygnału poddawane analizie nie zachodzą na siebie). W na-
stępnym rozdziale dokonamy jej uogólnienia na przypadek filtrów o dowolnej długości.
W celu uzyskania analogii do materiału przedstawionego w innych podrozdziałach, ponownie
założymy, że w STFT najpierw jest wykonywana transformacja IDFT (analiza) a potem DFT
(synteza). W stosunku do zespołu filtrów IDFT/DFT, opisanego w poprzednim podrozdziale,
jedyną różnicą jest wówczas zastąpienie okna prostokątnego przez dowolne okno w(n) = p(n).
Niech p(m), 0 ≤ m ≤ M−1, oznacza okno zastosowane podczas analizy STFT, wówczas analo-
gicznie do (18.38) mamy
M −1
 x ( n − i ) p(i )  WM , k = 0, 1, ..., M − 1, WM = e
− ik − j 2π / M
uk (n ) = ∑ (18.46)
i =0

tzn. IDFT jest wykonywane na fragmencie sygnału wyciętym przez okno. Równanie (18.46)
można interpretować jako splot analizowanego sygnału z filtrami o odpowiedziach impulso-
wych postaci:
hk (n ) = p (n )WM− nk (18.47)
Zespoły filtrów 519

Analogicznie jak w przypadku zespołu filtrów IDFT/DFT mamy:

(
h0 ( n ) = p(n ), H 0 ( z ) = P( z ), H k ( z ) = P zWMk ) (18.48)

Jak widać ponownie mamy do czynienia z modulowanym zespołem filtrów (przesuwanie


w częstotliwości transmitancji okna, czyli filtra prototypowego). Zastosowanie okna innego niż
prostokątne zmienia jedynie charakterystykę częstotliwościową wszystkich filtrów Hk(z). Wy-
bierając okno możemy wpływać na szerokość listka głównego i poziom listków bocznych
w jego widmie. Bardzo wygodny jest wybór i odpowiednie kształtowanie okna parametryczne-
go, np. okna Kaisera.
Interpretacja graficzna sekcji analizy krytycznie próbkowanego zespołu filtrów STFT jest taka
sama jak na rysunku IDFT/DFT, z tą różnicą, że wektor danych przed IDFT należy wymnożyć
przez wagi okna p(m). Jest oczywiste, że krytycznie próbkowany zespół filtrów STFT będzie
miał właściwość perfekcyjnej rekonstrukcji, kiedy wektor danych po DFT zostanie wymno-
żony przez okno odwrotne do p(m), czyli przez :
1
q( m ) = , m = 0, 1, ..., M − 1 (18.49)
p(m)

Analogicznie jak w przypadku zespołu filtrów IDFT/DFT, także dla STFT filtry syntezy mają
postać:
Gk (z ) = WM− k Q zWMk( ) (18.50)

18.4.3. Uogólniony modulowany zespół filtrów oparty na DFT

Obecnie rozpatrzymy najogólniejszy przypadek k r y t y c z n i e p r ó b k o wa n y c h (M = N), mo-


dulowanych zespołów filtrów, zbudowanych z wykorzystaniem DFT. Załóżmy, że poszcze-
gólne filtry hk(n) bloku analizy powstają w wyniku modulacji odpowiedzi impulsowej jednego
i tego samego dolnoprzepustowego f i l t r a p r o t o t y p o we g o p (n) o d o wo l n e j d ł u g o ś c i .
Niech P(z) oznacza transmitancję Z tego filtra (dowolnego typu: FIR lub IIR), wówczas:

hk (n ) = p (n )WM− kn

∑ hk (n) z −n = ∑ p(n)WM−kn z −n = ∑ p(n)(WMk z )


∞ ∞ ∞ −n
H k ( z) = =P( zWMk ) (18.51)
n = −∞ n = −∞ n = −∞

Zamiast realizować każdy filtr analizy oddzielnie możliwe jest zbudowanie bardziej efektywnej
obliczeniowo realizacji całego zespołu równocześnie. Załóżmy, że funkcja P(z) jest przed-
stawiona w postaci polifazowej pierwszego typu:
M −1
P( z ) = ∑ z − l PlI ( z M ) (18.52)
l =0

gdzie P Il(z) jest l-tym składnikiem polifazowym pierwszego typu. Podstawiając (18.52) do
(18.51) otrzymuje się:

∑ z −lWM−kl PlI ( z M WMkM ) = ∑WM−kl (z −l PlI ( z M ))


M −1 M −1
H k ( z) = (18.53)
l =0 l =0
520 Zespoły filtrów

gdzie wykorzystano równość WMkM = 1 . Równanie (18.53) można zapisać w postaci macie-
rzowej:
 P0I ( z M ) 
 
−1 I M
 z P1 ( z ) 
 
H k ( z ) = 1 WM− k WM−2 k " WM− ( M −1) k   z −2 P I ( z M )  (18.54)
  2
 # 
 
− ( M −1) I
 z PM −1 ( z M ) 

Wszystkie M równań definiujących Hk(z), k = 0, 1, ..., M−1, można zebrać razem i zapisać
w następującej postaci macierzowej:
1 1 1 " 1  P0I ( z M ) 
 H0 ( z)     
 H ( z )  1 WM −1
WM−2 " WM− ( M −1)   z −1P1I ( z M ) 
 1     
 H 2 ( z )  = 1 WM−2 WM−4 " WM−2( M −1)  −2 I M (18.55)
 z P2 ( z ) 
    
 #  # # # % # #
2   
 H M −1 ( z )  1 WM− ( M −1) WM−2( M −1) " WM− ( M −1)   z − ( M −1) PMI −1 ( z M ) 

równoważnej zapisowi
 P0I ( z M ) 
 H0 ( z)   
 H ( z)   z −1P1I ( z M ) 
 1   
 H 2 ( z )  = W *  z −2 P I ( z M )  (18.56)
2
   
 #  #
 
 H M −1 ( z )   z − ( M −1) PMI −1 ( z M ) 

gdzie W * oznacza macierz odwrotnego dyskretnego przekształcenia Fouriera (IDFT): [W *]kl =


= WM−kl = e j(2π/M)kl. Z powyższego równania wynika, że niezdecymowane sygnały podpasmowe
są wynikiem wykonania algorytmu IDFT na wektorze danych, powstałych w wyniku filtracji
sygnału wejściowego przez kolejne składowe polifazowe filtra prototypowego. Równanie
(18.54) również można zapisać jako:
 P0I ( z M ) 0 0 " 0  1 
 H0 ( z)     −1 
 H (z)   0 I M
P1 ( z ) 0 " 0  z
 1  
   −2  (18.57)
 H 2 ( z)  = W *  0 0 I M
P2 ( z ) " 0  z
  
#  # # # % 0  # 
   
 H M −1 ( z )  − ( M −1)

 0 0 0 " PMI −1 ( z M )   z 

i wyciągnąć stąd wniosek, że macierz polifazowa H I(z) (18.33) ma w rozpatrywanym przypad-


ku następującą postać:
 P0I ( z ) 0 " 0 
 I

 0 P1 ( z ) " 0 
H I ( z ) =  H k,l
I
( z) = W *  
(18.58)
  # # % #
 
 0 0 " PMI −1 ( z ) 

Zespoły filtrów 521

gdzie:
H kI , l ( z ) = WM− kl Pl I ( z ) (18.59)

Aby zespół filtrów miał właściwość perfekcyjnej rekonstrukcji PR, musi być spełniony waru-
nek (18.35). Określa on postać macierzy G II(z) w zależności od H I(z). W rozpatrywanym przy-
padku wynika z niego, między innymi, że transmitancje Gk(z), k = 0, 1, 2, ..., M − 1, filtrów sek-
cji syntezy powinny być postaci:

Gk ( z ) = WM− k Q ( zWMk ), k = 0, 1, ..., M − 1 (18.60)

gdzie Q(z) oznacza transmitancję dolnoprzepustowego filtra prototypowego q(n) bloku synte-
zy, różnego od p(n). Obecnie wykażemy zasadność warunku (18.60) oraz wyprowadzimy wa-
runki pozostałe. Wszystkie przekształcenia są analogiczne jak dla bloku filtrów analizy, tylko
w tym przypadku jest stosowana dekompozycja polifazowa typu II:

g k ( n ) = W − k q( n )WM− kn
∞ ∞ ∞
( )
−n
Gk ( z ) = ∑ gk (n) z −n =W −k ∑ q( n )WM− kn z − n = W − k ∑ q( n ) WMk z = W − k Q ( zWMk ) (18.61)
n =−∞ n =−∞ n =−∞

M −1
Q( z) = ∑ z −( M −1−l )QiII ( z M ) (18.62)
l =0
M −1
Gk ( z ) = ∑ WMkl ( z − ( M −1−l )QlII ( z M ) ) (18.63)
l =0
T
T  z − ( M −1)Q0II  1 1 1 " 1 
 G0 ( z )   − ( M −2) II   
 G ( z)  z Q1  1 WM 1
WM2 " WM( M −1) 
 1   − ( M −3) II   
 G2 ( z )  =  z WM2 WM4 " WM2( M −1)  (18.64)
Q2  1
    # 
 #  # # # % #
   
GM −1 ( z )  − 2
 QM II
−1
 (
1 WM M 1)
WM M −1)
2(
" WM( M −1) 
T
T  z − ( M −1) 1 Q0II ( z M ) 0 0 " 0 
 G0 ( z )   
 G ( z)   − ( M − 2)  II M
z   0 Q1 ( z ) 0 " 0 
 1   W
 G2 ( z )  =  z − ( M −3)   0 0 II M
Q2 ( z ) " 0 
(18.65)
   
#    # # # % # 
  #
 
GM −1 ( z )   
 1   0 0 0 " II
QM M 
−1 ( z ) 

Cały zespół filtrów będzie odwracalny, jeśli jest spełniony następujący warunek:

 H 0 ( z) 
 H ( z) 
[G0 ( z ) G1 ( z ) ... GM −1 ( z )]  1  = cz − m0 (18.66)
 # 
 
 H M −1 ( z ) 

Ponieważ WW* = I, ostatecznie otrzymujemy:


522 Zespoły filtrów

Q0II ( z ) P0I ( z ) 0 " 0 


 II 
 0 Q1 ( z ) P1I ( z ) " 0  = cz − m0 I (18.67)
 # # % # 
 II I 
 0 0 " QM 
−1 ( z ) P1 ( z )

skąd wynika, że rozpatrywany zespół filtrów, w którym jest prawdziwe (18.60), ma właściwość
PR kiedy

QkII ( z ) PkI ( z ) = cz − m 0 , k = 0,1,..., M − 1 (18.68)

Filtry prototypowe p(n) i q(n) sekcji analizy i syntezy muszą więc być zaprojektowane w taki
sposób, aby iloczyny wielomianów transmitancji Z ich wszystkich składowych polifazowych
spełniały warunek (18.68) (patrz przykład dekompozycji polifazowej w rozdziale 18.2.2).

Z przeprowadzonej analizy oraz z warunku (18.68) można wyciągnąć następujące wnioski:


1) Dodanie mnożnika WM− k we wzorze na transmitancje filtrów syntezy (18.60) spowodowało,
że w zapisie polifazowym tych transmitancji otrzymano bazy fourierowskie WMkl. W kon-
sekwencji praktyczna realizacja bloku filtrów syntezy sprowadza się do: wykonania algorytmu
DFT na zdecymowanych sygnałach podpasmowych, filtracji polifazowej jej wyniku oraz zsu-
mowania odpowiednio opóźnionych sygnałów po filtracji. Dodatkowo uzyskano uproszczenie
warunku na PR (18.35), spowodowane zniesieniem się macierzy modulacyjnych bloku analizy
i syntezy (WW * = I).
2) Ze wzoru (18.68) wynika, że dla zespołów filtrów typu FIR (tylko wielomian w liczniku
transmitancji filtrów prototypowych, odpowiedź impulsowa o skończonej długości) wszystkie
składowe polifazowe mogą mieć jedynie postać:

PkI ( z ) = a k z −i , QkII ( z ) = bk z − j (18.69)


gdzie
a k bk = c, i + j = m0 (18.70)

Z kolei konsekwencją (18.69) jest wniosek, że oba filtry prototypowe muszą mieć długość rów-
ną M, gdyż wielomiany ich składowych polifazowych mają tylko jeden składnik z− k. Jak widać
krótkoczasowa, krytycznie próbkowana transformacja Fouriera z oknem o długości M speł-
nia warunki (18.69) i (18.70). Mamy bowiem dla niej: c = 1, m0 = 0, i = 0, j = 0, ak = p(k),
bk = q(k) = 1/p(k), 0 ≤ k ≤ M − 1, dla DFT zaś jako zespołu filtrów mamy dodatkowo: p(k) =
= q(k) = 1. Ograniczenie długości okna wpływa negatywnie na jego właściwości częstotli-
wościowe (mała selektywność).
Jeśli filtr prototypowy analizy P(z) jest filtrem dolnoprzepustowym w przedziale |ω| ≤ π/M,
mającym charakterystykę częstotliwościową P(ejΩ) symetryczną wokół Ω = 0, to wygenerowa-
ne z jego pomocą filtry Hk(z) są pasmowoprzepustowe i mają pulsacje środkowe Ωk = 2πk/M
(patrz rysunek 18.24). Zwykle filtr prototypowy jest filtrem o współczynnikach rzeczywistych,
ale filtry Hk(z) mają już współczynniki zespolone. Analogiczna sytuacja występuje dla filtrów
sekcji syntezy: prototypu Q(z) oraz filtrów Gk(z).
Na rysunku 18.25 przedstawiono postać polifazową zespołu filtrów z modulacją zespoloną.
Z równania (18.35) i jego graficznej interpretacji na rysunku 18.25 wynika, że operacja równo-
czesnej filtracji wielokanałowej sygnału wejściowego sprowadziła się do: wyznaczenia
wartości M komponentów polifazowych sygnału x(n) (filtracja polifazowa) oraz do wykonania
Zespoły filtrów 523

M-punktowej odwrotnej dyskretnej transformacji Fouriera na tak otrzymanym wektorze. Kiedy


M = 2p, zamiast IDFT można zastosować algorytm szybkiej transformacji Fouriera (IFFT).
W stosunku do zespołu filtrów syntezy można wyciągnąć podobne wnioski (DFT plus równo-
czesna filtracja polifazowa sygnałów w poszczególnych kanałach).

H0 = P H1 H2 H M −1

π 0 π 2π 4π
− 2π Ω
M M M M

Rys. 18.24. Charakterystyka częstotliwościowa zespołu filtrów analizy

x (n )
↓M P0I ( z ) Q0II ( z ) ↑ M
z −1 z −1
↓M P1I ( z ) IDFT DFT Q1II ( z ) ↑M
z −1 W* W z −1
xˆ (n )
z −1 II z −1
↓M PMI −1 ( z ) QM −1 ( z ) ↑ M

Rys. 18.25. Polifazowy zapis zespołu filtrów z modulacją zespoloną

Pewnego komentarza wymaga jeszcze fakt położenia reduktorów „↓M” i ekspanderów „↑M”
na rysunku 18.25. W związku z tym, że w wyniku filtracji pasmowoprzepustowej pasmo czę-
stotliwościowe sygnałów w poszczególnych kanałach jest M razy węższe, można je próbkować
M razy rzadziej. Z właściwości filtrów polifazowych i DFT wynika, że reduktory występujące
na wyjściu poszczególnych kanałów można przesunąć na ich wejście i pracować na mniejszych
strumieniach danych. Przesunięcie decymatorów z wyjścia na wejście można także uzasadnić
w inny sposób, ponieważ redukcja „↓M” jest równoważna wzięciu tylko jednej próbki z każ-
dych M próbek, część wyliczonych próbek w ogóle nie jest wykorzystywana. Dlatego jest
zasadne pytanie jaki jest sens ich obliczania? Przesunięcie decymatorów do przodu likwiduje
ten problem. Wyznaczane są tylko potrzebne próbki.
Ponieważ przeprowadzone w tym podrozdziale przekształcenia matematyczne oraz wynikający
z nich schemat blokowy z rysunku 18.25 wykorzystują zapis polifazowy, do którego trzeba się
niestety przyzwyczaić i który na początku może nowicjuszom stwarzać trochę problemów,
na rysunkach 18.26 i 18.27 przedstawiono sekcje analizy i syntezy modulowanego zespołu
filtrów DFT w sposób alternatywny: bardziej rozbudowany graficznie, ale za to być może pro-
stszy w zrozumieniu i łatwiejszy do implementacji programowej dla części Czytelników. Pod-
czas analizy (rys. 18.26) do wejściowego bufora przesuwnego (blok elementów „z−1” i „↓M”
otoczonych linią przerywaną) jest jednorazowo pobieranych M próbek sygnału. Potem nastę-
puje mnożenie wszystkich próbek z bufora przez odpowiadające im wagi pk filtra, sumowanie
iloczynów „w grupach” polifazowych oraz wyznaczanie M-punktowego DFT. Podczas syntezy
(rys. 18.27) wynik IDFT jest „zwielokratniany”, tzn. każda próbka IFFT jest mnożona równo-
cześnie przez wszystkie odpowiadające jej składowe polifazowe qk filtra syntezy, a następnie
otrzymany w ten sposób wektor jest dodawany do zawartości bufora wyjściowego (blok
elementów „z−1” i „↑M” otoczonych linią przerywaną)), który po tej operacji jest przesuwany
o M pozycji do dołu i ... otrzymujemy M próbek wyjściowych.
524 Zespoły filtrów

x(n) p0
↓M 0
−1 1
z p1 2
↓M y0(n)
z−1 ∑ 0 0

pM−1
↓M K−1
−1
z pM
↓M 0
−1 1
z pM+1 2
↓M y1(n)
z −1 ∑ 1 1

p2M−1
↓M K−1

z−1 p2M
↓M
−1
z p2M+1
DFT
↓M
z−1
W*
pLp−(M+1)
↓M
z−1 pLp−M
↓M 0
−1 1
z
pLp−(M−1)
↓M yM−1(n)
z −1 ∑ M−1 M−1

pLp−1 K−2
↓M K−1

Rys. 18.26. Szczegółowy schemat sekcji a n a l i z y zespołu filtrów z modulacją zespoloną DFT. W celu
uproszczenia zapisu zastosowano inne oznaczenie numerów próbek odpowiedzi impulsowej filtra prototypo-
wego: pn = p(n), n = 0, 1, 2, ..., Lp − 1. W nadpróbkowanym zespole filtrów reduktor „↓” może być rzędu
N < M (wówczas do bufora jest jednorazowo pobieranych N, a nie M próbek)
Zespoły filtrów 525

q0
↑M
q1 z−1
↑M

y0(n) 0 0 z−1

qM−1
↑M

qM z−1
↑M

qM+1 z−1
↑M
y1(n) 1 1 z−1

q2M−1
↑M

q2M z−1
↑M

q2M+1 z−1
IDFT ↑M

z−1
W
qLp−(M+1)
↑M

qLp−M z−1
↑M

qLp−(M−1) z−1
↑M
yM−1(n) M−1 M−1 z−1

qLp−1
^
x(n)
↑M

Rys. 18.27. Szczegółowy schemat sekcji s y n t e z y zespołu filtrów z modulacją zespoloną DFT. W celu
uproszczenia zapisu zastosowano inne oznaczenie numerów próbek odpowiedzi impulsowej filtra prototypo-
wego qn = q(n), n = 0, 1, 2, ..., Lq − 1. W nadpróbkowanym zespole filtrów ekspander „↑” może być rzędu
N < M (wówczas po dodawaniu bufor jest przesuwany o N, a nie o M próbek)
526 Zespoły filtrów

Dla dociekliwych. Ponieważ sygnał wyjściowy z k-tego kanału analizy yk(m), 0 ≤ k ≤ M−1, jest
równy (filtracja plus redukcja):
L −1 L −1
y k ( m) = ∑ hk (n) x(mM − n) = ∑ p(n)WM− kn x(mM − n) (18.71)
n =0 n=0

stąd po podstawieniu n = iM + j, L = MLp mamy:


M −1 L p −1
y k (m ) = ∑∑ p(iM + j )WM−k (iM + j ) x (mM − iM − j ) (18.72)
j =0 i =0

Po prostych przekształceniach ostatecznie otrzymujemy:

M −1  L p −1  M −1  L p −1 
y k ( m) = ∑ WM− kj  ∑ p(iM + j ) x(mM − iM − j ) = ∑ WM− kj  ∑ p Ij (i ) x Ij (m − i ) (18.73)

j =0  i =0  j =0  i =0

Powyższe równanie jest odpowiednikiem czasowym zależności (18.54). Uwzględniając wszy-


stkie kanały, ponownie widzimy (analogia do (18.7)), że w modulowanym zespole filtrów typu
DFT sygnały podpasmowe powstają w wyniku wykonania algorytmu IDFT (bez dzielenia
przez M) na wyniku filtracji polifazowej przetwarzanego sygnału przez filtr prototypowy.

Problem niemożliwości zastosowania długich filtrów typu FIR w maksymalnie próbkowanych


uogólnionych zespołach typu DFT, mających właściwość PR, jest rozwiązywany na dwa spo-
soby: zmianę struktury tego zespołu lub jego nadpróbkowanie.

Zmiana struktury. W literaturze zaproponowano modyfikację krytycznie próbkowanego, mo-


dulowanego zespołu filtrów, zbudowanego na podstawie algorytmu DFT. Modyfikacja ta na-
wet w przypadku próbkowania krytycznego umożliwia osiągnięcie właściwości PR. W zmody-
fikowanym zespole zastosowano dwuetapową decymację sygnałów podpasmowych: 1) naj-
pierw poddaje się procesowi decymacji przez M/2 zespolone sygnały wyjściowe z filtrów
Hk(z), 2) następnie opóźnia się o jedną próbkę składową urojoną sygnału zespolonego w sto-
sunku do jego składowej rzeczywistej dla k parzystego lub rzeczywistą w stosunku do urojonej
dla k nieparzystego, 3) w końcu obie składowe decymuje się przez dwa. W bloku syntezy
wszystkie operacje przebiegają w odwrotnej kolejności. Jedna gałąź zmodyfikowanego
zestawu filtrów dla k parzystego jest pokazana na rysunku 18.28. W przypadku przetwarzania
sygnałów o wartościach rzeczywistych zaproponowany zespół filtrów jest jednak równoważny
znanym zespołom z rzeczywistą modulacją kosinusową, mającym właściwość PR, które będą
omówione w podrozdziale 18.5.

Hk(z) ↓M/2 Real() ↓2 ↑2

z-1 z-1

Imag() ↓2 ↑2 ↑M/2 Gk(z)

Rys. 18.28. Jedna gałąź zmodyfikowanego zespołu filtrów DFT, zapewniającego właściwość PR w przy-
padku próbkowania krytycznego (M = N), k − parzyste
Zespoły filtrów 527

Nadpróbkowanie. Wykazano także, że w przypadku nadpróbkowanych zespołów filtrów DFT,


dla których stopień nadpróbkowania η = M/N∈Z (M = ηN) jest liczbą całkowitą większą od
jedności (patrz rysunek 18.1), warunek PR przyjmuje następującą postać:
η −1
∑ QkII+ lN ( z ) PkI+ lN ( z ) = cz − m ,
0 k = 0,1,..., N − 1 (18.74)
l =0

Z porównania (18.35) i (18.74) wynika, że jeśli zespół krytycznie próbkowany spełnia warunek
PR, to także jego całkowicie nadpróbkowana wersja go spełnia. Przykładowo dla η = 2 mamy:
QkII ( z ) PkI ( z ) + QkII+ N ( z ) PkI+ N ( z ) = cz − m0 + cz − m0 = 2c ⋅ z − m0 (18.75)

Co ciekawe, wszystkie filtry prototypowe typu PR zaprojektowane dla η-krotnie nadpróbko-


wanych, M-kanałowych zespołów filtrów z modulacją kosinusową DCT zapewniają także speł-
nienie warunku PR w 2η-krotnie nadpróbkowanych, 2M-kanałowych zespołach filtrów DFT
(w obu przypadkach η = M/N). Nie wszystkie filtry zaprojektowane według (18.74) są na-
tomiast odpowiednie dla zespołów z modulacja kosinusową, czyli stosując nadpróbkowane
zespoły filtrów DFT i wzór (18.74) w fazie projektowania istnieje więcej stopni swobody,
z których można skorzystać.
Problemy występujące w krytycznie próbkowanych zespołach filtrów z modulacją zespoloną
mogą być i są rozwiązywane poprzez zastosowanie odpowiednio skonstruowanej modulacji
rzeczywistej, na przykład kosinusowej. Zespoły filtrów z modulacją kosinusową znajdują wiele
zastosowań praktycznych, np. w kompresji sygnałów audio. Często występują w wersji o dłu-
gości odpowiedzi impulsowej M = N i L = 2N (N-współczynnik decymacji) i są określane mia-
nem transformaty LOT (ang. Lapped Orthogonal Transform) lub MLT (ang. Modulated
Lapped Transform).

18.5. Zespoły filtrów z modulacją kosinusową


Obecnie skrótowo przedyskutujemy zespoły filtrów z modulacją kosinusową, będącą szczegól-
nym przypadkiem modulacji rzeczywistej. W zespołach tych, podobnie jak w przypadku mo-
dulacji zespolonej, wszystkie filtry analizy pochodzą od tego samego dolnoprzepustowego
filtra prototypowego, co zdecydowanie ułatwia ich projektowanie i implementację. Zalety zes-
połów filtrów z modulacją rzeczywistą są następujące:
• koszt realizacji zespołu filtrów analizy jest równy kosztowi realizacji tylko jednego filtra
oraz modulacji; modulacja może być zrealizowana za pomocą istniejących szybkich transfor-
macji sygnałów, np. dyskretnej transformacji kosinusowej (DCT);
• filtry syntezy są porównywalne kosztowo z filtrami analizy; podczas fazy projektowania op-
tymalizuje się wyłącznie wartości współczynników filtra prototypowego.
Oczywiście zespoły filtrów z modulacją rzeczywistą, podobnie jak wszystkie FB, mogą mieć
właściwość perfekcyjnej rekonstrukcji (zespoły typu PR) lub też spełniać warunki PR tylko
w przybliżeniu (zespoły typu quasi-PR).

18.5.1. Równania, budowa

W zespołach filtrów z modulacją rzeczywistą odpowiedź impulsową dolnoprzepustowego filtra


prototypowego moduluje się sygnałami typu sinus lub kosinus. Ponieważ
528 Zespoły filtrów

(
cos(ω t ) = e jωt + e − jωt ) (
2 , sin(ω t ) = e jωt − e − jωt ) (2 j ) (18.76)

dlatego układy z tego typu modulacjami można przedstawiać jako szczególny przykład zasto-
sowania modulacji zespolonej typu DFT. Ich cechami szczególnymi są: duża szybkość obli-
czeniowa, duża regularność (symetryczność) struktur implementacyjnych oraz, niestety, brak
liniowej charakterystyki fazowo-częstotliwościowej poszczególnych filtrów składowych (oczy-
wiście jako całość zespół zapewnia liniowe przesunięcie fazowe, czyli nie deformuje kształtu
a tylko opóźnia sygnał wejściowy).
W dalszej części tego rozdziału będziemy wyłącznie rozważać zespoły filtrów p r ó b k o wa n e
k r y t y c z n i e , c z y l i m a k s y m a l n i e d e c y m o wa n e ( N = M ) (patrz rysunek 18.1).
Załóżmy, że dysponujemy dolnoprzepustowym filtrem prototypowym p(n) oraz że go modu-
lujemy M sygnałami kosinusowymi o określonych częstotliwościach. Zgodnie z (18.76) zespół
filtrów, otrzymywany w taki sposób, jest równoważny zespołowi o 2M modulacjach zespolo-
nych, przedstawionemu na rysunku 18.29a, w którym łączy się w pary odpowiednie odpowie-
dzi impulsowe filtrów (w konsekwencji sygnały podpasmowe). Wynika stąd, że zespół filtrów
z modulacją kosinusową można otrzymać odpowiednio modyfikując zespół filtrów oparty na
DFT (rysunek 18.25). Przyjmijmy następujące oznaczenia:

−j
W2 M = e 2M − stała dyskretnej transformacji Fouriera DFT,
p (n ) − filtr prototypowy, 0 ≤ n ≤ Lp − 1, Lp = 2mM, (18.77)
sk ( n ) = W2−Mkn =e − j 2 πkn /( 2 M )
− k-ty sygnał modulujący, 0 ≤ k ≤ 2M − 1, (18.78)
pk ( n ) = sk (n ) p (n ) − k-ty filtr (prototyp zmodulowany), (18.79)
Pk ( z ) = P0 ( zW2kM ) − transmitancja Z k-tego filtra, (18.80)
Pk (e jΩ ) = P0 (e j ( Ω − kπ / M ) ) − transmitancja Fouriera k-tego filtra. (18.81)

Korzystamy z 2M filtrów zespolonych, więc szerokość ich pasma częstotliwościowego jest


równa (2π)/(2M) = π/M, stąd górna częstotliwość graniczna zastosowanego filtra prototypowe-
go powinna być równa połowie jego szerokości i wynosić Ωg = π/(2M). Ponieważ zakładamy,
że odpowiedź impulsowa prototypu p(n) jest rzeczywista, w związku z tym P(ejΩ) jest (a)syme-
tryczne względem pulsacji Ω = 0. Zmodulowane wersje prototypu Pk(ejΩ) i P2M−k(ejΩ), 1 ≤ k ≤
≤ M − 1 są więc także (a)symetryczne względem pulsacji Ω = π. Łącząc w pary odpowiedzi im-
pulsowe odpowiednich filtrów, otrzymuje się filtr o współczynnikach rzeczywistych:

p( n )  e j ( k π / M ) n + e j ((2 M − k ) π / M )n  = p( n )  e j ( k π / M ) n + e − j ( k π / M )n  = 2 p( n ) cos(( π / M )kn ) (18.82)


   

Aby zapewnić równość szerokości pasm filtrów po połączeniu odpowiednich par, zestaw filt-
rów z rysunku 18.29a przesuwa się dodatkowo w prawo o π/(2M) = 0,5⋅(2π)/(2M) i otrzymuje
zestaw filtrów z rysunku 18.29b. Przesunięcie to jest równoważne następującej zmianie sygna-
łów modulujących sk (n) = W2−M( k +0,5) n = e jπ( k +0,5) n / M i zastąpieniem zmiennej „z” przez „ zW2M
0,5

w transmitancjach Z (18.80) wszystkich filtrów. Oznaczmy tak otrzymane filtry przez qk(n),
0 ≤ k ≤ 2M − 1:

qk ( n) = p( n)W2−M( k + 0,5) n (18.83)


Zespoły filtrów 529

a)
H1(e jΩ) H3(e jΩ) H2M−1(e jΩ)

0 1 2 3 4 2M−1 Ω

0 π/M 2π/M 3π/M 4π/M (2M−1)π/M 2π

b)
HM−1(e jΩ) H1(e jΩ) H1(e jΩ) HM−1(e jΩ)

M− 1 1 0 0 1 M−1 Ω

−π −2π/M −π/M 0 π/M 2π/M π

Rys. 18.29. Związek pomiędzy charakterystykami filtrów w 2M-kanałowym zespole filtrów DFT (a)
i charakterystykami filtrów w M-kanałowym zespole filtrów DCT (b). Ciemnym kolorem zaznaczono chara-
kterystykę częstotliwościową filtraH1(ejΩ) w obu przypadkach

W celu otrzymania odpowiedzi impulsowych filtrów hk(n) sekcji analizy, połączmy obecnie
odpowiednie pary filtrów zespolonych qk(n) i q2M − k(n) (0 ≤ k ≤ M − 1):

 π 
hk (n ) = qk (n ) + q2 M − k (n ) = 2 p( n ) cos (k + 1 / 2)n  (18.84)
M 
W analogiczny sposób otrzymuje się filtry gk(n) sekcji syntezy. W rzeczywistości dodawanie
(18.84) przeprowadza się z wagami zespolonymi, które dobiera się w taki sposób, aby zapew-
nić liniowość fazy całego zespołu filtrów oraz zredukować (lub całkowicie wyeliminować
drogą kompensacji) zjawiska przecieku widmowego pomiędzy podpasmami. Na tym etapie
wykorzystuje się równania (18.32). W wyniku optymalizacji opisanej powyżej (przy założeniu
wykorzystania tego samego filtra prototypowego p(n) w sekcji analizy i syntezy) uzyskuje się
następujące równania na odpowiedzi impulsowe filtrów hk(n) i syntezy gk(n) (k = 0, 1, 2, ...,
M − 1):
 π L −1 π
hk ( n ) = 2 p (n ) cos  ( k + 0,5) ( n − ) + ( −1)k  (18.85a)
M 2 4
 π L −1 π
g k ( n ) = 2 p (n ) cos  ( k + 0,5) (n − ) − ( −1)k  (18.85b)
M 2 4
gdzie p(n), 0 ≤ n ≤ Lp − 1, Lp = 2mM oznacza dolnoprzepustowy filtr prototypowy o pulsacji
granicznej Ωg = π/(2M), który należy zaprojektować. Jeśli filtr p(n) jest symetryczny, to odpo-
wiedzi impulsowe filtrów syntezy gk(n) są odwróconymi w czasie odpowiedziami impulsowy-
mi filtrów analizy hk(n), niezależnie od wyboru p(n). Wzory (18.85a), (18.85b) są podstawo-
wymi wzorami w teorii zespołów filtrów z modulacją rzeczywistą.
Na rysunku 18.30 przedstawiono 2M-kanałową wersję zespołu filtrów DFT z rysunku 18.25
i dalsze „wyprowadzenie” z niej układu implementującego w sposób efektywny obliczeniowo
M-kanałowy zespół filtrów z modulacją kosinusową DCT-IV, opisany powyżej. Schemat ten
wykorzystuje zapis polifazowy wszystkich filtrów. Macierz W jest macierzą dyskretnej trans-
formacji Fouriera (DFT) o wymiarach 2M×2M, natomiast PkI(z), 0 ≤ k ≤ 2M−1 oznacza k-tą
530 Zespoły filtrów

składową polifazową I typu transmitancji P(z) filtra prototypowego (18.18a). W zespole filtrów
DCT-IV zespolona macierz „modulacji” W transformacji DFT jest zastąpiona przez
rzeczywistą macierz T transformacji kosinusowej o wymiarach M × 2M, 0 ≤ k ≤ M−1, 0 ≤ m ≤
≤ 2M−1:
 π L −1 
t (k , m ) = 2 cos ( k + 1 / 2)( m − ) + ( −1) k π / 4  (18.86)
M 2 

W sekcji syntezy jest wykorzystywana transpozycja macierzy T, czyli TT. Transformacja T jest
realizowana za pomocą szybkich algorytmów DCT.

a)
x (n )
P0I (z2M ) ↓ 2M ↑ 2M Q0II ( z 2 M )
z −1 IDFT DFT z −1
I
P (z ) 2M
W* ↓ 2M ↑ 2M W Q (z
1
II 2M
)
z −1
1
−1
z 2M × 2M 2M × 2M
ˆ
z −1 x (n )
z −1 P2IM −1 ( z 2 M ) ↓ 2M ↑ 2M Q2IIM −1 ( z 2 M )

b)
x (n )
P0I (−z2M ) ↓ 2M ↑ 2M Q0II (−z2M )
z −1W −1 / 2
z −1W −1 / 2 IDFT DFT
P (−z )
1
I 2M
↓ 2M ↑ 2M Q (−z )
II
1
2M

z −1W −1 / 2 W* W z −1W −1 / 2
2M × 2M 2M × 2M xˆ ( n )
z −1W −1 / 2 z −1W −1 / 2
P I
(−z )
2M
↓ 2M ↑ 2M Q2IIM −1(−z2M )
2M −1

c)
x (n )
↓M P0 I (− z 2 ) Q0II (− z 2 ) ↑M
z −1
z −1 T TT
↓M P1 ( − z )
I 2
Q1II (− z 2 ) ↑M
−1 M × 2M 2M × M z −1
z
ˆ
z −1 z −1 x ( n )
↓M P2 IM −1 ( − z 2 ) Q2IIM −1 (− z 2 ) ↑M
Rys. 18.30. Kolejne przekształcenia 2M-kanałowego zespołu filtrów z modulacją zespoloną, prowadzące do
szybkiej struktury obliczeniowej zespołu filtrów z modulacją kosinusową
a) układ początkowy − 2M-kanałowy zespół filtrów z modulacją zespoloną (patrz rys. 18.25)
b) modyfikacja 1: zastosowanie podstawienia z = zW21/M2 , prowadzącego do przesunięcia charakterystyk
częstotliwościowych wszystkich filtrów zespołu w prawo o π/(2M) = 0,5(2π/(2M)); uzyskuje się w ten
sposób symetrię widm Fouriera wszystkich filtrów względemΩ = 0;
1/ 2
c) modyfikacja 2, 3, 4 i 5: 2) „przesunięcie” mnożnika W2M do funkcji bazowych transformacji DFT, 3)
przesunięcie reduktorów na lewą stronę a ekspanderów na prawą stronę, 4) dodanie parami odpowiednich
sygnałów podpasmowych po sekcji analizy (k-tego i (2M − 1 − k)-tego dla k = 0, 1, 2, ..., M − 1), w wyniku
czego redukuje się liczbę sygnałów wyjściowych z 2M do M; operacja ta odpowiada dodaniu zespolonych
funkcji bazowych transformacji DFT, co prowadzi do rzeczywistych funkcji kosinusowych transformacji
T (18.86) typu DCT.
Zespoły filtrów 531

Zespół filtrów z modulacją kosinusową można także zrealizować według schematu blokowego,
przedstawionego na rysunku 18.31, w którym macierz modulacji T1 i demodulacji T2 są
zdefiniowane w następujący sposób (0 ≤ k ≤ M − 1, 0 ≤ m ≤ 2M − 1):
 π 
t1 (k , m) = 2 cos ( k + 1 / 2)( m − M / 2)  (18.87a)
M 
 π 
t2 (k , m ) = 2 cos (k + 1 / 2)( m + M / 2)  (18.87b)
M 
Właśnie ten zespół filtrów jest stosowany w standardzie MPEG audio i z tego powodu zostanie
on dokładniej omówiony w podrozdziale 18.6. Obecnie zwrócimy jedynie uwagę na jego pod-
stawowe cechy implementacyjne.

a)

xwe(n) y0(m)
↓M P0(−z2) 0 0
PM (−z2) 1 1
z−1 2 2
z−1

↓M P1(−z2) T1
PM+1(−z2) z−1 M−1 M−1
M yM−1(m)
M+1
z−1

↓M PM−1(−z2)
P2M−1(−z2) z−1 2M−1

b)

y0(m) xwy(n)
0 0 P0(−z2) ↑M
1 1 PM (−z2)
2 2 z−1
z−1

T2T P1(−z2) ↑M
−1 2
M−1 M−1 z PM+1(−z )
yM−1(m) M
M+1
z−1

PM−1(−z2) ↑M
−1 2
2M−1 z P2M−1(−z )

Rys. 18.31. Struktura zespołu filtrów z modulacją kosinusową, stosowana w standardzie MPEG audio:
a) sekcja analizy, b) sekcja syntezy. Macierze transformacji T1 i T2 są zdefiniowane równaniami (18.87a)
i (18.87b). Cyrkulacyjne przesunięcie tych macierzy umożliwiło zmianę kolejności „wysuwania” próbek
w porównaniu ze schematem z rysunku 18.30c
532 Zespoły filtrów

A) Jak widać filtry polifazowe łączą się w pary {Pk(−z2), PM+k(−z2)}, k = 0, 1, 2, ..., M−1. Jeśli
pary te są realizowane za pomocą struktur kratowych, przedstawionych na rysunku 18.32, to
cały zespół filtrów perfekcyjnie rekonstruuje na swoim wyjściu sygnał wejściowy. W fazie
projektowania tak należy dobrać współczynniki ck,i i sk,i wszystkich struktur (k = 0, 1, 2, ...,
M/2−1), aby „sumaryczny” prototyp p(n) był filtrem dolnoprzepustowym o pulsacji odcięcia
Ωg = π/(2M) i dużym tłumieniu w paśmie zaporowym.
B) Znak minus występujący w Pk(−z2), k = 0, 1, 2, ..., 2M − 1 powoduje, że co druga próbka
każdej składowej polifazowej filtra prototypowego podczas obliczeń jest negowana.
C) Układy opóźniające „z−1”, występujące na wyjściu transformacji T2, powodują, że składowe
polifazowe Pk(−z2), k = M, ..., 2M − 1 „pracują” na danych opóźnionych o jedną próbkę w sto-
sunku do składowych Pk(−z2), k = 0, ..., M − 1.

a)
Pk (z)

ck,0 ck,1 ck,2 ck,K

−sk,1 −s
-sk,2
k,2 −sk,K

sk,1 sk,2 sk,K


−1 −1
-1 −1
z z z
ck,0 ck,1 ck,2 ck,K

PM+k (z)

b)
Pk (z−1)

ck,K ck,2 ck,1


k,2 ck,0

sk,K sk,2 -s
sk,1
k,2

−sk,K −sk,2 −s
sk,2k,1
-1
z zz z
ck,K ck,2 ck,1
k,2 ck,0

PM+k (z−1)

Rys. 18.32. Realizacja par składowych polifazowych filtra prototypowego za pomocą struktury kratowej,
mającej zawsze właściwość perfekcyjnej rekonstrukcji: a) analiza, b) synteza. Należy zwrócić uwagę, że
w sekcji syntezy są powtarzane w odwrotnej kolejności wszystkie kroki sekcji analizy w wersji „odtwórz”
(ang. „undo”)

Oczywiście dalej nie jest rozstrzygnięty problemem wyboru odpowiedniego filtra prototypowe-
go p(n). Możliwe są dwie „strategie” jego projektowania: „p e r f e k c y j n a ” (PR), w której
zespół filtrów spełnia kryteria perfekcyjnej rekonstrukcji sygnału, „p r z y b l i ż o n a ” − prowa-
dząca do zespołów filtrów quasi-PR, w których wymagania są spełnione w sposób przybliżony
i zespół dokładnie nie rekonstruuje przetwarzanego sygnału. Każda z tych strategii ma swoje
praktyczne uzasadnienie i specyficzne pole zastosowań.
Zespoły filtrów 533

18.5.2. Projektowanie filtrów prototypowych

Zespoły filtrów DCT o perfekcyjnej rekonstrukcji


Projektowanie filtrów dla zespołów perfekcyjnie rekonstruujących jest trudniejsze i z tego po-
wodu jest stosowane tylko w przypadku filtrów o względnie krótkich odpowiedziach impulso-
wych (od 16 do 128 próbek), które zazwyczaj znajdują zastosowanie w algorytmach kompresji
obrazów. Ponieważ dla krótkich filtrów założenia metody quasi-PR (QMF) nie mogą być
spełnione (duża stromość zboczy pasm przejściowych i duże tłumienie w paśmie zaporowym),
więc nie istnieje dla nich alternatywa wyboru metody innej niż PR. Zespół filtrów DCT,
zdefiniowany przez równanie (18.87), ma zawsze właściwość PR, jeśli pary składowych poli-
fazowych filtra prototypowego p(n) spełniają następujące równanie dla k = 0, 1, 2, ..., M/2 − 1:
z − m0
QkII ( z ) PkI ( z ) + QM
II I I I I I
+ k ( z ) PM + k ( z ) = P2 M −1− k ( z ) Pk ( z ) + PM −1− k ( z ) PM + k ( z ) = (18.88)
2M
które otrzymuje się z warunku (18.35) (w rozpatrywanym przypadku p(n) = q(n) i P(z) = Q(z)).
Równanie to ma identyczną budowę jak równania (18.74), (18.75) dotyczące nadpróbkowa-
nych zespołów filtrów DFT. Zależność (18.88) nakłada warunek na iloczyny wielomianów
transmitancji Z odpowiednich składowych polifazowych pk(n) (18.12) filtra prototypowego
p(n) (patrz przykład w rozdziale 18.2.2). Warunek ten jest zawsze spełniony, jeśli odpowiednie
pary transmitancji „polifazowych” filtra prototypowego zostaną wygenerowane przez struktury
kratowe, przedstawione na rysunku 18.32 (lub inaczej: jeśli filtracja sygnałów jest realizowana
w strukturach par polifazowych {pk(n), pk+M(n)}, przedstawionych na tym rysunku). Wynikowy
zespół filtrów zawsze ma wówczas właściwość PR, niezależnie od tego jakie są składowe
polifazowe pk(n). Jedynym problemem jest zapewnienie „dolnoprzepustowego” charakteru
filtra prototypowego p(n), tzn. taki wybór składowych pk(n), aby po ich złożeniu w odpowiedź
impulsową p(k) otrzymać filtr dolnoprzepustowy „odpowiedniej” jakości. Optymalizacja doty-
czy więc w tym przypadku wyznaczenia takich wartości współczynników ck,i i sk,i wszystkich
struktur kratowych (k = 0, 1, 2,..., M/2 − 1) z rysunku 18.32, aby po złożeniu wszystkich wyge-
nerowanych przez nie składowych polifazowych pk(n) otrzymać filtr p(n), mający minimalną
energię w paśmie zaporowym, leżącym od Ωg = (π/(2M) do π.
W przypadku kiedy długość filtra prototypowego Lp jest równa 2M lub 4M, znane są równania
filtrów prototypowych gwarantujących właściwość PR całemu zespołowi filtrów:
1  π 
Lp = 2M ⇒ p(n ) = sin  ( n + 1/ 2) , n = 0, 1, 2, ..., 2 M − 1
2M  2 M 
1 1  π 
Lp = 4M ⇒ p(n ) = + sin  (n + 1/ 2) , n = 0,1, 2, ..., 4 M − 1
4 M 2 2M  2 M 

W pierwszym przypadku dla filtrów symetrycznych warunek (18.88) sprowadza się do nastę-
pującej zależności:
1 1
pk (0)2 + p M + k (0) 2 = , p 2 (n) + p 2 ( M + k ) =
2M 2M

Zespoły filtrów DCT o quasi-perfekcyjnej rekonstrukcji


W przypadku kiedy idealne spełnienie warunku PR przez zespół filtrów jest mniej istotne niż
zapewnienie dużego tłumienia poszczególnych filtrów w paśmie, preferuje się rozwiązania
534 Zespoły filtrów

przybliżone quasi-PR (np. w zespole filtrów MPEG audio z filtrami o efektywnej długości 511
współczynników, tzn. liczonej bez pierwszego zera). W tym przypadku filtr prototypowy otrzy-
muje się w wyniku równoczesnej optymalizacji liniowości charakterystyki amplitudowo-czę-
stotliwościowej całego zespołu filtrów oraz minimalizacji przecieku widmowego pomiędzy
kanałami.

1) Kryterium optymalizacji współczynników filtra prototypowego p(n) o transmitancji P(z), ze


względu na l i n i o wo ś ć c h a r a k t e r y s t y k i a m p l i t u d o wo - c z ę s t o t l i wo ś c i o we j całego
zespołu filtrów |A0(ejΩ)| = 1 (18.32a), sprowadza się do minimalizacji funkcjonału:
π/M
 jΩ 2 j ( Ω−π / M 2 
E1 = ∫  P( e ) + P(e

) − 1 d ω

(18.89)
0

Zamiast jednak wyznaczać czasochłonnie E1 z (18.89), lepiej jest skorzystać ze związku po-
między komplementarnością mocową oraz filtrami Nyquista (w naszym przypadku 2M-pasmo-
wymi) i minimalizować odpowiednik E1, mniej złożony obliczeniowo, na przykład:
L −1
E'1 = max f (2 Mm)
m, m ≠0
lub E'1 = max ∑ f (2 Mm) , f (k ) = ∑ p(n ) p( n + k ) (18.90)
m , m ≠0 n =0

2) Ze względu na r e d u k c j ę p r z e c i e k u wi d m o we g o filtr prototypowy powinien chara-


kteryzować się dobrym tłumieniem w paśmie zaporowym. Jeśli przeciek widmowy (ang. alia-
sing) ma występować tylko na granicy dwóch filtrów, to powinien być spełniony warunek:

P( e jΩ ) ≈ 0, dla Ω > π/ M (18.91)

czyli powinien być minimalizowany funkcjonał:


π 2
E2 = ∫ P ( e jΩ ) d Ω (18.92)
Ω s =π / 2 M +∆

określający energię filtra w paśmie (π/2M + ∆, π] (przypomnijmy, że π/2M jest górną często-
tliwością graniczną filtra P(z), a ∆ oznacza parametr o małej wartości). Wzór (18.92) można
przekształcić do postaci korzystniejszej ze względów obliczeniowych (szybkość i dokładność).
Jeśli zastosujemy podstawienie:

F(e jΩ) = |P(e jΩ)|2 (18.93)

to odpowiedź impulsowa f(n) nowego filtra jest dana wzorem:


L −1
f (n) = ∑ p (k ) p(k + n ) = p( k ) ⊗ p( − k ) (18.94)
k =0

Ma ona długość 2L−1 i jest symetryczna. Z tego wynika, że:


L −1
F ( e jΩ ) = ∑ 2 f L (n )cos [ Ω( L − 1 − n)] (18.95)
n =0
Zespoły filtrów 535

 f (n ) dla 0 ≤ n ≤ L − 2
f L (n ) =  (18.96)
 0,5 f (n ) dla n = L − 1
Wykorzystując (18.93) i (18.95) z (18.92) otrzymujemy:
π L −1  π 
E2 = ∫ F (e
jΩ
)d Ω = ∑  2 f L ( n ) ∫ cos [ Ω( L − 1 − n )] d Ω  =
Ωs n =0 
 Ωs 

L−2
  sin( L − 1 − n )  
= ∑  2 f L ( n )  − L − 1 − n   + 2 f L ( L − 1)( π − Ω s ) (18.97)
n =0   

gdzie fL (n) jest związane z p(n) wzorami (18.96) i (18.94).

W praktyce minimalizuje się sumę ważoną funkcjonałów E1 i E2:


E = αE1 + (1 − α) E2 (18.98)

gdzie parametrem α reguluje się względne znaczenie kryteriów E1 i E2. Po zaprojektowaniu


filtra prototypowego należy sprawdzić uzyskaną stałość charakterystyki amplitudowej całego
zespołu filtrów:
M −1 2
Erra (Ω) = 1 − ∑ H k ( e jΩ ) (18.99)
k =0

oraz poziom wycieku widmowego, na podstawie:


M −1 2
Errw (Ω ) = ∑ Al (e jΩ ) (18.100)
l =1

gdzie Al (ejΩ) jest zdefiniowane wzorem (18.32).


Istnieje wiele metod optymalizacji funkcjonału (18.98). W metodach bardziej złożonych po-
szukuje się minimum funkcjonału (18.98), bezpośrednio optymalizując współczynniki odpo-
wiedzi impulsowej p(n) metodami średniokwadratowymi. W przypadku długiego filtra proto-
typowego jest to zadanie bardzo trudne. W związku z tym często stosuje się metody iteracyjne,
w przybliżeniu optymalne, np. rekursywne metody średniokwadratowe (Iterative Least Squa-
res, MinMax ILS). Metody prostsze stanowią modyfikację klasycznych metod projektowania
filtrów, na przykład metody aproksymacji Czebyszewa (rozdzał 12.4) i metody okien (rozdział
12.5). Tak adaptacyjnie dobiera się w nich wartości ich parametrów, aby uzyskać minimum
funkcji kosztu E.
Jedną z najprostszych metod projektowania filtrów prototypowych dla zespołów filtrów z mo-
dulacją kosinusową jest iteracyjna wersja metody okna Kaisera, dobrze nam znanej z rozdziału
12.5. Projektuje się w niej filtr dolnoprzepustowy p(n) za pomocą klasycznej metody okien, tak
dobierając adaptacyjnie pulsację odcięcia Ωg, aby zminimalizować funkcjonał (18.89). Algo-
rytm tej metody jest przedstawiony w tabeli 18-1, a jego implementacja programowa w języku
Matlab − w tabeli 18-2. W praktyce jest więc minimalizowany tylko funkcjonał E1 (dokładnie
E’1). Mała wartość kryterium E2 jest zagwarantowana przez odpowiedni dobór wartości
parametrów funkcji okna, zapewniających odpowiednio niski poziom listków bocznych (wej-
ściowy parametr Astop to wymagane tłumienie filtra w paśmie zaporowym). Wszystkie chara-
536 Zespoły filtrów

kterystyki czasowe i częstotliwościowe zespołu filtrów, wykorzystującego filtr prototypowy


zaprojektowany za pomocą iteracyjnej metody okien, są wyznaczane i pokazywane w progra-
mie znajdującym się w tabeli 18-3.
Filtry zaprojektowane za pomocą programu z tabeli 18-2 mogą być potem zastosowane w pro-
gramach wielokanałowej analizy/syntezy sygnałów, przedstawionych w tabelach 18-5, 18-6
i 18-7.

Tab. 18-1. Algorytm projektowania filtra prototypowego p(n) dla M-kanałowego, krytycznie próbkowa-
nego zespołu filtrów quasi-PR z modulacją kosinusową za pomocą metody okien

1. Wybór górnej pulsacji odcięcia i szerokości pasma przejściowego:


Ω g = π / 2 M , ∆Ω = µΩ g (np. µ = 0,9)
2. Wybór wymaganego tłumienia w pasmie zaporowym: Astop = ? (> 75 dB),
3. Obliczenie wartości parametrów (L, β) okna Kaisera na podstawie algorytmu z tabeli 12-8:
• jeśli długość filtra L jest za mała, opcjonalny powrót do punktu 2 i zwiększenie Astop,
• jeśli długość filtra jest za duża, to powrót to punktu 2 i zmniejszenie Astop,
4. Wyznaczenie wartości funkcji okna w(n) na podstawie tabeli 12-8,
5. Inicjalizacja: Ωopt = Ω g , Ω step = Ω g / 100, kierunek = 1, E1stare = ∞, tolerancja = 10−12 ,
6. Wyznaczenie współczynników filtra p(n) metodą okien z pulsacją graniczną Ωopt:

p( n ) = hi ( n ) w( n ), hi ( n ) =
(
sin Ωopt n ) dla 1 ≤ n ≤ N , hi (0) =
Ωopt
πn π
7. Obliczenie E1 i podstawienie E1nowe = E1 ,
8. Jeśli E1nowe − E1stare > tolerancja , to wykonanie:

{ jeśli E1nowe > E1stare , to: Ω step = Ω step / 2, kierunek = −kierunek


Ω opt = Ω opt + direct * Ω step , E1stare = E1nowe , powrót do punktu 6 }
w przeciwnym razie koniec.

Tab. 18-2. Program w języku Matlab, służący do projektowania filtra prototypowego p(n) dla M-kana-
łowego, krytycznie próbkowanego zespołu filtrów quasi-PR z modulacją kosinusową za pomocą metody
okien

% Ćwiczenie: Projektowanie filtrów prototypowych dla zespołu filtrów z modulacją kosinusową DCT-IV
clear all;
% Podaj parametry wejściowe
M = 32; % liczba kanałów
As = 96; % tłumienie w paśmie zaporowym w decybelach
alfa = 0.9; % współczynnik pasma przejściowego: df = alfa * fgraniczne
Lp = 128; % ile punktów wyznaczanej charakterystyki częstotliwościowej
tol = 1E-10; % tolerancja obliczeń
impeg = 1; % 0 = długość parzysta , 1 = długość nieparzysta
ifast = 1; % 1 = szybka metoda wyznaczenia czy filtr jest M-pasmowy, 0 = wolna
% Inicjalizacja parametrów wewnętrznych
MM = 2*M; % liczba kanałów zespolonych
fc = 1/MM; % częstotliwość graniczna (odcięcia)
df = alfa * fc; % pasmo przejściowe
% Oblicz długość filtra
if (As>21) D = (As-7.95)/14.36; else D = 0.922; end
N = D/df+1;
% Współczynnik beta okna Kaisera
Zespoły filtrów 537

if (As<=21) beta = 0.; end


if ((21<As) & (As<50)) beta = 0.5842*(As-21)^0.4+0.07886*(As-21); end
if (As>=50) beta = 0.1102*(As-8.7); end
% Wybierz długość filtra
N,beta
N=input('podaj rząd filtra (MPEG = 511)---> ' ) % dla MPEG audio N=511 !!!
% Zaprojektuj filtr
w = kaiser( N, beta);
h = fir1( N-1, fc, w);
plot( h,'b' ); grid; title('Dolnoprzepustowy prototyp FIR'); pause
% Błąd charakterystyki częstotliwościowej
err_new = 0;
n = 0 : 1 : N-1;
for f = 0 : (1/MM)/(Lp-1) : 1/MM;
H1 = exp( -sqrt(-1)*2*pi*f*n ) * h';
H2 = exp( -sqrt(-1)*2*pi*(f-1/MM)*n ) * h';
err_new = max( err_new, abs(H1*conj(H1)+H2*conj(H2)-1) );
end
err_old = 0.;
% Inicjalizacja optymalizacji
fc_opt = fc;
fc_step = fc/100;
direct = -1;
% Pętla główna
while ( abs(err_new - err_old) > tol )
err_old = err_new; fc_opt = fc_opt + direct * fc_step;
h = fir1( N-1, fc_opt, w);
if(ifast==0) % wersja wolna ---------------------------
err_new = 0;
n = 0 : 1 : N-1;
for f = 0 : (1/MM)/(Lp-1) : 1/MM;
h1 = sum( h .* exp( -sqrt(-1)*2*pi*f*n ) );
h2 = sum( h .* exp( -sqrt(-1)*2*pi*(f-1/MM)*n ) );
h1 = h1 * conj(h1);
h2 = h2 * conj(h2);
err_new = max( err_new, abs(h1+h2-1) );
end
end
if(ifast==1) % wersja szybka -------------------------
err_new = 0; rh = xcorr(h); n = 1:floor((N-1)/(2*M));
err_new = max( err_new, sum( abs(rh(N+MM*n)) ) );
end
if ( err_new > err_old )
fc_step = fc_step/2; direct = -direct;
end
fc_opt, err_new, direct, pause % podgląd wybranych parametrów w pętli
end
% Dopasowanie do standardu MPEG audio
if (impeg==1) h = [ 0 h ]; N = N+1; end
% Zapisz dysku
h = h'; save p.dat h /ascii

Tab. 18-3. Program do wyznaczania wszystkich charakterystyk czasowych i częstotliwościowych zespołu


filtrów z modulacją kosinusową, w którym jest stosowany filtr prototypowyp(n)

% Ćwiczenie: Charakterystyki zespołu filtrów z modulacją kosinusową

clear all; clf;


% Parametry wejściowe
M = 32; % liczba filtrów w zespole
L = 512; % długość odpowiedzi impulsowej filtra prototypowego
fpr = 44100; % częstotliwość próbkowania
% Przykładowa odpowiedź impulsowa p(n) filtra prototypowego (do zmiany)
% load p.dat; p=p’; % czytany z dysku
p = prototyp(L); % generowany przez podprogram
skala = sqrt( 2.0/(M*(p*p')) ); p= skala*p;
538 Zespoły filtrów

plot(p); title('Filtr prototypowy'); grid; pause


% Widmo Fouriera okna i jego parametry
NFFT = 8192;
[P,f] = freqz(p,1,NFFT,fpr); P=abs(P); f=f/1000;
plot( f, P ); title('Widmo prototypu'); xlabel('f [kHz]'); grid; pause
PdB = 20*log10(P/max(P));
plot( f, PdB ); title('Widmo prototypu w dB'); xlabel('f [kHz]'); grid; pause
clf;
NS = NFFT/M; alias_dB = max( PdB(NS:NFFT) ), alias_mx = 10^(alias_dB/20), pause
disp('PARAMETRY OKNA');
suma = sum(p), maxi = max(p), eng = p * p', magn = P(1), pause
% Wygeneruj odpowiedzi impulsowe filtrów, pokaż charakterystykę częstotliwościową zespołu
n = 0:L-1;
hm = zeros(M,L); gm = zeros(M,L);
maxim = -10^16;
n=0:L-1;
for k=0:M-1
hm(k+1,n+1) = p.*cos( pi/M*(k+0.5)*(n+M/2) ); % filtry analizy
gm(k+1,n+1) = p.*cos( pi/M*(k+0.5)*(n-M/2) ); % filtry syntezy
hold on
hm1=hm(k+1,:);
[H,f] = freqz(hm1,1,1024,fpr); f=f/1000;
H =20*log10(abs(H));
if ( maxim < max(H) ) maxim=max(H); end
hx = H < -200; hx=find(hx); H(hx) = -200+H(hx)*0;
plot(f,H); title('CH-KA CZĘSTOTLIWOŚCIOWA FILTRÓW'); xlabel('f [kHz]');
if(k==M-1) pause; hold off; end
end
maxim, pause
% Zniekształcenia nieliniowe i fazowe
f = zeros(1,2*L-1);
for k=0:1:M-1
h = hm(k+1,:); g = gm(k+1,:);
f1 = conv(h,g);
% plot(f); title('k-ta odp impulsowa'); grid; pause
f = f + f1;
end
plot(f); title('SUMARYCZNA odp impulsowa BANKU FILTRÓW'); grid; pause
f1=f; f1(L+1)=0;
plot(f1); title('SUMARYCZNA odp impulsowa MINUS SRODEK'); grid; pause

[ FD f ] = freqz(f,1,1024,fpr); f=f/1000;
plot(f, abs(FD)); title('Ch-ka amplitudowa CAŁOŚCI (jw)');
xlabel('f [kHz]'); grid; pause;
plot(f, unwrap(angle(FD))); title('Ch-ka fazowa CAŁOŚCI (jw)');
xlabel('f [kHz]'); grid; pause;
clf
% Znieksztalcenia aliasingowe
clf; NFFT = 2048;
fd = zeros(1, NFFT);
n = 0:L-1;
for m=1:M-1 % po wszystkich „przeciekach” widmowych
modZ = exp(j*2*pi*m*n/M);
Al = zeros(1, NFFT);
for k=0:1:M-1 % po wszystkich filtrach
h = hm(k+1,:); g = gm(k+1,:);
Gk = fft( g, NFFT );
Hk = fft( h.*modZ, NFFT );
Ak = Gk.*Hk;
Al = Al + Ak;
end
fd = fd + (Al.*conj(Al));
end
fd = sqrt( fd );
freq = fpr/1000 * (0 : 1/NFFT : 0.5) ;
plot( freq, fd(1:NFFT/2+1) );
title('Przeciek widmowy (jw)'); xlabel('f [kHz]'); grid; pause;
Zespoły filtrów 539

18.6. Implementacja programowa zespołu filtrów standardu MPEG


audio
Zapoznamy się teraz z algorytmami realizacji zespołów filtrów. Jako przykład posłuży nam
zespół filtrów stosowany w standardzie kompresji dźwięku MPEG audio (standardy MPEG-1
[ISO91] i MPEG-2 [ISO95] − poziomy mp1 i mp2 oraz podstawowy zespół filtrów poziomu
mp3). Standardy te szczegółowo omówiono w rozdziale 21. W tym miejscu krótko jedynie
scharakteryzujemy metodę wykorzystania w nich zespołu filtrów. W normie tej pojedynczy
dźwiękowy kanał monofoniczny na poziomie drugim (mp2) jest kodowany w następujący
sposób:
1) sygnał wejściowy jest rozkładany na M = 32 sygnałów pasmowoczęstotliwościowych za
pomocą 32-kanałowego zespołu filtrów,
2) zbieranych jest 36 próbek z każdego kanału, co odpowiada pobraniu do bufora wejścio-
wego 36*32 = 1152 próbek przetwarzanego sygnału; liczba 1152 stanowi długość jedno-
razowo kodowanego bloku danych;
3) dla 1024 próbek z bufora wyznacza się dyskretną transformatę Fouriera FFT (pozostałe
próbki są zaniedbywane); ponieważ operację tę powtarza się dla każdej kolejnej ramki,
korzystniej jest stosować algorytmy FFT zoptymalizowane dla sygnałów rzeczywistych
(rozdział 9.6);
4) na podstawie transformaty FFT sygnału oraz modelu psychoakustycznego określa się sto-
pień „maskowania” jednych częstotliwości przez drugie w każdej ramce i na tej podstawie
oblicza się 32-argumentową funkcję SMR (ang. Signal to Mask Ratio); wartość tej funkcji
określa istotność psychoakustyczną informacji dźwiękowej zawartej w każdym kanale czę-
stotliwościowym;
5) użytkownik wybiera dopuszczalny strumień bitów (tzn. liczbę bitów przypadających na
jedną ramkę danych wejściowych),
6) alokacja bitów dla poszczególnych kanałów częstotliwościowych przebiega w sposób ada-
ptacyjny, tzn. aż do wyczerpania się „zasobów”: po kolei są przyznawane bity dla kanałów
najbardziej „potrzebujących” według funkcji SMR, wyznaczonej w punkcie 4;
6) potem następuje zakodowanie próbek sygnałów podpasmowych;
7) oraz zapis lub transmisja otrzymanego bloku bitów.
W dekoderze wszystkie operacje są powtarzane w odwrotnej kolejności. Oczywiście „sercem”
algorytmu kompresji jest zespół filtrów.
W standardzie MPEG audio wykorzystuje się M = 32- kanałowy zespół filtrów z modulacją ko-
sinusową, w którym odpowiedź impulsowa filtra prototypowego p(n) składa się z Lp = 512
próbek. Przybliżenie odpowiedzi p(n), użytej w standardzie, można uzyskać z następującego
wzoru analitycznego:

1  7  2πkn  
p(n) =  a0 + 2 ∑ ak cos   , n = 0, 1, 2, ..., L p − 1 (18.101)
Lp   L p  
 k =1  
po przyjęciu następujących wartości parametrów:
a0 = 1, a1 = − 0,99998229, a2 = 0,99692250

a4 = 1 / 2 , a6 = 1 − a22 , a7 = − 1 − a12

C = − ( a0 / 2 + a1 + a2 + a4 + a6 + a7 )

a3 = C / 2 − 1/ 2 − C 2 / 4, a5 = − 1 − a32
540 Zespoły filtrów

0.04 0

0.03 -50

|P(f)| [dB]
0.02 -100
p(n)
0.01 -150

0 -200

-0.01 -250
0 100 200 300 400 500 0 5 10 15 20
n f [kHz]
Rys. 18.33. Odpowiedź impulsowa p(n) otrzymywana ze wzoru (18.101) oraz moduł jej widma Fouriera
|P(f)|. Linią przerywaną zaznaczono oryginalny filtr prototypowy ze standardu MPEG audio. Przyjęto
fpróbkowania = 44100 Hz

Odpowiedź impulsowa oryginalna (standard) i przybliżona na podstawie (18.101) oraz ich


widma Fouriera są przedstawione na rysunku 18.33. Linią przerywaną zaznaczono charakte-
rystyki ze standardu MPEG audio. Jak widać zgodność obu odpowiedzi impulsowych jest bar-
dzo duża, natomiast ich widma Fouriera są bardzo podobne w paśmie przepustowym, różne zaś
w paśmie zaporowym. Odpowiedź impulsowa p(n) (18.101) charakteryzuje się większym tłu-
mieniem w paśmie zaporowym, ale w mniejszym stopniu spełnia warunek PR (18.88) oraz
warunek liniowości wypadkowej charakterystyki amplitudowo-częstotliwościowej (18.89).
Program służący do wyznaczenia p(n) ze wzoru (18.101) znajduje się w tabeli 18-4.
Dysponując odpowiedzią impulsową filtra prototypowego oraz znając strukturę modulacji,
znamy odpowiedzi impulsowe wszystkich filtrów sekcji analizy i syntezy zespołu filtrów. Jak
wiemy odpowiedzi te stanowią funkcje bazowe dekompozycji sygnału (patrz podrozdział 17.1
i 18.1), dlatego zespół filtrów ze standardu MPEG audio może być programowo realizowany
jako typowa reprezentacja czasowo-częstotliwościowa sygnału, czyli w taki sam sposób jak
reprezentacja Gabora (podrozdział 17.2 i tabela 17-1). Kod źródłowy takiej implementacji
znajduje się w tabeli 18-5. Z kolei w tabeli 18-6 jest przedstawiony program, w którym zespół
filtrów MPEG audio jest zaimplementowany w sposób klasyczny, tzn. tak jak na rysunku 18.1
z wykorzystaniem operacji splotu sygnałów.
Ukoronowaniem naszych rozważań przeprowadzonych w tym rozdziale są obliczenia realizo-
wane w szybki sposób „polifazowy” według schematu z rysunku 18.31 i równań (18.87). Pro-
gram takiej właśnie szybkiej implementacji jest zaprezentowany w tabeli 18-7. W tym przy-
padku próbki wyjściowe z poszczególnych filtrów analizy hk(n), k = 0, 1, 2, ..., 31, w chwili
czasowej t są równe (Lp = 512, M = 32):
511
y(k ) = ∑ hk (n) x(t − n ) (18.102)
n =0
gdzie:
 (k + 1 / 2)( n − 16)π 
hk (n ) = 2 p( n ) cos  (18.103)
 32

Po uwzględnieniu zapisu polifazowego, równanie (18.102) można przedstawić w następującej


postaci (64 składowe polifazowe o długości 512/64 = 8 próbek):
63 7
y(k ) = ∑ M (k , m) ∑ [ p(m + 64 j ) x(m + 64 j )], k = 0, 1, 2, ..., 31 (18.104)
m =0 j =0
Zespoły filtrów 541

gdzie:
 ( k + 1 / 2)( m − 16)π 
M (k , m ) = 2 cos  (18.105)
 32
Synteza 32 próbek sygnału wyjściowego xˆ(n) z zespołu filtrów jest natomiast realizowana na
podstawie równań:
31 31
 π(k + 1/ 2)( n + 16) 
v (n ) = ∑ N (n, k ) y ( k ) = ∑ 2 cos   y ( k ), n = 0, 1, ..., 63 (18.106a)
k =0 k =0  32
7
xˆ( n) = ∑ [ bv( n + 128 j ) p( n + 64 j ) + bv( n + 96 + 128 j ) p ( n + 32 + 64 j ) ], n = 0, 1,..., 31 (18.106b)
j =0

64 ostatnio obliczone próbki v(n) są umieszczane na początku bufora przesuwnego bv o dłu-


gości 1024 elementów.
Autor pozostawia Czytelnikowi samodzielne zapoznanie się z tym programem, w szczególnoś-
ci przeanalizowanie niuansów algorytmu filtracji polifazowej. Należy przypomnieć sobie
w tym miejscu uwagi B i C kończące podrozdział 18.5.1. Dla przykładu, konsekwencją uwagi
B jest zanegowanie wartości odpowiednich próbek odpowiedzi impulsowej p(n) (co drugi
blok 64-próbkowy) na początku programu, przedstawionego w tabeli 18-7.
W programach przedstawionych w tabelach 18-5 ÷ 18-7 nie uwzględniono psychoakustyczne-
go kodowania sygnałów podpasmowych.
Korzystając z programu przedstawionego w tabeli 18-3 można wyznaczyć wybrane chara-
kterystyki częstotliwościowe zespołu filtrów, zaimplementowanego w tym podrozdziale. Są
one przedstawione na rysunku 18.34. Należy zwrócić szczególną uwagę na fakt, że odpowiedź
impulsowa całego zespołu d(n) (czyli łącznie sekcji analizy i syntezy) jest w przybliżeniu
równa opóźnionemu impulsowi jednostkowemu (opóźnionej delcie Kroneckera).

Tab. 18-4. Program w języku Matlab, służący do generacji przybliżenia odpowiedzi impulsowej filtra pro-
totypowego p(n), stosowanego w standardzie MPEG audio

% Ćwiczenie: Generacja odpowiedzi impulsowej filtra dla zespołu filtrów standardu MPEG audio.

function p = prototyp(L)
% generacja przybliżonego filtra prototypowego standardu MPEG audio
a0=1; a(1)=-0.99998229; a(2)=0.99692250;
a(4)=1/sqrt(2); a(6)=sqrt(1-a(2)^2); a(7)=-sqrt(1-a(1)^2);
A=-( a0/2+a(1)+a(2)+a(3)+a(4)+a(6)+a(7) );
a(3)=A/2-sqrt(0.5-A^2/4); a(5)=-sqrt(1-a(3)^2);
n = 0:L-1; p = a0*ones(1,L);
for(k=1:7) p = p + 2*a(k)*cos(2*pi*k*n/L); end
p = p/L; p(1)=0;

Tab. 18-5. Program implementujący zespół filtrów z modulacją kosinusową, stosowany w standardzie
MPEG audio, jako typową reprezentację czasowo-częstotliwościową

% Ćwiczenie: M-kanałowy zespól filtrów z modulacją kosinusową implementowany w sposób


% bezpośredni jako reprezentacja czasowo-częstotliwościowa

clear all;
% Parametry wejściowe
M=32; % liczba kanałów, rząd decymacji
L=512; % długość filtra prototypowego
Nx=2048; % długość sygnału testowego
542 Zespoły filtrów

% Sygnał testowy
x=sin(2*pi*(0:Nx-1)/27)+sin(2*pi*(0:Nx-1)/49)+sin(2*pi*(0:Nx-1)/155);
% x=rand(1,Nx);
% Odpowiedź impulsowa p(n) filtra prototypowego (niestandardowa)
p = prototyp(L); p = sqrt(M)*p;
plot(p); title('Filtr prototypowy'); grid; pause
% Macierze transformacji: analizy H i syntezy G
n=0:L-1;
for k=0:M-1
H(k+1,n+1) = 2*p.*cos( pi/M*(k+0.5)*(n-M/2) ); % filtry analizy
G(k+1,n+1) = 2*p.*cos( pi/M*(k+0.5)*(n+M/2) ); % filtry syntezy
end
% Analiza i synteza razem (jedna operacja za drugą)
K = floor(Nx/M); bx = zeros(1,L); y = zeros(1,L+(K-1)*M);
for m = 1 : K %
bx = [ x(m*M:-1:(m-1)*M+1) bx(1:L-M) ]; % załadowanie M nowych próbek do bufora
sb = H * bx'; % analiza: wsp(k) = sygnał*baza(k)
by = sb' * G; % synteza: sygnał = suma( wsp(k)*baza(k) )
n = (m-1)*M+1 : (m-1)*M+L; %
y(n) = y(n) + by; % złożenie kolejnych segmentów
end %
% Sygnał wyjściowy
Noffs=L-M+2; n1=1:Nx-Noffs+1; n2=Noffs:Nx;
xr=x(n1); yr=y(n2);
plot(n1,xr,'r',n1,yr,'b'); title('WE (czerw) WY (nieb)'); pause
plot(n1,xr-yr); title('Róznica WE-WY'); pause
blad_dB = 10*log10( sum(xr.^2) / sum((xr-yr).^2) ), pause

Tab. 18-6. Program implementujący zespół filtrów z modulacją kosinusową, stosowany w standardzie
MPEG audio, za pomocą operacji splotu sygnałów

% Ćwiczenie: M-kanałowy zespół filtrów z modulacją kosinusową implementowany w sposób


% bezpośredni za pomocą operacji splotu

clear all;
% Parametry wejściowe
M=32; % liczba kanałów, rząd decymacji
L=512; % długość filtra prototypowego
Nx=2048; % długość sygnału testowego
Nc1 = Nx+L-1; Nc2=length(1:M:Nc1); Nc3 = Nc1+L-1;
% Sygnał testowy
x=sin(2*pi*(0:Nx-1)/27)+sin(2*pi*(0:Nx-1)/49)+sin(2*pi*(0:Nx-1)/155);
% x=rand(1,Nx);
% Odpowiedź impulsowa p(n) filtra prototypowego (inna niż w normie MPEG audio)
p = prototyp(L); p = sqrt(M)*p;
plot(p); title('Filtr prototypowy'); grid; pause
% Macierze transformacji: analizy H i syntezy G
n=0:L-1;
for k=0:M-1
H(k+1,n+1) = 2*p.*cos( pi/M*(k+0.5)*(n-M/2) ); % filtry analizy
G(k+1,n+1) = 2*p.*cos( pi/M*(k+0.5)*(n+M/2) ); % filtry syntezy
end
% Analiza
for k=1:M % k-ty kanał
sb(k,1:Nc1) = conv(x,H(k,1:L)); % filtracja
sbr(k,1:Nc2) = sb(k,1:M:Nc1); % M-krotny reduktor
end %
% Synteza
y = zeros(1,Nc3); % inicjalizacja
for k=1:M % k-ty kanał
sbe(k,1:Nc1)=zeros(1,Nc1); sbe(k,1:M:Nc1)=sbr(k,1:Nc2); % M-krotny ekspander
ys(k,1:Nc3) = conv(sbe(k,1:Nc1),G(k,1:L)); % filtracja
Zespoły filtrów 543

y = y + ys(k,:); % suma wszystkich kanałów


end %
% Sygnał wejściowy i wyjściowy
Noffs=L+1; n1=1:Nx-Noffs+1; n2=Noffs:Nx;
xr=x(n1); yr=y(n2);
plot(n1,xr,'r',n1,yr,'b'); title('WE (czerw) WY (nieb)'); pause
plot(n1,xr-yr); title('Róznica WE-WY'); pause
blad_dB = 10*log10( sum(xr.^2) / sum((xr-yr).^2) ), pause

Tab. 18-7. Program implementujący zespół filtrów z modulacją kosinusową, stosowany w standardzie
MPEG audio, w szybki sposób polifazowy

% Ćwiczenie: M-kanałowy zespół filtrów z modulacją kosinusową implementowany w sposób


% „polifazowy”

clear all;
% Parametry wejściowe
M=32; % liczba kanałów „kosinusowych”
L=512; % długość filtra prototypowego
Nx=2048; % długość sygnału testowego
MM=2*M; % liczba kanałów „zespolonych”, rząd decymacji
Lp=L/MM; % długość składowych polifazowych
M2=2*M; M3=3*M; M4=4*M; j=0:Lp-1;
% Sygnał testowy
x=sin(2*pi*(0:Nx-1)/27)+sin(2*pi*(0:Nx-1)/49)+sin(2*pi*(0:Nx-1)/155);
% x=rand(1,Nx);
% Odpowiedź impulsowa p(n) filtra prototypowego (niestandardowa)
p = prototyp(L); p = sqrt(M)*p; plot(p); title('Filtr prototypowy'); grid; pause
for n = 1 : 2 : Lp-1
p( n*MM+1 : n*MM+MM ) = -p( n*MM+1 : n*MM+MM );
end
plot(p); title('Filtr prototypowy zmodyfikowany'); grid; pause
% „Polifazowe” macierze transformacji: analizy A i syntezy B
m=0:2*M-1;
for k=0:M-1
A(k+1,1:2*M) = 2*cos((pi/M)*(k+0.5).*(m-M/2)); % macierz analizy %
B(k+1,1:2*M) = 2*cos((pi/M)*(k+0.5).*(m+M/2)); % macierz syntezy %
end
% Analiza i synteza razem (jedna operacja za drugą)
K = floor(Nx/M); bx = zeros(1,L); bv=zeros(1,2*L); y=[];
for k = 1 : K
% załadowanie M nowych próbek do bufora
bx = [ x(k*M:-1:(k-1)*M+1) bx(1:L-M) ];
% analiza
for m = 1 : 2*M
u(m) = sum( bx(m:2*M:L).*p(m:2*M:L) ); % filtracja polifazowa
end
sb = A*u'; % modulacja kosinusowa
% synteza
v = B'*sb; % demodulacja kosinusowa
bv = [ v' bv(1:2*L-MM) ]; % wstawienie do bufora
for n = 1 : M % filtracja polifazowa
ys(n) = sum(bv(n+M4*j).*p(n+M2*j)) + sum(bv(n+M3+M4*j).*p(n+M+M2*j));
end
y = [ y ys ];
end
% Sygnał wyjściowy
Noffs=L-M+2; n1=1:Nx-Noffs+1; n2=Noffs:Nx;
xr=x(n1); yr=y(n2);
plot(n1,xr,'r',n1,yr,'b'); title('WE (czerw) WY (nieb)'); pause
plot(n1,xr-yr); title('Różnica WE-WY'); pause
blad_dB = 10*log10( sum(xr.^2) / sum((xr-yr).^2) ), pause
544 Zespoły filtrów

a) 0
-20
-40

|Hk(f)| [dB]
-60
-80
-100
-120
-140
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]
b) 1
0.8
0.6
d(n)

0.4
0.2
0
0 100 200 300 400 500 600 700 800 900 1000
n
c) 1.0003
1.0002
1.0001
|D(f)|

1
0.9999
0.9998
0.9997
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]
d) 0

-400
arg(D(f)) [rd]

-800

-1200

-1600
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]
e) 1.2E-006

8E-007
Errw(f)

4E-007

0
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

Rys. 18.34. Wybrane charakterystyki zaimplementowanego zespołu filtrów: a) moduły odpowiedzi często-
tliwościowych |Hk(f)| wszystkich filtrów sekcji analizy, b) odpowiedź impulsowa d (n) całego zespołu
filtrów, c) charakterystyka amplitudowo-częstotliwościowa |D(f)| całego zespołu filtrów (czyli moduł trans-
formaty Fouriera odpowiedzi impulsowej d (n)), d) charakterystyka fazowo-częstotliwościowa arg(D(f))
całego zespołu filtrów, e) wyciek widmowy Errw(f), obliczony ze wzoru (18.100)
19
Projekt LPC-10:
podstawy kompresji i rozpoznawania
sygnału mowy

Celem niniejszego rozdziału jest ogólne zapoznanie Czytelnika z problematyką kompresji sy-
gnału mowy na przykładzie klasycznego algorytmu LPC-10, pochodzącego jeszcze z końca lat
70. XX wieku. O jego wyborze zadecydowała prostota, poglądowość oraz łatwość imple-
mentacji programowej. Niektóre elementy składowe algorytmu (np. sposób modelowania i es-
tymacji wartości parametrów filtra traktu głosowego) są obecnie powszechnie stosowane
w najnowocześniejszych metodach kompresji mowy, wykorzystywanych w telefonach komór-
kowych. W algorytmie tym, jako jego części składowe, praktycznie wykorzystuje się różne
fundamentalne metody cyfrowej analizy przetwarzania sygnałów (np. funkcję autokorelacji,
modelowanie autoregresyjne AR). Przy okazji zapoznamy się więc także z istotnymi aspektami
ich praktycznego zastosowania. Rozdział zakończy krótkie, brawurowe przejście od metod
kompresji do ... metod rozpoznawania mowy, a dokładniej pojedynczych, izolowanych słów.
Tak się bowiem składa, że w pewnej części w obu przypadkach są wykorzystywane identyczne
algorytmy analizy sygnałów.

19.1. Wprowadzenie
Kompresja danych jest bardzo ważnym i aktualnym problemem w dobie bardzo szybkiego roz-
woju Internetu oraz lawinowo rosnącej wymiany informacji cyfrowej (mowa, audio, obrazy,
dokumenty elektroniczne, sygnały biomedyczne). Oczywiście, w zależności od rodzaju danych
stosuje się różne metody kompresji danych. Kryterium decydującym o wyborze konkretnej me-
tody jest jej efektywność. Ogólnie kompresję danych dzieli się na bezstratną i stratną.
Kompresję bezstratną stosuje się wszędzie tam, gdzie nie dopuszcza się utraty (przekłamania)
ani jednego bitu kompresowanej informacji. Sytuacja taka występuje przykładowo podczas ar-
chiwizacji programów komputerowych, gdzie zmiana jakiegokolwiek bitu jest równoważna
modyfikacji programu, mogącej prowadzić do jego błędnego działania. Także w przypadku sy-
gnałów biomedycznych kompresja stratna nie jest wskazana, a nawet czasami prawnie zabro-
niona (np. w Stanach Zjednoczonych), z powodu ryzyka podjęcia błędnej diagnozy przez leka-
rza. Do najważniejszych metod bezstratnych należą metody etropijne (przykładowo: słowniko-
we, Huffmana, arytmetyczne), w których współczynnik kompresji jest bliski współczynnikowi
„optymalnemu”, oszacowanemu na podstawie entropii sygnału.
546 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

W metodach słownikowych fragmenty strumienia bitów zastępuje się odpowiednim indeksem


do specjalnie zbudowanego „słownika” (książki kodowej), który może się zmieniać adaptacyj-
nie (np. może zawierać już wysłane sekwencje bitów). Jeśli słownik jest dobrze „dopasowany”
do danych, to wyjściowa sekwencja bitów indeksów pozycji w słowniku jest mniejsza niż
wejściowa sekwencja bitów kompresowanych, a na jej podstawie można dokładnie odtworzyć
dane oryginalne.
W przypadku entropowego kodera Huffmana wysyłanym symbolom (liczbom, sekwencjom bi-
tów) przyporządkowuje się binarne słowa kodowe o różnej liczbie bitów (najmniej jeden), tym
mniejszej, im większe jest prawdopodobieństwo wystąpienia danego symbolu w kompresowa-
nych danych. Na początku w metodzie tej wyznacza się prawdopodobieństwo wystąpienia róż-
nych symboli w danym zbiorze danych lub wielu zbiorach tego samego typu. Potem zastępuje
się te symbole ich binarnymi oznaczeniami kodowymi, które następnie wysyła się lub zapisuje.
W zależności od metody, można do zakodowanego zbioru dołączyć związaną z nim, specyficz-
ną książkę kodową, lub też użyć książki typowej, znanej też dekoderowi, i jej nie dodawać.
W przypadku zastosowania książki typowej może nie być ona optymalna dla konkretnych da-
nych, ale za to unika się konieczności jej „przesłania” do dekodera.
Koder arytmetyczny jest efektywniejszy niż koder Huffmana, gdyż umożliwia przydzielenie
mniej niż jednego bitu na symbol, dodatkowo jego implementacje programowe są szybsze.
Omówienie tego zagadnienia wykracza jednak poza ramy niniejszego rozdziału.
Często przed właściwą kompresją przekształca się bezstratnie oryginalne dane do innej postaci,
potrzebującej mniejszej liczby pozycji w książce kodowej, czyli charakteryzującej się więk-
szym „upakowaniem” informacji. Taką rolę może na przykład spełniać kodowanie różnicowe
lub transformacja falkowa w wersji całkowitoliczbowej [Duda02, Stęp01].

Przykład
Załóżmy, że chcemy skompresować bezstratnie metodą Huffmana „komunikat”, w którym wy-
stępują wyłącznie cztery symbole alfabetu od „a” do „d”. Załóżmy dodatkowo, że procentowy
udział poszczególnych liter w przesyłanej informacji jest następujący:
pa = 0,6 pb = 0,1 pc = 0,1 pd = 0,2
Do ich zakodowania w najprostszy sposób wystarczą tylko dwa bity, np.:
a = 00 b = 01 c = 10 d = 11
ale nie uwzględnia się wówczas faktu, że „a” występuje o wiele częściej niż inne symbole i ko-
rzystny byłby kod, w którym słowo kodowe dla „a” jest jak najkrótsze. Uwzględnia to kodo-
wanie entropowe, np. metodą Huffmana, w którym bierze się pod uwagę częstość (prawdopo-
dobieństwo) występowania poszczególnych symboli. W metodzie tej w pierwszym kroku łączy
się dwa symbole o najmniejszej częstości (prawdopodobieństwie) występowania w jeden sym-
bol. Oczywiście jego prawdopodobieństwo jest równe sumie prawdopodobieństw symboli
składowych, w rozpatrywanym przypadku pbc = 0,2. Następnie powtarza się opisaną powyżej
procedurę łączenia wielokrotnie (iteracyjnie), aż do momentu otrzymania jednego symbolu.
Postępując zgodnie z podanym „przepisem” otrzymujemy:
pa = 0,6 pb = 0,1 pc = 0,1 pd = 0,2
pa = 0,6 pbc = 0,2 pd = 0,2
pa = 0,6 pbcd = 0,4
pabcd = 1
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 547

a b c d

pa = 0,6 pb = 0,1 pc = 0,1 pd = 0,2

0 1

pbc = 0,2
0 1

pbcd = 0,4

0 1

pabcd = 1

Rys. 19.1. Przykład projektowania kodu Huffmana za pomocą drzewa binarnego

Na rysunku 19.1 przedstawiono drzewo binarne, odpowiadające kolejnemu łączeniu elemen-


tów. Kod Huffmana dla poszczególnych symboli otrzymujemy, przypisując bit 0 do lewej gałę-
zi każdego rozgałęzienia i bit 1 do rozgałęzienia prawego, oraz zakładając, że reprezentacją
bitową każdego kodowanego elementu jest sekwencja bitów leżących na „drodze” prowadzącej
do niego od korzenia drzewa. W wyniku takiego postępowania otrzymujemy następujący kod:
a=0 b = 100 c = 101 d = 11
Jak widać poszczególne symbole nie potrzebują takiej tamej liczby bitów: te o większej czę-
stości występowania („a”) mają krótszy kod. Ceną, jaką się za to płaci, jest dłuższe niż dwu-
bitowe oznaczenie kodowe dla symboli występujących rzadko („b”, „c”). Pomimo stosowania
kodu o zmiennej długości dla poszczególnych symboli jego dekodowanie nie nastręcza pro-
blemów. W długich słowach kodowych bity początkowe nigdy bowiem nie pokrywają się
z bitami krótkich słów kodowych. Załóżmy, że w kompresowanej informacji 6 razy występuje
litera „a”, dwa razy litera „d” oraz tylko raz litery „b” i „c”. Tradycyjny kod dwubitowy wy-
maga w tym przypadku 10*2 = 20 bitów, a kod Huffmana − tylko 6*1+2*2+2*3 = 16 bitów.
Zaprezentowany powyżej przykład projektowania kodu Huffmana za pomocą drzewa binarne-
go jest przedstawiony na rysunku 19.1. Czytelnikowi pozostawiamy harce programowe związa-
ne z samodzielną, testową implementacją kodera i dekodera entropowego Huffmana.

Przykładowo, kompresja stratna jest dopuszczalna w przypadku rzeczywistych sygnałów


multimedialnych, czyli mowy, muzyki, obrazów oraz ich sekwencji (np. cyfrowego sygnału
telewizyjnego). Po zdekompresowaniu sygnału nie otrzymujemy w nim tej samej sekwencji bi-
tów co w oryginale, tylko jej dolnoczęstotliwościową aproksymatę pozbawioną wysokoczę-
stotliwościowych szczegółów. Im sygnał zostanie pozbawiony mniejszej liczby detali w pro-
cesie kodowania, tym mniejszy jest uzyskiwany stopień kompresji, ale za to tym bliższy orygi-
nałowi będzie sygnał zdekompresowany (zrekonstruowany). Proces pozbawiania sygnałów
szczegółów może być realizowany w różny sposób:
• metodą śledzenia i upraszczania jego zmian dynamicznych (np. w metodzie ADPCM − ang.
Adaptive Differential Pulse Code Modulation);
• metodą przekształcania sygnału do dziedziny częstotliwościowej i pozostawieniu jego
współczynników widmowych niskoczęstotliwościowych (np. w standardzie kompresji nie-
ruchomych obrazów JPEG, gdzie jest stosowana dwuwymiarowa dyskretna transformacja
kosinusowa bloków obrazu o wymiarach 8×8 punktów);
548 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

• metodą modelowania w sposób uproszczony źródeł generacji sygnałów i wyznaczania para-


metrów tych modeli na podstawie analizowanych sygnałów (np. w algorytmach kompresji
sygnałów mowy oblicza się parametry modelu generacji mowy, a następnie „przesyła” się je
do dekodera, który na ich podstawie „syntezuje” konkretną wypowiedź);
• metodą eliminacji z sygnału składowych, których braku i tak nie zauważy odbiorca (konsu-
ment) danego sygnału (np. w standardzie kompresji MPEG audio kompresowany sygnał
rozkłada się na wiele wąskoczęstotliwościowych sygnałów podpasmowych, a następnie wy-
korzystując model psychoakustyczny ludzkiego słuchu i efekt maskowania częstotliwości
jednych przez drugie, adaptacyjnie przydziela się bity na sygnały podpasmowe zgodnie
z ich istotnością psychoakustyczną, czyli „każdemu według jego potrzeb” w ramach istnie-
jących możliwości przy zadanym stopniu kompresji).

Jak już było powiedziane, celem niniejszego rozdziału jest zaprezentowanie algorytmu LPC-10
kompresji sygnału mowy. W zastosowaniach telekomunikacyjnych zakłada się, że w sygnale
mowy podstawowa informacja jest zawarta w paśmie częstotliwości 300÷3500 Hz (pełny za-
kres widma to w przybliżeniu 80÷20000 Hz), dlatego stosuje się odpowiedni filtr dolnoprzepu-
stowy („antyaliasingowy”) o częstotliwości granicznej około 3500 herców i stosuje często-
tliwość próbkowania równą 8000 Hz. Próbkowanie przeprowadza się z dokładnością 7÷16
bitów i stosuje kwantyzatory liniowe lub nieliniowe (np. 8-bitowe logarytmiczne, nieliniowe
kwantyzatory znane jako „A-law” i „µ-law”, gęściej próbkujące sygnał w okolicy zera, które
zapewniają percepcyjną jakość mowy, porównywalną z 12÷13-bitowymi kwantyzatorami linio-
wymi). Podczas kodowania próbek mowy dzieli się ją na krótkie fragmenty 20÷40-mili-
sekundowe (najczęściej 30 ms) i zakłada ich „niezmienność” (quasi-stacjonarność). Następnie
wyznacza się wartości parametrów modelu układu głosowego człowieka, które zapewniają
zsyntezowanie fragmentu mowy podobnego do analizowanego. Parametry te zapisuje się do
pliku lub bezpośrednio przesyła przez kanał transmisyjny do dekodera. Proces rozkodowy-
wania jest zwykłą operacją syntezy fragmentu mowy za pomocą modelu z konkretnymi (odczy-
tanymi lub otrzymanymi) wartościami parametrów. Dla częstotliwości próbkowania 8000 Hz
podczas analizy stosuje się zwykle okno „obserwacji” o długości 240 próbek (odpowiadające
30 milisekundom), które przesuwa się z krokiem 180 próbek (22,5 milisekundy), dlatego
zsyntezowana „ramka” sygnału mowy składa się ze 180 próbek.
Na rysunku 19.2 jest przedstawiony fragment sygnału mowy odpowiadający głosce dźwięcznej
„a” oraz przesuwane okno „obserwacji” (Hamminga), „wycinające” kolejne „ramki” sygnału
poddawane analizie.

głoska dźwięczna "a"

0.5

-0.5

100 200 300 400 500 600 700


numer próbki

Rys. 19.2. Wycinanie fragmentu mowy do analizy: okno Hamminga o długości 240 elementów jest prze-
suwane z krokiem 180 próbek i wymnażane z sygnałem
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 549

Na koniec zaznaczmy wyraźnie, że dyskutowany w tym rozdziale koder mowy standardu LPC-
-10 jest dla nas tylko ciekawym przykładem złożonego algorytmu przetwarzania cyfrowego
sygnału mowy i świadectwem praktycznej użyteczności występujących w nich metod. Nie
opisano go szczegółowo, a potraktowano jedynie jako pretekst do dokładniejszego przyjrzenia
się zastosowanym w nim konkretnym rozwiązaniom. Mimo pewnej ogólności opisu, można na
jego podstawie zbudować nieoptymalny, ale działający koder mowy.

19.2. Model generacji sygnału mowy


Uproszczony model generacji sygnału mowy jest przedstawiony na rysunku 19.3. Biorą w nim
udział struny głosowe oraz trakt głosowy (razem z jamą ustną, nosową, językiem i ustami).
Struny głosowe generują sygnał akustyczny (strumień powietrza), który jest modyfikowany
poprzez przejścia przez trakt głosowy. Charakterystyka amplitudowo-częstotliwościowa tego
traktu charakteryzuje się czterema maksimami, nazywanymi formantami (patrz rysunek 19.3,
prawy dolny róg). Częstotliwości tych maksimów stanowią częstotliwości rezonansowe traktu
głosowego. W trakcie wypowiedzi, częstotliwości i wartości tych maksimów zmieniają się. Jest
to spowodowane zmianami parametrów traktu, wynikających z ruchu szczęki i języka. Aby
zsyntezować stacjonarny (niezmienny) fragment sygnału mowy (np. głoskę dźwięczną „a”)
należy wyznaczyć związane z nią „pobudzenie”, generowane przez struny głosowe, oraz obli-
czyć odpowiadające jej parametry toru „przejścia”. Jeśli założymy, że dla quasi-stacjonarnych
odcinków mowy trakt głosowy jest układem liniowym niezmiennym w czasie, wówczas należy
przyjąć określony model jego transmitancji (czyli rząd wielomianów licznika i mianownika)
oraz wyznaczyć jej parametry (czyli współczynniki ww. wielomianów).
Pobudzenie. Struny głosowe, pomimo swej nazwy, nie przypominają strun gitarowych. Są one
zbliżone swym kształtem do dwóch podłużnych, równoległych „warg”, stanowiących pewnego
rodzaju „zawór” powietrza, wydostającego się z płuc. Podczas mówienia „zawór” ten znajduje
się w jednym z dwóch stanów:
• „wargi” te albo rytmicznie, energicznie się rozchylają na całej długości, okresowo pobu-
dzając trakt głosowy silnymi impulsami powietrza z płuc (analogia do sygnału delty Dira-
ca/Kroneckera),
• albo są na całej długości otwarte, wpuszczając do traktu głosowego równomierny strumień
powietrza.

T ? G {a1, a2, ...,a10}

1
H ( z) =
Mowa Pobudzenie 1 + a1 z −1 + a2 z −2 + ... + a10 z −10
dźwięczna okresowe V
e(n) G e(n) s(n)
Wzm Filtr traktu
głosowego
mowa
Mowa Pobudzenie UV
bezdźwięczna losowe |H(f)|

0 1000 2000 3000 f [Hz]

Rys. 19.3. Model generacji sygnału mowy


550 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

Pierwszy przypadek ma miejsce podczas wypowiadania głosek dźwięcznych, takich jak: „a”,
„e”, „i”, „o”, „u”, natomiast drugi − podczas wypowiadania głosek bezdźwięcznych, przykła-
dowo − „s”, „sz”, „c”, „cz”, „h”. Dla g ł o s e k d ź wi ę c z n y c h pobudzenie traktu głosowego
ma w przybliżeniu kształt pokazany na rysunku 19.3, czyli jest sygnałem okresowym,
składającym się z szeregu delt Diraca. Odległość pomiędzy impulsami jest nazywana okresem
tonu podstawowego, a jej odwrotność − częstotliwością tonu podstawowego. Dla mężczyzn
częstotliwość ta waha się orientacyjnie w przedziale 80÷480 herców (bas, baryton, tenor), na-
tomiast dla kobiet wynosi 160÷960 herców (alt, mezzosopran, sopran), czyli jest około dwa
razy wyższa. Podczas zwykłej rozmowy zakres jej zmian nie jest duży, ale zauważalny, i jest
związany z intonacją. Inaczej sytuacja wygląda podczas śpiewu, zwłaszcza operowego, gdzie
zmiany częstotliwości podstawowej są bardzo duże. W rzeczywistości impuls pobudzenia
krtaniowego nie jest „impulsem Diraca” tylko go przypomina i daje się przybliżyć jako odpo-
wiedź całego układu generacji na ten impuls. W standardach telekomunikacyjnych podaje się
dokładne wartości jego próbek. Z kolei dla g ł o s e k b e z d ź wi ę c z n y c h jako modelowe po-
budzenie traktu głosowego przyjmuje się szum biały, którego orientacyjny kształt jest także
pokazany na rysunku 19.3. Ma on płaskie widmo, w którym występują wszystkie częstotli-
wości. Efekt „syczenia”, charakterystyczny dla tych głosek, jest spowodowany przez język
z zębami („s”), podniebienie („h”) lub wargi (np. głoska wybuchowa „p”), czyli już przez trakt
głosowy. To właśnie on zmienia wejściowy szum biały w szum kolorowy o nierównomiernym
widmie, z wysokoczęstotliwościowymi „pikami” rezonansowymi.
Aby poprawnie zsyntezować mowę na podstawie jej modelu generacyjnego, należy wybrać
właściwy rodzaj pobudzenia dla każdego analizowanego (i później syntezowanego) fragmentu
sygnału mowy, czyli podjąć decyzję czy analizowana głoska jest dźwięczna czy bezdźwięczna.
W przypadku pobudzenia okresowego należy wybrać odpowiednią wartość okresu tonu pod-
stawowego.
Trakt głosowy. Jak już powiedzieliśmy, trakt głosowy jest modelowany jako filtr liniowy.
Oczywiście, możemy przyjąć model transmitancji filtra typu FIR lub typu IIR. Z doświadczeń
projektowania filtrów nierekursywnych wiemy, że jest wymaganych więcej współczynników
filtra, aby zapewnić dużą stromość modułu widma częstotliwościowego transmitancji typu FIR.
W związku z tym w standardzie LPC-10 wybiera się model traktu głosowego typu IIR.
Ponieważ moduł charakterystyki amplitudowo-częstotliwościowej ma cztery maksima (rys.
19.3), to do jego zamodelowania są potrzebne minimum cztery bieguny transmitancji (zera
mianownika), leżące wewnątrz okręgu jednostkowego blisko pulsacji rezonansowych traktu
głosowego. Są to bieguny zespolone, muszą więc być parami sprzężone, aby wielomian mia-
nownika miał tylko współczynniki rzeczywiste. W konsekwencji wielomian mianownika trans-
mitancji musi być minimum ósmego rzędu. W algorytmie LPC-10 przyjmuje się z dziesiąty
rząd tego wielomianu i transmitancję traktu głosowego postaci:
G G G
H ( z) = = − − −
=
1 2
A( z ) 1 + a1z + a2 z + ... + a10 z 10
(1 − p1z )(1 − p1 z )...(1 − p5 z −1 )(1 − p5* z −1 )
−1 * −1

(19.1)
Wyznaczenie parametrów traktu głosowego, dla konkretnego quasi-stacjonarnego fragmentu
sygnału mowy, sprowadza się więc do wyznaczenia wzmocnienia G i współczynników a1, a2,
..., a10. Transmitancji (19.1) odpowiada następujące równanie czasowe filtra syntezy:
10
s ( n ) = G ⋅ e( n ) − ∑ a k s ( n − k ) (19.2)
k =1
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 551

e(n) G s(n)

−a1 z−1
s(n−1)

−a2 z−1
s(n−2)

−a10 z−1
s(n−10)

Rys. 19.4. Schemat blokowy filtra traktu głosowego. Blok „z−1” oznacza układ opóźniający o jedną próbkę

Schemat blokowy układu implementującego powyższą zależność jest przedstawiony na rysun-


ku 19.4 (blok „z−1” opóźnia sygnał o jedną próbkę).
Podsumowując, model syntezy mowy składa się z następujących części (moduły z rysunku
19.3 w odwrotnej kolejności): filtra traktu głosowego typu IIR (19.1), (19.2), wzmacniacza,
układu decyzyjnego „mowa dźwięczna/bezdźwięczna” oraz dwóch rodzajów pobudzeń:
„dźwięcznego” i „bezdźwięcznego”. Omówimy teraz szczegółowo poszczególne bloki.

19.3. Układ decyzyjny „mowa dźwięczna/bezdźwięczna”


Na rysunku 19.5 pokazano sygnał mowy odpowiadający słowu „naszego”. Widać na nim frag-
menty dźwięczne (okresowe) oraz bezdźwięczne (szumowe). Pierwsze charakteryzują się regu-
larnym występowaniem maksimów (co okres tonu podstawowego), drugie zaś przypominają
szum, czyli sygnał aperiodyczny. Rysunek 19.6a prezentuje z kolei klasyczne, częstotliwoś-
ciowe widmo Fouriera tego słowa, a rysunek 19.6b − jego krótkoczasowe widmo Fouriera
(tzw. spektrogram). W pierwszym przypadku widzimy „średnią” zawartość poszczególnych
częstotliwości, lecz nie znamy chwil ich występowania i zmienności amplitud, w drugim zaś
przypadku wyraźnie widać krzywe modulacji częstotliwościowych i amplitudowych tonu pod-
stawowego i jego harmonicznych.
Automatyczna klasyfikacja fragmentów sygnału mowy na dźwięczne i bezdźwięczne jest wy-
konywana przede wszystkim za pomocą funkcji autokorelacji lub funkcji AMDF (ang. Average
Magnitude Difference Function). Śledzi się w nich zmienność okresu tonu podstawowego.
W przypadku, kiedy analizowany sygnał nie powtarza się okresowo, klasyfikuje się go jako
bezdźwięczny. Na rysunku 19.7 porównano głoski „a” i „sz”, wypowiadane przez mężczyznę.
Pokazano na nim sygnały czasowe, odpowiadające im funkcje autokorelacji i AMDF oraz mo-
duły obwiedni widma częstotliwościowego. Uproszczony schemat blokowy algorytmu de-
cyzyjnego „mowa dźwięczna/bezdźwięczna”, wykorzystującego metodę funkcji autokorelacji,
przedstawiono na rysunku 19.12, który podsumowuje rozważania przeprowadzone w niniej-
szym rozdziale.
Uwzględniając ograniczoną dynamikę narządów głosu człowieka, zakłada się, że „ramka” mo-
wy wstępnie sklasyfikowana jako dźwięczna, a leżąca pomiędzy „ramkami” bezdźwięcznymi,
powinna być jednak zaliczona do „ramek” bezdźwięcznych. I odwrotnie: ramka bezdźwięczna
nie może leżeć pomiędzy ramkami dźwięczymi.
552 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

.......n..............a.................sz....................e..............g............o.................
słowo naszego"
"
0.6
0.4
0.2
0
-0.2
-0.4
500 1000 1500 2000 2500 3000 3500 4000
numer próbki

na"
"
0.6
0.4
0.2
0
-0.2
-0.4
100 200 300 400 500 600 700 800 900 1000
numer próbki

sz"
"
0.2

-0.2
1100 1200 1300 1400 1500 1600 1700 1800 1900
numer próbki

ego"
"
0.2

-0.2
2000 2500 3000 3500 4000
numer próbki

Rys. 19.5. Kształt przykładowego słowa, składającego się z głosek dźwięcznych i bezdźwięcznych. Słowo
„naszego” wypowiadane przez kobietę

Metoda funkcji autokorelacji. W tym przypadku stosuje się definicję funkcji autokorelacji
postaci:
N −1
r (k ) = ∑ s(n ) s(n + k ), k = 0, 1, 2, ... (19.3)
n −0

gdzie s(n) oznacza fragment sygnału, składający się z N próbek, powstały z mowy oryginalnej
x(n) w wyniku:
1) jej filtracji dolnoprzepustowej filtrem h(n) o górnej częstotliwości granicznej równej 900
Hz:
M −1
x ' (n) = ∑ h( k ) x (n − k ) (19.4)
k =0
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 553

Moduł widma Fouriera słowa naszego"


a) "
-20
-40

dB
-60
-80
-100
-120
0 500 1000 1500 2000 2500 3000 3500 4000
f [Hz]

Moduł krótkoczasowej transformaty Fouriera słowa naszego"


"
b) 4000

3000
f [Hz]

2000

1000

0
0 500 1000 1500 2000 2500 3000 3500
numer próbki
........n.................a.......................sz...................e...............g.............o..........
Rys. 19.6. Widma częstotliwościowe słowa „naszego”: klasyczna i krótkoczasowa transformata Fouriera

2) wymnożenia wyniku filtracji z oknem Hamminga w(n):

s ( n) = x '( n) ⋅ w( n), w( n) = 0,54 − 0, 46 cos ( 2πn /( N − 1) ) , 0 ≤ n ≤ N − 1 (19.5)

Na rysunku 19.7 pokazano kształt funkcji autokorelacji sygnału s(n) dla głoski dźwięcznej „a”
i bezdźwięcznej „sz”. Ponieważ dysponujemy tylko fragmentem sygnału mowy, wraz ze wzros-
tem k w sumie (19.3) występuje mniejsza liczba niezerowych składników i wartość r(k) maleje.
Oczywiście, w obu przypadkach funkcja autokorelacji przyjmuje wartość maksymalną dla
k = 0. Aby sprawdzić czy analizowana głoska jest bezdźwięczna, należy wyznaczyć pierwsze
globalne maksimum funkcji r(k) dla k > K0, i sprawdzić jego poziom. Jeśli jest ono większe od
wartości [0,3÷0,35]⋅r(0), to dany fragment mowy należy uznać za dźwięczny, w przeciw-
nym przypadku − za bezdźwięczny. Wartość K0 jest związana z częstotliwością próbkowania
oraz przyjętą maksymalną wartością częstotliwości tonu podstawowego (czyli minimalną
dopuszczalną wartością okresu tego tonu). Przykładowo dla fpr = 8000Hz i fT = 500Hz,
K0 = fpr / fT = 16. Aby poprawić właściwości dyskryminacyjne powyższego algorytmu, funkcję
autokorelacji wyznacza się nie dla sygnału s(n), tylko dla jego wersji „sprogowanej”:
554 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

a) głoska „a” b) głoska „sz”


głoska a" głoska sz"
" "
0.5 0.2
0.1
0 0
-0.1
-0.5
50 100 150 200 50 100 150 200
numer próbki numer próbki

funkcja autokorelacji a" funkcja autokorelacji sz"


" "
20 1.5
10 1
0.5
0
0
-10 -0.5
0 50 100 150 200 0 50 100 150 200
indeks czasu indeks czasu

funkcja AMDF a" funkcja AMDF sz"


" "

0.4
0.1
0.2 0.05
0 0
0 50 100 150 200 0 50 100 150 200
indeks czasu indeks czasu

|H(f)| dla a" |H(f)| dla sz"


" "
15 5
4
10 3
5 2
1
0 1000 2000 3000 4000 0 1000 2000 3000 4000
f [Hz] f [Hz]

Rys. 19.7. Porównanie głosek „a” i „sz”, wypowiadanych przez mężczyznę: sygnały czasowe, ich funkcje
autokorelacji i AMDF oraz moduły obwiedni widma częstotliwościowego

 s( n ) − P, dla s (n ) ≥ P

s , (n ) =  s( n ) + P, dla s (n ) ≤ − P (19.6)
0, dla pozostałych

gdzie za próg P przyjmuje się:
P = 0,3max( s(n)) (19.7)
lub
P = K min( A1/ 3 , A3 / 3 ), K = 0,6 ÷ 0,8 (19.8)
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 555

a) b)
sprogowane a" funkcja autokorelacji sprogowanego a"
" "
0.1 0.15
0.1
0 0.05
0
-0.1 -0.05
0 50 100 150 200 0 50 100 150 200
numer próbki indeks czasu

Rys. 19.8. Fragment sygnału mowy z rysunku 19.7a po operacji progowania (19.6) z progiem (19.8) dla
K = 0,8 oraz jego funkcja autokorelacji

A1/3 i A3/3 we wzorze (19.8) oznaczają wartości maksymalne w pierwszej i trzeciej części sy-
gnału s(n), w sytuacji kiedy dzielimy ten sygnał na trzy części. Na rysunku 19.8a pokazano
sygnał s(n) z rysunku 19.7a po operacji progowania (czyli s’(n)), a na rysunku 19.8b − jego
funkcję autokorelacji.

Metoda funkcji AMDF. W związku z tym, że w procesorach starszych typów operacja mno-
żenia była wykonywana znacznie dłużej niż operacja dodawania/odejmowania, w przeszłości
do wyznaczania tonu podstawowego sygnału mowy zamiast funkcji autokorelacji stosowano
funkcję AMDF, zdefiniowaną w następujący sposób:
N −1
D( k ) = ∑ s( n ) − s( n + k ) , k = 0, 1, 2, ... (19.9)
n −0

gdzie s(n) jest sygnałem identycznym jak w (19.3). Przykładowy kształt funkcji D(k) dla
dźwięcznego i bezdźwięcznego fragmentu sygnału mowy jest przedstawiony na rysunku 19.7.
Jak widać w tym przypadku sytuacja jest analogiczna jak poprzednio, tylko istotne jest mini-
mum a nie maksimum funkcji, tzn. przykładowo ramka jest bezdźwięczna, jeśli wartość mini-
malna funkcji AMDF dla k > K0 jest większa niż 0,3 wartości maksymalnej tej funkcji (dla
wszystkich k): Dmin > 0,3Dmax.

Metoda cepstralna. Jak już wiemy, pobudzenie w przypadku dźwięcznego, stacjonarnego fra-
gmentu mowy może być w dużym uproszczeniu przedstawiane jako ciąg impulsów Diraca. Po-
nieważ transformata Fouriera sumy równomiernie poprzesuwanych impulsów Diraca ∑δ(t−T)
jest także sumą impulsów Diraca ω0∑δ(ω − kω0), gdzie ω0 = 2π/T, dlatego widmo Fouriera fra-
gmentu mowy dźwięcznej jest iloczynem ω0∑δ(ω − kω0) i widma transmitancji traktu głoso-
wego sygnału z rysunku 19.3 (prawy dolny narożnik) i ma orientacyjną postać przedstawioną
na rysunku 19.9a. Wynika to z faktu, że modelujemy trakt głosowy jako filtr liniowy, w którym
sygnał wejściowy splata się odpowiedzią impulsową filtra, a więc splotowi sygnałów w
dziedzinie czasu odpowiada iloczyn ich widm Fouriera w dziedzinie częstotliwości. Nume-
rycznie wyznaczone widmo tego fragmentu ma jednak postać taką jak na rysunku 19.9a,
ponieważ w praktyce analizujemy tylko fragment sygnału, który wycinamy funkcją prosto-
kątnego okna czasowego. W wyniku tego widmowe impulsy Diraca są „zastąpione” przez
widmo użytego okna. Pomimo wszystko otrzymane widmo jest wyraźnie okresowe, co jest
związane z okresowością pobudzenia. Można by więc wyznaczyć odwrotną transformatę
Fouriera z modułu transformaty Fouriera obliczonego widma i na jego podstawie wyznaczyć
okres powtarzania się widma i związany z nim okres pobudzenia. Ale ponieważ interesują-
cy nas sygnał jest zmodulowany w amplitudzie, korzystniej jest wyznaczyć najpierw logarytm
556 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

Widmo głoski a"


a) "

-40

dB -60

-80

-100
0 500 1000 1500 2000 2500 3000 3500 4000
częstotliwość [Hz]

Cepstrum głoski a"


b) "
6
5
4
3
2
1

20 40 60 80 100 120 140 160 180 200


indeks czasu

Rys. 19.9. Wyznaczanie okresu tonu podstawowego głoski dźwięcznej metodą cepstralną: a) moduł widma
Fouriera 256 próbek głoski „a” po wymnożeniu z oknem Hamminga, b) moduł odwrotnej transformaty
Fouriera logarytmu widma z rysunku górnego (po odjęciu od niego składowej stałej)

z modułu widma, a dopiero potem wykonać na nim odwrotną transformację Fouriera, gdyż
w ten sposób likwiduje się modulację amplitudową widma pobudzenia:

1 N −1 N −1
c(n) =
N
∑ ln ∑ w( m) x( m)e − j 2πkm / N e± j 2 πkn = (19.10a)
k =0 m =0

C(k )

( ) ( )
= F −1 ln H ( e jΩ ) P( e jΩ ) = F −1 ln H ( e jΩ ) + F −1 ln P ( e jΩ ) ( ) (19.10b)

gdzie x(m) oznacza analizowany fragment sygnału mowy o długości N próbek, w(m) − okno
Hamminga, H(.) − charakterystykę częstotliwościową transmitancji traktu głosowego, P(.) −
widmo Fouriera pobudzenia. W wyniku powyższej operacji iloczyny widm przejdą w sumę
dwóch składowych w dziedzinie czasu: obwiednia widma znajdzie się w okolicy indeksu zero-
wego, a prążki widma spowodują powstanie „pików” o malejącej amplitudzie, występujących
w chwilach nT (wielokrotność tonu podstawowego). Przykładowy kształt sygnału c(n) jest
przedstawiony na rysunku 19.9b. Jak widać bez trudu można z niego „odczytać” okres
dźwięcznego pobudzenia.
Warto w tym miejscu zwrócić uwagę na fakt, że funkcja C(k) w (19.10a) jest rzeczywista i sy-
metryczna w sposób cykliczny (patrz rysunek 13.11) względem próbki C(0), czyli C(k) =
= C(−k) = C(N − k). Dlatego w jej szeregu Fouriera występują tylko funkcje typu kosinus i nie
ma znaczenia czy zostanie wyznaczona dla niej prosta (znak „−”) czy odwrotna (znak „+”)
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 557

dyskretna transformata Fouriera w (19.10a): wynik w obu przypadkach zawsze będzie taki
sam.
Metoda filtra odwrotnego. Załóżmy, że znamy (już wyznaczyliśmy) współczynniki trans-
mitancji filtra traktu głosowego H(z) = G/A(z) (19.1) dla interesującego nas, kompresowanego
fragmentu sygnału mowy x(n). Jak się później okaże, jest to filtr predykcji następnej próbki
sygnału mowy na podstawie znajomości M = 10 poprzednich próbek. Jeśli przepuścimy kodo-
wany sygnał przez filtr G(z) = 1/H(z) = A(z), czyli odwrotny do H(z), to otrzymamy tzw. sygnał
resztkowy, będący obserwowanym błędem predykcji. Błąd ten wynika z niezgodności przy-
jętego modelu AR w stosunku do obserwowanego sygnału rzeczywistego, ale także z impul-
sowego charakteru pobudzenia. Na rysunku 19.10 pokazano przykłady analizowanych sygna-
łów i związanych z nimi sygnałów resztkowych dla kilku głosek dźwięcznych i jednej bez-
dźwięcznej. Jak widać sygnał resztkowy ma o wiele mniejszą dynamikę niż sygnał oryginalny,
co wynika z faktu, że zastosowany model predykcji dobrze do niego pasuje. Wyjątek stanowią
jedynie chwile czasowe, w których występują impulsowe pobudzenia traktu głosowego toru
przez powietrze rytmicznie „wyrzucane” przez struny głosowe. Pojawiają się wówczas wyraź-
ne impulsy, które powtarzają się okresowo. Na ich podstawie można wnioskować o tym, czy
analizowana głoska jest dźwięczna czy bezdźwięczna (obecność lub brak ww. impulsów) oraz
o wartości okresu tonu podstawowego w tym pierwszym przypadku. W tym miejscu rodzi się
także pomysł na metodę kompresji sygnału mowy, która znajduje zastosowanie w praktyce.
Sygnał resztkowy ma mniejszą dynamikę niż sygnał oryginalny, więc można go zapisać za po-
mocą mniejszej liczby bitów. Idąc dalej można kompresować sygnał resztkowy zamiast sygna-
łu oryginalnego (np. takie podejście jest stosowane w parametrycznym koderze mowy standar-
du MPEG-4 oraz w koderach mowy telefonii bezprzewodowej GSM). Kompresję tę wykonuje
się w dziedzinie częstotliwości wydzielając i kodując tylko częstotliwości sygnału resztkowego
leżące w zakresie 0÷1000 Hz. Jest to przykład kompresji sygnału w dziedzinie jego transfor-
maty, w tym konkretnym przypadku transformaty Fouriera, w którym koduje się nie próbki
sygnału tylko współczynniki jego transformaty, w dodatku selektywnie wybrane.

19.4. Wyznaczanie filtra traktu głosowego


Powyżej zajmowaliśmy się problemem klasyfikacji analizowanego fragmentu sygnału mowy
na dźwięczny i bezdźwięczny. Po identyfikacji i wyborze odpowiedniego pobudzenia (patrz
rysunek 19.3), przejdziemy obecnie do określenia wartości parametrów G, a1, a2,...,a10 filtra
głosowego (19.1), odpowiadających wypowiadanej głosce. Zetkniemy się tutaj z ogólnym
problemem modelowania parametrycznego sygnałów, tzn. kojarzeniu sygnału z odpowiada-
jącą mu transmitancją. Podstawową zasadą przyświecającą takiemu przyporządkowaniu jest
podobieństwo charakterystyki częstotliwościowej transmitancji do widma sygnału. Zapewnia
to, że w wyniku jej pobudzenia szumem (czyli sygnałem mającym płaskie widmo częstotli-
wościowe, czyli zawierającym wszystkie częstotliwości) na wyjściu układu otrzymamy sygnał
zbliżony do analizowanego, ponieważ filtr „wybierze” ze zbioru częstotliwości wejściowych
tylko te obecne w sygnale analizowanym. Schemat blokowy rozpatrywanego modelu jest
przedstawiony na rysunku 19.4, gdzie e(n) stanowi sygnał pobudzenia, w szczególności szum
o rozkładzie normalnym lub zbiór poprzesuwanych dyskretnych impulsów jednostkowych.
W przypadku kiedy pobudzenie jest szumem mamy do czynienia z klasycznym modelowaniem
autoregresyjnym dziesiątego rzędu, w którym każda próbka jest liniową kombinacją dziesięciu
558 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

głoska a" sygnał resztkowy z a"


" "
0.5 0.3
0.2
0 0.1
0
-0.1
-0.5
100 200 300 400 100 200 300 400
numer próbki numer próbki

głoska i" sygnał resztkowy z i"


" "
0.6 1
0.4 0.5
0.2
0 0
-0.2
-0.4 -0.5
100 200 300 400 100 200 300 400
numer próbki numer próbki

głoska o" sygnał resztkowy z o"


" "
0.4 0.2
0.2
0 0
-0.2
-0.4 -0.2
100 200 300 400 100 200 300 400
numer próbki numer próbki

głoska u" sygnał resztkowy z u"


" "
0.5 0.2

0 0
-0.5
-0.2
100 200 300 400 100 200 300 400
numer próbki numer próbki

głoska sz" sygnał resztkowy z sz"


" "
0.2 0.1
0
0
-0.1
-0.2 -0.2
100 200 300 400 100 200 300 400
numer próbki numer próbki

Rys. 19.10. Sygnały głosek „a”, „i”, „o”, „u” i „sz” oraz związane z nimi sygnały resztkowe, uzyskane
drogą przefiltrowania sygnałów oryginalnych przez filtr odwrotny (do filtra traktu głosowego)
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 559

próbek poprzednich z pewnym błędem e(n). Czasowym odpowiednikiem równania (19.1) są


wówczas zależności:
x (n ) + a1 x (n − 1) + a 2 x ( n − 2) + ... + a10 x ( n − 10) = Ge(n ) (19.11a)

x (n ) = [− a1 x (n − 1) − a 2 x ( n − 2) − ... − a10 x ( n − 10)] + Ge(n ) (19.11b)

Ostatecznie
x (n ) = xˆ ( n ) + err (n ) (19.12)
gdzie:
p
xˆ ( n ) = − a1 x (n − 1) − a 2 x ( n − 2) − ... − a10 x ( n − 10) = − ∑ a j x ( n − j ) (19.12a)
j =1
err ( n ) = Ge(n ) (19.12b)

Sygnał xˆ ( n ) jest prognozą wartości sygnału w chwili n-tej, a err(n) − jej błędem. Parametr
p jest równy 10, ale w ogólnym przypadku predykcji liniowej jego wartość jest dowolna. W al-
gorytmie LPC-10 sygnał jest przetwarzany blokowo (N = 240 próbek z przesunięciem co
M = 180 próbek). Dla każdych 240 próbek należy więc znaleźć optymalne wartości współ-
czynników a1, ..., a10, takie, aby „średni” błąd prognozy dla całego bloku był jak najmniejszy.
Najczęściej jako kryterium jakości predykcji wybiera się błąd średniokwadratowy, zdefinio-
wany następująco:
2
N −1  
1 N −1 2 1 N −1 p
J =σ =2
∑ err (n ) = ∑ [x (n) − xˆ (n )]2 = 1 ∑  x( n) + ∑ a j x(n − j )
N − p n= p N − p n= p N − p n= p  
 j =1

(19.13)
Aby wyznaczyć optymalne współczynniki ak, 1 ≤ k ≤ p, dla całego bloku należy wyznaczyć po-
chodną cząstkową J względem każdego z tych współczynników i przyrównać ją do zera.
Otrzymujemy w ten sposób układ p równań z p niewiadomymi, który ma następujące rozwią-
zanie:

a = −R −1r (19.14a)
gdzie:

 a1   r (0) r (1) " r ( p − 1)   r (1) 


a   r (1)   r ( 2)  N −1
r ( 0) " r ( p − 2)
a =  , R = 
2 , r =  , r ( k ) = 1 ∑ x ( n ) x ( n + k )
 #   # # % #   #  N − p n= p
     
a
 p  r ( p − 1) r ( p − 2) " r (0)   r ( p ) 
(19.14b)
Znając współczynniki predykcji, można z równania (19.13) obliczyć jej błąd Jmin = σmin2:
p
J min = σ 2min = r (0) + aT r = r (0) + ∑ a j r ( j ) (19.15)
j =1
560 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

Aby zsyntezować analizowany fragment mowy, należy na wejście filtra IIR o znanych już
współczynnikach i wzmocnieniu (G = Jmin = σmin2) podać pobudzenie znalezione w poprzed-
nim punkcie.
Na rysunku 19.11 przedstawiono moduły transmitancji toru traktu głosowego dla kilku głosek
dźwięcznych i bezdźwięcznych. W przypadku pierwszych z nich widać, że poszczególne głos-
ki charakteryzują się różnymi częstotliwościami rezonansowymi i różnymi wysokościami ma-
ksimów rezonansowych.

|H(f)| dla a" |H(f)| dla e"


" "
15
6
10 4
5 2

0 1000 2000 3000 4000 0 1000 2000 3000 4000


f [Hz] f [Hz]

|H(f)| dla i" |H(f)| dla o"


" "
25
8 20
6 15
4 10
2 5
0 1000 2000 3000 4000 0 1000 2000 3000 4000
f [Hz] f [Hz]

|H(f)| dla c" |H(f)| dla sz"


" "
5
1.5 4
3
1 2
0.5 1
0 1000 2000 3000 4000 0 1000 2000 3000 4000
f [Hz] f [Hz]

Rys. 19.11. Widmo transmitancji filtra traktu głosowego dla kilku wybranych głosek

Jak już zaznaczyliśmy we wstępie do tego rozdziału, standard LPC-10 służy nam tylko jako
przykład do ogólnego wprowadzenia w problematykę kodowania sygnału mowy. Nie omawia-
my go więc szczegółowo i nie trzymamy się kurczowo zastosowanych w nim rozwiązań. Tylko
gwoli zaciekawienia Czytelników nadmienimy teraz, że w standardzie tym stosuje się dwa
modele predykcji: dziesiątego rzędu dla głosek dźwięcznych oraz czwartego rzędu dla głosek
bezdźwięcznych („szumowych”). Dodatkowo modelowanie predykcyjne stosuje się nie do
oryginalnego fragmentu sygnału mowy x(n), tylko do jego wersji x '( n ) poddanej preemfazie,
tzn. przefiltrowanej filtrem nierekursywnym FIR postaci:
x '(n ) = x (n ) − 0,9375 x ( n − 1) (19.16)

Filtr ten podbija górne częstotliwości sygnału mowy, i tym samym ułatwia proces modelowa-
nia, ponieważ wzmacnia niskie „wierzchołki” leżących tam formantów. Oczywiście w dekode-
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 561

rze musi być wykonana operacja odwrotna, tzn. po zsyntezowaniu fragmentu mowy x '( n ) na-
leży go poddać deemfazie za pomocą filtra rekursywnego IIR, odwrotnego do filtra preemfazy:
x (n ) = x '(n ) + 0,9375 x ( n − 1) (19.17)

Dla dociekliwych. Wzory (19.14) i (19.15) wyprowadzono już raz w rozdziale 16 − (16.20),
(16.21). Obecnie w celach poglądowych wyprowadzimy je ponownie dwoma alternatywnymi
sposobami.
M e t o d a 1 − d e t e r m i n i s t y c z n a . Obliczmy pochodną cząstkową funkcjonału J (19.13)
względem dowolnego współczynnika predykcji ak, 1 ≤ k ≤ p:

   p   
2
∂J ∂  1 N −1  2 p
=  ∑ x (n) + 2 x(n) ∑ a j x(n − j ) +  ∑ a j x(n − j )    = 0
∂a k ∂a k  N − p n = p 
 

  j =1  j =1   

1 N −1   p  
 a x ( n − j )  x ( n − k ) = 0
∑ 
N − p n= p 
2 x ( n ) x ( n − k ) + 2 ∑
 j =1 j
 
  

1 N −1  
p
1 N −1

N − p n= p
x ( n ) x ( n − k ) + ∑ 
N − p n= p 
x ( n − k ) ∑ a j x ( n − j ) = 0
 j =1 

p  1 N −1  1 N −1
∑ a j  N − p ∑ x ( n − j ) x ( n − k ) = − N − p ∑ x ( n ) x ( n − k ) (19.18)
j =1  n= p  n= p

Po wprowadzeniu oznaczenia:

1 N −1
R xx (k , j ) = ∑ x( n − j ) x (n − k )
N − p n= p
(19.19)

na e s t y m a t ę funkcji autokorelacji otrzymujemy:


p
∑ a j Rxx (k , j ) = − Rxx (k ,0), k = 1, 2, ..., p (19.20a)
j =1

lub w zapisie macierzowym:

 R xx (1,1) R xx (1,2) " R xx (1, p )   a1   R xx (1,0) 


 R (2,1) R (2,2)  a   R ( 2,0) 
" R xx (2, p )  2 
 xx xx ⋅ = −  xx  (19.20b)
 # # % #   #   # 
  a   
 R xx ( p,1) R xx ( p,2) " R xx ( p, p )  p   R xx ( p,0)

Ponieważ:

1 N −1
R xx (k , j ) = r ( k − j ) = ∑ x(n) x(n − (k − j ))
N − p n= p
(19.21)
562 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

oraz r(m) = r(−m), stąd ostatecznie:

 r (0) r (1) " r ( p − 1)   a1   r (1) 


 r (1)  a   r (2) 
r (0) " r ( p − 2)  2 
 ⋅ = − , Ra = −r (19.22)
 # # % #   #   # 
     
 r ( p − 1) r ( p − 2) " r (0)   a p   r( p)

Tak więc poszukiwane wartości „optymalnych” współczynników predykcji są dane równaniem


(19.14a):
a = −R −1r (19.23)
Po ich wyznaczeniu oblicza się z (19.13) zminimalizowaną wartość J, czyli wariancję „błędu”
predykcji:
2 2
1 N −1  p  1 N −1  
J min = ∑  x (n) +
N − p n = p 
∑ j a x ( n − j )  = ∑
N − p n= p 
x ( n ) + aT
x ( n )

j =1 
1 N −1  2
J min = ∑ x (n ) + 2 x( n)aT x(n ) + aT x(n)xT (n)a
N − p n= p 

1 N −1 2 1 N −1 
J min = ∑
N − p n= p
x ( n ) + aT ∑ 2 x(n )x( n) + x(n)xT ( n)a
N − p n= p 
p
J min = r (0) + aT [ 2r + Ra] = r (0) + aT  2r − RR −1r  = r (0) + aT r = r (0) + ∑ a j r( j)
 
j =1
(19.24)
Jak widać otrzymaliśmy zależność (19.15).
M e t o d a 2 − s t a t y s t y c z n a . Do równań (19.14), (19.15) można też dojść na podstawie
rozważań „statystycznych”. Wartości współczynników ak, 0 ≤ k ≤ 10, powinny być dobrane tak,
aby zminimalizować „statystyczny” błąd predykcji:

σ2 = E  err ( n )  = E  x (n ) − xˆ (n ) 
2 2
(19.25)
   

gdzie E[.] oznacza wartość oczekiwaną. Ponieważ z założenia analizowany fragment sygnału
mowy jest sygnałem losowym stacjonarnym w szerokim sensie, wartości te nie zależą od „n”.
Z kolei błąd prognozy xˆ ( n ) powinien być „statystycznie” ortogonalny (czyli nieskorelowany)
do danych, na podstawie których „postawiono” tę prognozę:

E [err ( n ) x ( n − k )] = E [( x ( n ) − xˆ ( n ) )x ( n − k )] = 0, k = 1, 2, ..., p (19.26)

stąd mamy (k = 1, 2, ..., p):

E [x ( n ) x ( n − k )] − E [xˆ ( n ) x ( n − k )] = 0 (19.27)
 p  
E [x ( n ) x (n − k )] − E  − ∑ a j x (n − j )  x (n − k ) = 0 (19.28)
 j =1 
 
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 563

p
E [x ( n ) x ( n − k )] + ∑ a j E [x (n − j ) x ( n − k )] = 0 (19.29)
j =1
p
r(k ) + ∑ a j r(k − j ) = 0 (19.30)
j =1

Ostatecznie otrzymujemy więc to samo równanie (19.14) co poprzednio:


p
∑ a j r (k − j ) = −r(k ), k = 1, 2, ..., p (19.31)
j =1

Ponieważ jednak rzeczywisty „model” sygnału może być wyższego rzędu, predykcja może nie
być idealna, wówczas minimum błędu predykcji jest równe:

  p 
2
J min = σmin = E [ x( n)err ( n)] = E  x( n) ( x (n) − xˆ ( n) )  = E  x( n)  x( n) + ∑ a j x( n − j )   =
  
 j =1 
 p  p p
= E  x (n ) x (n ) + ∑ a j x (n ) x ( n − j ) = E [x (n ) x ( n )] + ∑ a j E [x ( n ) x ( n − j )] = r (0) + ∑ a j r ( j )
 j =1  j =1 j =1

(19.32)
skąd otrzymujemy równanie (19.15):
p
J min = r (0) + ∑ a j r ( j ) (19.33)
j =1

19.5. Algorytm kodera i dekodera mowy standardu LPC-10


Schemat blokowy algorytmu kodera mowy LPC-10 jest przedstawiony na rysunku 19.12,
a szczegółowy opis poszczególnych etapów obliczeniowych procedury kodera i dekodera jest
zawarty w tabeli 19-1. W wyniku działania kodera każde 180 próbek sygnału (180*8 = 1440
bitów) wejściowego mowy jest zastępowanych 12 parametrami {T, G, a1, a2, ..., a10}. W za-
leżności od przyjętego formatu zapisu tych parametrów (przez nas lub standard) otrzymujemy
różną liczbę odpowiadających im bitów i różny stopień kompresji (patrz tabela 19-2). W tabeli
19-3 w celach poglądowych porównano ze sobą efektywność kompresji kilku innych szeroko
stosowanych standardów kodowania mowy. Im lepszy jest stosowany w nich algorytm, tym
mniejsza utrata jakości sygnału mowy towarzyszy wzrostowi stopnia kompresji.
W standardzie LPC-10 wyznaczone współczynniki kwantuje się tym bardziej, im mniej istotny
jest dany współczynnik (przykładowo, im jest wyższy indeks parametru ak, tym mniej bitów
mu się przydziela). Dzięki temu do zapisu wszystkich parametrów ostatecznie są potrzebne tyl-
ko 54 bity, co odpowiada kompresji 27-krotnej. Jednak „zaokrąglanie” wag rekursywnego
filtra traktu głosowego (syntezy) powoduje deformację jego charakterystyki częstotliwościowej
i grozi niestabilnością. W standardzie filtr syntezy implementuje się więc w tzw. postaci
„kratowej”, bardziej odpornej na kwantowanie współczynników. W związku z tym przesyła się
i kwantuje współczynniki odpowiedniego filtra „kratowego”, czyli {γk} a nie {ak}, wówczas na
niektóre współczynniki γk przeznacza się tylko dwa bity. Ale to już jest „inna bajka”, która
zostanie opowiedziana w następnym rozdziale.
564 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

Estymacja
wzmocnienia G 10
G = r(0) + ∑ a k r (k )
k =1
mowa Okno Estymacja a = −R −1r
Preemfaza
Hamminga wsp. filtra {ak}

Filtr LP 900 Hz Decyzja: mowa dźwięczna (V)


czy bezdźwięczna (UV)
Progowanie

Decyzja UV
Autokorelacja T=0
V/UV

N −k −1
r( k ) = ∑ x ( n ) x( n + k ) V
n =0
k = 0,1, 2,..., N − 1 Oblicz okres T

Rys. 19.12. Schemat blokowy kodera LPC-10

Tab. 19-1. Algorytm kodera i dekodera mowy LPC-10 (s(n) − wejściowy sygnał mowy)

ANALIZA − algorytm kodera mowy LPC-10 (N = 240; n = 0, 1, 2, ..., N − 1; p = 10):

1. Preemfaza. Małe uwydatnianie wyższych częstotliwości (filtracja nierekursywna FIR):


s1 (n) = s (n) − 0,9375s (n − 1)
2. Okno. Mnożenie sygnału z oknem Hamminga o długościN = 240 próbek (funkcja Matlaba hamming()):
s2 (n) = s1 (n) * w(n), w( n) = 0,54 − 0, 46 cos ( 2πn / N )

3. Filtr traktu głosowego. Obliczenie współczynników filtra traktu głosowego {ak, k = 1, 2, ..., p} i wzmo-
cnienia G (funkcja Matlaba lpc(), levinson()):
N −1− k
r(k ) = ∑ s2 (n ) s2 (n + k ), k = 0, 1, 2, ..., p
n =0
−1
 a1   r ( 0) r (1) " r ( p − 1)   r (1) 
a   r (1)
 2  = − r ( 0) " r ( p − 2)  r ( 2)  p
   , G = r ( 0) + ∑ a k r ( k )
 #   # # % #   #  k =1
     
a
 p   r ( p − 1) r ( p − 2) " r ( 0)   r ( p )
4. Filtracja dolnoprzepustowa filtrem o odpowiedzi impulsowej h(k) i górnej częstotliwości granicznej
równej 900 Hz (projektowanie filtra funkcją fir1() Matlaba, a filtracja za pomocą funkcji filter()):
M
s3 ( n ) = ∑ h(k )s2 (n − k )
k =0
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 565

5. Progowanie sygnału:
 s3 (n ) − P, dla s3 (n ) ≥ P

s4 (n ) =  s3 (n ) + P, dla s3 (n ) ≤ − P
0, dla pozostałych

P = 0,3max( s3 (n)) lub P = K min( A1/ 3 , A2 / 3 ), K = 0,6÷0,8
A1/3 i A2/3 to maksymalna wartość sygnału s3(n) w jego części początkowej i końcowej, w sytuacji kiedy
dzieli się ten sygnał na trzy części (pierwsze i ostatnie 80 z analizowanych 240 próbek).
6. Funkcja autokorelacji sygnału po sprogowaniu:
N −1− k
rp (k ) = ∑ s 4 (n ) s4 ( n + k ), k = 0, 1, 2, ..., N − 1
n =0

7. Decyzja „dźwięczna”/”bezdźwięczna”. Analizowany fragment mowy zostaje uznany za dźwięczny, jeśli:


max(rp (k )) ≥ [ 0,3 ÷ 0,35] ⋅ r (0), k = 20, ..., 160
Zakres zmienności k odpowiada częstotliwości tonu podstawowego z zakresu 50÷400 Hz. Oznaczmy
przez kmax indeks maksimum funkcji autokorelacji z zakresu [20, 160].
8. Okres tonu podstawowego T w przypadku mowy dźwięcznej:
T = k max
9. Wyjściowy strumień bitowy. Zapisanie wartości wyznaczanych parametrów:
{T , G, a1 , a2 , ..., a p } lub {T , G, , γ, γ 2 , ..., γ p }
do strumienia wyjściowego (pliku). Dla mowy bezdźwięcznejT = 0.
Aby uzyskać wyższy stopień kompresji wartości te się kwantuje (zaokrągla) i zapisuje na mniejszej licz-
bie bitów. W tym celu ze współczynników {ak} przechodzi się na współczynniki {γk} (patrz tabele 22-1
i 22-2), czyli współczynniki filtra kratowego, mniej wrażliwego na kwantowanie, a następnie dwa pier-
wsze z nich zamienia się na współczynniki {LAR1, LAR2} [Papa87]. W normie LPC-10 wszystkie
parametry koduje się tylko na 54 bitach i uzyskuje w ten sposób kompresję 27-krotną (gdyż oryginalny
fragment 180 ośmiobitowych próbek sygnału potrzebuje aż 1440 bitów).

SYNTEZA − algorytm dekodera mowy LPC-10

1. Wejściowy strumień bitowy. Wydobycie ze strumienia bitów wszystkich parametrów dla kolejnej „ram-
ki” sygnału mowy:
{T , G, a1 , a2 , ..., a p }
2. Synteza. Zsyntezowanie M = 180 próbek mowy (funkcja filter() Matlaba):
p
s1 ( n ) = Ge( n ) − ∑ a k s1 (n − k ), k = 0, 1, 2, ..., M − 1
k =1

gdzie e(n) jest sygnałem pobudzającym. Dla mowy bezdźwięcznej jest to szum losowy o wariancji rów-
nej 1, dla mowy zaś dźwięcznej − sekwencja impulsów, w najprostszym przypadku ciąg jedynek od-
dzielonych zerami. Podczas filtracji uwzględnia się już zsyntezowane próbki z poprzedniej „ramki” oraz
znajomość chwili wystąpienia ostatniego impulsu w poprzedniej „ramce”, jeśli była to „ramka”
dźwięczna. Ta druga właściwość ma zapewnić „ciągłość” pobudzeń impulsowych dla sekwencji „ramek”
dźwięcznych.
3. Deemfaza − małe stłumienie wyższych częstotliwości metodą filtracji rekursywnej typu IIR (filtr odwrot-
ny do filtra preemfazy kodera):
s (n) = s1 (n) + 0, 9375 ⋅ s (n − 1)
566 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

Tab. 19-2. Wpływ zapisu parametrów fragmentu (ramki) sygnału mowy na uzyskiwany stopień kompresji

Bity / parametr Liczba bitów na ramkę Stopień kompresji


zmienne (standard LPC-10) 54 27
8 96 15
16 192 7,5
32 384 3,75
64 768 1,875

Tab. 19-3. Porównanie stosowanych standardów kodowania sygnału mowy. W nawiasie podano numer
standardu (rekomendacji) ITU (ang. International Telecommunications Union) lub CCITT (ang Interna-
tional Telegraph and Telephone Consultative Committee) lub jego rodzaj

Algorytm Stopień kompresji Strumień bitowy [kbity/s]


PCM (G711) 1:1 64
ADPCM (G721) 2:1 32
LD-CELP (G728) 4:1 16
RPE-LPT (telefonia GSM) 5:1 13
VSELP 8:1 8
CELP (standard USA) 13 : 1 4,8
LPC-10e (standard USA) 27 : 1 2,4

19.6. Przykład programu komputerowego


W tabeli 19-4 jest przedstawiony przykładowy program napisany w języku Matlab, który reali-
zuje algorytm LPC-10 w sposób uproszczony. Jako ćwiczenie pozostawiamy Czytelnikowi
przeprowadzenie następujących „badań” eksperymentalnych, dotyczących uzyskiwanej jakości
kompresji sygnału mowy w zależności od:
• liczby bitów przypadających na jedną próbkę danych (8 lub 16);
• metody śledzenia tonu podstawowego (funkcja autokorelacji, funkcja AMDF, cepstrum);
• rzędu predykcji liniowej p (długości filtra predykcji), np. p = 2, 4, 6, 8, 10, 12, 16.
Na co należy zwrócić szczególną uwagę? W pętli głównej programu znajdują się cztery in-
strukcje rysowania: 1) 240-elementowego fragmentu analizowanego sygnału, trwającego 30
milisekund przy próbkowaniu 8000 Hz, 2) jego funkcji autokorelacji, 3) charakterystyki ampli-
tudowo-częstotliwościowej filtra cyfrowego modelującego trakt głosowy oraz 4) fragmentu
sygnału, zsyntezowanego na podstawie wyznaczonych parametrów. Po usunięciu znaku pro-
centu poprzedzającego te instrukcje można śledzić działanie programu i podejmowane przez
niego decyzje (np. wartość parametru T − na jej podstawie można podjąć decyzję o uznaniu
ramki danych za dźwięczną lub bezdźwięczną). Kształcące jest testowanie programu na
nagraniach tylko jednej głoski, np. „a”, „e”, ‘i”, „u”, „s”, „sz”, „c”, „cz”, wyłapywanie
popełnianych błędów oraz podjęcie próby takiej modyfikacji programu, aby liczba przekłamań
była zredukowana.
W wyniku przeprowadzonych eksperymentów na pewno pojawi się pytanie: co należy zrobić,
aby jakość mowy po dekompresji była lepsza? Po pierwsze poprawić metodę pobudzania filtra.
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 567

Jak już było powiedziane, możliwe jest wykorzystywanie do tego celu sygnału resztkowego
(rys. 19.10), czyli wyniku przepuszczenia oryginalnego sygnału mowy przez filtr odwrotny
1/H(z). Oczywiście sygnał resztkowy sam musi być poddany operacji efektywnego kodowania,
np. w dziedzinie częstotliwości z wykorzystaniem kwantyzacji wektorowej. Po drugie, pewne
nadzieje może dawać interpolacja charakterystyki amplitudowo-częstotliwościowej filtra traktu
głosowego pomiędzy blokami danych i jego częstsze przełączanie niż tylko jeden raz na ram-
kę. W tym miejscu pojawia się jednak problem jak powyższą interpolację należy wykonać?
Przykładowo, czy filtr predykcji mający współczynniki równe wartościom średnim odpowied-
nich współczynników swoich sąsiadów będzie miał charakterystykę amplitudowo-częstotliwoś-
ciową stanowiącą przejście od charakterystyki filtra go poprzedzającego do charakterystyki
filtra następującego po nim? Okazuje się, że nie. Jeśli chcemy wyznaczyć poprawną charakte-
rystykę filtra „przejścia”, to należy wyznaczyć parę wielomianów P(z) i Q(z) (LSP − Line
Spectrum Pairs, LSF − Line Spectrum Frequencies):
p
P ( z ) = A( z ) + z − ( p +1) A( z −1 ) = 1 + ∑ ( ak + a p +1− k ) z − k + z −( p +1) (19.34a)
k =1
p
Q ( z ) = A( z ) − z − ( p +1) A( z −1 ) = 1 + ∑ ( ak − a p +1− k ) z − k − z − ( p +1) (19.34b)
k =1

dla wielomianów A(z) (19.1) dwóch sąsiednich filtrów predykcji H(z), obliczyć ich miejsca ze-
rowe (zawsze leżące na okręgu jednostkowym) oraz je interpolować, osobno dla P(z) i Q(z).
Na podstawie wielomianów Pi (z) i Qi (z), związanych z interpolowanymi miejscami zerowymi,
wyznacza się następnie wielomian Ai(z):
Pi ( z ) + Qi ( z )
Ai ( z ) = (19.35)
2
dla filtra interpolującego Hi (z). Parametr p w powyższych równaniach oznacza stopień wielo-
mianu filtra predykcji, równy 10 w metodzie LPC-10. Dla tego stopnia wielomiany P(z) i Q(z),
określone przez (19.34), przyjmują następującą postać:

P( z ) = 1 + ( a1 + a10 ) z −1 + (a2 + a9 ) z −2 + ... + (a10 + a1 ) z −10 + z −11

Q ( z ) = 1 + ( a1 − a10 ) z −1 + (a2 − a9 ) z −2 + ... + (a10 − a1 ) z −10 − z −11

Zastosowanie podczas kodowania mowy filtrów LSP/LSF ma jeszcze dodatkową zaletę. Po-
nieważ w przeciwieństwie do wielomianu A(z), współczynniki wielomianów P(z) i Q(z) nie
mają dużego zakresu zmienności oraz są mniej wrażliwe na kwantowanie (dzięki czemu jest
łatwiejsze zapewnienie stabilności filtra syntezy H(z), to mogą one być kwantowane oraz
zapisywane (przesyłane) zamiast współczynników wielomianu A(z). Stanowią więc alternatywę
dla zastosowania filtrów kratowych i kwantowania ich współczynników odbicia {γk} (patrz
tabele 22-1 i 22-2).

Tab. 19-4. Uproszczony program kodera i dekodera mowy LPC-10

% Ćwiczenie: Kompresja sygnału mowy według standardu LPC-10

[x,fpr,Nbits]=wavread(‘mowa.wav’); % wczytaj sygnał mowy (cały)


plot(x); title(‘sygnał mowy’); pause % pokaż go
soundsc(x,fpr); % oraz odtwórz na głośnikach (słuchawkach)
568 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

N=length(x); % długość sygnału


Mlen=240; % długość okna Hamminga (liczba próbek)
Mstep=180; % przesunięcie okna w czasie (liczba próbek)
Np=10; % rząd filtra predykcji
gdzie=181; % początkowe położenie pobudzenia dźwięcznego

lpc=[]; % tablica na współczynniki modelu sygnału mowy


s=[]; % cała mowa zsyntezowana
ss=[]; % fragment sygnału mowy zsyntezowany
bs=zeros(1,Np); % bufor na fragment sygnału mowy
Nramek=floor((N-240)/180+1); % ile fragmentów (ramek) jest do przetworzenia

% x=filter([1 -0.9735], 1, x); % filtracja wstępna (preemfaza) − opcjonalna


for nr = 1 : Nramek
% pobierz kolejny fragment sygnału
n = 1+(nr-1)*Mstep : Mlen + (nr-1)*Mstep;
bx = x(n);

% ANALIZA − wyznacz parametry modelu -------------------------------------------------------------------------------


bx = bx - mean(bx); % usuń wartość średnią
for k = 0 : Mlen-1
r(k+1) = sum( bx(1 : Mlen-k) .* bx(1+k : Mlen) ); % funkcja autokorelacji
end
% subplot(411); plot(n,bx); title(‘fragment sygnału mowy’);
% subplot(412); plot(r); title(‘jego funkcja autokorelacji’);

offset=20; rmax=max( r(offset : Mlen) ); % znajdź maksimum funkcji autokorelacji


imax=find(r==rmax); % znajdź indeks tego maksimum
if ( rmax > 0.35*r(1) ) T=imax; else T=0; end % głoska dźwięczna/bezdźwięczna?
if (T>80) T=round(T/2); end % znaleziono drugą podharmoniczną
T % wyświetl wartość T
rr(1:Np,1)=(r(2:Np+1))’;
for m=1:Np
R(m,1:Np)=[r(m:-1:2) r(1:Np-(m-1))]; % zbuduj macierz autokorelacji
end
a=-inv(R)*rr; % oblicz współczynniki filtra predykcji
wzm=r(1)+r(2:Np+1)*a; % oblicz wzmocnienie
H=freqz(1,[1;a]); % oblicz jego odp. częstotliwościową
% subplot(413); plot(abs(H)); title(‘widmo filtra traktu głosowego’);

% lpc=[lpc; T; wzm; a; ]; % zapamiętaj wartości parametrów

% SYNTEZA − odtwórz na podstawie parametrów ---------------------------------------------------------------------


% T = 0; % usuń pierwszy znak „%” i ustaw: T = 80, 50, 30, 0
if (T~=0) gdzie=gdzie-Mstep; end % „przenieś” pobudzenie dźwięczne
for n=1:180
if( T==0)
pob=2*(rand(1,1)-0.5); gdzie=271; % pobudzenie szumowe
else
if (n==gdzie) pob=1; gdzie=gdzie+T; % pobudzenie dźwięczne
else pob=0; end
end
ss(n)=wzm*pob-bs*a; % filtracja „syntetycznego” pobudzenia
bs=[ss(n) bs(1:Np-1) ]; % przesunęcie bufora wyjściowego
end
% subplot(414); plot(ss); title(‘zsyntezowany fragment sygnału mowy’); pause
s = [s ss]; % zapamiętanie zsyntezowanego fragmentu mowy
end
% s=filter(1,[1 -0.9735],s); % filtracja (deemfaza) − filtr odwrotny − opcjonalny
plot(s); title(‘mowa zsyntezowana’); pause
soundsc(s)
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 569

19.7. Od kodowania do rozpoznawania mowy


Jak zwykle apetyt rośnie w miarę jedzenia. Nie po raz pierwszy w tej książce jak Alicja stoimy
przed kolejnymi drzwiami prowadzącymi do „Krainy Czarów” i ... nie potrafimy sobie od-
mówić. Z wielką ciekawością uchylamy je, żeby zobaczyć chociaż w części kryjące się za nimi
„skarby”, dotyczące ... rozpoznawania mowy.
Podczas testowania algorytmu kompresji mowy mieliśmy możliwość przyjrzenia się nagraniom
różnych sygnałów mowy. Kolejne fragmenty sygnałów zastępowaliśmy zbiorami parametrów,
na podstawie których odtwarzaliśmy, z lepszym lub gorszym skutkiem, wypowiedź oryginalną.
Znamy te parametry. W których z nich jest ukryta treść wypowiedzi? W zmiennych współ-
czynnikach filtra predykcji czy w jego pobudzeniu? Sprawdźmy to! W tym celu w progra-
mie przedstawionym w tabeli 19-4 wystarczy tylko usunąć znak procentów w pierwszej linii
sekcji „syntezy” i ustalić wartość okresu pobudzenia, przyjmując np. T = 80. Wówczas nieza-
leżnie od wyniku analizy, każdy fragment sygnału mowy jest traktowany jako dźwięczny i filtr
traktu głosowego jest pobudzany szeregiem impulsów jednostkowych o okresie T próbek, nie-
zależnie od mówcy i wypowiadanej treści. Cóż słyszymy? Znaną nam sekwencję słów, które
rozumiemy, ale wypowiadanych w sposób przypominający roboty z „Gwiezdnych wojen”.
Zmiana wartości parametru T od dużej do małej powoduje tylko płynne przejście od robota
„męskiego” do „żeńskiego”, zupełne zaś wyzerowanie jego wartości − prowadzi do uzyskania
efektu świszczącego sz...sz...szeptu (struny głosowe są nieruchome i cały czas otwarte, np.
z powodu paraliżu lub zmian rakowych).
Tak, tak. Treść mowy jest ukryta w zmiennej charakterystyce częstotliwościowej filtra traktu
głosowego, a w jego pobudzeniu występują jedynie cechy osobnicze i intonacyjne. Ruchy
szczęki, języka i ust powodują przestrajanie częstotliwości rezonansowych, czyli zmianę
położenia i kształtu czterech formant (maksimów), wyraźnie widocznych w obwiedni widma
sygnału mowy. Rozpoznanie mowy sprowadza się więc do śledzenia zmian charakterystyki
częstotliwościowej filtra traktu głosowego, czyli kształtu obwiedni jej widma, podczas wypo-
wiadania poszczególnych słów i porównywanie ich z trajektoriami zmian charakterystyk czę-
stotliwościowej filtrów (obwiedni widm), odpowiadającymi słowom wzorcowym, znajdującym
się w bazie danych. Rozpoznawanie może być zależne lub niezależne od mówcy, słów
izolowanych lub mowy ciągłej, z zamkniętego lub otwartego słownika.
Współczynniki wielomianu filtra predykcji nie mogą być jednak cechami bezpośrednio porów-
nywanymi z powodu trudności w znalezieniu związku pomiędzy nimi, a kształtem charaktery-
styki częstotliwościowej. Lepsze pod tym względem są kąty fazowe miejsc zerowych tego
wielomianu, będących biegunami transmitancji, ale i one nie są stosowane (przypomnijmy
sobie metodę „zer i biegunów” projektowania filtrów cyfrowych: kąt fazowy bieguna trans-
mitancji jest związany z częstotliwością, która jest wzmacniana, w tym przypadku często-
tliwością formanty). Najczęściej wykorzystuje się i porównuje współczynniki cepstralne o nis-
kich indeksach. Przypomnijmy, omawiając metodę cepstralną wyznaczania częstotliwości
podstawowej otwierania strun głosowych w podrozdziale 19.3 na podstawie widma Fouriera
fragmentu sygnału mowy, poruszyliśmy problem występowania w tym widmie obwiedni (rys.
19.9). W wyniku zlogarytmowania modułu widma i ponownego wyznaczenia prostej lub od-
wrotnej dyskretnej transformaty Fouriera (równanie (19.10a)) otrzymuje się tak zwane współ-
czynniki cepstralne. Pierwszych 10÷15 z nich to współczynniki rozwinięcia logarytmu z mo-
dułu obwiedni widma w szereg Fouriera, które charakteryzują w sposób jednoznaczny kształt
tej obwiedni. Jak już było powiedziane, rodzaj transformacji − prosta lub odwrotna − nie ma
znaczenia, ponieważ funkcja C(k) z równania (19.10a) jest rzeczywista i symetryczna
570 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

względem prążka C(0). W związku z tym jest ona aproksymowana tylko za pomocą funkcji ty-
pu kosinus, które nie zależą od znaku argumentu: cos(α) = cos(−α).
Współczynniki cepstralne można wyznaczyć za pomocą dwukrotnego wykonania algorytmu
szybkiej transformacji Fouriera FFT według schematu opisanego równaniem (19.10a) lub też
na początku znaleźć p współczynników filtra predykcji ak z (19.14), a następnie obliczyć z nich
q współczynników cepstralnych ck [Rabi93]:
c1 = a1 (19.36a)
k −1 m
ck = ak + ∑ k
cm ak − m , 2 ≤ k ≤ p (19.36b)
m =1
k −1 m
ck = ∑ k
cm ak − m , p +1≤ k ≤ q (19.36c)
m =1

oraz ich wersję ważoną cwk za pomocą wag wk


cwk = ck ⋅ wk , 1 ≤ k ≤ q (19.37)

q  πk 
wk = 1 + sin   , 1 ≤ k ≤ q (19.38)
2  q 
Do rozpoznawania mowy stosuje się identyczny jak w algorytmie LPC-10 rząd filtra predykcji
p = 10 oraz wylicza się q = 12 współczynników cepstralnych ck. Ramka danych powinna trwać
w tym przypadku 30 milisekund, a jej przesunięcie być równe 10 milisekund, co dla często-
tliwości próbkowania daje odpowiednio 240 i 80 próbek sygnału mowy. Możliwe jest szybkie,
iteracyjne wyznaczanie współczynników ak filtra LPC, opisane w następnym rozdziale (patrz
tabela 20-1), dzięki któremu metoda ta staje się bardzo atrakcyjna obliczeniowo nawet w po-
równaniu z podejściem opartym na FFT. Wówczas unika się konieczności korzystania z cza-
sochłonnej obliczeniowo zależności (19.14). Należy zwrócić uwagę, że współczynniki cep-
stralne ck wyznaczone z (19.36) odpowiadają sytuacji, kiedy w C(k) (19.10a) jest podniesione
do drugiej potęgi, co należy także uwzględnić w metodzie opartej na FFT, jeśli chce się uzys-
kać porównywalne wyniki.

Dla dociekliwych. Obecnie standardem w rozpoznawaniu mowy nie jest porównywanie współ-
czynników cepstralnych tylko mel-cepstralnych. W metodzie tej na początku sygnał mowy
poddaje się preemfazie, a następnie wymnaża z oknem Hamminga i oblicza FFT. Potem pod-
nosi się wartości prążków widma do kwadratu, czyli wyznacza estymatę funkcji gęstości wid-
mowej mocy sygnału, i uśrednia grupy prążków widma za pomocą nakładających się funkcji
wagowych o kształcie trójkątnym. Wielkość uśrednienia rośnie wraz z częstotliwością, tzn.
trójkątne funkcje wagowe są dla wyższych częstotliwości coraz szersze (po dodatkowym, op-
cjonalnym unormowaniu także coraz niższe). W ten sposób uwzględnia się podstawy percepcji
dźwięku przez człowieka, który lepiej rozróżnia niższe niż wyższe tony. Przy projektowaniu
zestawu L funkcji trójkątnych uwzględnia się psychoakustyczną skalę melową (m, f − ta sama
częstotliwość wyrażona w melach i w hercach, ln − logarytm naturalny, log − logarytm dzie-
siętny):

m = 1127,01048 ⋅ ln (1 + f / 700 ) , ( )
f = 700 ⋅ e m /1127,01048 − 1 (19.39a)

m = 2595 ⋅ log (1 + f / 700 ) , (


f = 700 ⋅ 10m / 2595 − 1) (19.39b)
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 571

W skali tej prototypy wag są identycznymi, symetrycznymi trójkątami o zadanej podstawie


(np. 200 lub 300 melów), które są przesuwane z 50% nakładaniem się (np. co 100 lub 150
melów) od dolnej (np. 100 lub 150 melów) do górnej (np. 2100 melów ≈ 4000 Hz) często-
tliwości badanej. Po transformowaniu ich częstotliwości charakterystycznych (dolnej, środko-
wej i górnej) do skali częstotliwościowej za pomocą (21.39), otrzymuje się trójkątne funkcje
wagowe (już niesymetryczne), które się stosuje do uśredniania wyznaczonej uprzednio
estymaty widma mocy. Potem się tę estymatę logarytmuje i oblicza transformatę kosinusową
DCT-II (2.76) za pomocą jednego z dwóch alternatywnych wzorów (taki sam kształt funkcji
bazowych), które się różnią jedynie sposobem numerowania elementów wektorów (od 0 lub
od 1) :
2 L −1  πk 
ck =
L l =0
(  L
)
⋅ ∑ ln S (l ) cos  (l + 1/ 2)  , k = 0, 1, 2,..., q − 1

(19.40a)

2 L  πk 
ck =
L l =1
(  L
)
⋅ ∑ ln S (l ) cos  (l − 1/ 2)  , k = 1, 2, 3,..., q

(19.40b)

gdzie L oznacza liczbę zastosowanych funkcji wagowych (filtrów), a q − liczbę wyznaczanych


współczynników mel-cepstralnych. W rozdziale 21 zapoznamy się skrótowo z psychoakustycz-
nym modelowaniem ludzkiego narządu słuchu, przy okazji omawiana standardu kompresji
MPEG audio na poziomach 1, 2 i 3.

Podsumowując, rozpoznawanie poszczególnych słów sprowadzi się teraz do porównywania


związanych z nimi sekwencji wektorów współczynników cepstralnych, czyli macierzy, ze
znajdującymi się w bazie sekwencjami współczynników cepstralnych słów wzorcowych.
Ponieważ każde słowo może być wypowiadane wolniej lub szybciej, macierze te zazwyczaj
zawierają różną liczbę cepstrów, czyli różnią się jednym wymiarem. Do ich porównania naj-
częściej stosuje się metodę nieliniową transformację czasową DTW (Dynamic Time Warping).
Załóżmy, że dysponujemy macierzą Cs(ns, k):

Cs ( ns , k ) = ck( ns ) , ns = 1... N s , k = 1...q (19.41)


składającą się z wektorów współczynników cepstralnych słowa, które ma być rozpoznane,
gdzie ns oznacza numer wektora cepstrum, a k − numer współczynnika cepstralnego tego we-
ktora. W bazie danych znajdują się z kolei macierze „cepstralne” wzorców Cw(m)(nw, k):

Cw( m ) ( nw , k ) = ck( nw ) , nw = 1... N w , k = 1...q (19.42)

gdzie m jest numerem wzorca. Dla każdego wzorca są wykonywane następujące operacje. Na
początku jest tworzona macierz d(ns, nw) o wymiarach Ns × Nw, której elementy mają wartości
równe odległości euklidesowej pomiędzy cepstrum słowa o numerze ns, a cepstrum wzorca
o numerze nw:
p
∑ ( Cs (ns , k ) − Cw (nw , k ) )
2
d ( ns , nw ) = , ns = 1... N s , nw = 1... N w (19.43)
k =1

Następnie należy obliczyć najmniejszy zakumulowany koszt przejścia pomiędzy lewym


dolnym, a prawym górnym rogiem tej macierzy (patrz rys. 19.13) czyli tzw. odległość zakumu-
lowaną (globalną). Akumulacja polega na sumowaniu wartości d(ns, nw) znajdujących się
w węzłach, przez które się przechodzi. Im otrzymana w ten sposób liczba jest mniejsza, tym
572 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

rozpoznawane słowo jest bardziej podobne do wzorca. Kiedy próbki rozpoznawanego słowa
i wzorca są identyczne, wówczas ich wektory współczynników cepstralnych są także takie
same. W takiej sytuacji najmniejszy, zerowy koszt zakumulowany jest związany z przejściem
po zerowych elementach macierzy leżących wzdłuż jej przekątnej od lewego dolnego do pra-
wego górnego rogu. W ogólnym przypadku najmniejsza wartość zakumulowana odpowiada
przejściu „doliną” wartości macierzy d(ns, nw). Na rysunku 19.14 przedstawiono przykładową
macierz dla słowa „dwa” w sytuacji kiedy traktujemy go jednocześnie jako słowo rozpoz-
nawane i wzorzec: na przekątnej obserwujemy najmniejsze wartości.

numer wektora
cech wzorca

Nw
Nw − 1
ścieżka przejścia

ograniczenia
4
3
zasady „ruchu”
2
1
numer wektora
cech słowa
1 2 3 4 5 6 Ns − 1 Ns

Rys. 19.13. Ilustracja graficzna wyznaczania najkrótszej zakumulowanej drogi przejścia (od lewego dolne-
go do prawego górnego rogu) w macierzy błędu dopasowania d(ns, nw) rozpoznawanego słowa (w poziomie)
do wzorca (w pionie). Wektorem cech jest zbiór współczynników cepstralnych

Rys. 19.14. Przykładowy kształt macierzy odległości euklidesowych d (ns, nw) (19.43) wektorów cepstral-
nych słowa „dwa” traktowanego jednocześnie jako słowo rozpoznawane i wzorzec
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 573

Liczba możliwych przejść pomiędzy lewym dolnym a prawym górnym rogiem macierzy odle-
głości lokalnych jest ogólnie bardzo duża. Uwzględnienie wszystkich przejść przy obliczaniu
odległości zakumulowanej byłoby praktycznie niewykonalne. Wprowadza się zatem pewne
ograniczenia wynikające z pewnych właściwości sygnału mowy oraz specyfiki postawionego
problemu, które pozwalają na znaczne ograniczenie ilości potrzebnych obliczeń. Szczegółowe
zasady „ruchu” i akumulacji mogą być różne, na przykład następujące:
• nie jest możliwe „cofanie” się w macierzy odległości lokalnych, tzn. jest dozwolone tylko po-
ruszanie się w prawo lub w górę;
• idąc dalej, jest dozwolone tylko przejście o j e d n ą p o z y c j ę w prawo, do góry oraz po sko-
sie w prawo do góry;
• z reguły narzuca się również ograniczenia globalne [Kuhn83], zawężające płaszczyznę doz-
wolonego ruchu do obszaru ograniczonego dwiema liniami, pokazanymi na rysunku 21.12
(linie przerywane).
Ograniczenie pierwsze wynika z m o n o t o n i c z n o ś c i sygnału mowy, drugie zaś i trzecie
− z jej c i ą g ł o ś c i , w związku z którą ogranicza się w obliczeniach możliwość uwzględnienia
odległości lokalnych między zbyt oddalonymi od siebie w czasie wektorami parametrów cep-
stralnych, gdyż mogłoby to prowadzić do pominięcia zbyt dużych fragmentów sygnału mowy.
Z przyjętych założeń wynika następujący sposób obliczania akumulacji błędu dopasowania
wzdłuż drogi przejścia [Wiel01, Skór03]:
ns
g (ns ,1) = ∑ d (k , 1), ns = 1, 2,..., N s , (akumulacja w pierwszym wierszu) (19.44a)
k =1

nw
g (1, nw ) = ∑ d (1, k ), nw = 1, 2,..., N w , (akumulacja w pierwszej kolumnie) (19.44b)
k =1

dla ns = 2, 3, ..., N s : ( ruch w poziomie)

dla nw = nw( down ) (ns ),..., nw( up ) ( ns ) : ( ruch w pionie) (19.44c)

 g (ns , nw − 1) + d (ns , nw ) ( góra )



g ( ns , nw ) = min  g (ns − 1, nw − 1) + 2 ⋅ d ( ns , nw ) ( skos )
 g (n − 1, n ) + d (n , n ) ( prawo)
 s w s w

gdzie min oznacza wybór wartości najmniejszej z trzech możliwych (ruch w prawo, w lewo lub
po skosie − w prawo do góry), a nw(down)(ns) i nw(up)(ns) − ograniczenia dolne i górne ruchu
w pionie, zależne od wartości ns (2 ≤ nw(down)(ns), nw(up)(ns) ≤ Nw). Jak widać w rozpatrywanym
przypadku nie jest wymagane wyznaczanie wszystkich wartości elementów macierzy d(ns, nw).
Wynikową odległością słowa s od wzorca w jest wartość elementu g(Ns, Nw) macierzy zaku-
mulowanej, czyli elementu znajdującego się w jej prawym, górnym rogu − końcu „wędrówki”.
Aby uniezależnić tę wartość od rozmiaru macierzy g(.), należy ją unormować, np. poprzez
podzielenie przez pierwiastek z sumy kwadratów liczby wierszy i kolumn macierzy:
g(Ns, Nw )
a ( s , w) = (19.45)
N s2 + N w2

Należy wyznaczyć wartości zakumulowanego błędu dopasowania a(s, w(m)) słowa s do każdego
wzorca w(m), znajdującego się w bazie danych. Przyjmuje się, że wypowiedziano wzorzec
leżący najbliżej rozpoznawanego słowa (najmniejsza wartość funkcji błędu).
574 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

W celu przyspieszenia obliczeń dla każdej wartości ns można tylko rozpatrywać indeksy
nw leżące w okolicy przekątnej, tzn. stosować dla nw ograniczenie dolne i górne. Jeśli liczby
cepstrów słowa (Ns) i wzorca (Nw) różnią się znacznie, można także od razu przyjąć, że słowo
jest różne od wzorca.
Na rysunku 19.13 zilustrowano graficznie algorytm wyznaczania najkrótszej zakumulowanej
ścieżki przejścia za pomocą opisanej powyżej metody programowania dynamicznego. Pogru-
bioną liną zaznaczono zwycięską, „najkrótszą” ścieżkę zakumulowaną, a liniami przerywanymi
− ograniczenia dolne i górne narzucone na nw. Strzałki natomiast pokazują dozwolone możli-
wości ruchu (akumulacji). Z kolei w tabeli 19-5 jest zaprezentowany program komputerowy,
w sposób prosty implementujący przedstawioną metodę rozpoznawania izolowanych słów
w języku Matlab. Wykorzystywane są w nim następujące podprogramy:
cisza() − służący do wycinania fragmentów ciszy, występujących na początku i końcu na-
granego słowa,
cepstrum() − wykorzystywany do wyznaczania zbioru wektorów, czyli macierzy, współ-
czynników cepstralnych dla zadanego słowa,
dtw() − realizujący algorytm porównywania macierzy cepstralnych rozpoznawanego słowa
z macierzami cepstralnymi wzorców.
Szczególną rolę odgrywa tu podprogram cisza.m, który powinien być o wiele bardziej inte-
ligentny od zaproponowanego, gdyż jego zadaniem jest pozostawianie tylko wypowiedzianego
słowa, niezależnie od tego co znajduje się na początku i końca nagrania. A może to być nie
tylko cisza, ale także trzaski, szumy lub przydźwięk sieci. Pomimo tego, że sam algorytm
DTW w pewnym zakresie rozwiązuje problem początkowych i końcowych fragmentów ciszy,
to od tego wstępnego przetwarzania bardzo zależy skuteczność rozpoznawania.

Tab. 19-5. Przykładowy program do rozpoznawania izolowanych słów poprzez porównywanie ich współ-
czynników cepstralnych metodą DTW

% Ćwiczenie: Rozpoznawanie izolowanych słów

clear all; close all;

global Mlen Mstep Np Nc % parametry globalne opisane poniżej

fpr = 8000; % częstotliwość próbkowania


Np = 10; % liczba biegunów w filtrze predykcji
Nc = 12; % liczba wyznaczanych współczynników cepstralnych
twind = 30; % długość okna obserwacji (ramki danych) w milisekundach
tstep = 10; % przesunięcie pomiędzy kolejnymi położeniami okna w milisekundach
Mlen = (twind*0.001)*fpr; % liczba próbek okna (ramki danych)
Mstep = (tstep*0.001)*fpr; % liczba próbek przesunięcia pomiędzy kolejnymi położeniami okna
slowa = {'zero'; 'jeden'; 'dwa'; 'trzy'; 'cztery'};
M = length( slowa ); % liczba rozpoznawanych słów

% Tworzenie bazy wzorców


Cwzr = [];
for k = 1 : M
disp( strcat('Naciśnij pauzę i powiedz słowo wzorcowe: ', slowa(k)) ); pause
wz = wavrecord(3*fpr, fpr, 1); % liczba próbek, cz. próbkowania, jeden kanał
wz = cisza( wz, fpr ); % usuń ciche brzegi na początku i końcu nagrania
[Cwz, Nramek] = cepstrum( wz ); % oblicz macierz współczynników cepstralnych
[Nw, Nk] = size(Cwz); % odczytaj wymiary macierzy
Cwzr(1:Nw,1:Nk,k) = Cwz ; Nwzr(k)=Nramek; % dodaj ją do zbioru wzorców
end
Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy 575

% Rozpoznawanie słowa, które ma swój wzorzec w bazie


while( input(' Rozpoznawanie (1/0) ? ') == 1 )
disp( 'Naciśnij pauzę i wypowiedz słowo do rozpoznania' ); pause
x = wavrecord(3*fpr, fpr, 1); % liczba próbek, cz. próbkowania, liczba kanałów
x = cisza( x, fpr ); % usuń ciche brzegi na początku i końcu nagrania
Cx = cepstrum( x ); % oblicz macierz współczynników cepstralnych
nr = dtw( Cx, Cwzr, Nwzr ); % rozpoznaj słowo metodą DTW; zwróć numer wzorca
disp( strcat( 'Powiedziano słowo: ', slowa(nr) ) );
end

function y = cisza(x, fpr)


% usunięcie ciszy na początku i końcu słowa

dt1 = 0.010; Mlen = floor(dt1*fpr); % długość okna czasowego do liczenia energii [msek], liczba
próbek
dt2 = 0.001; Mstep = floor(dt2*fpr); % przesunięcie okna czasowego [msek], liczba próbek
prog = 0.25*fpr/8000; % próg głośności

N = length(x); % długość sygnału


Nramek = floor((N-Mlen)/Mstep+1); % liczba fragmentów (ramek) jest do przetworzenia

xn = x / max(abs(x)); % normowanie
for nr1 = 1 : Nramek % DETEKCJA ciszy na początku nagrania
bx = xn( 1+(nr1-1)*Mstep : Mlen + (nr1-1)*Mstep ); % pobranie fragmentu sygnału
if(bx'*bx >= prog) break; end % przerwij, jeśli energia > od progu
end
for nr2 = Nramek :-1: nr1 % DETEKCJA ciszy na końcu nagrania
bx = xn( 1+(nr2-1)*Mstep : Mlen + (nr2-1)*Mstep ); % pobranie fragmentu sygnału
if(bx'*bx >= prog) break; end % przerwij, jeśli energia > od progu
end

y = x( 1+(nr1-1)*Mstep : Mlen + (nr2-1)*Mstep ); % obcięcie cichych brzegów

subplot(211); plot(x); title('przed obcięciem'); % sprawdzenie wzrokowe


subplot(212); plot(y); title('po obcięciu'); % skuteczności obcięcia brzegów

function [Cx, Nramek] = cepstrum( x )


% obliczenie macierzy Cx współczynników cepstralnych dla słowa x

global Mlen Mstep Np Nc % parametry globalne

c=[]; cw=[]; Cx=[]; % usuwanie zawartości macierzy

N = length(x); % liczba próbek sygnału


Nramek = floor((N-Mlen)/Mstep+1); % liczba fragmentów (ramek) jest do przetworzenia
m = 1:Nc; w = 1 + Np*sin(pi*m/Nc)/2; % współczynniki wagowe

x = x - 0.9375*[0; x(1:N-1)]; % filtracja wstępna (pre-emfaza)

% PĘTLA GŁÓWNA
for nr = 1 : Nramek
% Pobranie kolejnego fragmentu sygnału
n = 1+(nr-1)*Mstep : Mlen + (nr-1)*Mstep; bx = x(n);
% Przetwarzanie wstępne
bx = bx - mean(bx); % usuń wartość średnią
bx = bx .* hamming(Mlen); % zastosuj okno czasowe
% Obliczenie współczynników cepstralnych ze współczynników filtra LPC
for k = 0 : Np
r(k+1) = sum( bx(1 : Mlen-k) .* bx(1+k : Mlen) ); % funkcja autokorelacji
end
rr(1:Np,1)=(r(2:Np+1))'; % wektor autokorelacji
for m = 1 : Np
R(m,1:Np)=[r(m:-1:2) r(1:Np-(m-1))]; % macierz autokorelacji
end
576 Projekt LPC-10: podstawy kompresji i rozpoznawania sygnału mowy

a = inv(R)*rr; a = a'; % wsp. transmitancji filtra LPC


a = [a zeros(1,Nc-Np)]; % uzupełnij zerami
c(1) = a(1);
for m = 2 : Nc
k = 1:m-1; c(m) = a(m) + sum(c(k).*a(m-k).*k/m); % współczynniki cepstralne
end
% Obliczenie współczynników cepstralnych metodą FFT
% c1 = real( ifft( log( abs(fft(bx)).^2 ) ) ); % zrób to sam
% c2 = rceps(bx); % za pomocą funkcji Matlaba
% c = c1; c = c'; c = c(2:Nc+1); % c1 lub c2; wytnij fragment
% Ważenie wyznaczonych współczynników cepstralnych
cw = c .* w; % ich wymnożenie z wagami
Cx = [Cx; cw]; % oraz zapamiętanie w macierzy
end

function [ nr ] = dtw( Cx, Cwzr, Nwzr)


% rozpoznawanie słowa poprzez porównanie macierzy jego wsp. cepstralnych Cx z wzorcami Cwzr metodą DTW

[ Ns, Np ] = size(Cx); % liczba wektorów współczynników cepstralnych słowa, ich długość

for numer = 1 : length(Nwzr) % porównaj Cx z Cwzr wszystkich wzorców

% Obliczenie odległości d(ns, nw) pomiędzy poszczególnymi cepstrami sygnału (ns) i sprawdzanego wzorca (nw)
Nw = Nwzr( numer ); % liczba wektorów wsp. cepstralnych wzorca
Q = round( 0.2 * max(Ns,Nw) ); % współczynnik szerokości ścieżki
d = Inf*ones(Ns,Nw); tg=(Nw-Q)/(Ns-Q); % inicjalizacja macierzy odległości, tangens kąta
for ns = 1:Ns % dla każdego cepstrum rozpoznawanego słowa
down(ns) = max( 1, floor(tg*ns-Q*tg)); % ograniczenie dolne
up(ns) = min( Nw, ceil(tg*ns+Q)); % ograniczenie górne
for nw = down(ns) : up(ns) % dla każdego cepstrum wzorca
d(ns,nw) = sqrt( sum((Cx(ns, 1:Np) - Cwzr(nw, 1:Np, numer)).^2 )); % odległość
end
end

% Obliczenie odległości zakumulowanej g()


g = d; % inicjalizacja
for ns = 2:Ns, g(ns,1) = g(ns-1,1) + d(ns,1); end % zakumuluj pierwszą kolumnę
for nw = 2:Nw, g(1,nw) = g(1,nw-1) + d(1,nw); end % zakumuluj pierwszy wiersz
for ns = 2:Ns % akumuluj w pionie (słowo)
for nw = max( down(ns), 2 ) : up(ns) % akumuluj w poziomie (wzorzec)
dd = d(ns,nw); % odległość cepstrum "ns" słowa od wzorca "nw"
temp(1) = g(ns-1,nw) + dd; % ruch do góry
temp(2) = g(ns-1,nw-1) + 2*dd; % ruch po przekątnej (do góry w prawo)
temp(3) = g(ns,nw-1) + dd; % ruch w prawo
g(ns,nw) = min( temp ); % wybierz minimalną wartość zakumulowaną
end
end
glob(numer) = g(Ns,Nw)/sqrt(Ns^2+Nw^2) % wartość zakumulowana "najkrótszej" ścieżki
end
[ xxx nr ] = min( glob ); % numer wzorca o najmniejszej wartości zakumulowanej
20
Projekt LPC-10:
kompresja sygnału mowy − metody
zaawansowane

Rozdział ten stanowi uzupełnienie rozdziału poprzedniego. Przedstawiono w nim zaawanso-


wane metody przetwarzania sygnału, które znajdują zastosowanie w praktycznej implementacji
kodera mowy LPC-10 czasu rzeczywistego. W jego pierwszej części wyprowadzono algorytm
Durbina-Levinsona, służący do rekurencyjnego (iteracyjnego) wyznaczania współczynników
traktu głosowego. Unika się w ten sposób problemu odwracania macierzy R, występującego
w równaniu (19.14a), i ułatwia implementację algorytmu kodera LPC-10 na procesorach sy-
gnałowych powszechnego użytku. W drugiej części rozdziału pokazano, że filtr syntezy mowy
jest korzystniej zrealizować w tzw. postaci kratowej, która jest mniej wrażliwa na kwantowanie
jej współczynników.

20.1. Metoda Durbina-Levinsona − iteracyjne wyznaczanie


współczynników filtra traktu głosowego
Wyznaczanie współczynników filtra predykcji liniowej ze wzoru (19.14a) wymaga wyzna-
czenia macierzy odwrotnej R−1 dla każdej „ramki” (fragmentu) sygnału mowy. Jest to macierz
o wymiarach 10 na 10, a więc wcale nienależąca do najmniejszych. Oczywiście, odwracanie
macierzy nie jest problemem w środowiskach programowych zorientowanych na obliczenia
matematyczne (np. Matlab, Mathematica, MathCad), ale jest już kłopotliwe na dedykowanym
sprzęcie mikroprocesorowym przy wykorzystaniu języka maszynowego (np. stałoprzecinkowe
procesory sygnałowe). Ponieważ algorytmy kompresji mowy w większości zastosowań muszą
pracować w czasie rzeczywistym i być zaimplementowane na poziomie bliskim sprzętu, po-
wstaje potrzeba opracowania efektywnej, numerycznej implementacji równania (19.14a).
Obecnie przedstawimy jedno z możliwych rozwiązań: algorytm Durbina-Levinsona.
Na początku zmodyfikujemy rozwiązywany układ równań, tzn. przeniesiemy wektor r z prawej
strony równania (19.22) na jego lewą stronę:
578 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

 1  0 
 r (1) r ( 0) r (1) " r ( p − 1)     
 r ( 2) a1 0
r (1) r ( 0) " r ( p − 2)     
  ⋅  a 2  = 0  (20.1)
 # # # % #     
  # #
 r ( p ) r ( p − 1) r ( p − 2) " r ( 0)     
a p  0

Następnie dodajmy (19.15) do (20.1) i utwórzmy jedno równanie macierzowe:

 r (0) r (1) r ( 2) " r ( p )   1  σ 2min   E p 


   
 r (1) r (0) r (1) " r ( p − 1)   a1   0   0 
   
 r ( 2) r (1) r (0) " r ( p − 2)  ⋅  a 2  =  0  =  0  (20.2)
       
 # # # % #  #   #   # 
 r ( p ) r ( p − 1) r ( p − 2) " r (0)  a p   0   0 

Na podstawie tego równania, znając wartości estymaty funkcji autokorelacji r(0), r(1), ..., r(p),
należy wyznaczyć wartości parametrów a1, a2,..., ap oraz σ2min. W algorytmie Durbina-Levin-
sona rozwiązuje się ten problem obliczeniowy iteracyjnie (rekursywnie): na początku rozwią-
zuje się (20.2) dla p = 1, potem dla p = 2 i tak dalej aż do p = 10, za każdym razem wykorzy-
stując rozwiązanie z poprzedniego, niższego etapu obliczeń. Pomocniczo stosuje się także
następującą właściwość:

 r (0) r (1) " r ( p )   a0   b0   r (0) r (1) " r( p )   a p   b p 


 r (1)  a  b 
r ( 0) " r ( p − 1)  1   1   r (1) r ( 0) " r ( p − 1) a p −1  b p −1 
 ⋅ = ⇒  ⋅ = 
 # # % #   #  #  # # % #   #   # 
   a  b       
 r ( p ) r ( p − 1) " r (0)   p   p   r ( p ) r ( p − 1) " r (0)   a0   b0 

(20.3)
Prześledźmy krok po kroku metodę Durbina-Levinsona [Orfa88]. W celu uproszczenia zapisu
przyjmijmy oznaczenie r(k) = rk.

Krok 0: p = 0. Z (20.2) mamy: r0⋅1 = E0, skąd wyznaczamy E0. Następnie zwiększamy wymiar
wektora parametrów ak, dodając do niego zero:

 r0 r1  1  E0   r0 r1  0 ∆ 0 
r = ⇒ = (20.4)
1 r0  0 ∆ 0  r
1 r0  1  E0 

i obliczamy ∆0 z tak otrzymanego równania:


∆ 0 = r1 (20.5)

Krok 1: p = 1. Rozwiązujemy równanie:

 r0 r1   1   E1 
r = (20.6)
1 r0   a11   0 

Stosujemy podstawienie:
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 579

 1  1   0
 a  =  0 − γ 1  1 (20.7)
 11     

i mnożymy lewostronnie obie strony (20.7) przez odpowiednią macierz próbek funkcji auto-
korelacji:

 r0 r1   1   r0 r1  1  r0 r1  0
r = − γ1  (20.8)
1 r0   a11   r1 r0  0  r1 r0  1

Uwzględniając (20.4), (20.6) otrzymujemy:

 E1   E0  ∆ 0 
 0  = ∆  − γ1  E  (20.9a)
   0  0
lub
E0 − γ1∆ 0 = E1 , ∆ 0 − γ1E0 = 0 (20.9b)
lub

γ1 =
∆ 0 r1
=
E0 E0
, E1 = E0 − γ1∆ 0 = 1 − γ12 E0 ( ) (20.9c)

Oczywiście, znając γ1 można z (20.7) wyznaczyć a11:


a11 = − γ1 (20.10)

Kończąc obliczenia w tym kroku, ponownie zwiększamy wymiar wektora parametrów ak, do-
dając do niego zero:

 r0 r1 r2   1   E1   r0 r1 r2   0   ∆1 
r r0 r1  ⋅ a11  =  0  ⇒ r r0 r1  ⋅ a11  =  0  (20.11)
1      1     
 r2 r1 r0   0  ∆1  r2 r1 r0   1   E1 

stąd:
∆1 = r2 + a11r1 (20.12)

Krok 2: p = 2. Rozwiązujmy równanie:

 r0 r1 r2   1   E2 
r r0 r1  ⋅  a 21  =  0  (20.13)
1     
 r2 r1 r0  a 22   0 

Po zastosowaniu podstawienia analogicznego jak w poprzednim kroku:

 1   1   0 
 a  = a  − γ a  (20.14)
 21   11  2  11 
a 22   0   1 

oraz po wymnożeniu lewostronnie równania (20.14) przez macierz współczynników funkcji


autokorelacji o wymiarach 3 na 3, z (20.11), (20.13) otrzymujemy:
580 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

 E 2   E1   ∆1 
 0 =  0 −γ  0  (20.15)
    2 
 0  ∆1   E1 
lub
E1 − γ 2 ∆1 = E 2 , ∆1 − γ 2 E1 = 0 (20.16)
lub

γ2 =
∆1 r2 + a11r1
E1
=
E1
(
, E 2 = 1 − γ 22 E1 ) (20.17)

Znając γ2 i a11, obliczamy z (20.14) a21 i a22:


a 22 = − γ 2 , a 21 = a11 − γ 2 a11 (20.18)

Ostatnią czynnością jest przygotowanie się do następnego kroku:

 r0 r1 r2 r3   1   E 2   r0 r1 r2 r3   0  ∆ 2 
r r0 r1 r2   a 21   0  r r0 r1 r2  a 22   0 
1 ⋅  =   ⇒ 1 ⋅  =   (20.19)
 r2 r1 r0 r1  a 22   0  r2 r1 r0 r1   a 21   0 
           
 r3 r2 r1 r0   0   ∆ 2   r3 r2 r1 r0   1   E2 

skąd mamy
∆ 2 = r3 + a 21r2 + a 22 r3 (20.20)

Krok 3: p = 3. Na tym etapie rozwiązujemy równanie:

 r0 r1 r2 r3   1   E3 
r r0 r1 r2   a31   0 
1 ⋅  =   (20.21)
 r2 r1 r0 r1  a 32   0 
     
 r3 r2 r1 r0   a33   0 

Stosując podstawienie (20.22) i wykonując przekształcenia analogiczne jak w poprzednim kro-


ku otrzymujemy (20.23):

 1   1   0   E3   E 2  ∆ 2 
a  a  a  0 0 0
 31  =  21  − γ 3  22  ,   =   − γ3  (20.22) (20.23)
a 32  a 22   a 21  0 0 0
           
 a 33   0   1   0  ∆ 2   E2 
skąd
E 2 − γ 3∆ 2 = E3 , ∆ 2 − γ 3 E2 = 0 (20.24)
lub

γ3 =
∆ 2 r3 + a 21r2 + a 22 r1
E2
=
E2
(
, E3 = 1 − γ 32 E 2 ) (20.25)

Współczynniki a31, a32, a33 wyznacza się z (20.22) na podstawie znajomości a21, a22 i γ3:
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 581

a 33 = − γ 3 , a 32 = a 22 − γ 3a 21 , a 31 = a 21 − γ 3a 22 (20.26)

Podsumowując, rekurencyjny algorytm wyznaczania współczynników filtra predykcji ai, 1 ≤


≤ i ≤ p, metodą Durbina-Levinsona ma postać przedstawioną w tabeli 20-1.Należy zwrócić
uwagę, że w metodzie tej otrzymujemy „przy okazji” ws p ó ł c z y n n i k i { γ k } „ k r a t o we j ”
we r s j i k l a s y c z n e g o f i l t r a A R , o p i s a n e g o p r z e z ws p ó ł c z y n n i k i { a k } .

Tab. 20-1. Algorytm Durbina-Levinsona

Wejście: r0, r1, r2, ..., rp − estymata funkcji autokorelacji sygnału (ri = r(i))
Wyjście: {γ1, γ2, ..., γp, Ep} lub {a1, a2, ..., ap, Ep}

1. E0 = r0
2. Dla i = 1, 2, 3, ..., p:

• γi =
ri + a(i −1)1ri −1 + a(i −1) 2 ri − 2 + ... + a (i −1)(i −1) r1
Ei −1
( )
, Ei = 1 − γ i2 Ei −1

• aii = − γ i
• dla j = 1, 2, ..., i−1: a ij = a ( i −1) j − γ i a ( i −1)( i − j )

20.2. Filtry kratowe


Z wyprowadzenia przeprowadzonego w poprzednim punkcie i jego wzorów końcowych,
przedstawionych w tabeli 20-1, wynika zależność wiążąca współczynniki filtra liniowej pre-
dykcji {a1, a2, ..., ap} ze współczynnikami „odbicia” {γ1, γ2, ..., γp}. Jest ona jeszcze raz po-
wtórzona w punkcie 1 tabeli 20-2. Na jej podstawie można znaleźć zależność dualną, czyli
współczynników {γ1, γ2, ..., γp} od {a1, a2, ..., ap} = {ap1, ap2, ..., app}. Ponieważ:

γi = −aii, 1 ≤ i ≤ p (20.27)

w tym przypadku musimy przeprowadzić obliczenia w odwrotnej kolejności, czyli na pod-


stawie znajomości {ai1, ai2, ..., aii} wyznaczać wartości współczynników {a(i−1)1, a(i−1)2, ...,
a(i−1)(i−1)} dla i = p, p − 1, ..., 2, a następnie skorzystać z równości (20.27).
Załóżmy przykładowo, że na konkretnym etapie obliczeń i = 4, wówczas prawdziwe są wypro-
wadzone zależności (tabela 20-1 lub punkt 1 tabeli 20-2):
a 44 = − γ 4 (20.28a)
a 41 = a 31 − γ 4 a33 (20.28b)
a 42 = a 32 − γ 4 a 32 (20.28c)
a 43 = a 33 − γ 4 a31 (20.28d)

czyli ogólnie (dla i = 4, j = 1, 2, 3):

a ij = a (i −1) j − γ 4 a (i −1)(i − j ) (20.29)


582 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

Chcemy wyliczyć {a31, a32, a33} na podstawie {a41, a42, a43, a44}. Po wymnożeniu obu stron
równania (20.28d) przez γ4 i dodaniu wyniku do (20.28b) otrzymujemy:

a 41 + γ 4 a 43 = a 31 − γ 24 a 31 (20.30)
skąd:
a 41 + γ 4 a 43
a 31 = (20.31)
1 − γ 24

W analogiczny sposób mnożąc obie strony równania (20.28b) i dodając do (20.28d) mamy:
a 43 + γ 4 a 41
a 33 = (20.32)
1 − γ 24

Z równania (20.28c) otrzymujemy natomiast:


a 42 (1 + γ 4 )a 42 a 42 + γ 4 a 42
a 32 = = = (20.33)
1− γ4 1 − γ 24 1 − γ 24

Uogólniając powyższe wzory, możemy stwierdzić prawidłowość:


aij + γ i ai (i − j )
a (i −1) j = , i = p, p − 1, p − 2,..., 1, j = 1, 2, 3,..., i − 1 (20.34)
1 − γ i2

stanowiącą algorytm punktu 2 tabeli 20-2.

Tab. 20-2. Związki pomiędzy współczynnikami filtrów, zapisanych w postaci klasycznej {a1, a2, ..., ap}
i kratowej {γ1, γ2, ..., γp}

1. Kratowe → Klasyczne: Wejście: {γ1, γ2, ..., γp}, Wyjście: {a1, a2, ..., ap} = {ap1, ap2, ..., app}

Dla i = 1, 2, 3,..., p: • aii = − γ i


• dla j = 1, 2, ..., i−1: a ij = a ( i −1) j − γ i a ( i −1)( i − j )

2. Klasyczne → Kratowe: Wejście: {a1, a2, ..., ap} = {ap1, ap2, ..., app}, Wyjście: {γ1, γ2, ..., γp},

Dla i = p, p−1, p−2, ..., 1: • γ i = −a ii


a ij + γ i a i ( i − j )
• dla j = 1, 2, ..., i−1: a ( i −1) j =
1 − γ i2

Dlaczego tak dużo uwagi poświęcamy współczynnikom ak i γk, i ich wzajemnym związkom?
Odpowiedź jest prosta − ponieważ jeśli we współczynnikach ak jest zawarta wiedza „tajemna”
dotycząca charakterystyki częstotliwościowej filtra, to ta sama wiedza jest także we współ-
czynnikach γk, czyli z ich pomocą także można filtrować. Pojawia się jednak pytanie − jaka jest
struktura obliczeniowa filtra, w której w sposób „jawny” występują współczynniki γk? Nie
może to być przecież struktura klasyczna z rysunku 20.1a, zawierająca współczynniki ak.
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 583

a) y(n)

1 a1 a2 a3 aM
x(n)
−1 −1 −1 −1
z z z z

e0 (n ) e1 (n) e2 (n) eM (n )
b) y(n)
−γ1 −γ2 −γM

−γ1 −γ2 −γM


x(n)
z−1 z−1 z−1
e~0 ( n ) e~1 ( n ) ~
e2 ( n ) e~M (n )

Rys. 20.1. Filtr FIR w postaci klasycznej (a) i kratowej (b)

I tak na scenę cyfrowego przetwarzania sygnałów po raz pierwszy wkraczają tzw. filtry
kratowe. Ich niezaprzeczalną zaletą jest mniejsza wrażliwość na kwantowanie współczynników
γk (mniejsza deformacja charakterystyki częstotliwościowej, spowodowana zaokrągleniem wag
filtra), co jest szczególnie istotne w przypadku implementacji filtrów na procesorach
stałoprzecinkowych, najczęściej pracujących w czasie rzeczywistym. Równocześnie filtry pra-
cujące w strukturze kratowej charakteryzuje swoistego rodzaju „ortogonalność”. Jeśli bowiem
filtr służy do modelowania parametrycznego sygnałów, to jego optymalny rząd zależy od wła-
ściwości lokalnych analizowanych danych, czyli może się zmieniać w czasie. W przypadku
zastosowania filtra o strukturze klasycznej, zmiana rzędu filtra prowadzi do konieczności wyli-
czenia wszystkich współczynników ak nowego filtra. W przypadku filtra kratowego natomiast
usuwa się współczynnik o najwyższym indeksie (uproszczenie modelu), albo wyznacza się tyl-
ko jeden, kolejny współczynnik, który dodaje do modelu kolejny, ortogonalny wymiar (rozbu-
dowanie modelu). Kratowe filtry adaptacyjnie o zmiennym rzędzie są więc często optymalnym
rozwiązaniem.
Zajmiemy się teraz wyprowadzeniem struktury filtra kratowego. Załóżmy, że pojedyncze
„ogniwo” filtra kratowego jest opisane następującym układem równań:

ei ( n ) = ei −1 ( n ) − γ i ~
ei −1 ( n − 1)
~ ~ (20.35)
ei ( n ) = − γ i ei −1 ( n ) + ei −1 ( n − 1)

i ma strukturę przedstawioną na rysunku 20.1b. Transformata Z obu równań ma postać:

 Ei ( z ) = Ei −1 ( z ) − γ i z −1 E~i −1 ( z )  Ei ( z )  1 − γ i z −1   E i − 1 ( z ) 
~ −1 ~
,  E~ ( z ) =   ~  (20.36)
 E i ( z ) = − γ i E i −1 ( z ) + z Ei −1 ( z )  i  − γ i z −1   E i −1 ( z )

Załóżmy, że połączymy kaskadowo kilka takich „ogniw” w sposób pokazany na rysunku


20.1b, dodatkowo zwierając wejścia pierwszego z nich i podając na nie sygnał wejściowy x(n)
( e0 (n ) = e~0 (n ) = x (n ) ). Zdefiniujmy transmitancje Z dwóch funkcji przejścia:
~
Ei ( z ) ~ E ( z)
Ai ( z ) = , Ai ( z ) = ~ i (20.37)
E0 ( z ) E0 ( z )
584 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

Wykażemy, że w takim przypadku jest prawdziwa następująca zależność:

 Ai ( z ) = Ai −1 ( z ) − γ i z −i Ai −1 ( z −1 ) (19.38a )
~ −i −1
 Ai ( z ) = z Ai ( z ) (19.38b)

Dowód przeprowadzimy metodą indukcji matematycznej, tzn. udowadniając prawdziwość


(20.38) dla i = 1 oraz wykazując, że ze spełnienia (20.38) dla dowolnego i − 1 wynika także
jego prawdziwość dla i.
Dla i = 1 z (20.36) mamy:

 E1 ( z ) = E0 ( z ) − γ1 z −1E~0 ( z )
~ −1 ~
(20.39)
 E1 ( z ) = − γ1 E0 ( z ) + z E0 ( z )
~
Przy założeniu E0 ( z ) = E0 ( z ) = X ( z ) i po podzieleniu obu stron powyższego równania przez
X(z) otrzymujemy (A0(z) = 1):

 A1 ( z ) = 1 − γ1 z −1
~ −1 −1 −1
(20.40)
 A1 ( z ) = − γ 1 + z = z A1 ( z )
~
czyli spełnienie (20.38). Dzieląc natomiast obie strony równania (20.36) przez E0(z) = E0 ( z ) =
= X(z), otrzymujemy następującą zależność dla i:
~
 Ai ( z ) = Ai −1 ( z ) − γ i z −1 Ai −1 ( z ) (20.41)
~ −1 ~
 Ai ( z ) = − γ i Ai −1 ( z ) + z Ai −1 ( z )

Ponieważ z prawdziwości (20.38b) dla i − 1 mamy:


~
Ai −1 ( z ) = z i −1 Ai −1 ( z ) (20.42)

więc po podstawieniu (20.42) do (20.41) otrzymujemy (20.38a) oraz odpowiednik (20.38b)


postaci:
~
Ai ( z ) = − γ i Ai −1 ( z ) + z −i Ai −1 ( z −1 ) (20.43)

Uwzględniając (20.42), możemy zapisać (20.43) jako (20.38b). Ponieważ

Ai = 1 + ai1 z −1 + ai 2 z −2 + ... + aii z −i (20.44)

konsekwencją równania (20.38a) jest następująca zależność, wiążąca współczynniki filtra rzę-
du „i” {ai1, ai2,..., aii} ze współczynnikami filtra rzędu „i − 1” {a(i−1)1, a(i−2)2,..., a(i−1)(i−1)}:

aii = − γ i (20.45a)
j = 1, 2, ..., i−1: a ij = a (i −1) j − γ i a (i −1)(i − j ) (20.45b)

Jak widać są to zależności identyczne jak te, które występują w punkcie 1 tabeli 20-2, czyli
układ z rysunku 20.1b jest filtrem kratowym typu FIR, gdyż realizuje jego równania.
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 585

Przykład
Załóżmy, że połączyliśmy kaskadowo trzy ogniwa w sposób pokazany na rysunku 20.1b, wów-
czas w dziedzinie transformacji Z otrzymujemy:

 E3 ( z )   1 −γ 3 z −1   1 −γ 2 z −1   1 −γ1 z −1   X (n) 
 E ( z )  =     =
 3   −γ 3 z −1   −γ 2 z −1   −γ1 z −1   X ( z ) 

 1 −γ 3 z −1   1 + γ1 γ 2 z −1 −γ1 z −1 − γ 2 z −2   X (n) 
=   =
 −γ 3 z −1   −γ 2 − γ1 z −1 γ1 γ 2 z −1 + z −2   X ( z ) 

 1 + γ1γ 2 z −1 + γ 3 z −1 ( γ 2 + γ1 z −1 ) ( −γ1 z −1 − γ 2 z −2 ) − γ 3 z −1 ( γ1γ 2 z −1 + z −2 )   X ( n ) 


=  
 −γ 3 (1 + γ1γ 2 z −1 ) − z −1 ( γ 2 + γ1 z −1 ) γ 3 ( γ1 z −1 + γ 2 z −2 ) + z −1 ( γ1γ 2 z −1 + z −2 )   X ( z ) 

Przy założeniu, że wyjściem z układu są sygnały ei(n), i = 1, 2, 3, transmitancja filtra po pierw-


szej, drugiej i trzeciej sekcji jest odpowiednio równa (suma elementów, leżących w górnym
wierszu najbardziej „prawej” macierzy):

H 1 ( z ) = 1 − γ1 z −1 = 1 + a11 z −1

H 2 ( z ) = 1 + γ 1 ( γ 2 − 1) z −1 − γ 2 z −2 = 1 + a 21 z −1 + a 22 z −2
H 3 ( z ) = 1 + [ γ1 ( γ 2 − 1) + γ 3γ 2 ] z −1 +  −γ 2 − γ 3 ( γ1 ( γ 2 − 1) )  z −2 − γ 3 z −3 = 1 + a31 z −1 + a32 z −2 + a33 z −3

Otrzymujemy więc nierekursywne filtry typu FIR odpowiednio pierwszego, drugiego i trzecie-
go rzędu, które mają odpowiednio współczynniki: {a11}, {a21, a22} i {a31, a32, a33}, związane
ze współczynnikami „odbicia” γ1, γ2 i γ3. Wynika stąd, że klasyczne filtry FIR można reali-
zować w strukturach kratowych, jak na rysunku 20.1b. Dodatkowo okazuje się, że obliczone
współczynniki aij transmitancji Hi(z), i = 1, 2, 3, można obliczyć na podstawie γ1, γ2, γ3, stosu-
jąc ogólne wzory wyprowadzone w metodzie Durbina-Levinsona i podane w tabeli 20-1:
a11 = − γ1
a 22 = − γ 2 , a 21 = a11 − γ 2 a11 = − γ1 + γ 2 γ1 = γ 1 ( γ 2 − 1)
a 33 = − γ 3 , a 32 = a 22 − γ 3a 21 = − γ 2 − γ 3 (γ 1 ( γ 2 − 1) ) , a 31 = a 21 − γ 3a 22 = γ 1 ( γ 2 − 1) + γ 3 γ 2

Oczywiście w tym miejscu należałoby się zapytać, czy nasza radość nie jest przedwczesna, po-
nieważ w metodzie LPC-10 stosuje się filtr rekursywny IIR o transmitancji H(z) = 1/A(z), a nie
filtr nierekursywny FIR o transmitancji H(z) = A(z), a my powyżej przedstawiliśmy strukturę
kratową dla filtra nierekursywnego. Jest to prawda, ale powyższe spostrzeżenia w prosty spo-
sób można uogólnić na przypadek kratowego filtra typu IIR.
Przypomnijmy, że równanie czasowe filtra typu IIR ma postać (przy założeniu a0 = 1):
N
y ( n) = x( n) − ∑ a N j y (n − j ) (20.46)
j =1

Po zamianie rolami wejścia i wyjścia (czyli wzajemnej wymianie miejscami x(n) i y(n) w po-
wyższym równaniu) otrzymujemy:
N
x (n) = y ( n) − ∑ a N j x(n − j ) (20.47)
j =1
586 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

czyli filtr FIR:


N
y ( n) = x( n) + ∑ a N j x(n − j ) (20.48)
j =1

Wynika stąd, że strukturę kratową typu IIR otrzymuje się zamieniając wejście z wyjściem kra-
towego filtra typu FIR z rysunku 20.1b, co prowadzi do struktury pokazanej na rysunku 20.2b.
Widzimy, że w tym przypadku poszczególne sekcje występują w niej w odwrotnej kolejności
oraz w każdej sekcji jeden ze współczynników γi nie jest zanegowany. Dlaczego? Ponieważ te-
raz interesuje nas zależność ei−1(n) od ei(n), więc równania pojedynczej sekcji (20.35) prze-
kształcamy do następującej postaci:

 ei −1 ( n ) = ei ( n ) + γ i ~
ei −1 ( n − 1)
~ ~ (20.49)
ei ( n ) = − γ i ei −1 ( n ) + ei −1 ( n − 1)

co w konsekwencji prowadzi do elementarnej sekcji struktury filtra typu IIR jak na rys. 20.2b.

a) x(n) y(n)

−aM −a3 −a2 −a1

z−1 z−1 z−1 z−1

e M (n ) e2 (n ) e1 (n ) e0 ( n )
b) x(n) y(n)
−γM −γ2 −γ1

γM γ2 γ1
z−1 z−1 z−1
e~M (n ) e~2 ( n ) e~1 (n ) e~0 (n)

Rys. 20.2. Filtr tylko IIR w postaci klasycznej (a) i kratowej (b)

Dla dociekliwych: pełne kratowe filtry typu IIR. Jak dotąd otwartym problemem pozostaje
projektowanie kratowych filtrów IIR, mających nie tylko same bieguny, ale także zera (czyli
nie tylko wielomian w mianowniku, ale również w liczniku transmitancji):
BM ( z )
H ( z) = (20.50)
AN ( z )

W tym przypadku jest korzystnie transformować do postaci kratowej postać bezpośrednią II ty-
pu przedstawioną na rysunku 20.3a (także na rysunku 13.6). Z rysunku tego wynikają nastę-
pujące zależności (N ≥ M):
N
w( n ) = − ∑ a k w( n − k ) + x (n ) (20.51)
k =1
M
y(n) = ∑ bk w(n − k ) (20.52)
k =0

Jak widać (20.51) jest równaniem klasycznego filtra typu IIR z samymi biegunami, więc
można go implementować „kratowo” w sposób już znany, wykorzystując wzory z tabeli 20-2.
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 587

a) x(n) w(n) b0 y(n) x(n) b0 y(n)

−a1 z−1 z−1 −a1 z−1


b1 b1
w(n-1)

−a2 z−1 z−1 −a2 z−1


b2 b2
w(n-2)

−a3 z−1 z−1 −a3 z−1


b3 b3
w(n-3)

eM (n ) e2 ( n ) e1 ( n ) e0 ( n)
b) x(n)
−γM −γ2 −γ1

γM γ2 ~ γ1 ~
e~M ( n) e~2 (n) e1 ( n ) e0 (n)
z−1 z−1 z−1

cM c2 c1 c0

y(n)

Rys. 20.3. Filtr pełny IIR w postaci klasycznej (a) i kratowej (b)

W równaniu (20.52) sygnał y(n) stanowi natomiast liniową kombinację opóźnionych wyjść
w(n) układu pierwszego (20.51). Naturalnym więc wyborem dla całego układu jest struktura
filtra kratowego, pokazana na rysunku 20.3b. Dla niej równanie (20.52) jest zastąpione rów-
naniem postaci:
M
y(n) = ∑ ck ~ek (n ) (20.53)
k =0

gdzie współczynniki ck należy wyznaczyć na podstawie znajomości {a1, a2, ..., aN, b1, b2, ...,
~
bM}. Transmitancja układu (20.52) jest równa (X(z) = EN(z), E0 ( z ) = E0 ( z ) ):
M
~
Y (z)
~ M
E ( z) M
~
E k ( z ) E0 ( z ) M
~ 1
∑ ck Ak ( z )
H ( z) = = ∑ ck k = ∑ ck ~ = ∑ c k Ak ( z ) = k =0 (20.54)
X ( z) k = 0 X ( z) k = 0 E0 ( z) N E ( z ) k =0 AN ( z) AN ( z )

Z równań (20.50) i (20.54) wynika, że:


M
~
BM ( z ) = ∑ ck Ak ( z ) (20.55)
k =0

Przypomnijmy, że (ak0 = 1):

Ak ( z ) = a k 0 + a k1 z −1 + a k 2 z −2 + ... + a kk z − k (20.56)

więc z (20.38b):
~
Ak ( z ) = z − k Ak ( z −1 ) = a k 0 z − k + a k1 z −( k −1) + a k 2 z −( k −2 ) + ... + a kk (20.57)

Uwzględniając (20.57) w (20.55), otrzymujemy (b0 = 1, ak0 = 1):


588 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

M M  k 
∑ bk z −k = ∑ ck  ∑ a ki z −(k −i )  (20.58)
k =0 k =0  i =0 
Z porównania współczynników takich samych potęg zmiennych z otrzymujemy:
M
bk = ∑ c j a j( j − k ) , k = 0, 1, 2, ..., M (20.59)
j =k

lub (aj0 = 1)
M
bk = ck + ∑ c j a j( j − k ) , k = 0, 1, 2, ..., M (20.60)
j = k +1
czyli
M
c k = bk − ∑ c j a j( j − k ) , k = M , M − 1, ..., 2, 1, 0 (20.61)
j = k +1

Zależność (20.61) służy nam do wyznaczenia poszukiwanych współczynników ck filtra krato-


wego.

Przykład 1
Załóżmy, że chcemy zrealizować w postaci kratowej dwa filtry postaci:
H 1 ( z ) = A( z ) , H 2 ( z ) = 1 / A( z )
gdzie:
( )( )(
A( z ) = 1 − 0,8 jz −1 1 + 0,8 jz −1 1 − 0,9 z −1 = )
= 1 − 0,9 z −1 + 0, 64 z −2 − 0,576 z −3 = a30 + a31 z −1 + a32 z −2 + a33 z −3

Skorzystamy ze wzorów punktu 2 w tabeli 20-2.


Krok 1 (i = 3):
a31 + γ 3 a32 a32 + γ 3a31
γ 3 = −a33 = 0, 576 ; a21 = = 0,79518245 ; a22 = = − 0,18197491
1− γ 32 1 − γ 32
Krok 2 (i = 2):
a21 + γ 2 a21
γ 2 = −a22 = − 0,18197491 ; a11 = = 0,67275747
1 − γ 22
Krok 3 (i = 1):
γ1 = −a11 = 0, 67275747
Na rysunku 20.4 pokazano wersje klasyczne oraz kratowe obu filtrów. Wartości współczyn-
ników odbicia γi zaokrąglono.

Przykład 2
Chcemy teraz znaleźć wersję kratową filtra o transmitancji:
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 589

a)
y(n)

1 −0,9 0,64 −0,576


x(n)
z−1 z−1 z−1

e0 (n ) e1 (n) e2 (n) e3 ( n )
y(n)
−0,6728 +0,182 −0,576
−0,6728 +0,182 −0,576
x(n)
−1 −1
z z z−1
~
e0 ( n ) ~
e1 (n ) ~
e2 ( n ) ~
e3 ( n )

b)
x(n) y(n)

0,576 −0,6 0,9


−1 −1
z z z−1

e3 ( n ) e2 ( n ) e1 (n ) e0 ( n )
x(n) y(n)
−0,576 0,182 −0,6728

0,576 −0,182 0,6728


−1 −1
z z z−1
~ ~ ~ ~
e0 (n)
e3 ( n ) e2 ( n ) e1 (n)

Rys. 20.4. Filtry klasyczne i kratowe typu FIR (a) i IIR (b) z przykładu 1

x(n) 1 y(n)

0,9 z−1 3

−0,64 z−1 3

0,576 z−1 1

e3 ( n ) e2 ( n ) e1 (n ) e0 ( n)
x(n)
−0,576 0,182 −0,6728
0.6728

0,576 −0,182 ~ 0,6728 e~ (n )


e~3 ( n ) e~2 (n) e (n) 1 0
−1 −1
z z z−1

1 3,9 5,4612 4,5404

y(n)

Rys. 20.5. Filtr klasyczny i kratowy typu pełny IIR z przykładu 2


590 Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane

1 + 3z −1 + 3z −2 + z −3 b0 + b1 z −1 + b2 z −2 + b3 z −3
H ( z) = −1 −2 −3
=
1 − 0, 9 z + 0, 64 z − 0, 576 z 1 + a31 z −1 + a32 z −2 + a33 z −3

Ponieważ wielomian mianownika transmitancji ma taką samą postać jak w przykładzie 1, do


wyznaczenia pozostają jedynie współczynniki ck ze wzoru (20.61).
Krok 1 (k = 3): c3 = b3 = 1
Krok 2 (k = 2): c2 = b2 − c3 a31 = 3,9
Krok 3 (k = 1): c1 = b1 − c2 a21 − c3 a32 = 5, 46121156
Krok 4 (k = 0): c0 = b0 − c1a11 − c2 a22 − c3 a33 = 4,54036872

Na rysunku 20.5 pokazano klasyczną i kratową strukturę rozważanego filtra.

20.3. Przykładowy program komputerowy


W tabeli 20-3 znajduje się program podsumowujący nasze rozważania, przeprowadzone w tym
rozdziale. Zadaniem Czytelnika jest przeanalizowanie przedstawionego kodu oraz zastosowa-
nie jego fragmentów w algorytmie kompresji sygnału mowy LPC-10, omawianym w rozdziale
poprzednim. W koderze LPC należy zastosować metodę Durbina do wyznaczenia wartości
współczynników odbicia γ1, γ2, ..., γp oraz w dekoderze zsyntezować mowę za pomocą filtra
kratowego, wykorzystującego te współczynniki. Dalej pozostawiamy otwarty problem kwanty-
zacji wartości parametrów modelu LPC.

Tab. 20-3. Program napisany w języku Matlab do: 1) przeliczania współczynników bm i ak transmitancji
H(z) klasycznego filtra cyfrowego na współczynniki cm i γk jego wersji kratowej, 2) filtracji sygnałów za
pomocą struktur kratowych

% Ćwiczenie: Filtry kratowe

clear all; clf;


% Podaj współczynniki transmitancji H(z)=B(z)/A(z) filtra (UWAGA! a(1)=1, M<=N)
b = [ 1 3 3 1 ]; a = [ 1 -0.9 0.64 -0.576 ];
M=length(b); N=length(a);
aa=a(2:N); P=N-1;
% Oblicz współczynniki „odbicia” g(i) filtra kratowego − tabela 20-2
ax(P,1:P)=aa(1:P);
for i=P:-1:1
g(i)=-ax(i,i);
for j=1:i-1
ax(i-1,j)=(ax(i,j)+g(i)*ax(i,i-j))/(1-g(i)^2);
end
end
g, pause
% Oblicz współczynniki c(i) filtra kratowego − równanie (20.61)
for k = M:-1:1
s=0; for(j=k+1:M) s = s + c(j)*ax(j-1,j-k); end
c(k) = b(k) - s;
end
c, pause
% Sygnał filtrowany
Nx=100; n=0:Nx-1; x=sin(2*pi*n/12+pi/4);
% Filtracja „kratowa”
% „tylko zera” (rys. 20.1 i 20.4a): H1(z)=A(z)=[ 1 -0.9 0.64 -0.576 ];
e1=zeros(1,P);
for n=1:Nx
Projekt LPC-10: kompresja sygnału mowy − metody zaawansowane 591

e0(1)=x(n);
for k=1:P
e0(k+1) = e0(k)-g(k)*e1(k);
e1n(k+1) = -g(k)*e0(k)+e1(k);
end
e1=[ x(n) e1n(2:P) ];
y1(n)=e0(P+1);
end
% Filtracja „kratowa”
% „tylko bieguny” (rys. 20.2 i 20.4b): H2(z)= 1 / [1 -0.9 0.64 -0.576 ]
% „zera i beguny” (rys. 20.3 i 20.5) : H3(z)= [ 1 3 3 1 ] / [1 -0.9 0.64 -0.576 ]
e1=zeros(1,N);
for n=1:Nx
e0(N)=x(n);
for k=N:-1:2
e0(k-1) = e0(k)+g(k-1)*e1(k-1);
e1(k) = -g(k-1)*e0(k-1)+e1(k-1);
end
e1=[ e0(1) e1(2:N) ];
y2(n)=e0(1);
y3(n)=sum(c.*e1(1:N));
end

% Rysunki
plot(y1); title('Sygnał wyjściowy - filtr: tylko zera'); pause
plot(y2); title('Sygnał wyjściowy - filtr: tylko bieguny'); pause
plot(y3); title('Sygnał wyjściowy - filtr: zera i bieguny'); pause

% Porównanie ze zwykła filtracją


y1z = filter(a,1,x);
y2z = filter(1,a,x);
y3z = filter(b,a,x);

subplot(311); plot(y1-y1z); title('Różnica z filter(a,1,x)');


subplot(312); plot(y2-y2z); title('Różnica z filter(1,a,x)');
subplot(313); plot(y3-y3z); title('Różnica z filter(b,a,x)'); pause
21
Projekt MPEG AUDIO:
psychoakustyczna kompresja dźwięku

Standard MP3 kompresji dźwięku, w tym muzyki, jest dla wielu Czytelników symbolem postę-
pu technologicznego jaki się dokonał w ostatnich latach w dziedzinie dystrybucji nagrań mu-
zycznych. Celem tego rozdziału jest przybliżenie współczesnych rozwiązań z zakresu analizy
i przetwarzania sygnałów, stosowanych w nowoczesnych kodekach (koderach i dekoderach)
dźwięku. Przedstawiono w nim algorytmy MP1, MP2 i MP3 standardu MPEG-1 audio na szer-
szym tle wszystkich standardów z rodziny MPEG (MPEG-1, 2, 4 i 7). Ponieważ kompresja
dźwięku polega na „oszukiwaniu uszu” odbiorcy, podstawową rolę odgrywa w niej model psy-
choakustyczny percepcji dźwięku przez człowieka, podpowiadający które częstotliwości moż-
na usunąć z nagrania bez pogorszenia subiektywnej oceny jakości odsłuchu. Z tego powodu
szczególną uwagę w tym rozdziale poświęcono modelowaniu zjawisk psychoakustycznych,
zachodzących w ludzkim narządzie słuchu i dotyczących efektu maskowania jednych często-
tliwości przez drugie, które jest powszechnie stosowane we współczesnych standardach kom-
presji sygnału audio. Ponieważ jest to modelowanie złożone, z konieczności jego opis jest nie-
pełny i skrótowy, ale za to − miejmy nadzieję − bardziej przystępny. W tym miejscu autor
chciałby przeprosić znawców tematu za wszystkie irytujące ich uproszczenia, poczynione
w opisie zjawisk psychoakustycznych, ale zagadnienie to znacznie wykracza poza główny nurt
jego zainteresowań.
Niniejszy rozdział stanowi bardzo ważne zastosowanie rozważań matematycznych przeprowa-
dzonych w rozdziale 18 i poświęconych zespołom filtrów. Stanowi on piękny przykład tego
czym tak naprawdę jest „cyfrowe przetwarzanie sygnałów”, mające początek w rozważaniach
matematycznych, w tym przypadku dotyczących teorii filtrów cyfrowych i psychoakustyki,
a koniec w misternej pajęczynie bardzo wielu linii kodu p r o g r a m u , napisanych dla dowolne-
go procesora (komputera) i przez niego wykonywanych.
Nie łudź się Czytelniku, że znajdziesz w tym rozdziale odpowiedzi na wszystkie nurtujące Cię
pytania. Na pewno tak się nie stanie! Współczesne standardy kompresji dźwięku to labirynt
wielu współpracujących ze sobą metod analizy i przetwarzania sygnałów oblanych pikantnym
sosem tysięcy wartości liczbowych umieszczonych w tabelach i związanych przede wszystkim
z właściwościami narządów słuchu oraz mechanizmami percepcji dźwięku przez człowieka.
Zgubić się w nim nie jest trudno. Obiecuję jednak, że lektura następnych kilkudziesięciu stron
pozwoli Ci zrozumieć istotę stosowanych rozwiązań, a dołączone programy komputerowe po-
mogą w sposób poglądowy wniknąć w typowy gąszcz szczegółów.
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 593

Ponieważ zagadnienia opisywane w tym rozdziale są ze sobą wzajemnie powiązane, autor miał
pewien dyskomfort, gdyż musiał dokonywać wyboru kolejności prezentacji materiału ze świa-
domością, że wybór ten zawsze będzie miał słabe strony. Ostatecznie postanowił zacząć od
krótkiego wprowadzenia do standardu MPEG audio, następnie przedstawić podstawy modelo-
wania psychoakustycznego oraz dwa konkretne modele psychoakustyczne, wykorzystywane
w standardzie, a zakończyć kompletnym opisem zespołów filtrów, stosowanych na poziomach
MP1, MP2 i MP3, ich powiązaniem z modelowaniem psychoakustycznym, oraz kompletnym
opisem algorytmu i programu kodera-dekodera dźwięku poziomu MP2.

21.1. Wprowadzenie do standardu MPEG audio


Grupa badawcza MPEG (Moving Pictures Expert Group) powstała w roku 1988 w wyniku po-
łączenia komisji technicznych dwóch organizacji międzynarodowych: ISO (International Or-
ganization for Standardization) oraz IEC (International Electrotechnical Commission). Jej za-
daniem było opracowanie standardu kompresji sekwencji obrazów ruchomych wraz z dźwię-
kiem, czyli filmów i programów telewizyjnych, wymagających prędkości transmisji mniejszej
niż 1,5 megabita na sekundę. Wynikiem jej pracy był standard MPEG-1 [ISO91], opublikowa-
ny w roku 1991, który był zoptymalizowany do kompresji filmów o rozdzielczości 288 × 352
pikseli (24 − 30 obrazów na sekundę) oraz związanego z nim sygnału audio. Sygnał dźwiękowy
mógł być kodowany z wykorzystaniem trzech różnych algorytmów, czyli na trzech różnych
poziomach/warstwach (layers), potocznie zwanych MP1, MP2 i MP3. Norma dopuszczała
kompresję sygnału monofonicznego lub stereofonicznego, spróbkowanego z częstotliwością
32, 44,1 lub 48 kiloherców, zapewniając przepływność bitową od 32 do 448 kilobitów na
sekundę.
W roku 1995 opublikowano normę MPEG-2 [ISO95] zoptymalizowaną dla przepływności
bitowej 4 megabitów na sekundę (satelitarna i kablowa telewizja cyfrowa dostosowana do roz-
dzielczości programów nadawanych w systemach NTSC, PAL, SECAM, typowo 648 (720) ×
× 486 pikseli), ale dopuszczająca także większe przepływności przekraczające 10 megabitów
na sekundę. W zakresie audio wprowadzono w niej możliwość kodowania sygnałów wieloka-
nałowych (pięciokanałowe kino tradycyjne i domowe) dla wysokich częstotliwości próbkowa-
nia, dodano także dodatkowe niższe częstotliwości próbkowania 16, 22,05 i 24 kHz oraz
mniejsze przepływności bitowe (8, 16 i 24 kilobity na sekundę) dla uprzednio opracowanych
kodeków MP1, MP2 i MP3. Kodowanie wielokanałowe jest w niej realizowane na dwa sposo-
by: w trybie rozszerzenia kodowania dwukanałowego z normy MPEG-1 oraz za pomocą no-
wego algorytmu AAC (Advanced Audio Coding).
Ponieważ norma MPEG-2 była w stanie sprostać wymaganiom telewizji wysokiej rozdziel-
czości HDTV (High Definition Television, np. 1280 × 720 pikseli i więcej) wycofano się z rea-
lizacji standardu MPEG-3, który miał być jej poświęcony.

Kolejnym krokiem rozwojowym była norma MPEG-4 [ISO98] wydana w roku 1998. W swo-
ich zamierzeniach miała ona dotyczyć wysokowydajnej kompresji dla zastosowań wymagają-
cych bardzo małych przepływności bitowych około 64 kilobity na sekundę, np. wideotelefonii.
W jej rezultacie powstała jednak grupa bardzo efektywnych, skalowalnych algorytmów kom-
presji i dekompresji filmów, zwanych profilami, która może być z powodzeniem stosowana
w szerokim zakresie przepływności bitowych od 10 kilobitów do ponad 1 megabita na sekun-
dę. Na ich podstawie powstały popularne dekodery i kodery komputerowe, np. DivX i XviD,
w których wykorzystano początkowo profil najprostszy (SP − Simple Profile), potem bardziej
zaawansowany (ASP − Advanced Simple Profile), a obecnie coraz częściej także model naj-
wyższy (AVC − Advanced Video Coding), który będzie w przyszłości wykorzystywany do za-
594 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

pisu płyt DVD drugiej generacji (HD DVD − High Density/Definition DVD) oraz do dystry-
bucji telewizji internetowej.
W warstwie audio standard MPEG-4 między innymi zawiera:
− parametryczny koder mowy dla bardzo małych przepływności bitowych (od 2 do 9,6 kilobita
na sekundę);
− koder mowy CELP (Code Excited Linear Prediction) dla przepływności bitowych z zakresu
od 4 do 24 kilobitów na sekundę, wykorzystujący metodę liniowej predykcji oraz pobudzenie
filtra traktu głosowego wektorem z książki kodowej;
− czasowo-częstotliwościowy (TF − Time-Frequency) koder sygnału audio o przepływności
bitowej od 8 do 64 kilobitów na sekundę, stanowiący rozwinięcie kodera AAC ze standardu
MPEG-2;
− narzędzia do automatycznej zamiany tekstu pisanego na mowę (TTS − Text to Speech), wy-
korzystywane w prezentacjach multimedialnych.
Kodowany sygnał dźwiękowy może być spróbkowany z częstotliwością 8; 11,025; 12; 16;
22,05; 24; 32; 44,1; 48; 64; 88,2 lub 96 kiloherców oraz skwantowany w amplitudzie za po-
mocą przetwornika A/C maksymalnie 24-bitowego. Kompresować można maksymalnie dźwięk
8-kanałowy (standard 7.1 − siedem głośników kierunkowych i jeden subwoofer). Obecnie są
prowadzone intensywne prace nad uzupełnieniem kodera TF standardu MPEG-4 o bezstratne
kodowanie sygnału błędu, tzn. różnicy pomiędzy sygnałem oryginalnym a zdekompresowa-
nym. W wyniku tego otrzymuje się w całości bezstratny koder sygnału audio dedykowany do
zastosowań studyjnych lub audiofilskich.

Uwieńczenie omawianej rodziny standardów stanowi norma MPEG-7 [ISO02], opublikowana


w roku 2002, która dotyczy problemu opisu zawartości zbiorów multimedialnych, w tym praw
autorskich.

21.2. Podstawy modelowania psychoakustycznego


Jak już było powiedziane, kompresja sygnału audio jest dokonywana z wykorzystaniem wie-
dzy, dotyczącej właściwości systemu słuchowego człowieka [Tade88, Jora98, Moor99,
Ozim02]. Podczas procesu kodowania jest przeprowadzana analiza zawartości sygnału dźwię-
kowego i są z niego usuwane składowe w najmniejszym stopniu wpływające na percepcję
dźwięku, w pierwszej kolejności te, których człowiek nie usłyszy z racji ograniczeń fizjolo-
gicznych narządów słuchu.
System słuchowy człowieka. W systemie słuchowym człowieka rolę podstawowego analizatora
dźwięku spełnia przewód ślimakowy wchodzący w skład ucha wewnętrznego [Tade88]. Drga-
nia akustyczne powietrza (fala podłużna) powodują drgania mechaniczne strzemiączka, znaj-
dującego się w okienku owalnym ślimaka, czyli na jego wejściu. Te z kolei są przenoszone
przez płyn wypełniający przewód ślimakowy i docierają do jego „ścianek”, czyli błony pod-
stawnej. Według teorii Bekesy’ego powstająca w cieczy fala hydrodynamiczna wytwarza w tej
błonie poprzeczne, mechaniczne fale wędrujące (travelling waves). Maksymalne wychylenie
błony występuje w różnym miejscu w zależności od częstotliwości dźwięku. Jest to związane
z faktem, że błona rozszerza się w kierunku od okienka owalnego (podstawa ślimaka) do jego
wierzchołka (koniec ślimaka), w związku z czym jej elastyczność rośnie a sztywność maleje
w tym kierunku. Powoduje to, że dla dźwięków o wysokiej częstotliwości maksymalne wy-
brzuszenie błony powstaje w okolicy okienka owalnego, a dla niskich − w okolicy wierzchołka.
Natomiast dźwięk złożony najsilniej pobudza miejsca odpowiadające jego składowym czę-
stotliwościom harmonicznym. Wychylająca się błona drażni w różnym miejscu rzęski komórek
słuchowych, a informacja o tym jest rejestrowana przez system nerwowy.
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 595

Silne pobudzenie dźwiękowe o określonej częstotliwości powoduje duże wychylenie błony


w odpowiednim miejscu przewodu ślimakowego, co sprawia że są drażnione także rzęski są-
siednich komórek słuchowych, związanych z innymi częstotliwościami. W związku z tym czło-
wiek nie jest ich w stanie usłyszeć, nawet jeśli wystąpią. Prowadzi to do tak zwanego efektu
„maskowania” częstotliwościowego, czyli akustycznego „zasłaniania” jednych częstotliwości
przez drugie: wygrywa ta o większej amplitudzie. Równocześnie silne pobudzenie dźwiękowe
wychyla błonę na dłuższy czas, co prowadzi do tzw. „maskowania” czasowego: przez pewien
czas przed (pre-maskowanie, do kilkunastu milisekund) i pewien czas po (post-maskowanie, do
około 200 milisekund) wystąpieniu silnego pobudzenia o jakiejś częstotliwości nie są słyszane
częstotliwości sąsiednie [Czyż98]. Pre-maskowanie wynika z faktu, że dźwięki silniejsze są
przetwarzane szybciej niż słabsze, post-maskowanie wynika zaś z długiego czasu relaksacji
neuronów.
Mechanizm maskowania częstotliwościowego i czasowego jest przedstawiony na rysunku 21.1.
Na rysunku 21.1a ton o częstotliwości fm i dużej amplitudzie, zaznaczony ciemniejszym kolo-
rem, „maskuje” część tonów sąsiednich o mniejszych amplitudach, oznaczonych kolorem bia-
łym. Natomiast części tonów, narysowanych kolorem jasnoszarym nie jest w stanie zamasko-
wać, ponieważ ich amplitudy przekraczają próg maskowania oznaczony dwoma liniami. Jak
widać na efekt maskowania w większym stopniu są narażone wyższe częstotliwości, ponieważ
linia progu opada zdecydowanie wolniej w ich kierunku. Silny ton maskuje także swoich „są-
siadów” częstotliwościowych, którzy wystąpili nieznacznie przed nim oraz po nim, co jest po-
kazane na rysunku 21.1b. W tym przypadku krzywa progu ma kształt eksponenty, opadającej
zdecydowanie szybciej z przodu (pre-maskowanie) niż z tyłu (post-maskowanie). Sąsiednie
tony o częstotliwościach f1 i f2 zostają „zamaskowane” przez ton maskera fm, natomiast tonowi
o częstotliwości f3 udaje się ocaleć, gdyż jego amplituda jest większa od progu maskowania
czasowego.
Umiejętność obliczania (modelowania) wychylenia błony w przewodzie ślimakowym pod
wpływem różnych pobudzeń jest kluczem do sukcesu kompresji dźwięku, ponieważ pozwala
przeznaczyć mniej bitów na te składowe częstotliwościowe (podpasmowe) sygnału, które są
słabiej słyszane przez człowieka.

a) ton maskujący
b) ton maskujący
ton zamaskowany ton zamaskowany
ton niezamaskowany ton niezamaskowany

fm f3

f2
f f1 t

fm tm

Rys. 21.1. Ilustracja efektu maskowania częstotliwościowego (a) i czasowego (b)

Absolutny próg słyszalności. Chociaż człowiek potrafi usłyszeć dźwięki różniące się ponad
milion razy intensywnością (różnica około 130 decybeli), to jednak poniżej pewnego poziomu
głośności zwanego absolutnym progiem słyszenia nie słyszy nic. Próg ten zależy od często-
tliwości i może być aproksymowany za pomocą poniższej zależności [Czyż98]:
−0,8
Tabs ( f kHz ) = 3,64 ⋅ f kHz ( )
− 6,5 ⋅ exp −0,6 ⋅ ( f kHz − 3,3) 2 + 0,001 ⋅ f kHz
4
(21.1)
596 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

w której fkHz oznacza częstotliwość wyrażoną w kilohercach. Kształt zależności (21.1) jest po-
kazany na rysunku 21.2. Krzywa absolutnego progu słyszalności jest przykładem tzw. izokon-
turu (izolinii) stałej głośności. Wyznacza się ją w ten sposób, że ustala się referencyjny poziom
ciśnienia dźwięku o częstotliwości 2 herców na granicy słyszalności przez człowieka, a na-
stępnie zmienia się częstotliwość i poziom ciśnienia akustycznego tak, aby cały czas być na
tym progu. Następnie dzieli się tak wyznaczony poziom ciśnienia przez poziom referencyjny
i wynik wyraża w decybelach. W akustyce poziom ciśnienia dźwięku definiuje się w sposób
względny jako 20log10(p/p0) decybeli, gdzie p0 jest ciśnieniem odniesienia równym 20 mikro-
paskali [Panu01].
Pasma krytyczne. Podstawową rolę w psychoakustyce odgrywa pojęcie tzw. podpasma kry-
tycznego [Czyż98], związanego z selektywnością częstotliwościową błony podstawnej. Pod-
pasmo krytyczne jest względną miarą częstotliwościowej rozdzielczości ludzkiego aparatu słu-
chowego i jest definiowane w różny sposób. P o p ierwsze, jako elementarne pasmo często-
tliwości o szerokości ∆f i środku f0, charakteryzujące się tym, że moc akustyczna zawartego
w nim szumu jest równa mocy akustycznej to nu p r o stego (sygnału sinusoidalnego) o czę-
stotliwości środkowej f0. Wyznaczanie pasm krytycznych przeprowadza się w ten sposób, że
generuje się sygnał będący sumą tonu prostego o zadanej głośności, czyli sinusoidy o często-
liwości f0, oraz maskującego go szumu o stałej, zadanej gęstości widmowej mocy w przedziale
( f0 − ∆f/2, f0 + ∆f/2). Systematycznie zwiększa się szerokość widma szumu (∆f ), czyli moc
szumu, aż do osiągnięcia wartości krytycznej, dla której badana osoba przestaje słyszeć ton
prosty. P o d ru g ie, jako graniczna szerokość ∆f pasma częstotliwościowego szumu białego
o mocy równomiernie rozłożonej w osi częstotliwości, dla której głośność szumu pozostaje
ciągle na tym samym poziomie. Po jego przekroczeniu szum jest odbierany jako głośniejszy.
Wykorzystując pojęcie pasma krytycznego wprowadzono percepcyjną jednostkę dźwięku,
czyli jeden bark odpowiadający szerokości pojedynczego pasma krytycznego, przy założeniu
podziału całego zakresu słyszalności na 25 podpasm. Zależność pomiędzy częstotliwością
f wyrażoną w kilohercach a numerem pasma krytycznego b, podanym w barkach i zmieniają-
cego się od 0 do 24, może być przybliżona następującym wzorem [Czyż98]:

b = 13 ⋅ arctg(0,76 ⋅ f kHz ) + 3,5 ⋅ arctg (( f kHz / 7,5)


2
) (21.2)

Zależność tę przedstawiono na rysunku 21.3. Do przeliczania częstotliwości z herców na barki


i odwrotnie można także użyć następujących, uproszczonych zależności:
b = 7 ⋅ arcsinh( f kHz / 0,65), f kHz = 0,65 ⋅ sinh(b / 7) (21.3)

Z kolei powiększanie się szerokości pasm krytycznych wraz z częstotliwością jest opisane rów-
naniem:

( )
0,69
∆f Hz = 25 + 75 ⋅ 1 + 1, 4 ⋅ ( f kHz )2 (21.4)

zilustrowanym na rysunku 21.4. W uproszczeniu przyjmuje się, że do częstotliwości 500 her-


ców występuje pięć pasm krytycznych o szerokości 100 Hz, a potem każde następne pasmo ma
szerokość w przybliżeniu o 20 procent większą od pasma go poprzedzającego. W tabeli 21-1
przedstawiono granice pasm krytycznych, wykorzystywane w standardach kompresji sygnału
audio. Ponieważ modelowanie zjawisk psychoakustycznych jest przeprowadzane w standar-
dach na podstawie pasm krytycznych, konieczne jest przeliczanie częstotliwości prążków wid-
ma, otrzymywanych za pomocą dyskretnej transformacji Fouriera, oraz wartości granicznych
pasm poszczególnych filtrów częstotliwościowych na odpowiadające im wartości w skali bark.
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 597

120 25
100
20
80

Tabs [dB]

b [bark]
60 15
40 10
20
5
0
-20 0
0 2 4 6 8 10 12 14 16 18 0 5 10 15 20 25
f [kHz] f [kHz]
Rys. 21.2. Absolutny próg słyszenia w funkcji Rys. 21.3. Zależność numeru pasma krytycz-
częstotliwości nego od częstotliwości

7 0
6
-50
5
∆f [kHz]

-100

Β [dB]
4
3 -150
2
-200
1
0 -250
0 5 10 15 20 25 -10 -5 0 5 10 15 20
f [kHz] ∆b [bark]
Rys. 21.4. Zależność szerokości pasm krytycz- Rys. 21.5. Rozkład energii odkształcenia wzdłuż
nych od częstotliwości błony podstawnej w wyniku pobudzenia tonowe-
go, czyli tzw. funkcja „rozszerzająca”

Tab. 21-1. Zestawienie dolnych częstotliwości granicznych kolejnych pasm krytycznych


Nr pasma f [Hz] Nr pasma f [Hz] Nr pasma f [Hz] Nr pasma f [Hz] Nr pasma f [Hz]
1 0 6 510 11 1270 16 2700 21 6400
2 100 7 630 12 1480 17 3150 22 7700
3 200 8 770 13 1720 18 3700 23 9500
4 300 9 920 14 2000 19 4400 24 12000
5 400 10 1080 15 2320 20 5300 25 15500

Modelowanie matematyczne efektu maskowania częstotliwościowego. Poniżej podano przy-


bliżone zależności matematyczne za [Czyż98], opisujące zjawisko maskowania częstotliwoś-
ciowego. Pod wpływem tonalnego (sinusoidalnego) sygnału akustycznego, który występuje
w k-tym paśmie krytycznym, błona podstawna ulega także odkształceniu w miejscach związa-
nych z pasmami sąsiednimi, oddalonymi o ∆b barków i tam także dochodzi do podrażnienia
rzęsek komórek słuchowych. Względny rozkład energii odkształcenia wzdłuż błony od poje-
dynczego tonu akustycznego, wyrażony w decybelach, jest opisywany następującym wzorem:

B ( ∆b ) = 15,81 + 7,5 ⋅ ( ∆b + 0, 474) − 17,5 ⋅ 1 + ( ∆b + 0,474)2 (21.5)


598 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

Funkcja B(∆b) jest nazywana funkcją „rozszerzającą” (spreading function) wpływ pobudzenia
akustycznego na sąsiednie pasma krytyczne. Jej kształt, przedstawiony na rysunku 21.5, jest
kluczem do zrozumienia efektu maskowania jednych częstotliwości przez drugie, który zacho-
dzi w ludzkim uchu. Wytłumaczono go na rysunku 21.6. Załóżmy, że pobudzenie akustyczne
E(k), oznaczone za pomocą „u”, wystąpiło w k-tym paśmie krytycznym. Powoduje ono reakcję
błony podstawnej w sąsiedztwie tego pasma (nachylenie S1(k) poniżej pasma numer k oraz
S2(k) powyżej niego). Próg maskowania T(k) innych częstotliwości przez pobudzenie E(k) leży
poniżej tego pobudzenia o O(k) decybeli. Z progiem T(k) są także związane zbocza S1(k)
i S2(k), które razem z nim definiują trójkąt, zaznaczony kolorem ciemnoszarym, określający na-
tężenia częstotliwości maskowane przez pobudzenie E(k). Dla przykładu na rysunku zaznaczo-
no: linią przerywaną jeden z tonów zamaskowanych (dodatkowo przekreślony) oraz linią ciąg-
łą jeden z tonów niezamaskowanych.

E, T [dB] pobudzenie E(k)

E(k)
zbocze zbocze
S1(k) O(k) S2(k) pobudzenie
błony
T(k) podstawowej
próg
maskowania

α1 α2 b [bark]

k−2 k−1 k k+1 k+2


k+1 k+3
k+1 k+4 k+5
k+1 k+6

Rys. 21.6. Graficzna ilustracja efektu maskowania częstotliwościowego [Czyż98]

W skali barków kształt wychylenia błony podstawnej oraz kształt progów maskowania jest opi-
sany liniami prostymi, mającymi tangensy kątów nachylenia równe tg(α1) = S1(k) i tg(α2) =
= S2(k). Nachylenia S1(k) i S2(k) zboczy są zdefiniowane równaniem:

 S1 (k ) = 31
 (21.6)
 S2 (k ) = 22 + min ( 0, 23 / f kHz ,10 ) − 0, 2 EdB (k )

w którym EdB(k) jest poziomem głośności pobudzenia (decybele), a fkHz oznacza jego częstotli-
wość (kiloherce). Z kolei przesunięcie (offset) pomiędzy poziomem pobudzenia a progiem
maskowania jest równe:
O (k ) = α(k ) ⋅ (14,5 + k ) + (1 − α( k )) ⋅β(k ) (21.7)

gdzie α(k) i β(k) oznaczają, odpowiednio, indeks tonalności oraz indeks maskowania w k-tym
paśmie krytycznym (często przyjmuje się β(k) = 5,5):

α( k ) = min {SFM ( k ) / SFM max , 1}, SFM max = − 60 dB (21.8)


 ( f )2 
β(k ) = 2 + 2, 05 ⋅ arctg ( 0, 25 f kHz ) + 0, 75 ⋅ arctg  kHz  (21.9)
 2,56 
 
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 599

Występująca w (21.8) miara płaskości widmowej SFM (Spectral Flatness Measure) w k-tym
paśmie krytycznym jest zdefiniowana jako:
  Nk 1/ N
 k 
  ∏ | X k (l ) | 2  
 l =1 
SFM ( k ) = 10log10   Nk

 (21.10)
 1 
∑ | X k (l ) | 2
 N k l =1 
 
gdzie wartości Xk(l ), l = 1...Nk, oznaczają prążki dyskretnej transformaty Fouriera iloczynu
sygnału pobudzenia i funkcji okna, np. Hanninga, leżące w k-tym paśmie krytycznym. Jest ona
równa wyrażonej w decybelach wartości ilorazu średniej geometrycznej i arytmetycznej próbek
estymaty gęstości widmowej mocy sygnału pobudzenia, leżących w k-tym paśmie krytycznym.
Miara płaskości widmowej pozwala nam zidentyfikować naturę sygnału maskującego i dobrać
w zależności od tego odpowiednią wielkość przesunięcia O(k) (21.7). Jeśli widmo jest płaskie,
to znaczy, że sygnał ma charakter szumowy: wówczas offset (21.7) jest mały, gdyż szum bar-
dzo łatwo maskuje składowe tonowe. Odwrotnie, jeśli widmo jest prążkowe, to sygnał jest su-
mą niezmieniających się tonów (sinusoid). Ponieważ tony muszą być o wiele głośniejsze, aby
zamaskować szum, offset (21.7) w takim przypadku jest duży. Dodatkowo, jeśli wiemy, że syg-
nał jest szybkozmiennym szumem, to powinniśmy przetwarzać tylko jego krótkie fragmenty,
w przeciwnym zaś przypadku możemy jednorazowo analizować jego dłuższe odcinki. Z tego
powodu miara płaskości widmowej służy także do wyznaczania entropii percepcyjnej, wyko-
rzystywanej do przełączania odpowiedzi impulsowych w drugim zespole filtrów poziomu MP3
standardu MPEG-1.
Przykładowy program komputerowy. Na podstawie zależności przedstawionych powyżej zos-
tał napisany prosty program komputerowy, przestawiony w tabeli 21-2, którego celem jest de-
monstracja opisanych powyżej zależności i zjawisk psychoakustycznych. Należy podkreślić, że
stanowi on duże uproszczenie i ma przede wszystkim charakter poglądowy, tzn. bardziej jakoś-
ciowy niż ilościowy. W programie jest analizowany sygnał składający się z dwóch tonów pro-
stych o częstotliwościach równych 2500 i 5800 herców oraz amplitudach jednostkowych. Na
rysunku 21.7 są przedstawione uzyskane wyniki analizy: po lewej stronie zależności często-
tliwościowe wyrażone w hercach, a po prawej − w barkach. Na rysunku 21.7a jest pokazana
estymata gęstości widmowej mocy analizowanego sygnału. Na rysunku 21.7b liniami przery-
wanymi są zaprezentowane oddzielne krzywe pobudzenia błony podstawnej Ek, związane
z oddzielnymi tonami, natomiast liniami ciągłymi − wynikające z nich progi maskowania.
Z kolei na rysunku 21.7c pokazano sumaryczny próg maskowania, będący sumą wszystkich
progów maskowania od pobudzeń oraz absolutnego progu słyszenia (21.1), przedstawionego
na rysunku 21.2. Różnica krzywych z rysunków a i c jest równa stosunkowi sygnału do progu
maskowania SMR (Signal to Mask Ratio). Informuje nas ona o percepcyjnej istotności akus-
tycznej poszczególnych składników częstotliwościowych analizowanego sygnału.
Dalsze szczegóły modelowania psychoakustycznego przedstawiono w następnym podrozdzia-
le, poświęconym opisowi modeli psychoakustycznych stosowanych w standardzie MPEG-1/2
audio.
600 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

a) 100 100
75

10log(|X(f)|2) [dB]
10log(|X(f)|2) [dB]
50 50
25
0 0
-25
-50 -50
0 5 10 15 20 25 0 5 10 15 20 25
f [kHz] f [bark]

b) 100 100
75
50

Ek, Tk [dB]
Ek, Tk [dB]

50
25
0 0
-25
-50 -50
0 5 10 15 20 25 0 5 10 15 20 25
f [kHz] f [bark]

c) 100 100
75
50 50
Tsum [dB]
Tsum [dB]

25
0 0
-25
-50 -50
0 5 10 15 20 25 0 5 10 15 20 25
f [kHz] f [bark]

d) 50 50

25 25
SMR [dB]
SMR [dB]

0 0

-25 -25

-50 -50
0 5 10 15 20 25 0 5 10 15 20 25
f [kHz] f [bark]

Rys. 21.7. Uproszczony przykład analizy sygnałów i modelowania psychoakustycznego: a) estymata funkcji
gęstości widmowej mocy analizowanego sygnału, składającego się z dwóch tonów prostych o częstotliwo-
ściach 2,5 oraz 5,8 kHz, b) oddzielne krzywe pobudzenia błony podstawnej Ek (linie przerywane), związane
z poszczególnymi tonami, oraz wynikające z nich progi maskowania (linie ciągłe), c) suma wszystkich pro-
gów maskowania od pobudzeń oraz absolutnego progu słyszenia (21.1), d) różnica krzywych z rysunków
a) i c)
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 601

Tab. 21-2. Program w języku Matlab do demonstracja zależności i zjawisk psychoakustycznych

% Ćwiczenie: Podstawy modelowania psychoakustycznego ludzkiego narządu słuchu

clear all; close all;

% Parametry analizy
fpr = 44100; % częstotliwość próbkowania
Nfft = 1024; % liczba próbek FFT
Nfft2 = 513; % liczba próbek uwzględnianych

% Inicjalizacja parametrów próbkowania w dziedzinie częstotliwości


df = fpr/Nfft; fmax = fpr/2; f = 0:df:fmax; fkHz = f/1000; Nf = length(f);

% Granice pasm krytycznych


fkryt = [ 0 100 200 300 400 510 630 770 920 1080 1270 1480 1720 ...
2000 2320 2700 3150 3700 4400 5300 6400 7700 9500 12000 15500 25000 30000 ];

% Przeliczenie częstotliwości ze skali kHz na bark i odwrotnie na podstawie (21.2) i (21.3)


b1 = 13*atan(0.76*fkHz) + 3.5*atan((fkHz/7.5).^2); b = b1; Nb = length(b);
b2 = 7*asinh(1000*fkHz/650);
plot(fkHz,b1,'r', fkHz,b2,'b'); title('kHz -> bark'); xlabel('f [kHz]'); pause

fb2 = 650*sinh( b2/7 )/1000;


plot(b2, fb2); title('bark -> kHz'); xlabel('b [bark]'); ylabel('f [kHz]'); pause

% Szerokość pasma krytycznego obliczona z (21.4)


dfkryt = 25 + 75*(1+1.4*fkHz.^2).^0.69; dfkryt = dfkryt/1000;
plot(fkHz, dfkryt); title('Szerokość pasma krytycznego');
xlabel('f [kHz]'); ylabel('df [kHz]'); grid; pause

% Absolutny próg słyszenia obliczony z (21.1)


progABS = 3.64*fkHz.^(-0.8) - 6.5*exp(-0.6*(fkHz-3.3).^2) + 10^(-3)*fkHz.^4; % w dB
indx = find( (f>0) & (f<18000) );
plot( fkHz(indx), progABS(indx) ); title('Próg słyszenia'); xlabel('f [kHz]'); pause

% Funkcja rozkładu pobudzenia wzdłuż błony podstawnej obliczona z (21.5)


dbark = -10 : 0.1 : 20;
sprdf = 15.81 + 7.5*(dbark+0.474) - 17.5*sqrt(1+(dbark+0.474).^2);
plot(dbark, sprdf); title('Funkcja rozkładu pobudzenia błony'); xlabel('db [Bark]');
grid; pause

% =============================
% Przykład analizy rzeczywistego sygnału
% =============================

% Parametry
fm = [ 2500 5800]; % częstotliwości sinusoidalnych sygnałów pobudzających w [Hz]
am = [ 1 1]; % ich amplitudy
Em = 2^15*am; % amplitudy po przeskalowaniu
EmdB = 20*log10( Em ); % amplitudy w decybelach, używane w (21.6)
Nmask = length(fm); % liczba sygnałów pobudzających
fmkHz = fm/1000; % ich częstotliwości wyrażone w kilohercach
bm = 13*atan(0.76*fmkHz) + 3.5*atan((fmkHz/7.5).^2); % przeliczenie kHz na skalę Bark

% Generacja sygnału
N = Nfft; dt=1/fpr; t=(0:N-1)*dt;
x = zeros(1,N);
for k = 1 : Nmask
x = x + am(k)*sin(2*pi*fm(k)*t);
end
plot(x); title('sygnał x(n)'); grid; pause

% Okno
h = sqrt(8/3) * hanning(N,'periodic'); h = h';
602 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

% Estymata gęstości widmowej mocy sygnału


X = fft(x.*h)/N; X = X(1:N/2+1);
X = X.*conj(X);
XdB = 10*log10(X);
XdB = XdB + (96-max(XdB)); % normalizacja do poziomu 96 dB
plot(fkHz,XdB); title('widmo |X(k)|^2'); grid; pause

% Wyznacz miarę płaskości widmowej SFM w podpasmach krytycznych z pobudzeniami


bnr = ceil(bm); % numer podpasma krytycznego, w którym wystąpiło pobudzenie
fkmax = fkryt(bnr+1); fkmin = fkryt(bnr);
for k = 1 : Nmask
nk = find( (fkmin(1,k)< f) & (f<=fkmax(1,k)) ); Nk = length( nk );
SFM(k) = max( 10*log10( prod(X(nk))^(1/Nk) / ((1/Nk)*sum(X(nk)))), -300 )
end

% Indeks tonalności alfa z (21.8)


SFMmax = -60; alfa = min( SFM/SFMmax, 1)

% Indeks maskowania z (21.9)


beta = 2 + 2.05*atan(0.25*fmkHz) + 0.75*atan( fmkHz.^2/2.56)

% Przesunięcie pomiędzy poziomem pobudzenia a progiem maskowania z (21.7)


% Offs = alfa*(14.5+bnr) + (1-alfa)*5.5 % przybliżenie
Offs = alfa.*(14.5+bnr) + (1-alfa).*beta % dokładniej

% =====================================
% Krzywe pobudzenia i maskowania w skali hercowej
% =====================================
E = zeros(Nmask,Nf); EdB = zeros(Nmask,Nf); % macierz wektorów reakcji błony
Esum = zeros(1,Nf); Tsum = zeros(1,Nf); % sumaryczne: pobudzenie i próg maskowania

for k = 1 : Nmask % kolejne sygnały pobudzające


S1(k) = 31; % zbocze przednie nachylenia błony [dB/bark] (21.6)
S2(k) = 22 + min(0.23/fmkHz(k),10) - 0.2*EmdB(k); % zbocze tylne z (21.6)
ib = 1; % pomocniczy licznik
for ff = 0 : df : fmax % skala hercowa
ffk = ff/1000; % przelicz Hz na kHz
bb = 13*atan(0.76*ffk) + 3.5*atan((ffk/7.5).^2); % przelicz kHz na barki (21.2)
if( bb <= bm(k) ) EdB(k,ib) = EmdB(k) - S1(k)*(bm(k)-bb);
else EdB(k,ib) = EmdB(k) - S2(k)*(bb-bm(k));
end
ib = ib+1;
end
E(k,:) = 10.^(EdB(k,:)/20); % dB na skalę liniową
Esum(1:Nf) = Esum(1:Nf) + E(k,:).^2; % sumaryczne pobudzenie
TdB(k,:) = EdB(k,:)-Offs(k)*ones(1,Nf); % k-ty próg
Tsum(1:Nf) = Tsum(1:Nf) + ( E(k,:)/10^(Offs(k)/20) ).^2; % sumaryczny próg

plot(fkHz, EdB(k,:)); title('pobudzenie Ek [dB]'); xlabel('f [Hz]'); grid; pause


plot(fkHz, E(k,:)); title('pobudzenie Ek '); xlabel('f [Hz]'); grid; pause
end

TsumALL = sqrt(Tsum + (10.^(progABS/20)).^2); Tsum = sqrt(Tsum); Esum = sqrt( Esum );


plot(f, Esum, 'r', f, Tsum, 'b', f, TsumALL,'k');
title('Suma: Pobudzenie (RED) Próg (BLUE) PrógABS (BLACK)'); xlabel('f [Hz]'); pause

TsumALLdB = 20*log10(TsumALL); TsumdB = 20*log10(Tsum); EsumdB = 20*log10(Esum);


plot(f, EsumdB, 'r', f, TsumdB, 'b', f, TsumALLdB,'k');
title('Pobudzenie (RED) Prog (BLUE) ProgABS (BLACK)'); xlabel('f [Hz]'); grid; pause

% Obliczenie SMR
SMR = XdB - TsumALLdB;
plot(f, SMR); title('Funkcja SMR [dB])'); xlabel('f [Hz]'); grid; pause
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 603

21.3. Modele psychoakustyczne standardu MPEG audio


Jak już było powiedziane, z budowy ludzkiego narządu słuchu wynika zjawisko maskowania
(percepcyjnego „zasłaniania”) jednych częstotliwości przez drugie. W standardzie MPEG-1
audio są stosowane dwa modele numeryczne uwzględniające to zjawisko. Pierwszy z nich,
zazwyczaj stosowany dla poziomów kompresji MP1 i MP2, odwzorowuje w pełniejszy sposób
fizyczne mechanizmy maskowania, ale jest bardziej czasochłonny obliczeniowo. Z kolei model
drugi jest dedykowany dla poziomu kompresji MP3, ponieważ dodatkowo umożliwia przełą-
czanie drugiego zespołu filtrów stosowanego w algorytmie MP3. W tym podrozdziale skróto-
wo przedstawiono oba modele oraz zaprezentowano program napisany w języku Matlab im-
plementujący model drugi. Może być on wykorzystywany podczas kompresji sygnału audio na
dowolnym poziomie MP1, MP2 lub MP3.

21.3.1. Model psychoakustyczny I

Algorytm maskowania częstotliwościowego, który zaimplementowano w pierwszym modelu


akustycznym, składa się z następujących etapów obliczeniowych [ISO91, Skar98].
1) Obliczenie transformaty FFT X(l ) fragmentu analizowanego sygnału dźwiękowego x(n)
o długości 512 próbek dla warstwy MP1 oraz 1024 próbek dla warstw MP2 i MP3 z wyko-
rzystaniem okna Hanninga. Podzielenie pierwszej połowy próbek transformaty na 32 bloki,
z których każdy odpowiada jednemu z 32 filtrów analizy (dekompozycji) podpasmowej:
Xn(m), n = 1...32, m = 1...8 (lub 16). Podstawy 32-kanałowej dekompozycji podpasmowej,
stosowanej w standardzie MPEG-1, przedstawiono w rozdziale 18 (szczegóły w p. 18.6). Jej
równania końcowe są powtórzone w podrozdziale 21.4.
2) Wyznaczenie poziomu ciśnienia dźwięku w każdym z n = 1...32 podpasm jako maksymal-
nej wartości ze zbioru, składającego się z kwadratów prążków Sn(m) = X 2n(m), m = 1...8
(lub 16), uzupełnionych kwadratem współczynnika skalującego, odpowiadającego danemu
podpasmu (wszystkie wielkości są wyrażone w decybelach).
3) Przeczytanie dla każdego podpasma z tablicy (dla zadanej częstotliwości próbkowania) war-
tości absolutnego progu słyszalności (21.1). Odjęcie od nich liczby 12 (dB), jeśli wybrano
przepływność bitową większą lub równą 96 kilobitów na sekundę.
4) Znalezienie składowych tonowych (w przybliżeniu sinusoidalnych) oraz nietonowych
(w przybliżeniu szumowych). Składowa tonowa charakteryzuje się maksimum, w lokalnym
otoczeniu którego mogą wystąpić co najwyżej dwa inne maksima. Otoczenie to jest mniej-
sze dla niższych częstotliwości. Po wyznaczeniu i usunięciu z widma składowych tonowych,
lokalizuje się na jego podstawie występowanie składowych nietonowych z wykorzystaniem
tablic.
5) Usunięcie niesłyszanych składowych tonowych i nietonowych, których ciśnienie dźwięku
leży poniżej a b so lutne go p r o gu słyszenia. Usunięcie nieisto tnych składowych to-
nowych, leżących w ściśle zdefiniowanym, bliskim sąsiedztwie innych składowych tono-
wych, które są od nich silniejsze.
6) Obliczenie masek tonowych (pochodzących od składowych tonowych) oraz nietonowych
(związanych ze składowymi nietonowymi) na podstawie wyznaczonej mocy każdej ze skła-
dowych oraz tablic. Uwzględnia się w tym miejscu efekt maskowania wzajemnego często-
604 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

tliwości, wynikający z faktu łącznej reakcji błony podstawnej w przewodzie ślimakowym na


wiele pobudzeń.
7) Wyznaczenie w decybelach globalnego progu maskowania jako sumy progu absolutnego
słyszenia (z punktu 3) oraz wszystkich masek tonowych i nietonowych (z punktu 6).
8) Wyznaczenie w decybelach minimum globalnego progu maskowania w każdym z 32 pod-
pasm częstotliwościowych.
9) Obliczenie funkcji SMR (Signal to Mask Ratio) jako różnicy wektorów z punktów 2 i 8. Na
jej podstawie można ustalić o ile poziom ciśnienia dźwięku jest wyższy od minimum glo-
balnego progu maskowania w każdym z 32 podpasm częstotliwościowych.
Na rysunkach 21.8 i 21.9 przedstawiono przykładowe wyniki, uzyskane z kolejnych etapów
obliczeniowych algorytmu dla jednej 512-próbkowej ramki dwóch sygnałów. Do ich otrzyma-
nia wykorzystano program napisany w języku Matlab [Peti03], udostępniany do celów dydak-
tycznych także na stronie http://www.mpeg.org/MPEG/audio.html.
Jako pierwszy analizowano sygnał będący sumą dwóch tonów prostych o częstotliwościach 2,5
i 5,8 kHz, ten sam który był rozpatrywany na rysunku 21.7. Charakterystyki otrzymane w tym
przypadku są zaprezentowane na rysunku 21.8 i szczegółowo opisane w jego podpisie. Wyzna-
czona funkcja SMR, przedstawiona na rysunku 21.8c, jest wykorzystywana podczas kodowa-
nia sygnału w procedurze adaptacyjnej alokacji bitów dla poszczególnych podpasm. Dzięki jej
znajomości w pierwszej kolejności bity są przydzielane dla tych podpasm częstotliwościo-
wych, które są istotne dla dobrej subiektywnej oceny jakości dźwięku po dekompresji.
Drugim analizowanym sygnałem było nagranie kwartetu smyczkowego. W tym przypadku
dźwięk ma o wiele bogatszą strukturę, widoczną na rysunku 21.9a. Znalezione składowe tono-
we są na nim zaznaczone trójkątami, składowe nietonowe zaś − kwadratami. Kolorem białym
są oznaczone składowe, które zostały uznane za nieistotne w wyniku analizy przeprowadzonej
w kroku piątym: leżą one albo poniżej progu słyszenia absolutnego (jeden biały kwadrat), albo
za blisko innych, silniejszych składowych (jeden biały trójkąt). W wyniku zsumowania abso-
lutnego progu słyszenia oraz indywidualnych progów maskowania wszystkich składowych to-
nowych i nietonowych, zaznaczonych przykładowymi liniami przerywanymi na rysunku 21.9a,
otrzymuje się bezwzględny próg maskowania, zaznaczony linią ciągłą z czarnymi kwadratami
na rysunku 21.9b. Po jego odjęciu od całkowitego poziomu dźwięku (białe kółka), pokazanym
na rysunku 21.9c, otrzymuje się jak poprzednio funkcję SMR (czarne kółka), wykorzystywaną
do alokacji bitów.

21.3.2. Model psychoakustyczny II

Drugi model psychoakustyczny standardu MPEG charakteryzuje się mniejszą złożonością obli-
czeniową oraz jest bardziej elastyczny w użyciu, gdyż w prostszy sposób można go dosto-
sować do różnych poziomów kodowania. W inny, uproszczony sposób uwzględnia się w nim
efekt maskowania częstotliwościowego poprzez modelowanie s u m a r y c z n e g o wychylenia
błony podstawnej przewodu ślimakowego w różnych miejscach. Przyjmuje się, że sumaryczne
pobudzenie E(k) błony podstawnej w dowolnym, k-tym paśmie krytycznym zależy od mocy
wszystkich sygnałów dźwiękowych S(l) = X 2(l ), które wystąpiły w dowolnym z podpasm
(l = 1, 2, 3, ..., K ). Sygnały te wpływają na pobudzenie w k-tym podpaśmie poprzez funkcję
„rozszerzającą” B(∆b), zdefiniowaną wzorem (21.5) i przedstawioną na rysunku 21.5. Przy
założeniu liniowości układu obowiązuje zasada superpozycji, tzn. wypadkowe pobudzenie E(k)
błony w k-tym podpaśmie krytycznym jest sumą pojedynczych pobudzeń El (k), pochodzących
od poszczególnych sygnałów dźwiękowych:
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 605

a) 100

80

60

[dB]
40

20

-20
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

b) 100

80

60
[dB]

40

20

-20
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

c) 100
80
60
40
[dB]

20
0
-20
-40
-60
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

Rys. 21.8. Przykład zastosowania modelu psychoakustycznego numer I do analizy sygnału, składającego się
z dwóch składowych sinusoidalnych o częstotliwościach 2,5 i 5,8 kHz i jednostkowych amplitudach. Rysu-
nek a): funkcja gęstości widmowej mocy sygnału (linia ciągła), progi maskowania związane z jego dwiema
składowymi (linie przerywane; skokowe zmiany ich wartości wynikają z uproszczeń obliczeniowych, które
nie prowadzą do błędnych wyników końcowych analizy) oraz bezwzględny próg słyszenia (linia kreska-kro-
pka). Rysunek b): całkowity próg maskowania (linia ciągła), będący sumą progów składowych z poprzednie-
go rysunku (linie przerywane i linia kropka-kreska), oraz minimalny próg maskowania (linia ciągła z czarymi
kwadratami „„” ). Rysunek c): całkowity poziom dźwięku w 32 kanałach częstotliwościowych (białe kółka
„|”), minimalny próg maskowania (czarne kwadraty „„” ) w tych kanałach oraz ich różnica, czyli stosunek
sygnału do minimalnego progu maskowania SMR (czarne kółka „z”)
606 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

a) 100

80

60

[dB]
40

20

-20
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

b) 100

80

60
[dB]

40

20

-20
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

c) 100

80

60

40
[dB]

20

-20

-40
0 2 4 6 8 10 12 14 16 18 20 22
f [kHz]

Rys. 21.9. Przykład zastosowania modelu psychoakustycznego numer I do analizy nagrania kwartetu smy-
czkowego. Oznaczenia na rysunku 21.9a: „T”− składowa tonowa, „V” − składowa tonowa uznana za nie-
istotną, „„” − składowa nietonowa, „ ” − składowa nietonowa uznana za nieistotną. Pozostałe oznaczenia
jak na rysunku 21.8. W celu zwiększenia czytelności rysunków a) i b) zaznaczono na nich linią przerywaną
progi maskowania związane tylko z d wiema składowymi sygnału (podobnie jak poprzednio skokowe
zmiany ich wartości wynikają z uproszczeń obliczeniowych, które nie prowadzą do błędnych wyników koń-
cowych analizy)
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 607

K K
E ( k ) = ∑ El (k ) = ∑ B( k − l ) S ( l ) (21.11)
l =1 l =1

Wartość funkcji „rozszerzającej” zależy tylko od różnicy indeksów k oraz l: B(∆b) = B(k − l).
Rówanie (21.11) jest równaniem splotu. Zapisując go dla wszystkich pasm krytycznych otrzy-
mujemy następujące równanie macierzowe:

 E (1)   B(0) B( −1) " B( K − 1)   S (1) 


 E (2)   B (1) B(0) " B( K − 2)   S (2) 
 = ⋅ , (21.12)
 #   # # % #   # 
     
 E ( K )   B ( K − 1) B ( J − 2) " B(0)   S ( K ) 

Algorytm generacji wartości elementów macierzy B(k, l) funkcji „rozszerzającej” jest podany
w normie MPEG-1 audio [ISO91].

W tym miejscu należy zwrócić uwagę na jeden bardzo istotny szczegół, łatwo umykający uwa-
dze podczas pobieżnej lektury tekstu ww. normy. Widmo analizowanego sygnału jest w niej
dzielone na podpasma krytyczne, a potem dodatkowo na tercje (3 części zawierające po 1/3
pasma) jeśli jest to możliwe. W związku z powyższym elementarne, analizowane pasma czę-
stotliwościowe składają się w normie albo z jednego prążka widma FFT albo z większej liczby
prążków, przypadających na kolejne tercje (1/3 całości) wszystkich pasm krytycznych, zdefi-
niowanych w tabeli 21-1. Wygrywa wartość większa. Wartości graniczne tych pasm można ob-
liczyć albo odczytać z tabel, znajdujących się w normie. W tabelach dla każdej częstotliwości
próbkowania są podane wartości następujących parametrów dla każdego podpasma kry-
tycznego (indeks podpasma b − od bark):
b numer pasma częstotliwościowego (tercjowego, czyli BARK-1/3),
ωlowb i ωhighb numery prążków FFT, odpowiadające najniższej i najwyższej częstotliwości,
leżącej w podpaśmie b,
bvalb częstotliwość środkowa każdego pasma, wyrażona w skali bark,
minvalb dolny limit odstępu sygnału od szumu (SNR) w każdym paśmie, decydujący
o zjawisku „odmaskowywania” w przypadku sygnałów stereo,
TMNb stałe maskowania wąskopasmowego szumu przez ton (Tone-is-Masking
Noise) w każdym paśmie.
Dla każdej częstotliwości próbkowania dokonywany jest inny podział na „robocze” podpasma
częstotliwościowe. Maksymalna wartość indeksu b jest dla nich różna.

Przypomnijmy także (patrz rozdział 18.6 i rysunek 18.2b dla M = 32, oraz rozdział 21.4 i ry-
sunek 21.15), że analizowany sygnał dźwiękowy jest rozkładany (dekomponowany) w standar-
dzie MPEG na 3 2 sygnały p o d p a smo we przez zestaw 32 równocześnie pracujących
filtrów pasmowoprzepustowych. Zadaniem modelu psychoakustycznego jest dostarczenie do
procedury alokacji bitów potrzebnej informacji o percepcyjnej istotności tych sygnałów.
W tabelach normy są podane następujące parametry związane z p r zyp o r ząd ko wa niem
p r ążkó w wid ma FFT do poszczególnych 32 kanałów częstotliwościowych i związanych
z nimi sygnałów podpasmowych, które są w rzeczywistości kodowane (indeks n = 1, 2, 3, ...,
32 to numer kanału i jednocześnie sygnału podpasmowego):
608 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

ωlown i ωhighn numer prążka FFT odpowiadającego najniższej i najwyższej częstotliwości


w n-tym kanale częstotliwościowym po n-tym filtrze podpasmowym,
widthn indeks szerokości psychoakustycznej kanału, równy 0 dla kanałów wąskich
oraz 1 dla szerokich. Kanał jest uznawany za wąski pod względem psycho-
akustycznym, jeśli jego szerokość jest mniejsza od 1/3 pasma krytycznego.
W przypadku algorytmów MP1 i MP2 drugi model psychoakustyczny standardu MPEG składa
się z sekwencji następujących operacji [ISO91], przedstawionych w tabeli 21-3 w postaci pro-
gramu w języku Matlab:
1) Pobranie z bufora 1024 próbek sygnału, x(i), i = 1...1024, z p r zesunięciem zależnym od
stosowanego algorytmu kompresji MP1, MP2 lub MP3 (ponieważ przetwarzanie sygnału
w zespole filtrów wprowadza opóźnienie, a wynik analizy psychoakustycznej jest wykorzy-
stywany do kwantyzacji próbek wyjściowych z tego zespołu, analizie muszą być poddane
nie próbki aktualne tylko opóźnione).
2) Wymnożenie sygnału z oknem Hanninga:

 2 π(i − 0,5) 
xw (i ) = x(i ) ⋅ h(i ), h(i ) = 0,5 − 0,5cos   (21.13)
 1024 
oraz obliczenie 1024-punktowej szybkiej transformaty Fouriera FFT wynikowego sygnału:
jej modułu rω i fazy fω (w przypadku algorytmu MP3 krótsze, 256-punktowe okno może być
zastosowane, jeśli aktywne jest przełączanie okien).
3) Wyznaczenie prognozy modułu r̂ω i fazy fˆω transformaty na podstawie ich wartości z dwóch
poprzednich 1024-punktowych bloków danych, indeksowanych jako t−1 i t−2:

rˆω = 2rω (t − 1) − rω (t − 2), fˆω = 2 f ω (t − 1) − f ω (t − 2) (21.14)

Przyjęte w (21.14) oznaczenie fazy jest nieco mylące, gdyż zbyt się kojarzy z częstotliwoś-
cią, ale takie właśnie jest stosowane w standardzie.
4) Obliczenia miary nieprognozowalności widmowej cω zdefiniowanej jako:

( rω ⋅ cos( fω ) − rˆω ⋅ cos( fˆω ) ) + ( rω ⋅ sin( fω ) − rˆω ⋅ sin( fˆω ))


2 2

cω = (21.15)
rω + | rˆω |

5) Obliczenie energii oraz ważonej nieprognozowalności widmowej w z a d a n y c h pasmach


częstotliwościowych według następujących wzorów:
ωhighb ωhighb
eb = ∑ rω2 , cb = ∑ cωrω2 (21.16a,b)
ω= ωlowb ω= ωlowb

6) Wyznaczenie splotu wektorów energii i nieprognozowalności pasmowoczęstotliwościowej,


wyznaczonych w poprzednim punkcie, z funkcją „rozszerzającą” B(∆b) (21.12) oraz norma-
lizacja (bmax − numer ostatniego podpasma krytycznego, tercjowego, bb − indeks pomoc-
niczy):
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 609

bmax ecbb
ecbb = ∑ B(bvalb , bvalbb ,) ⋅ ebb , enb = bmax
(21.17a,b)
bb =1
∑ B(bvalb , bvalbb )
bb = 0
bmax ctb
ctb = ∑ B(bvalb , bvalbb ) ⋅ cbb , cbb =
ecbb
(21.18a, b)
bb =1

Normalizacja w (21.18b) jest związana z ważeniem cω przez rω 2, wprowadzonym w


(21.16b). Należy zwrócić uwagę, że w równaniu (21.12) argumentami funkcji rozszerzającej
B(∆b) są numery podpasm k r y t y c z n y c h , natomiast w (21.17) i (21.18) − numery
podpasm t e r c j o wy c h , czyli krytycznych po podzieleniu na tercje (patrz opis pod równa-
niem (21.12).
7) Wyznaczenie indeksu tonalności w każdym podpaśmie, przyjmującego wartości z przedzia-
łu [0, 1]:
tbb = −0, 299 − 0,43ln(cbb ) (21.19)
8) Wyznaczenie wymaganego stosunku sygnału do szumu w każdym podpaśmie, gwarantują-
cego niezamaskowanie dźwięku:

SNRb = max {minvalb , ( tbb ⋅ TMN b + (1 − tbb ) ⋅ NMTb )}, NMTb = 5,5 dB (21.20)

gdzie NMTb oznacza stałą maskowania tonu przez szum wąskopasmowy (Noise is Masking
Tone) w podpaśmie b.
9) Przeliczenie współczynnika SNRb ze skali decybelowej na skalę liniową i otrzymanie w ten
sposób wymaganego stosunku współczynnika mocy w każdym podpaśmie:

bcb = 10− SNRb /10 (21.21)

10) Wyznaczenie progu energetycznego, którego przekroczenie zapewnia niezamaskowanie


dźwięku:
nbb = enb ⋅ bcb (21.22)
11) Przeliczenie wartości progu energetycznego na jeden prążek widma FFT:
nbb
nbω = (21.23)
ω highb − ω highb + 1
12) Uwzględnienie absolutnego progu słyszenia absthrω (odpowiadającego funkcji Tabs (21.1),
wyrażonej w decybelach i przedstawionej na rysunku 21.2):

{
thrω = max nbω , 10absthrω /10 } (21.24)

13) Wyznaczenie stosunku sygnału do wypadkowego progu maskowania (Signal to Mask Ra-
tio) dla każdego z 32 kanałów częstotliwościowych, określonych przez odpowiedni filtr
zespołu filtrów analizy:
 epartn 
SMRn = 10 ⋅ log10   , n = 1, 2, 3,..., 32 (21.25)
 npartn 
610 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

gdzie epartn oznacza energię sygnału, a npartn poziom szumu w n-tym kanale częstotli-
wościowym:
ωhighn
epartn = ∑ rω2 (21.26)
ω=ωlown
ωhighn
if ( widthn = = 1) npartn = ∑ cωrω2
ω=ωlown (21.27)
else { }
npartn = min thrωlown ...thrωhighn ⋅ ( ωhighn − ωlown + 1)

W tabeli 21-3 jest przedstawiona implementacja programowa w języku Matlab opisanego po-
wyżej modelu psychoakustycznego, wykorzystywanego w algorytmach MP1 i MP2 standardu
MPEG-1 audio.
Pozostają jeszcze do omówienia rozszerzenia powyższego modelu, niezbędne do jego zastoso-
wania w schemacie przetwarzania sygnałów stosowanym w algorytmie MP3. W tym przypadku
od modelu psychoakustycznego wymaga się dostarczenia wartości następujących parametrów:
p o p i e r ws z e − informacji pomocnej w przełączaniu długości okna (36 lub 12 próbek)
w drugim zespole filtrów, opartego na transformacji MDCT/IMDCT, p o d r u g i e − współ-
czynników wykorzystywanych do kwantowania 576 sygnałów podpasmowych po drugim zes-
pole filtrów. Mając na uwadze realizację p i e r ws z e g o zadania, w modelu oblicza się wartość
entropii psychoakustycznej (parametr pe) widma fragmentu sygnału, związanej z jego płaskoś-
cią SFM (21.10). Jest ona miarą „ilości” (także rodzaju) zawartej w nim informacji. Dla war-
tości parametru pe przekraczającej wartość progową równą 1800, przyjmuje się, że w widmie
nie zachodzi zjawisko koncentracji informacji (energii) w kilku wyraźnych maksimach, świad-
czących o tonowej strukturze sygnału. Dlatego preferuje się wówczas okno krótkie (12 próbek)
często przesuwane (o 6 próbek), czyli większą rozdzielczość czasową a mniejszą częstotli-
wościową dekompozycji sygnałów wyjściowych z pierwszego zespołu filtrów. Wartości para-
metru pe poniżej progu świadczą natomiast o koncentracji informacji (energii) widma w kilku
(kilkunastu) prążkach oraz tonowym charakterze fragmentu sygnału: jest stosowane wówczas
okno długie (36 próbek) przesuwane z dużym krokiem (18 próbek), czyli jest wybierana lepsza
rozdzielczość częstotliwościowa a gorsza czasowa. Z kolei realizacja zadania d r u g i e g o spro-
wadza się do obliczania zamiast SMR wartości współczynników ratio, które służą do kwanty-
zacji 576 sygnałów podpasmowych, otrzymywanych na wyjściu transformacji MDCT każdego
z 32 głównych kanałów częstotliwościowych (32 razy po 18 próbek).
Przedstawione powyżej różnice funkcjonalne są wymuszone przez zasadniczo inną strukturę
budowy algorytmu MP3 w porównaniu z algorytmami MP1 i MP2. Pociągają one za sobą na-
stępujące zmiany szczegółowe w modelu numerycznym modelu psychoakustycznego:
Z1) Miara nieprognozowalności widmowej cω jest obliczana inaczej. Jej wartości o indeksach:
− od 0 do 5 są wyznaczane jak poprzednio,
− od 206 do 512 są przyrównane do 0,4,
Dla pozostałych indeksów, od 6 do 205, wartości cω są obliczane w specjalny sposób. Wyzna-
cza się mianowicie trzy 256-punktowe transformaty FFT {rω (1), fω (1)}, {rω (2), fω (2)} i {rω (3),
fω (3)}, zaczynając od 257, 257+128 oraz 257+256 próbki w buforze przetwarzanego sygnału.
Stosując następujące podstawienia:
rω = rω (2), f ω = f ω (2), rˆω = 2rω (1) − rω (3), fˆω = 2 f ω (1) − f ω (3) (21.28)
(256)
wykorzystuje się (21.15) do wyznaczenia cω dla 256-punktowego FFT oraz znajduje braku-
jące cω dla 1024-punktowego FFT ze wzoru:
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 611

cω ( n ) = cω(256) (  ( n + 2) / 4  ) , n = 6,..., 205 (21.29)

gdzie x oznacza zaokrąglenie do dołu (najbliższa mniejsza lub równa liczba całkowita). Po-
nieważ wynik 256-punktowego FFT ma czterokrotnie mniej elementów niż 1024-punktowego,
czterokrotnie powiela się wybrane prążki widma krótkiego FFT.
Z2) Elementy macierzy funkcji „rozszerzającej” B( bvalb, bvalbb) są obliczane w nieco inny
sposób (nowa definicja wartości zmiennej tempy w programie z tabeli 21-3).
Z3) Współczynniki maskowania stosowne w (21.20), tonu przez szum oraz szumu przez ton,
mają we wszystkich podpasmach partycji BARK-1/3 stałe wartości, odpowiednio równe:
TMNb = 29 dB oraz NMTb = 6 dB.
Z4) W algorytmie MP3 dokonuje się kontroli echa. Oblicza się w nim wartość progu energe-
tycznego nbb (21.22), którego przekroczenie zapewnia niezamaskowanie dźwięku. Pamięta się
trzy ostatnie wartości nbb dla trzech ostatnich ramek danych (0, −1, −2), włącznie z aktualną
(0), i oblicza się próg maskowania na podstawie równania:

thrb = max {qthrb , min {nbb (0), 2 ⋅ nbb ( −1), 16 ⋅ nbb ( −2)}} (21.30)

gdzie qthrb oznacza próg ciszy, którego wartość jest odczytywana z tabeli.
Z5) Entropia psychoakustyczna pe, wykorzystywana do przełączania zespołu filtrów MDCT
(IMDCT), jest obliczana na podstawie ilorazu progu maskowania thrb (21.30) oraz energii
eb (21.16a) w b-tym podpaśmie (partycji) w skali BARK-1/3, z uwzględnieniem cbwidthb, czyli
liczby prążków 1024-punktowego FFT należących do tej partycji:
 thr + 1 
pe = −10 ⋅ ∑ cbwidthb ⋅ ln  b  (21.31)
b  eb + 1 
Z6) Ostatnim etapem obliczeń jest wyznaczenie współczynników ratio do kwantyzacji próbek
podpasmowych w predefiniowanych zakresach częstotliwościowych (sb = scafactor bands).
W tym celu należy przeliczyć wartości progowe thrb oraz wartości energii eb z zakresów skali
BARK-1/3 (b) na zakresy skali współczynników kwantowania (sb) według następujących wzo-
rów:
bo −1
thrsb = w1 ⋅ thrbu + ∑ thrbx +w2 ⋅ thrbo (21.32)
bx = bu +1
bo −1
esb = w1 ⋅ ebu + ∑ ebx +w2 ⋅ ebo (21.33)
bx = bu +1

a następnie obliczyć ich iloraz:


thrsb
ratiosb = (21.34)
esb
Wartości wag w1 i w2 oraz indeksów bu i bo są odczytywane z tablic dla każdej częstotliwości
próbkowania oraz każdego zakresu sb współczynników skalujących. W przypadku kiedy wyli-
czona w (21.31) entropia psychoakustyczna jest równa lub większa od zadanej wartości progo-
wej i należy zastosować krótkie okna w transformacji MDCT, wszystkie obliczenia, które do-
prowadzają od wyznaczenia wektora ratiosb, należy przeprowadzić trzykrotnie, oddzielnie dla
każdego wyniku 256-punktowego FFT, zdefiniowanego w punkcie Z1. W tym przypadku
612 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

w (21.30) uwzględnia się tylko nbb(0) (bez echa) oraz w całym algorytmie korzysta z oddziel-
nych tabel.
Dygresja. Przedstawiony powyżej opis opiera się bezpośrednio na tekście standardu [ISO91].
Jak widać nie należy on do najłatwiejszych do czytania, ale mogę zapewnić, że oryginał jest
znacznie bardziej skomplikowany. Potraktujmy go jako przykład, jedyny w tej książce, tego
jak często może wyglądać jedyna literatura fachowa dostępna dla współczesnego inżyniera:
całe tomy lakonicznej dokumentacji firmowej, bogatej w szczegóły lecz ubogiej w komentarze.
Łatwo się w niej pogubić. Ale często trudno od niej uciec. Podczas korekty tego rozdziału je-
den z kolegów spytał mnie, dlaczego nie spojrzę na tę tematykę ogólniej, „z lotu ptaka”. Nie-
stety nie potrafię, w dziedzinie psychoakustyki nie umiem „latać”. Mimo tego, że w połowie lat
dziewięćdziesiątych ponad rok uczestniczyłem w dużym projekcie, dotyczącym implementacji
na procesorze sygnałowym (w asemblerze) pełnego kodera i dekodera sygnału audio poziomu
MP2. Ale wtedy nie byłem odpowiedzialny za model psychoakustyczny. Moją wiedzę z tamte-
go okresu zaprezentuję w dalszej części tego rozdziału. Bardziej syntetycznie, ale z niezbęd-
nymi szczegółami.

21.3.3. Program komputerowy

Drogi Czytelniku! Wiem, że wystawiam Cię teraz na kolejną bardzo ciężką próbę, ale jeśli Ci
się wydaje, że można cyfrowo przetwarzać sygnały bez programowania, to się grubo mylisz.
Czeka cię programowanie, programowanie i ... jeszcze raz programowanie. Od rana do wieczo-
ra. Programowanie, czyli pisanie poezji, w której liczy się dyskretny urok i magia kilku strof,
oraz pisanie wielostronicowej prozy, w której w sposób zdyscyplinowany, logiczny i konse-
kwentny masz stworzyć symfonię z pojedynczych liter, słów, zdań, ... Bardzo bym chciał
Czytelniku, abyś został artystą!
Dlaczego tak mówię? Ponieważ w tabeli 21-3 przedstawiono program w języku Matlab im-
plementujący aż na pięciu stronach model psychoakustyczny II standardu MPEG-1 audio.
Może on być zastosowany w algorytmach MP1, MP2 oraz MP3. Dla dwóch pierwszych zawie-
ra wszystkie dane tablicowe niezbędne do kompresji sygnałów dźwiękowych spróbkowanych
z częstotliwościami 32, 44,1 oraz 48 kiloherców. W przypadku algorytmu MP3 kod programu
jest kompletny, ale konieczne jest wczytanie pomocniczych tablic z danymi, znajdujących się
w programach loadMP3long21.m, loadMP3short12.m oraz loadMP3short39.m (do po-
brania ze strony WWW z oprogramowaniem). Dane te usunięto z programu głównego dla czy-
telności i zwartości kodu.
Przyjrzyjmy się bliżej strukturze programu. Ponieważ znaczną część modelu stanowią tablice
z danymi trzeba je wygenerować tylko jeden raz przy pierwszym wywołaniu programu (lub
wczytać jak to jest w przypadku algorytmu MP3), a następnie zapamiętać dla kolejnych wywo-
łań. Do tego celu służy dyrektywa persitent. Przy pierwszym wywołaniu funkcji parametr
PSYinit nie jest zadeklarowany, czyli funkcja isempty() zwraca wartość prawda. Dlatego
program wchodzi w blok inicjalizacji wartości parametrów, w którym także jest wykonywane
podstawienie PSYinit = 1. Powoduje ono, że przy kolejnym wywołaniu funkcji inicjalizacja
jest opuszczana. Podczas inicjalizacji dla algorytmów MP1 i MP2 „odgórnie” są zadane war-
tości tylko trzech tablic: critband, bminval i widthn, opisanych w programie, pozostałe są
generowane dla każdej z trzech częstotliwości próbkowania.
Podczas obliczeń jest wykorzystywanych pięć zakresów przedziałów częstotliwościowych: nu-
mery prążków FFT, zakresy psychoakustycznych pasm krytycznych BARK, zakresy pasm kry-
tycznych z podziałem na tercje, oznaczane jako BARK-1/3, zakresy częstotliwościowe 32 fil-
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 613

trów pierwszego zespołu filtrów (dla MP1 i MP2) oraz zakresy współczynników kwantyzacji
kanałów częstotliwościowych po MDCT (dla MP3).
W tym miejscu należy podkreślić dużą czytelność programu, spowodowaną prostotą zapisu
operacji wektorowo-macierzowych w języku Matlab.

Tab. 21-3. Program w języku Matlab implementujący model psychoakustyczny II standarduMPEG-1 audio

% Ćwiczenie: Model psychoakustyczny II standardu MPEG-1 audio

function [SMR, pe, ratio] = MP123psycho(bx, fpr, poziom)


%######################################################################################
% Model psychoakustyczny nr 2 dla poziomów: MP1, MP2 i MP3 (tylko dla jednego kanału)
% Wejście: bx − bufor z sygnałem wejściowym, fpr − częstotliwość próbkowania, poziom − 1, 2, 3 (MP1, 2, 3)
% Wyjście: SMR dla MP1 i MP2, pe oraz ratio dla MP3
%######################################################################################

% MP1 i MP2
persistent PSYinit
persistent M BLKSIZE HBLKSIZE window CBlen
persistent critband bminval widthn
persistent delay offs
persistent r r1 r2 f f1 f2
persistent partition numlines cbval wlowb whighb sprdf minval tmn rnorm absthr
persistent nbb_1 nbb_2
% MP3
persistent BLKSIZE_s HBLKSIZE_s window_s CBlen_s SBMAX_l SBMAX_s pe_prog
persistent cbw_l bu_l bo_l w1_l w2_l minval_l qthr_l norm_l numlines_l
persistent cbw_s bu_s bo_s w1_s w2_s qthr_s norm_s snr_s wlowb_s whighb_s

%###########################################################################################
% Inicjalizacja stałych − tylko przy pierwszym wywołaniu funkcji; wartości zapamiętywane dyrektywą persistent
%###########################################################################################
if( isempty( PSYinit) )

PSYinit = 1; % znacznik wykonania inicjalizacji


M = 32; % liczba filtrów w pierwszym zespole filtrów
BLKSIZE = 1024; % długość FFT − długi blok danych
HBLKSIZE = 513; % połowa długości

% Standardowe granice pasm krytycznych


critband = [ 0 100 200 300 400 510 630 770 920 1080 1270 1480 1720 2000 2320 ...
2700 3150 3700 4400 5300 6400 7700 9500 12000 15500 25000 30000 ];
% Dolny limit odstępu sygnału od szumu w każdym paśmie krytycznym, decydujący o jego „odmaskowaniu”
bminval = [ 20.0 20.0 20.0 20.0 20.0 17.0 15.0 10.0 7.0 4.4 4.5 4.5 4.5 4.5 4.5 ...
4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 3.5 3.5 3.5 ];
% Wskaźnik akustycznej szerokości kolejnych podpasm 32-kanałowego zespołu filtrów: 0=szerokie, 1=wąskie
widthn = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ];

switch(poziom)
case 1, delay=576; offs=384;
case 2, delay=480; offs=576;
case 3, delay=768; offs=576; offs_s = 192;
otherwise, disp('Zły numer poziomu'); pause; break;
end

% Długie 1024-punktowe okno Hanninga (MP1, MP2, MP3)


n=0:1:BLKSIZE-1; window = 0.5*(1-cos(2.0*pi*(n-0.5)/BLKSIZE));

% Inicjalizacja buforów widmowych − moduł (r), faza (f)


temp = zeros(1,HBLKSIZE); r = temp; r1 = temp; f = temp; f1 = temp;
614 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

% Inicjalizacja tablic roboczych


% fthr[ HBLKSIZE ] = wartości bark odpowiadające wszystkim prążkom widma FFT
% partition[ HBLKSIZE ] = do której partycji BARK-1/3 należy każdy prążek widma FFT
% wlowb[ Cblen ] = początkowy numer prążka FFT każdej partycji BARK-1/3
% whighb[ Cblen ] = końcowy numer prążka FFT każdej partycji BARK-1/3
% numlines[ Cblen ] = liczba linii FFT w każdej partycji BARK-1/3 (whighb−wlowb+1)
% cbval[ Cblen ] = środkowa (średnia) wartość bark każdej partycji BARK-1/3
% UWAGA: = licz jest licznikiem prążków FFT w każdej partycji BARK-1/3

dfreq = fpr/BLKSIZE; % krok w częstotliwości

% Oblicz fthr, czyli wartości bark odpowiadające wszystkim prążkom widma FFT
for k = 1:1:HBLKSIZE
fk = (k-1)*dfreq; j = 2;
while( fk > critband(j) ) j = j+1; end
fthr(k) = (j-1) + (fk-critband(j-1))/(critband(j)-critband(j-1)) - 1;
end

% Oblicz partition, wlowb, whighb, numlines, cbval


if(poziom==3) cbval=bval_l; end
partition(1) = 1;
licz = 1; wlowb = 1; whighb = [];
cbval(1) = fthr(1);
bval_lo = fthr(1);
for i = 2 : HBLKSIZE
if((fthr(i)-bval_lo) > 0.33)
partition(i) = partition(i-1) + 1;
cbval( partition(i-1) ) = cbval( partition(i-1) ) / licz;
cbval( partition(i) ) = fthr(i);
bval_lo = fthr(i);
numlines( partition(i-1) ) = licz;
licz = 1; wlowb = [ wlowb i]; whighb = [whighb i-1];
else
partition(i) = partition(i-1);
cbval( partition(i) ) = cbval( partition(i) ) + fthr(i);
licz = licz+1;
end
end
numlines( partition(i-1) ) = licz;
cbval( partition(i-1) ) = cbval( partition(i-1) )/licz;
whighb = [ whighb 513 ];
CBlen = length(cbval);

% Macierz sprdf (21.12) funkcji „rozszerzającej”; funkcja „rozszerzająca” (21.5)


for(i=1:1:CBlen)
for(j=1:1:CBlen)
tempx = (cbval(i) - cbval(j))*1.05;
if(poziom==3)
if (j>=i) tempx = (cbval(i) - cbval(j))*3.0;
else tempx = (cbval(i) - cbval(j))*1.5; end
end
if(tempx>=0.5 & tempx<=2.5)
temp = tempx - 0.5;
x = 8.0 * (temp*temp - 2.0 * temp);
else x = 0.0;
end
tempx = tempx + 0.474;
tempy = 15.811389 + 7.5*tempx - 17.5*sqrt(1.0+tempx*tempx);
if (tempy <= -100.0)
sprdf(i,j) = 0.0;
else
sprdf(i,j) = exp( (x + tempy)*0.2302585093 );
end
end
end

% Oblicz wartości minval stosunku sygnału do szumu w podpaśmie, gwarantującego niezamaskowanie dźwięku
% Oblicz wartości TMN (Tone is Masking Noise)
% Oblicz współczynniki normalizujące rnorm dla funkcji "rozszerzającej"
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 615

for kb = 1 : CBlen
k = cbval(kb) + 0.5; minval(kb) = bminval(floor(k)+1);
temp = 15.5 + cbval(kb);
if( temp>24.5 ) tmn(kb) = temp; else tmn(kb) = 24.5; end
rnorm(kb) = 0;
for lb = 1 : CBlen
rnorm(kb) = rnorm(kb) + sprdf(kb,lb);
end
end

% Absolutny próg słyszalności absthr, wygenerowany ze wzoru (21.1)


freq = (0:HBLKSIZE-1)*dfreq/1000;
absthr = 3.64*freq.^(-0.8) - 6.5*exp(-0.6*(freq-3.3).^2) + 10^(-3)*freq.^4; % w dB
absthr = 10.^(absthr/20; % przelicz na poziom energii

% MP3 - początek +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


if( poziom == 3 )

BLKSIZE_s = 256; % długość FFT − krótki blok danych


HBLKSIZE_s = 128; % połowa długości krótkiego bloku
pe_prog = 1800; % próg entropii psychoakustycznej

% Krótkie 256-punktowe okno Hanninga


n=0:1:BLKSIZE_s-1; window_s = 0.5*(1-cos(2.0*pi*(n-0.5)/BLKSIZE_s));

% Wczytaj tablice 63-elementowe : minval_l, qthr_l, norm_l, bval_l, numlines_l

% Dalej dane w tablicach tylko dla częstotliwości próbkowania fpr = 44100 Hz


% Długie FFT 1024 punktów +++++++
CBlen = 63; % liczba podpasm częstotliwościowych BARK-1/3 dla długiego bloku
SBMAX_l = 21; % liczba zakresów współczynników skalujących
loadMP3long21 % wczytaj tablice 21-elementowe : cbw_l, bu_l, bo_l, w1_l, w2_l

% Krótkie FFT 256 punktów +++++++


CBlen_s = 39; % liczba podpasm częstotliwościowych BARK-1/3 dla krótkiego bloku
SBMAX_s = 12; % liczba zakresów współczynników skalujących
loadMP3short12 % wczytaj tablice 12-elementowe : cbw_s, bu_s, bo_s, w1_s, w2_s
loadMP3short39 % wczytaj tablice 39-elementowe : wlowb_s, whighb_s, qthr_s, norm_s, snr_s

nbb = zeros(1,CBlen); % wyzeruj wektory pomocnicze do kontroli echa


nbb_1 = zeros(1,CBlen); %
nbb_2 = zeros(1,CBlen); %
minval = minval_l; % jest stosowana inna tablica
rnorm = 1./norn_l; % jest stosowana inna tablica
end
% MP3 - koniec +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

end % koniec PSYinit, początek właściwych obliczeń

%#########################################################################
% ANALIZA
%#########################################################################
k = 1:HBLKSIZE;
if(poziom==3) k0=1:6; k1=7:4:206; k2=207:HBLKSIZE; ks = 3:52;
else k0=1:HBLKSIZE;
end

for l = 1 : poziom % jedno powtórzenie dla poziom = 1 i dwa dla poziom = 2

% Pobranie fragmentu sygnału


bx = bx( 1+(l-1)*offs : length(bx) ); % plot(bx); pause

% Przesunięcie buforów
r2 = r1; r1=r;
f2 = f1; f1=f;
616 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

% FFT fragmentu sygnału składającego się z 1024 próbek


X = fft( window .* bx(1:BLKSIZE) );
r = abs(X(k)); f = angle(X(k));

% Obliczenie prognozy modułu i fazy widma


pr = 2*r1 - r2;
pf = 2*f1 - f2;

% Obliczenie miary nieprognozowalności widmowej cw


if(poziom~=3) % MP1 & MP2
cw(k0) = sqrt( (r(k0).*cos(f(k0)) - pr(k0).*cos(pf(k0))).^2 + ...
+ (r(k0).*sin(f(k0)) - pr(k0).*sin(pf(k0))).^2 ) ./ (r(k0) + abs(pr(k0)));
else % MP3
% miara cw dla prążków widma od 1 do 6 na podstawie 1024-punktowego FFT
for( k = 1:6 )
pr = 2.0 * r1(k) - r2(k);
pf = 2.0 * f1(k) - f2(k);
temp1 = r(k) * cos(f(k))- pr * cos(pf);
temp2 = r(k) * sin(f(k))- pr * sin(pf);
temp3 = r(k) + abs(pr);
if( temp3 ~= 0.0 ) cw(k) = sqrt( temp1*temp1 + temp2*temp2 ) / temp3;
else cw(k) = 0;
end;
end

% 3x FFT różnych fragmentów sygnału, składających się z 256 próbek


for ( nrfft = 1:3)
bxx = bx( (257+128*(nrfft-1)):(512+128*(nrfft-1)) );
Xfft = fft( window_s .* bxx );
r_s(nrfft,:) = abs(Xfft); f_s(nrfft,:) = angle(Xfft);
end
% Obliczenie miary cw dla prążków o numerach od 7 do 512 na podstawie 256-punktowego FFT
rs = r_s(2,ks); prs = 2.0*r_s(1,ks) - r_s(3,ks);
fs = f_s(2,ks); pfs = 2.0*f_s(1,ks) - f_s(3,ks);
cw(k1) = sqrt( (rs.*cos(fs) - prs.*cos(pfs)).^2 + (rs.*sin(fs) - ...
- prs.*sin(pfs)).^2 ) ./ (rs + abs(prs));
cw(k1+1) = cw(k1);
cw(k1+2) = cw(k1);
cw(k1+3) = cw(k1);
cw(k2) = 0.4;
end

% Obliczenie energii eb i ważonej nieprognozowalności cb w przedziałach BARK-1/3


rr = r .* r; rrcw = rr .* cw;
for b = 1 : CBlen
eb(b) = sum( rr( wlowb(b) : whighb(b) ) );
cb(b) = sum( rrcw( wlowb(b) : whighb(b) ) );
end

% Splot eb i cb z funkcją rozszerzającą, normalizacja


ecb = sprdf*eb';
ctb = sprdf*cb';
cbb = ctb' ./ ecb';
enb = ecb' ./ rnorm;

% Przeliczenie cbb na tbb (indeks tonalności)


tbb = -0.299 - 0.43*log(cbb);

% Obliczenie SNR w każdej partycji BARK-1/3


if(poziom~=3)
nmt = 5.5; work = tbb.*tmn + (ones(1,CBlen)-tbb)*nmt;
else
tmn = 29.0; nmt = 6.0; work = tmn*tbb + nmt*(ones(1,CBlen)-tbb);
minval = minval_l;
end
snrb = max( minval(1:CBlen), work);

% Obliczenie współczynnika mocy


bcb = 10.^(-snrb/10);
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 617

% Obliczenie progu energii


nbb = enb .* bcb;

if(poziom~=3) % poziom kompresji MP1 lub MP2

% przeliczenie progu na prążki DFT


nbw = zeros(1, HBLKSIZE);
for kb = 1 : CBlen
nbw( wlowb(kb) : whighb(kb) ) = nbb(kb) ./ (whighb(kb) - wlowb(kb)+1);
end

% uwzględnienie absolutnego progu słyszalności


thrw = max( nbw, 10.^(absthr/10) );

% obliczenie SMR dla 32 podpasm zespołu filtrów − wykorzystywane do alokacji bitów


for n = 1 : M
wlown = 1 + (n-1)*16; whighn = 1 + n*16;
epartn(n) = sum( rr( wlown : whighn ) );
if( widthn(n)==1 ) npartn(n) = sum( thrw( wlown : whighn ) );
else npartn(n) = min( thrw( wlown : whighn ) ) * (whighn-wlown+1); end
end
SMR(l,1:M) = 10*log10( epartn ./ npartn ); % wektor wyjściowy dla MP1 & MP2
pe = 0; ratio = 0; % wyzerowanie wyjścia dla MP3

else % tylko poziom MP3

% kontrola echa
thr = max( qthr_l, min( nbb, min(2.0*nbb_1, 16.0*nbb_2) ) );
nbb_2 = nbb_1; nbb_1 = nbb;

% obliczenie entropii psychoakustycznej, służącej do przełączania drugiego zespołu filtrów MDCT/IMDCT


pe = -10*sum( numlines .* min(0,log( (thr+1)./(eb+1)) ) );

% obliczenie progu thm i energii en w każdym zakresie współczynników skalujących oraz ich ilorazu ratio,
% wykorzystywanego w MP3 do kwantyzacji próbek podpasmowych
en=[]; thm=[]; ratio = [];
if ( pe < pe_prog ) % DŁUGIE BLOKI DANYCH
sb = 1 : SBMAX_l;
thm(sb) = w1_l(sb).*thr(bu_l(sb)) + sum( thr(bu_l(sb)+1 : bo_l(sb)-1 )) ...
+ w2_l(sb).*thr(bo_l(sb));
en(sb) = w1_l(sb).* eb(bu_l(sb)) + sum( eb(bu_l(sb)+1 : bo_l(sb)-1) ) ...
+ w2_l(sb).* eb(bo_l(sb));
ratio = thm./en; % wektor wyjściowy dla MP3

else % KRÓTKIE BLOKI DANYCH


sb = 1 : SBMAX_s;
for (nrfft = 1 : 3) % numer krótkiego bloku
eb = []; % zerowanie
rr_s = r_s(nrfft,:) .* r_s(nrfft,:); % podniesienie do kwadratu
for b = 1 : CBlen_s
eb(b) = sum( rr_s( wlowb_s(b) : whighb_s(b) ) ); % energia
end
ecb = sprdf(1:CBlen_s,1:CBlen_s)*eb'; % splot z funkcją rozszerzającą
nbb = (ecb' .* norm_s) .* 10.^(snr_s/10); % norm_s i snr_s czytane z tablicy
thr = max( qthr_s, nbb ); % porównanie nbb z progiem ciszy
thm(sb)=w1_s(sb).*thr(bu_s(sb)) + sum( thr(bu_s(sb)+1 : bo_s(sb)-1) )...
+ w2_s(sb).*thr( bo_s(sb) );
en(sb)=w1_s(sb).* eb(bu_s(sb)) + sum( eb(bu_s(sb)+1 : bo_s(sb)-1) ) ...
+ w2_s(sb).* eb( bo_s(sb) );
ratio(nrfft,:) = thm./en; % wektor wyjściowy dla MP3
end % koniec for( nrfft = 1 : 3 )
end % koniec if( pe < pe_prog)
SMR = 0; % wyzerowanie parametru wyjściowego poziomów MP1 i MP2
break; % opuść wszystkie pętle jeśli poziom MP3
618 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

end % koniec wyboru poziomu kompresji

end % koniec pętli

% ###################################
if( poziom = = 2) SMR = max( SMR ); end
% ###################################

21.4. Zespoły filtrów w standardzie MPEG audio


Jak już było zaznaczone we wprowadzeniu do niniejszego rozdziału kompresja sygnału audio
polega na „oszukiwaniu” ludzkich uszu. Ponieważ jedne częstotliwości „zagłuszają” inne czę-
stotliwości, nie ma sensu kodować tego, czego człowiek i tak nie usłyszy. Kluczem do sukcesu
są dwie umiejętności: p o p i e r ws z e , rozłożenia (dekompozycji) kompresowanego sygnału na
sumę sygnałów składowych o różnych częstotliwościach i jego syntezy na podstawie tych skła-
dowych, p o d r u g i e , modelowania psychoakustycznego ludzkiego narządu słuchu i podej-
mowania decyzji o usuwaniu tych składowych częstotliwościowych po dekompozycji sygnału,
które nie będą słyszane. Zagadnienia te omówiono w dwóch kolejnych podrozdziałach. Jako
pierwszym zajmiemy się problemem dekompozycji częstotliwościowej sygnału.
Oczywiście istnieje wiele metod dekompozycji sygnału na składowe. Sztandarowym, najprost-
szym przykładem może być zastosowanie sekwencji prostej i odwrotnej dyskretnej transfor-
macji Fouriera, następujących jedna za drugą. W jej wyniku blok wejściowych próbek sygnału
może być transformowany z dziedziny czasu do dziedziny częstotliwości, w której może być
modyfikowany, kodowany, zapisywany lub przesyłany, a potem ponownie przekształcany do
dziedziny czasu. Modyfikacja widma może mieć na celu usunięcie z częstotliwościowej repre-
zentacji sygnału tych składowych, które nie będą słyszane. Podczas przydziału bitów dla po-
szczególnych częstotliwości wyższy priorytet otrzymują składowe, które mają znaczenie psy-
choakustyczne, tzn. decydują o wyższej subiektywnej ocenie jakości dźwięku.
Ponieważ zawartość częstotliwościowa sygnałów dźwiękowych zmienia się w czasie, do ich
dekompozycji należy używać nie reprezentacji stricte częstotliwościowych, ale czasowo-czę-
stotliwościowych opisanych w rozdziale 17, na przykład krótkoczasowej transformacji Fou-
riera, w szczególnym przypadku zwanej transformacją Gabora, lub transformacji falkowej.
Szczególną formę realizacji czasowo-częstotliwościowej dekompozycji sygnałów audio, czyli
ich zależnej od czasu analizy i syntezy pasmowoczęstotliwościowej, stanowią zespoły filtrów,
szczegółowo opisane w rozdziale 18. Mają one postać drabinki równolegle pracujących filtrów
pasmowoprzepustowych typu FIR (patrz rys. 18.1): analizy Hk(z) oraz syntezy Gk(z), z których
każdy przetwarza wybrane pasmo częstotliwościowe sygnału (patrz rys. 18.2). W standardzie
MPEG-1 audio są wykorzystywane 32 filtry (M = 32) z modulacją kosinusową. Zgodnie
z uogólnionym twierdzeniem o próbkowaniu po M-krotnym ograniczeniu szerokości widma
sygnału można pozostawić w nim co M-tą próbkę, dlatego po każdym z filtrów Hk(z) znajduje
się M-krotny reduktor (N = M). W związku z tym sumaryczna liczba próbek we wszystkich
kanałach częstotliwościowych jest równa liczbie próbek analizowanego sygnału wejściowego.
Przed operacją syntezy odtwarza się oryginalną częstotliwość próbkowania stosując M-krotny
ekspander w każdym kanale, wstawiający wartości zerowe w miejsce usuniętych próbek, a na-
stępnie filtruje się tak zmodyfikowane sygnały podpasmowe za pomocą pasmowoprzepusto-
wych filtrów Gk(z). Ostatnim etapem obliczeń jest zsumowanie sygnałów wyjściowych ze
wszystkich kanałów.
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 619

Zespoły filtrów były szczegółowo opisane pod względem teoretycznym i programowym w roz-
dziale 18, w szczególności w podrozdziałach 18.5 i 18.6 przedstawiono zespoły z modulacją
kosinusową. Chcąc jednak umożliwić Czytelnikowi korzystanie z tego rozdziału niezależnie
od reszty książki, poniżej jeszcze raz powtórzono wybrane partie materiału w przystępnej
formie.
Na rysunku 18.33 jest przedstawiona L = 512-punktowa odpowiedź impulsowa p(n) nierekur-
sywnego filtra dolnoprzepustowego typu FIR (po lewej stronie) stosowanego w standardzie
MPEG-1 audio, tak zwanego prototypu, oraz jego charakterystyka amplitudowo-częstotliwoś-
ciowa (po stronie prawej). Jej dobrą aproksymatę można uzyskać ze wzoru (18.101). Należy
zwrócić uwagę na fakt, że szerokość pasma przepustowego filtra stanowi dokładnie 1/32 uży-
tecznego pasma częstotliwości, tzn. pasma od 0 do 1/2 częstotliwości próbkowania. Odpo-
wiedź ta jest wymnażana z M = 32 funkcjami kosinusoidalnymi o różnych częstotliwościach
i są otrzymywane odpowiedzi impulsowe filtrów „analizy” hk(n) (k = 0, 1, 2, ..., M−1, n = 0, 1,
2, ..., L−1, M = 32, L = 512):

 π L −1 π
hk ( n ) = 2 p (n ) cos  (k + 0,5) (n − ) + ( −1)k  (21.35)
M 2 4

W wyniku modulacji charakterystyka częstotliwościowa filtra prototypowego jest M-krotnie


przesuwana w dziedzinie częstotliwości i jest otrzymywany „grzebień” filtrów pokrywających
całe użyteczne pasmo częstotliwościowe (patrz rysunek 18.2). Nierekursywna filtracja sygna-
łów sprowadza się do wielokrotnego przesuwania o jedną próbkę odpowiedzi impulsowej filtra
na tle próbek sygnału, wymnażania ich przez siebie oraz sumowania wyników iloczynów (patrz
równanie (1.22) oraz rysunki od 1.7 do 1.9). Jak już było powiedziane sygnał wyjściowy
z każdego z filtrów ma M-krotnie ograniczone pasmo, dlatego można go M-krotnie zdecymo-
wać, tzn. zostawić tylko co M-tą próbkę. Jest to równoważne przesuwaniu każdej z odpowie-
dzi impulsowych filtrów hk(n) na tle analizowanego sygnału x(n) co M próbek, a nie co jedną.
W standardzie MPEG-1 audio wyznacza się P = 36 próbek w każdym kanale częstotliwoś-
ciowym. Aby to zrobić potrzebnych jest P⋅M = 36⋅32 = 1152 próbek sygnału audio. Tyle pró-
bek jednego kanału dźwiękowego jest kodowanych jednorazowo w pojedynczym bloku da-
nych, tzw. ramce. Próbki te są w koderze: normalizowane (skalowane), kwantowane, kodo-
wane, uzupełniane nagłówkiem z opisem niezbędnym do zdekodowania oraz zapisywane lub
przesyłane. W dekoderze wszystkie operacje są wykonywane w odwrotnej kolejności, z na-
główka jest odczytywana informacja sterująca, a potem dane są: dekodowane, rekwantowane
oraz denormalizowane. Ponieważ w każdym kanale (paśmie) częstotliwościowym jest przesy-
łana co M-ta próbka, w dekoderze podstawia się wartości zerowe za brakujące próbki oraz fil-
truje otrzymane w ten sposób sygnały podpasmowe za pomocą filtrów syntezy gk(n), dualnych
do hk(n) (21.35):

 π L −1 π
g k ( n ) = 2 p(n )cos  ( k + 0,5) (n − ) − ( −1)k  (21.36)
 M 2 4

Wynikowy sygnał audio jest równy sumie wszystkich odtworzonych sygnałów podpasmowych.
W wyniku analizy psychoakustycznej przetwarzanego fragmentu sygnału, która jest przepro-
wadzana w koderze, uzyskuje się dodatkową informację o percepcyjnej istotności poszczegól-
nych sygnałów w poszczególnych kanałach częstotliwościowych. Na jej podstawie przydziela
się ich próbkom różną liczbę bitów, czyli stosuje się dla nich różne poziomy kwantowania.
Niektóre sygnały mogą w ogóle nie być przesyłane.
Program w języku Matlab, implementujący opisany powyżej sposób przetwarzania sygnału
audio za pomocą zespołu filtrów analizy i syntezy, jest przedstawiony w tabeli 18-6, natomiast
620 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

w tablicy 18-7 jest zaprezentowana jego szybka wersja polifazowa, wykorzystująca macierze
modulacji i demodulacji kosinusowej, odpowiednio A i B, o wymiarach M x 2M:

 π  M 
A(k , n ) = 2cos  ( k + 0,5)  n −   , k = 0...M − 1, n = 0...2 M − 1 (21.37)
 M  2 

 π  M 
B( k , n ) = 2 cos  ( k + 0,5)  n +   , k = 0...M − 1, n = 0...2 M − 1 (21.38)
M  2 

Znane są szybkie algorytmy realizacji transformacji opisanych tymi macierzami, pełniącymi


podobną rolę jak szybki algorytm transformacji Fouriera FFT w stosunku do zapisu macie-
rzowego dyskretnej transformacji Fouriera DFT. Dekompozycja częstotliwościowa sygnału
w standardzie MPEG-1 audio jest realizowana właśnie w taki, polifazowy sposób. Z kolei w ta-
beli 18-5 przedstawiono interpretację wszystkich wykonywanych operacji jako kolejnych kro-
ków wyznaczania współczynników reprezentacji czasowo-częstotliwościowej sygnału audio
oraz jego syntezy na ich podstawie. Stosuje się tutaj podejście znane na przykład z dekompo-
zycji sygnałów w transformacji Gabora (krótkoczasowej transformacji Fouriera), przedstawio-
nej w rozdziale 17.2 (program w tabeli 17-1).
W algorytmie MPEG-1 audio 32-kanałową dekompozycję częstotliwością sygnału stosuje się
w algorytmach MP1 i MP2. Natomiast w algorytmie MP3 idzie się krok dalej i każdy z 32 syg-
nałów podpasmowych rozkłada się dalej na 6 lub 18 podkanałów (1/6 lub 1/18 z 1/32 całego
pasma częstotliwościowego). Decyzję o tym, który z podziałów zastosować, podejmuje się na
podstawie wartości entropii psychoakustycznej widma fragmentu sygnału, wyznaczanej w blo-
ku modelu psychoakustycznego (patrz program w tablicy 21-3). Związana jest ona z miarą
płaskości widmowej (21.10) i dostarcza informacji o charakterze sygnału: szumowym (widmo
płaskie) lub tonalnym (widmo prążkowe). W pierwszym przypadku sygnał jest dynamicznie
zmienny i powinien być przetwarzany mniejszymi „kęsami”, w drugim zaś − bardziej przewi-
dywalny, dlatego można pracować na jego dłuższych fragmentach. Jeśli entropia ta jest mniej-
sza od wartości progowej równej 1800, wybierana jest dekompozycja na 18 podkanałów
(fragment tonowy), w przeciwnym przypadku − dekompozycja na sześć podkanałów (fragment
szumowy). W pierwszym przypadku jest preferowana lepsza rozdzielczość częstotliwościowa
i gorsza czasowa, ponieważ sygnał ma strukturę tonową, w drugim zaś − lepsza czasowa i gor-
sza częstotliwościowa. Do dekompozycji sygnałów podpasmowych stosuje się dodatkowe 32
zespoły filtrów, z których każdy pracuje w innym kanale. W standardzie nazywane są one
transformacjami MDCT (Modified Discrete Cosine Transform) oraz IMDCT (Inverse MDCT),
natomiast w literaturze naukowej są znane jako transformacje LOT (Lapped Orthogonal Tran-
sform). Są to zespoły filtrów z modulacją kosinusową, koncepcyjnie identyczną jak w pierw-
szym, podstawowym zespole filtrów. Różnią się one tylko tym od nich, że mają K = 6 lub 18
kanałów, a nie 32, oraz odpowiedzi impulsowe o długość 2K próbek (12 lub 36), przesuwane
co K próbek (6 lub 18), a nie o długości 512 próbek przesuwanej co 32 próbki. Oczywiście
512-punktowa odpowiedź impulsowa pierwszego zespołu filtrów jest o wiele bardziej selek-
tywna. Dla zespołów filtrów MDCT/IMDCT istnieje wzór analityczny na optymalną w sensie
częstotliwościowym prototypową odpowiedź impulsową, którą okazuje się być odpowiednio
wyskalowana pierwsza połówka sinusoidy:
1  π 
p(n) = sin  (n + 1/ 2)  , n = 0, 1, 2, ..., 2 K − 1 (21.39)
2K  2K 
W związku z faktem, że w algorytmie MP3 następuje przełączanie dwóch odpowiedzi impulso-
wych (21.39) nazywanych oknami, „krótkiego” o długości 12 próbek (dla K = 6 podkanałów)
oraz „długiego” mającego 36 próbek (dla K = 18 podkanałów), definiuje się w nim także okna
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 621

„przejściowe”: okno „startu”, związane z przejściem z okna „długiego” na „krótkie”, oraz okno
„stopu”, występujące podczas przejścia z okna „krótkiego” na „długie”. Poniżej są podane
równania wszystkich okien prototypowych (z pominięciem skalowania):

π 
− długie: p0 (n ) = sin  (n + 1/ 2) , n = 0, 1, 2, ..., 35 (21.40a)
 36 
  π 
 sin  36 ( n + 1/ 2)  , n = 0 ... 17
  
 1, n = 18 ... 23
− start: p1 (n ) =  (21.40b)
 sin  π (n − 18 + 1/ 2)  , n = 24 ... 29
  
 12 

 0, n = 30 ... 35

π 
− krótkie: p2 (n ) = sin  (n + 1/ 2)  , n = 0, 1, 2, ..., 11 (21.40c)
12 
 0, n = 0 ... 5

 π 
sin  (n − 6 + 1/ 2)  , n = 6 ... 11
  12 
− stop: p3 (n ) =  (21.40d)
 1, n = 12 ... 17
  π 
 sin  (n + 1/ 2)  , n = 18 ... 35
  36 

Ich kształty są pokazane na rysunku 21.10, przykładowa sekwencja przełączeń − na rysunku


21.13, a diagram stanów układu decyzyjnego odpowiedzialnego za przełączanie − na rysunku
21.11. Suma kwadratów wartości wszystkich okien występujących w r ó żnych chwilach
czasowych jest zawsze wartością stałą (ponieważ sin2(α) + cos2(α) = 1) (patrz górna część
rysunku 21.13). Jak już było powiedziane, o zmianie okien decyduje wartość entropii psycho-
akustycznej pe, wyznaczanej w modelu psychoakustycznym. Dźwiękom o strukturze tonowej,
mającym prążkowe widmo i małą wartość entropii, jest przyporządkowywane okno długie,
a dźwiękom pozostałym − okno krótkie. Okna startu i stopu są oknami odpowiadającymi sta-
nom przejścia od okna długiego do krótkiego lub odwrotnie. Z diagramu przedstawionego na
rysunku 21.11 wynika, że po spełnieniu warunku pe ≥ 1800 okno długie jest przełączane
w następnej ramce danych na okno start, a to z kolei zawsze jest potem zmieniane na okno
krótkie, niezależnie od wartości pe. Kiedy jest spełniony warunek pe < 1800, okno krótkie jest
zamieniane w następnej ramce danych na okno stop. Jeśli dla tej ramki pe ≥ 1800, następuje
przełączenie na okno start, w przeciwnym przypadku następuje przejście na okno długie.
Podczas analizy i syntezy okna są wymnażane z następującymi, dyskretnymi, identycznymi
funkcjami modulującymi hk(n) i demodulującymi gk(n) (k − numer funkcji, n − numer jej prób-
ki, K = 6 lub 18):
π 
hk (n ) = g k (n ) = cos  ( k + 1/ 2 )( n + 1/ 2 + K / 2 )  , k = 0 ... K − 1, n = 0 ... 2 K − 1 (21.41)
K 
Obecnie skupimy się na konsekwencjach czasowo-częstotliwościowych operacji przełączania
okien, realizowanej w drugim zespole filtrów. Na rysunku 21.12 w sposób uproszczony przed-
stawiono filtrację sygnału audio w pierwszym zespole: zmodulowana odpowiedź impulsowa
jest przesuwana 36 razy po 32 próbki w każdym z 32 kanałów częstotliwościowych. Jest do te-
622 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

a) 1 b) 1
0.8 0.8
0.6 0.6

h0(n)

h1(n)
0.4 0.4
0.2 0.2
0 0
0 5 10 15 20 25 30 35 0 5 10 15 20 25 30 35
n n

c) 1 d) 1
0.8 0.8
0.6 0.6
h2(n)

h3(n)
0.4 0.4
0.2 0.2
0 0
0 1 2 3 4 5 6 7 8 9 10 11 0 5 10 15 20 25 30 35
n n
Rys. 21.10. Kształty okien stosowanych w drugim zespole filtrów MDCT/IMDCT w algorytmie MP3 stan-
dardu MPEG-1 audio. Kolejno okna: a) długie, b) start, c) krótkie, d) stop

pe < 1800
pe ≥ 1800
długie start

pe ≥ 1800
pe < 1800

pe < 1800
stop krótkie

pe ≥ 1800

Rys. 21.11. Diagram stanów algorytmu przełączania okien {długie, start, krótkie, stop} w zespole filtrów
MDCT/IMDCT algorytmu kodera MP3, na podstawie wartości entropii psychoakustycznej pe widma aktual-
nie analizowanego bloku próbek dźwiękowych, wyznaczanej w modelu psychoakustycznym
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 623

go potrzebnych 36⋅32 = 1152 próbek dźwiękowych, które są zastępowane macierzą o 32 wier-


szach oraz 36 kolumnach. Następnie każdy z 36-elementowych wierszy jej macierzy (każdy
z kanałów częstotliwościowych) jest dekomponowany dalej za pomocą transformacji MDCT
na: 6 kanałów po 6 próbek w każdym kanale (okno „krótkie”) albo 18 kanałów po 2 próbki
(okno „długie”). W przypadku okna krótkiego mamy łącznie 192 kanały częstotliwościowe (32
razy 6), a dla okna długiego − 576 kanałów (32 razy 18). Na rysunku 21.13 przedstawiono o-
perację przełączania okien oraz zmianę reprezentacji czasowo-częstotliwościowej w każdym
z głównych kanałów częstotliwościowych: 18×2 na 6×6 i ponownie na 18×2. Natomiast na ry-
sunku 21.14 pokazano tę samą operację jako konsekwencję pracy dwóch kaskadowo połączo-
nych układów filtrów.
Rysunek 21.15 stanowi podsumowanie rozważań przeprowadzonych w tym podrozdziale. Jest
na nim przedstawiony schemat całego układu dekompozycji częstotliwościowej sygnału dźwię-
kowego. W układzie inwersji częstotliwości InvFreq jest negowana co druga próbka w co dru-
gim kanale, co ma przeciwdziałać zjawisku zmiany kształtu widma w wybranych kanałach,
spowodowanemu przez decymację sygnałów, wykonywaną w drugim zespole filtrów. Zjawisko
to wytłumaczono w podrozdziale 18.3.1 i zilustrowano na rysunku 18.15. W przypadku kiedy
jest stosowane okno krótkie i dekompozycja 6×6, pierwsze trzy i ostatnie trzy widma 6-ele-
mentowe są składane razem w jeden wektor 18-elementowy. Z tego powodu na wyjściu dru-
giego zespołu filtrów jest zawsze 576 próbek. Kiedy jest stosowane okno długie (21.40a),
próbki te reprezentują 576 sąsiednich kanałów częstotliwościowych. Niestety, ponieważ sto-
sowane odpowiedzi impulsowe filtrów (czyli okna) są krótkie, to ich charakterystyki amplitu-
dowo-częstotliwościowe nie są selektywne i ta sama informacja jest obecna w kilku podkana-
łach częstotliwościowych (aliasing). W takim przypadku w celu zmniejszenia redundancji za-
wartych w nich danych i lepszego przygotowania tych danych do kodowania bezstratnego
(zmniejszenie zakresu zmian), dodatkowo modyfikuje się próbki wyjściowe z odpowiednich
8 par kanałów „symetrycznych” według schematu „motylkowego” (dodawanie, odejmowanie),
pokazanego na rysunku 21.15 i zdefiniowanego następującym równaniem (i = 1 ... 8):

 y1( i )   ai bi   x1(i ) 
 = ⋅  (21.42)
 y2( i )   −bi ai   x (i ) 
 2 

gdzie {x1(i), x2(i)} i {y1(i), y2(i)} odpowiednio oznaczają próbki wejściowe i wyjściowe i-tego
motylka. Współczynniki mnożące ai i bi dla wszystkich motylków wylicza się z zależności;
1 ci
ai = , bi = (21.43)
1 + ci2 1 + ci2

na podstawie wartości ci podanych w tabeli 21-4. Następnie jest wykonywana nieliniowa kwan-
tyzacja próbek podpasmowych oraz ich bezstratne kodowanie entropijne metodą Huffmana,
w którym częściej występującym sekwencjom bitów są przydzielane krótsze kody bitowe
(patrz wprowadzenie do rozdziału 19).

Tab. 21-4. Wartości współczynników w obliczeniach motylkowych opisanych równaniami (21.42)−(21.44),


przedstawionych na rysunkach 21.15 i 21.16

Nr motylka (i) 0 1 2 3 4 5 6 7

Wartość wsp. ci −0,6 −0,535 −0,33 −0,185 −0,95 −0,041 −0,0142 −0,0037
624 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

32

odpowiedź impulsowa filtra


w kolejnych położeniach

512 t

0 1
kolejne
filtry
pasmowe
fpr/2 32
f 1 6 36
kolejne położenia czasowe

Rys. 21.12. Ilustracja zasady działania pierwszego zespołu filtrów analizy, wykorzystującego tylko jedną
odpowiedź impulsową (dolnoprzepustową) o długości 512 próbek, która jest przesuwana w czasie (dla jed-
nego bloku danych 36 razy po 32 próbki, co daje łącznie 1152 próbki) oraz w częstotliwości (32 razy, po-
przez wymnożenie z funkcjami kosinusoidalnymi o różnych częstotliwościach). Na dolnym rysunku jest po-
kazana szachownica czasowo-częstotliwościowa odpowiadająca realizowanej w ten sposób dekompozycji
sygnału

odpowiedzi impulsowe wybranego filtra podpasmowego w kolejnych położeniach czasowych


długie start krótkie stop długie

0 36 36 12 36

1 1 1 1 1 1 1
2
3
kolejne

4 filtry
5 podpasmowe
6
18 18 18 18 1 2 3 4 5 6 18 18
f
kolejne położenia czasowe

Rys. 21.13. Ilustracja zasady działania drugiego zespołu filtrów analizy, połączonego w sposób kaskadowy
z wyjściem każdego filtra pierwszego zespołu. Wykorzystuje on cztery odpowiedzi impulsowe: dwie podsta-
wowe − długą (36 próbek) i krótką (12 próbek) oraz dwie przejściowe: startu i stopu (obie po 36 próbek).
Odpowiedzi podstawowe są przesuwane w czasie (o połowę swojej długości, odpowiednio o 18 i 6 próbek)
oraz w częstotliwości (odpowiednio, 18 i 6 razy), w wyniku modulacji z funkcjami kosinusoidalnymi o róż-
nych częstotliwościach. Na dolnym rysunku jest pokazana szachownica czasowo-częstotliwościowa odpo-
wiadająca realizowanej w ten sposób dekompozycji sygnału. Okno długie jest stosowane dla fragmentów
sygnału o widmie chwilowym mało zmieniającym się w czasie (sygnał tonowy), dla których jest preferowana
lepsza rozdzielczość częstotliwościowa niż czasowa
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 625

Hm,1(f ) ym, 1(n)


18
f
1 1

zestaw 1
filtrów
drugiego
zespołu

filtr 18 18
pierwszego Hm, 18(f )
zespołu 18
f ym, 18(n)
x(n) Hm(f ) ym(n)
32 entropia
f
Hm, 1(f ) ym, 1(n)
m = 1 ... 32 6
f

1
2
1 2 3 ..................................................................... 36 3
4
f zestaw 2 5
t filtrów
drugiego 6
1 2 3 4 5 6
zespołu
Hm, 6(f )
6
f ym, 6(n)

Rys. 21.14. Ilustracja graficzna konsekwencji czasowo-częstotliwościowych przetwarzania sygnału dźwię-


kowego w algorytmie MP3 przez kaskadę dwóch zespołów filtrów, z których drugi jest przełączany. „↓M”
oznacza pozostawianie co M-tej próbki, natomiast czarne kropki na szarym tle reprezentują zmienną sza-
chownicę reprezentacji czasowo-częstotliwościowej sygnału

W dekoderze, przedstawionym na rysunku 21.16, wszystkie operacje są wykonywane w od-


wrotnej kolejności. Na początku z nagłówka ramki danych są odczytywane informacje steru-
jące niezbędne do jej poprawnego zinterpretowania. Potem następuje odtworzenie oryginal-
nych sekwencji bitowych na podstawie książek kodowych (dekoder Huffmana), nieliniowa
rekwantyzacja sygnałów podpasmowych, seria motylków antyaliasingowych w przypadku za-
stosowania okien długich (21.40a), synteza sygnałów przez drugi zespół filtrów (IMDCT, od-
wrotne MDCT), inwersja częstotliwości, synteza sygnałów przez pierwszy zespół filtrów oraz
zsumowanie wszystkich 32 sygnałów podpasmowych.
W przypadku operacji syntezy sygnałów, jeśli występują motylki w dekoderze, to są one opi-
sane następującym równaniem:

 x1(i )   ai −bi   y1(i ) 


 = ⋅  (21.44)
 x2(i )   bi ai   y (i ) 
 2 
626 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

1 1
M
1
D 2
h1(n) ↓ 32 C
T 3
18
1
M
2
D (i)
Hh32
2(n)
(z) ↓ 32 InvFreq
C
T
18
xwe(n)
(1) (2) (3) .... (8)

1 cs
ai
M
31 x1(i) y1(i)
D
H
h31
32(n)
(z) ↓ 32 C +cai i
+b
T
18 −cai i
−b
1 x2(i) y2(i)
M cs
ai
32 574
D
h32(n) ↓ 32 InvFreq
C 575
T
18 576

Rys. 21.15. Schemat blokowy sekcji analizy (dekompozycji) sygnału w koderze MP3 sygnałów dźwięko-
wych. Oznaczenia: hk(n) − splot z podaną odpowiedzią impulsową filtra pasmowoprzepustowego, „↓M”
− pozostawienie co M-tej próbki, InvFreq − zanegowanie co drugiej próbki, MDCT − zmodyfikowana dys-
kretna transformacja kosinusowa. 1 ... 32 − kanały częstotliwościowe po pierwszym zespole filtrów, 1 ... 576
− kanały częstotliwościowe po drugim zespole filtrów

y1 1 I
M 1
2
D ↑ 32 g1(n)
3 C
18 T
1 I
M 2 (i)
D InvFreq ↑ 32 Hg32
2(n)
(z)
C
18 T
xwy(n)
(1) (2) (3) .... (8)

1 I cs
ai
M 31 y1(i) x1(i)
D ↑ 32 H
g31
32(n)
(z) −b
+cai i
C
T −cai i
+b
18
(i)
1 y2 x2(i)
I
574 32 cs
ai
M
D InvFreq ↑ 32 g32(n)
575
C
576 18 T

Rys. 21.16. Schemat blokowy sekcji syntezy (odtworzenia) sygnału w dekoderze MP3 sygnałów dźwięko-
wych. Oznaczenia: gk(n) − splot z podaną odpowiedzią impulsową filtra pasmowoprzepustowego, „↑M”
− wstawienie M−1 wartości zerowych pomiędzy każde dwie próbki, InvFreq − zanegowanie co drugiej
próbki, IMDCT − odwrotna zmodyfikowana dyskretna transformacja kosinusowa
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 627

odwrotnym do (21.42). Kaskadowe połączenie i-tego motylka kodera i dekodera daje w wy-
niku jednostkową macierz diagonalną:
 1 + ci2 
 0 
 ai −bi   ai bi   ai2 + bi2 0   1 + ci2  = 1 0 
b ⋅ = =
  (21.45)
 i ai   −bi ai   0 ai2 + bi2   2  0 1
1 + ci   
 0
 1 + ci2 

czyli eliminacja redundancji informacji zawartej w wybranych parach kanałów jest bezstratna.
W tablicy 21-5 przedstawiono program komputerowy implementujący opisany powyżej algo-
rytm. Jako ćwiczenie pozostawiamy Czytelnikowi napisanie podprogramu implementującego
serię obliczeń motylkowych.

Tab. 21-5. Program w języku Matlab implementujący sekcję analizy i syntezy kaskadowego połączenia
dwóch zespołów filtrów algorytmu MP3 standardu MPEG-1 audio

% Ćwiczenie: Zespoły filtrów analizy i syntezy sygnału audio, stosowane w kodeku MP3 standardu MPEG-1

clear all; clf;

% Definicja okien (odpowiedzi impulsowych) dla drugiego zespołu filtrów


% Długie
for(n=0:35) h0(n+1)=sin(((n+0.5)*pi)/(36)); end
% Start
for(n= 0:17) h1(n+1)=sin(pi/36*(n+0.5)); end
for(n=18:23) h1(n+1)=1; end
for(n=24:29) h1(n+1)=sin(pi/12*(n+0.5-18)); end
for(n=30:35) h1(n+1)=0; end
% Krótkie
for(n=0:11) h2(n+1)=sin(((n+0.5)*pi)/12); end
% Stop
h3(1:36)=h1(36:-1:1);

% Wartości parametrów
M = 32; % liczba filtrów w pierwszym zespole filtrów
L = 512; % liczba próbek prototypowej odpowiedzi impulsowej w pierwszym zespole filtrów
pe_prog = 1800; % wartość progowa entropii percepcyjnej do przełączania drugiego zespołu
x=[]; y=[]; sb=[]; sbb=[]; pe=[]; typokna=[]; % inicjalizacja

% Sygnał analizowany
if(0) % testowy sygnał syntetyczny: „szum-ton-szum”
fpr = 44100; fx = 25; tmax = 0.3;
dt = 1/fpr; t = 0:dt:tmax;
x = sin(2*pi*fx*t) + 0.3*sin(2*pi*(6*fx)*t);
x = [ x 0.25*(2*rand(1,length(x))-1) x 0.25*(2*rand(1,length(x))-1) ];
x = x/max(x);
else % wczytaj nagranie muzyczne z dysku
[x,fpr,Nb] = wavread('bach44100.wav',3*44100); x=x';
end
Nx = length(x); % liczba próbek sygnału

% KODER MP3
################################################################################
% Wyznaczenie sekwencji przełączeń drugiego zespołu filtrów
for n = 1 : 576 : Nx-1024;
[SMR, pe1, ratio] = MP123psycho( x(n:n+1023), fpr, 3);
pe = [pe pe1]; % zapamiętaj wartość entropii psychoakustycznej widma sygnału
end
628 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

if( pe(1) < pe_prog ) % porównanie entropii psychoakustycznej z progiem


typokna(1) = 0; % poniżej progu − okno długie
else
typokna(1) = 2; % powyżej progu − okno krótkie
end
for k = 2:length(pe)
if( pe(k)<pe_prog ) % preferowane długie FFT długie
if(typokna(k-1)==0) typokna(k)=0; end % zachowaj długie okno (długie)
if(typokna(k-1)==2) typokna(k)=3; end % zacznij przełączać na długie (stop)
if(typokna(k-1)==3) typokna(k)=0; end % zakończ przełączanie na długie (długie)
else % preferowane krótkie FFT krótkie
if(typokna(k-1)==0) typokna(k)=1; end % zacznij przełączać na krótkie okno (start)
if(typokna(k-1)==2) typokna(k)=2; end % zachowaj krótkie okno (krótkie)
if(typokna(k-1)==3) typokna(k)=1; end % wycofaj się z przełączania na długie okno (start)
end
if(typokna(k-1)==1) typokna(k)=2; end % zakończ przełączanie na krótkie okno (krótkie)
end

% Analiza przez pierwszy zespół filtrów (32 kanały częstotliwościowe)


sb = analiza32(x, M, L);
% Uporządkowanie linii częstotliwościowych
sb = invfreq(sb);
% Analiza przez drugi zespół filtrów MDCT (dodatkowych 18 lub 6 kanałów na każdy kanał pierwszego zespołu)
for k = 1:32
a = mdct( sb(:,k), typokna, h0, h1, h2, h3 );
b( 1:18, 1:length(a(1,:)), k) = a;
end

% Motylki antyaliasingowe tylko dla długich bloków: „zrób to sam” (typmotylka = koder, czyli „w przód”)
% b = motylki(b, typokna, typmotylka);

% Kodowanie strumienia bitów (skalowanie, nieliniowa kwantyzacja, koder Huffmana)


% .....

% DEKODER MP3
##############################################################################
% Rozkodowanie strumienia bitów (dekoder Huffmana, nieliniowa rekwantyzacja, odwrotne skalowanie)

% Motylki antyaliasingowe tylko dla długich bloków: „zrób to sam” (typmotylka = dekoder, czyli „do tyłu”)
% b = motylki(b, typokna, typmotylka);

% Synteza sygnałów przez drugi zestaw filtrów (złożenie 32 razy po 18 lub 6 podkanałów częstotliwościowych)
for k = 1:32
a = imdct( b(:,:,k), typokna );
sbb( 1:length(a), k ) = a';
end
% Uporządkowanie linii częstotliwościowych
sbb = invfreq(sbb);
% Synteza sygnału przez pierwszy zestaw filtrów (złożenie 32 kanałów częstotliwościowych)
y = synteza32(sbb, M, L);
% Prezentacja wyników
subplot(211); plot(x,'k'); title('sygnał analizowany');
subplot(212); plot(y,'k'); title('sygnał zsyntezowany'); pause

Nx = Nx-2*L; Noffs=2*L+36-2; n1=1:Nx-Noffs+1; n2=Noffs:Nx;


xr=x(n1); yr=y(n2);
subplot(211); plot(n1,xr,'r',n1,yr,'b'); title('WE (czerw) WY (nieb)');
subplot(212); plot(n1,xr-yr); title('Różnica WE-WY'); pause
SnrdB = 10*log10( sum(xr.^2) / sum((xr-yr).^2) ), pause

% Test odsłuchowy
soundsc(xr, fpr), pause % oryginał
soundsc(yr, fpr), pause % kopia

function sb = analiza32(x, M, L)
% 32-kanałowy zespół filtrów analizy
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 629

% Inicjalizacja
load enwindow.dat; pk=enwindow'; % wczytanie okna analizy
n=0:2*M-1; % #
for k=0:M-1 % #
A(k+1,1:2*M) = 2*cos((pi/M)*(k+0.5).*(n-M/2)); % # oblicz macierz polifazową syntezy
end % #
% Zespół filtrów: analiza
sb = []; bx512 = zeros(1,L); % zerowanie
for k = 1 : length(x)/M
bx512 = [ x(k*M:-1:(k-1)*M+1) bx512(1:L-M) ]; % załadowanie 32 nowych próbek do bufora
for m = 1 : 2*M
u(m) = sum( bx512(m:2*M:L).*pk(m:2*M:L) ); % filtracja polifazowa
end
sb32 = A*u'; % modulacja kosinusowa
sb = [sb; sb32']; % dodaj jako kolejny wiersz
end

function y = synteza32(sb, M, L)
% 32-kanałowy zespół filtrów syntezy

% Inicjalizacja
load dewindow.dat; pd=dewindow'; % wczytaj okno syntezy
n=0:2*M-1; % #
for k=0:M-1 % #
B(k+1,1:2*M) = 2*cos((pi/M)*(k+0.5).*(n+M/2)); % # oblicz macierz polifazową syntezy
end % #
MM=2*M; M2=2*M; M3=3*M; M4=4*M; Lp=L/MM; m=0:Lp-1; % Lp = długość składowych polifazowych
% Zespół filtrów: synteza
y=[]; bv=zeros(1,2*L); % zerowanie
ns = length(sb(:,1)); % liczba wierszy równa liczbie widm 32-elementowych
for k = 1 : ns
v = B'*sb(k,1:M)'; % demodulacja kosinusowa
bv = [ v' bv(1:2*L-M2) ]; % wstawienie do bufora
for n = 1 : M % filtracja polifazowa
ys(n) = sum( bv(n+M4*m).*pd(n+M2*m) ) + sum( bv(n+M3+M4*m).*pd(n+M+M2*m) );
end
y = [ y ys ];
end

function sb18 = mdct(x, typokna, h0, h1, h2, h3 )


% analiza MDCT

x = x'; % x - dekomponowany sygnał podpasmowy (1 z 32 kanałów częstotliwościowych)


ng = 18; % liczba próbek 1 "granuli"
sb18 = []; xold = zeros(1,18); % sb18 − macierz wynikowa
for ig = 1 : length(typokna) % kolejne "granule" 18-próbkowe
xnew = x( (ig-1)*ng+1 : 1 : ig*ng ); % pobierz 18 próbek podpasmowych
xall = [xold xnew]; % uaktualnij bufor
xold = xnew; % zapamiętaj dla następnej "granuli"
if(typokna(ig)==2) nh=12; np=3; noffs=6; % okno krótkie (długość, liczba położeń, przesunięcie)
else nh=36; np=1; noffs=0; end; % okna pozostałe
nb = nh/2; % liczba próbek przesunięcia okna
switch ( typokna(ig) )
case 0, h = h0; % okno "długie"
case 1, h = h1; % okno "start"
case 2, h = h2; % okno "krótkie"
case 3, h = h3; % okno "stop"
end

sbm = []; bx = zeros(1,nh); k = 0 : nh-1;


630 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

for ip = 1 : np % kolejne położenia okna


bx( 1 : nh ) = xall( 1+noffs+(ip-1)*nb : nh+noffs+(ip-1)*nb );
yi = h .* bx; % iloczyn okna i sygnału
for i = 0 : nb-1 % współczynniki transformaty
sb(i+1) = sum( yi(k+1) .* cos( (pi/nb) * (i+1/2)*(k+1/2+nb/2) ) );
end
sbm(:,ip) = sb'; % zapamiętaj
end
if( typokna(ig)==2 )
sb18 = [ sb18 [sbm(1:nb,1); sbm(1:nb,2); sbm(1:nb,3);] ]; % okno „krótkie”
else
sb18 = [ sb18 sbm(1:nb,1) ]; % okna pozostałe
end
end

function x = imdct( sb18, typokna, h0, h1, h2, h3 )


% synteza IMDCT

sb18 = sb18(:,:,1); % 1 z 32 sygnałów podpasmowych po rozłożeniu na 18 (6) dodatkowych podpasm


[M, Ng] = size(sb18); % M = 18, Ng − liczba 18-próbkowych "granuli"
x=[]; y=zeros(1,36); % inicjalizacja

for ig = 1 : Ng % kolejne "granule"


switch ( typokna(ig) ) % wybierz okno
case 0, h = h0; % okno "długie"
case 1, h = h1; % okno "start"
case 2, h = h2; % okno "krótkie"
case 3, h = h3; % okno "stop"
end

sb = sb18(1:18, ig); % pobranie kolejnej 18-próbkowej „granuli”


if( typokna(ig) == 2 ) % reorganizacja macierzy danych
sbm = [ reshape(sb,6,3) ]; % okno "krótkie": 18x1 --> 6x3
nh = 12; np = 3; noffs = 6; % długość, liczba położeń, przesunięcie okna
else
sbm = sb; % okna pozostałe: 18x1 --> 18x1
nh = 36; np = 1; noffs = 0; % długość, liczba położeń, przesunięcie okna
end
nb = nh/2; h = h/nb; i = 0 : nh-1; % ustawienie wartości parametrów

for is = 1 : np % kolejne położenie okna


y1 = zeros(1,nh); % inicjalizacja
for k = 0 : nb-1 % synteza kolejnego fragmentu sygnału y1
y1 = y1 + sbm(k+1,is) * cos((pi/nb)*(k+1/2)*(i+1/2+nb/2));
end
y1 = h .* y1; % nałożenie okna
nr = 1+noffs+(is-1)*nb : nh+noffs+(is-1)*nb; % przesunięcie okna
y( nr ) = y( nr ) + y1; % dodaj kolejny fragment sygnału
end
x = [ x y(1:18) ]; % zapamiętaj
y = [ y(19:36) zeros(1,18) ]; % zmodyfikuj bufor
end

function wy = invfreq( we )
% uporządkowanie linii częstotliwościowych we właściwej kolejności
for j = 2 : 2 : 32
for i = 2 : 2 : length(we(1,:))
we(i,j) = -we(i,j); % zaneguj parzyste próbki (i) w parzystych podpasmach częstotliwościowych (j)
end
end
wy = we;
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 631

21.5. Kodowanie dźwięku na poziomach MP1 i MP2


A teraz będzie to co „tygrysy lubią najbardziej”: kompletny przykład algorytmu oraz programu
kodera i dekodera dźwięku. Sam chciałbym, aby był to kodek MP3, ale niestety jest on zbyt
złożony i rozsadziłby i tak już naruszone w tym rozdziale proporcje pomiędzy częścią opisową
a programową. Dlatego mając na uwadze kończącą się już zapewne cierpliwość części Czy-
telników (mam nadzieję, że pozostającą w mniejszości) poniżej opisano „tylko” kodek MP2.
Tylko, ale za to w sposób pełny. Przedstawiono szczegółowo cały tor przetwarzania sygnału
audio od zbioru typu wav do zbioru typu mpg i odwrotnie. Zachowano przy tym pełną zgod-
ność bitową zapisu, dając w ten sposób możliwość odsłuchania skompresowanych nagrań na
dowolnym odtwarzaczu nagrań dźwiękowych typu MediaPlayer.
Nie ma przetwarzania (sygnałów) bez programowania. Zaprezentowany w tym rozdziale pro-
gram jest napisany w języku Matlab. Z powodu wektorowo-macierzowego zapisu zyskuje on
na czytelności (prostocie). Nie ulega jednak żadnej wątpliwości, że jest to implementacja bar-
dziej poglądowa i dydaktyczna niż praktyczna z powodu dużej czasochłonności obliczeń. Ma
jednak tę zaletę, że jest zrozumiała i kompletna, dlatego w razie potrzeby w sposób prosty
można ją przetłumaczyć na inny język, na przykład C lub asembler dowolnego procesora.
Nic tak nie uczy jak przykład. A więc do dzieła!

21.5.1. Algorytm kompresji i dekompresji

Schemat blokowy algorytmów MP1 i MP2 kompresji i dekompresji sygnałów dźwiękowych


jest przedstawiony na rysunkach 21.17 i 21.18, a na rysunku 21.19 − struktura pojedynczej
ramki danych. Rozszerzenia (różnice) algorytmu MP2 w stosunku do MP1 są na nich zazna-
czone szarym kolorem.

Zespół filtrów. Sposób normalizacji. Zacznijmy od kodera. Sygnał audio wchodzi jednocześ-
nie do 32-kanałowego zespołu filtrów, opisanego w rozdziale 21.4, oraz do modułu modelowa-
nia psychoakustycznego, przedstawionego w rozdziale 21.3. W zespole filtrów w jednej ramce
są przetwarzane 1152 próbki sygnału: na wyjściu każdego z 32 kanałów częstotliwościowych
otrzymujemy po 36 próbek dźwiękowych. Próbki te są następnie dzielone na trzy bloki B1, B2
i B3, po 12 próbek w każdym. Dla każdego bloku jest znajdowana w tabeli 21-6 najmniejsza
wartość współczynnika skalującego, większa od wszystkich próbek bloku (co do modułu). Na-
stępnie na podstawie tablic 21-7 i 21-8 jest podejmowana decyzja, które ze współczynników
skalujących SCF (Scaling Factors) będą wykorzystywane do normowania (podzielenia) war-
tości sygnału w każdym podpaśmie. W tym celu oblicza się dwie różnice indeksów znalezio-
nych współczynników: ∆nr(B12) = nr(B1) − nr(B2) (pierwszy blok minus drugi) i ∆nr(B23) =
= nr(B2) − nr(B3) (drugi blok minus trzeci), oraz przyporządkowuje tym różnicom numer klasy,
od 1 do 5, w sposób zdefiniowany w tablicy 21-7. Następnie na podstawie tablicy 21-8 określa
się, które z trzech współczynników skalujących będą zastosowane do normalizacji i przesyłane
dla różnych kombinacji klas B12 i B23 oraz nadaje się temu wyborowi specjalny kod, od 0 do 3,
znany dekoderowi. Po co to się robi? Chce się uniknąć na przykład sytuacji, w której przesyła
się 3 współczynniki skalujące a można tylko 1 lub 2, gdyż mają one zbliżone wartości. Ozna-
czenie kodowe jest następujące (SCFI − Scale Factors’ Information):
− kod 0: trzy współczynniki,
− kod 1: dwa współczynniki, pierwszy z nich zastosuj dla bloków B1 i B2,
632 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

− kod 2: tylko jeden współczynnik dla trzech bloków,


− kod 3: dwa współczynniki, drugi z nich zastosuj dla bloków B2 i B3.
Informację, który ze współczynników ma być zastosowany i przesłany odczytuje się w trzeciej
kolumnie tabeli 21-8. Przykładowo sekwencja w drugim wierszu „1 2 2” tej tabeli oznacza, że
będą zastosowane i przesłane tylko dwa współczynniki skalujące z bloków B1 i B2, oraz że
drugi współczynnik zostanie użyty także dla bloku B3. Na rysunku 21.19 czarnymi kropkami
zaznaczono przesyłane współczynniki i bloki, których dotyczą, strzałkami zaś pokazano na
bloki, w których są dodatkowo stosowane.
W algorytmie MP1 występuje tylko jeden 12-próbkowy blok danych i zawsze jest przesyłany
jego współczynnik skalujący.

Model psychoakustyczny. Równolegle w modelu psychoakustycznym te same próbki sygnału


dźwiękowego są poddane analizie, mającej na celu odpowiedź na pytanie, jakie jest znaczenie
poszczególnych sygnałów podpasmowych na subiektywną ocenę jakości percepcyjnej dźwię-
ku. Oblicza się w nim za pomocą algorytmu FFT transformatę Fouriera dla 512 (MP1) lub
1024 (MP2) próbek sygnału audio, a następnie drogą żmudnych przeliczeń (patrz program
z tabeli 21-3) wyznacza się stosunek sygnału do progu maskowania SMR (Signal to Mask Ra-
tio) w każdym z 32 kanałów częstotliwościowych. Ponieważ w algorytmie MP1 ramka danych
wynosi 32×12 = 384 próbki (jeden blok danych), a w MP2 − 32×36 = 1152 próbki (trzy bloki
danych), poddawany FFT wektor danych o długości 512 lub 1024 próbek jest przesunięty
w stosunku do danych filtrowanych. Przesunięcie to wynika dodatkowo z opóźnienia wprowa-
dzanego przez zespół filtrów.

Alokacja bitów. I co dalej? Następuje „spotkanie po latach”, czyli połączenie się obu, równo-
ległych do tej pory torów przetwarzania sygnału w bloku alokacji bitów. Wiadomo już, które
współczynniki normujące będą przesyłane oraz jaka jest gradacja kanałów podpasmowych pod
względem percepcji dźwięku. Równocześnie jest znana wybrana przez użytkownika przepływ-
ność bitowa pb (liczba kilobitów na sekundę), która przy znajomości częstotliwości próbkowa-
nia sygnału fpr (kiloherce) jednoznacznie określa długość bitową ramki danych, przypadającą
na blok 384 (MP1) lub 1152 (MP2) próbek (w przypadku kodowania dwóch kanałów lub syg-
nału stereo liczba próbek na ramkę ulega podwojeniu). Po wyrażeniu w bajtach długość ramki
danych jest równa:
pb / 8
N ramki = , K = 384 (MP1), K = 1152 (MP2) (21.46a)
f pr / K
lub
pb
N ramki = K ⋅ , K = 12 (MP1), K = 144 (MP2) (21.46a)
f pr

Dla częstotliwości próbkowania fpr = 44,1 kHz wyliczona z (21.46) długość ramki w bajtach
nie jest liczbą całkowitą. Dlatego zaokrągla się ją do dołu i co jakiś czas wysyła się ramkę o je-
den bajt dłuższą, ustawiając odpowiedni znacznik w jej nagłówku (padding bit). Ma to na celu
pełne wykorzystanie „wykupionego” pasma transmisyjnego, np. w przypadku radiostacji cyfro-
wych. Tego rozwiązania nie zaimplementowano jednak w programie przedstawionym w tabeli
21-11, mając na uwadze jego prostą postać. Zadana przepływność bitowa determinuje także
wartość parametru sblimit, określającego numer ostatniego podpasma częstotliwościowego,
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 633

którego próbki dźwiękowe będą kodowane (w standardzie podpasma są numerowane od


0, a w tabeli 21-10 od 1).
Kontynuując, skoncentrujmy na chwilę naszą uwagę na rysunku 21.19. W module alokacji bi-
tów od znanej długości ramki odejmuje się obligatoryjne 32 bity nagłówka (w tym 2 bity na
numer poziomu kodowania, 4 bity na przepływność bitową i 2 bity na numer częstotliwości
próbkowania) oraz 16 bitów opcjonalnej ochrony CRC (u nas nie używanych). Pozostałe bity
przyznaje się w sposób adaptacyjny według znanej zasady: „każdemu (podpasmu) według jego
potrzeb” psychoakustycznych. Jako informacja o alokacji bitów w poszczególnych kanałach są
zapisywane (przesyłane) numery kolumny od 1 do 15 w tabeli 21-9, zaznaczone czcionką po-
grubioną. Dla każdego podpasma na ten numer jest przeznaczona różna liczba bitów, od 4 bi-
tów dla niższych częstotliwości do 2 bitów dla wyższych częstotliwości. Powoduje to, że kana-
ły częstotliwościowe o wyższych numerach mają mniej możliwości wyboru liczby poziomów
kwantowania. Przykładowo na numery kanałów od 24 do 30 przeznacza się tylko dwa bity.
Wówczas kombinacje bitów ‘00’, ‘01’, ‘10’ i ‘11’ dla jednego z tych kanałów oznaczają: brak
przydziału bitów oraz odpowiednio 3, 7 i 65535 poziomów kwantowania (2, 3 i 16 bitów).
Wartość przepływności bitowej odczytana z nagłówka określa numer ostatniego kanału (para-
metr sblimit), który może być przesyłany: numer ten maleje wraz ze wzrostem przepływności
i wynosi 30, 27, 12, 8. Pozostałe kanały nie są kodowane. Następnie w ramce zapisuje się na
2 bitach kod informacji o wyborze współczynników skalowania dla podpasm przesyłanych
(wartości od 0 do 3 w ostatniej kolumnie tabeli 21-8), numery tych współczynników (wartości
od 0 do 62 z tabeli 21-6) oraz próbki dźwiękowe, zakodowane z wykorzystaniem przyznanej
liczby poziomów kwantyzacji.
Podsumowując i uszczegółowiając, w module alokacji bitów są kolejno wykonywane następu-
jące operacje (po synchronizacji z początkiem ramki):
1) odczytanie z nagłówka kodu przepływności bitowej i prędkości próbkowania oraz oblicze-
nie z (21.46) długości ramki w bajtach; odjęcie od tej liczby 32 bitów nagłówka, 16 bitów
opcjonalnej ochrony CRC (jeśli jest ustawiony odpowiedni bit w nagłówku) oraz bitów potrze-
bnych do zakodowania informacji o alokacji bitów (przykładowo dla przepływności bitowej 64
kilobitów na sekundę oraz częstotliwości próbkowania 44,1 kiloherca przesyłanych jest ma-
ksymalnie sblimit = 27 kanałów, z których kanały 1 − 11 potrzebują po 4 bity na kanał, kanały
12 − 23 po 3 bity, a kanały 24 − 27 po 2 bity, czyli łącznie w tym przypadku należy odjąć 88
bitów);
2) znalezienie numeru podpasma, dla którego funkcja SMR przyjmuje maksimum i potrakto-
wanie go jako numeru wiersza do tabeli 21-9 (po jej rozwinięciu na poszczególne podpasma
ma ona 30 wierszy);
3) zwiększenie o jeden przesyłanego numeru kolumny w tym wierszu (na początku numery ko-
lumn są wyzerowane we wszystkich podpasmach); jeśli robi się to po raz pierwszy w danym
wierszu, to od aktualnej liczby bitów, które jeszcze pozostały do dyspozycji, należy odjąć bity
potrzebne na przesłanie współczynników skalujących SCF oraz informacji o ich wyborze
SCFI;
4) odczytanie w nowej kolumnie nowej liczby poziomów kwantyzacji próbek w danym pod-
paśmie, np. 31; na tej podstawie należy obliczyć przyrost bitów związanych z nowym kodo-
waniem danych, korzystając z ostatnich dwóch kolumn tabeli 21-10 (liczba próbek i bitów na
jedno słowo kodowe); przyrost ten należy odjąć od pozostałej jeszcze do dyspozycji liczby bi-
tów; przykładowo przejście z 15 na 31 poziomów kwantyzacji, czyli z 4 na 5 bitów na jedną
daną, spowoduje w jednym kanale składającym się z 36 próbek dźwiękowych przyrost
634 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

o 36*(5−4) = 36 bitów; problem kodowania kilku próbek dźwiękowych w jednym słowie ko-
dowym będzie wyjaśniony później;
5) odczytanie z szóstej kolumny tabeli 21-10 informacji o nowej wartości współczynnika syg-
nału do szumu SNR dla nowej liczby poziomów kwantyzacji; od aktualnej, maksymalnej war-
tości SMR (w modyfikowanym kanale) należy odjąć przyrost wartości SNR, związany
z przyrostem poziomów kwantyzacji (przykładowo skok w pierwszej kolumnie tabeli 21-10
z wiersza 5 na 6 odpowiada zmianie poziomów kwantyzacji z 15 na 31, a to z kolej prowa-
dzi do przyrostu wartości SNR o 25,28−20,84 = 4,44 decybela i tyle trzeba odjąć od wartości
SMR w modyfikowanym kanale częstotliwościowym);
6) jeśli w wyniku odejmowania bitów w punktach 3) lub 4) zapas wolnych bitów uległ wy-
czerpaniu, alokacja bitów zostaje zakończona, a wyniki działania wszystkich operacji wyko-
nanych w tych punktach − anulowane; w przeciwnym przypadku następuje skok do punktu 2
i ... „karuzela kręci się dalej”.

Normalizacja, kwantyzacja, grupowanie, kodowanie. Dopiero po zakończeniu procedury alo-


kacji bitów wiadomo, próbki z których podpasm częstotliwościowych będą dalej przetwarzane
i przesyłane. W pierwszej kolejności są one dzielone przez przyporządkowane im współczyn-
niki skalujące. Zadaniem tej operacji jest unormowanie danych, tzn. sprowadzenie ich wartości
do przedziału (−1, 1). Następnie korzysta się z tabeli 21-10 oraz wiedzy dotyczącej liczby po-
ziomów kwantyzacji przydzielonych na próbki każdego przesyłanego (zapisywanego) pasma
częstotliwościowego: próbki dźwiękowe są mnożone przez odpowiadające im współczynniki
A, do wartości iloczynu są dodawane współczynniki B, pozostawianych jest tyle najbardziej
znaczących bitów wyniku ile jest potrzebnych w związku z liczbą poziomów kwantowania (np.
2 bity dla 3 poziomów oraz 3 bity dla 5 poziomów), a na zakończenie najstarszy bit jest nego-
wany. Zakłada się w tym momencie, że dane w kanałach są zapisane jako liczby ułamkowe ze
znakiem (7.5). Liczby A i B odgrywają rolę współczynników kwantyzacji. Kolejnym krokiem
jest odczytanie z przedostatniej kolumny tabeli 21-10 liczby próbek przypadających na jedno
słowo kodowe, z ostatniej zaś − liczby bitów tego słowa. W przypadku kiedy w przetwarzanym
podpaśmie przypadają trzy dane na jedno słowo kodowe, grupuje się trzy następujące po sobie
słowa kodowe już przetworzonych próbek dźwiękowych w jedno supersłowo, tak zwany try-
plet. Jeśli te kolejne słowa oznaczymy jako x, y, z, to ich grupowanie jest opisane następują-
cymi równaniami odpowiednio dla 3, 5 i 9 poziomów kwantowania:
v3 = 9 z + 3 y + x , v5 = 25 z + 5 y + x, v9 = 81z + 9 y + x (21.47a, b, c)

Ponieważ liczby x, y, z przyjmują tylko wartości: (21.47a) − {0, 1, 2}, (21.47a) − {0, 1, 2, 3,
4} albo (21.47c) − {0, 1, ..., 8}, można z nich utworzyć jedną liczbę zapisaną w systemie po-
zycyjnym odpowiednio o podstawie 3, 5 albo 9, i temu właśnie odpowiada równanie (21.47).
Po wykonaniu grupowania pozostawia się taką liczbę najbardziej znaczących bitów wyniku, ja-
ka widnieje w ostatniej kolumnie tabeli 21-10.

Kodowanie ramki. Ostatnią operacją wykonywaną w koderze jest tworzenie strumienia bitów,
odpowiadającego zakodowanym próbkom dźwiękowym (384 lub 1152 próbki na jeden kanał
dla algorytmu MP1 oraz MP2). Strukturę ramki danych, przedstawioną na rysunku 21.19, o-
mówiono już podczas opisu algorytmu alokacji bitów. Ramka zaczyna się 32-bitowym na-
główkiem. Zaczyna go blok 12 jedynek, który może być wykorzystany podczas synchronizacji
wykonywanej podczas „przewijania” nagrania. Potem występują bity niezbędne dla dekodera
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 635

do poprawnego zdekodowania przesyłanych danych. Ich szczegółową interpretację można zna-


leźć w podprogramie MP3zapisz.m, przedstawionym w tabeli 21-11. Do najważniejszych
należy 2-bitowy kod algorytmu kompresji (MP1, MP2 lub MP3), 4-bitowy kod przepływności
bitowej, inny dla różnych algorytmów, oraz 2-bitowy kod częstotliwości próbkowania (44,1;
48 i 32 kiloherce). W zależności od ich wartości zmieniają się tablice współczynników lub ich
interpretacja, przykładowo inne są tablice alokacji bitów (podobne do 21-9) oraz inny jest
numer ostatniego przesyłanego podpasma w tych tablicach (przykładowo 8, 12, 27, 30), co po-
woduje, że różna jest liczba bitów przeznaczonych na informację o alokacji bitów (przykłado-
wo 26, 38, 88, 94) w ramce, o czym lepiej nie zapominać. Należy także zapamiętać, że infor-
macja o alokacji to nie liczba bitów lub poziomów kwantyzacji, ale numer kolumny w tablicy
alokacji. W jej wierszach, przyporządkowanych kolejnym kanałom częstotliwościowym, od-
czytuje się liczbę stosowanych poziomów kwantyzacji w poszczególnych podpasmach.
Łatwo się także pomylić podczas zapisywania próbek dźwiękowych w przesyłanych podpas-
mach: zapisuje się najpierw trzy pierwsze próbki albo tryplet w pierwszym przesyłanym kana-
le, potem w drugim, trzecim, ..., a potem kolejne trzy, i tak dalej.
Co istotne, sposób kodowania sygnału może się zmieniać z ramki na ramkę, na przykład
w przypadku sklejania nagrań pochodzących z różnych źródeł, dlatego należy być czujnym
i nie poprzestawać na zdekodowaniu nagłówka tylko pierwszej ramki zbioru.

Dekompresja. Na rysunku 21.18 jest przedstawiony schemat blokowy dekodera sygnałów


dźwiękowych, zakodowanych algorytmami MP1 lub MP2. Ponownie rozszerzenia MP2 w sto-
sunku do MP1 zaznaczono szarym kolorem. W algorytmie MP1 nie stosuje się grupowania
próbek w tryplety oraz koduje się jednorazowo tylko jeden a nie trzy bloki danych. W związku
z tym ostatnim, przesyłane są numery wszystkich wykorzystywanych współczynników skalują-
cych i nie stosuje się kodów SCFI. Na początku jest dekodowany i interpretowany nagłówek,
a potem w kolejności: bity ochrony CRC jeśli są stosowane (w przypadku sygnalizacji błędu,
najczęściej jest powtarzany sygnał dźwiękowy zdekodowany w poprzedniej ramce), informacja
o alokacji bitów, informacja o liczbie i sposobie użycia współczynników skalujących, numery
stosowanych współczynników oraz kody próbek. W przypadku superkodów, czyli trypletów,
należy je najpierw rozgrupować. Robi się to powtarzając sekwencję dwóch operacji: 1) wy-
znacz resztę dzielenia superkodu przez związaną z nim liczbę poziomów kwantyzacji (3, 5, 9),
2) podziel superkod przez tę liczbę i wróć do punktu 1). Otrzymuje się w ten sposób kody pró-
bek dźwiękowych uporządkowane w poprawnej kolejności. Następnie dokonuje się rekwan-
tyzacji próbek (od numeru przedziału kwantowania powraca się do wartości rzeczywistej
próbki z zakresu (−1, 1): do kodu każdej próbki dodaje się wartość współczynnika D z tabeli
21-10, a następnie wynik sumy mnoży się przez wartość współczynnika C, uwzględniając róż-
ne poziomy kwantowania odpowiadające tym próbkom. Całość kończy denormalizacja próbek
polegająca na ich pomnożeniu przez odpowiedni współczynnik skalujący z tabeli 21-6, uzu-
pełnienie nieprzesyłanych podpasm zerami oraz synteza wynikowego sygnału dźwiękowego
z sygnałów podpasmowych za pomocą zespołu filtrów syntezy. A potem to już tylko „Skończ
Waść, wstydu oszczędź!”.
Uważny Czytelnik z pewnością zauważył, że w standardzie MPEG MP2 audio liczba pozio-
mów kwantowania jest zawsze o 1 mniejsza od maksymalnej możliwej, np. stosuje się 15 po-
ziomów a nie 16 (tabele 21-9 i 21-10). Ma to zapewnić niewystępowanie w strumieniu MPEG
długich sekwencji bitów o wartości 1, co ułatwia synchronizację za pomocą preambuły każdej
ramki, składającej się z sekwencji 12 bitów o wartości 1.
636 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

Zadawana przepływność bitowa


SCF, SCFI wsp. A i B
12 12 12
1 1
2 2 Alokacja Normalizacja Kodowanie
AUDIO Zespół Sposób MPEG
Norma- Alokacja
bitów Kwantyzacja strumienia
filtrów Blok 1 Blok 2 Blok 3 norma-
lizacja na
bitów Grupowanie bitów
analizy lizacji
podpasma trójkami (ramki)
32 32

1 1
2 Model 2
3 psycho-
FFT akustyczny

512 (1024) SMR 32

Rys. 21.17. 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ę

wsp. C i D
12 12 12
1

Dekodowanie Rekwantyzacja 2
MPEG (C & D) Zespół AUDIO
strumienia Denorma-
Blok 1 Blok 2 Blok 3 filtrów
bitów Rozgrupowanie lizacja
syntezy
(ramki) trójek 32

SCF, SCFI

Rys. 21.18. Schemat blokowy dekodera standardu MPEG-1 audio na poziomie MP1 i MP2. Szarym kolo-
rem zaznaczono rozszerzenia poziomu MP2 w stosunku do MP1

32 bity 16 bitów zmienna liczba bitów

CRC BALLOC SCFI SCF Podpasmowe Dane dodatkowe


Nagłówek Ochrona Alokacja bitów Inf. o SCF Wsp. skalujące próbki sygnału (pomocnicze)

12 b − synchronizacja pasmo bity 2 bity/pasmo 6 bitów/wsp. od 1,67 bita/próbkę


4 B1 B2 B3 do 16 bitów/próbkę
2 b − numer poziomu 1−11
12−23 3 00
4 b − przepływność bitowa
24−27(30) 2 01
2 b − cz. próbkowania 10
1−2 4 11
3−8(12) 3

Rys. 21.19. Struktura ramki danych w standardzie MPEG audio na poziomach MP1 i MP2. Szarym kolo-
rem zaznaczono rozszerzenia poziomu MP2 w stosunku do MP1
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 637

Tab. 21-6. Współczynniki skalujące Tab. 21-7. Klasa zmiany numeru współczynnika skalującego
próbki podpasmowe w każdym podpaśmie częstotliwościowym na przykładzie bloków
B1 i B2 (alogicznie dla B2 i B3)
Numer Współczynnik
0 2,00000000000000 ∆nr(B12) = nr(B1) − nr(B2) KlasaB12
1 1,58740105196820
∆nr(B12) ≤ −3 1
2 1,25992104989487
−3 < ∆nr(B12) < 0 2
∆nr(B12) = 0 3
60 0,00000190734863
0 < ∆nr(B12) < 3 4
61 0,00000151386361
62 0,00000120155435 3 ≤ ∆nr(B12) 5

Tab. 21-8. Wybór współczynników skalujących dla każdego


podpasma, spośród współczynników dla bloków B1, B2, B3
KlasaB12 KlasaB23 Wybór Kod
1 1 1 2 3 0
1 2 1 2 2 3
1 3 1 2 2 3
1 4 1 3 3 3
1 5 1 2 3 0
2 1 1 1 3 1
2 2 1 1 1 2

5 5 1 2 3 0

Tab. 21-9. Przykładowa alokacja poziomów kwantyzacji w poszczególnych podpasmach


Numer Bity na Przesyłany indeks (numer kolumny)
podpasma indeks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1−3 4 3 7 15 31 63 127 255 512 1023 2047 4095 8191 16383 32767 65535
4 − 11 4 3 5 7 9 15 31 63 127 255 512 1023 2047 4095 8191 65535
12 − 23 3 3 5 7 9 15 31 65535
24 − 30 2 3 7 65535

Tab. 21-10. Klasy kwantyzacji (rekwantyzacji) próbek podpasmowych dla poziomu MP2 (SK = słowo kodowe)
Liczba poz. SNR Próbki Bity
Wsp. A Wsp. B Wsp. C Wsp. D
kwantyzacji [dB] na SK na SK
3 0,750000000 − 0,250000000 1,33333333333 0,50000000000 0,00 3 5
5 0,625000000 − 0,375000000 1,60000000000 0,50000000000 7,00 3 7
7 0,875000000 − 0,125000000 1,14285714286 0,25000000000 11,00 1 3
9 0,562500000 − 0,437500000 1,77777777777 0,50000000000 16,00 3 10
15 0,937500000 − 0,062500000 1,06666666666 0,12500000000 20,84 1 4
31 0,968750000 − 0,031250000 1,03225806452 0,06250000000 25,28 1 5

65535 0,999984741 − 0,000015259 1,00001525902 0,00003051758 98,01 1 16


638 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

21.5.2. Program komputerowy

Program komputerowy, zaprezentowany w tabeli 21-11, jest końcem naszej długiej „drogi
przez mękę”. Umożliwia on konwersję nagrań dźwiękowych typu wav do postaci mpg, akcep-
towanej przez większość dekoderów multimedialnych. Zaimplementowano w nim opisany po-
wyżej algorytm MP2, który jest mniej efektywny, ale za to zdecydowanie prostszy niż MP3.
Jest to algorytm kompletny. W tekście książki usunięto jedynie część wartości środkowych
z tablic, mając na uwadze osiągniętą dzięki temu „kompresję” tekstu programu. Cały program
jest dostępny na stronie WWW wraz z innymi przykładami do tego podręcznika.
Zwróć uwagę, drogi Czytelniku, na króciutkie wywołanie dosyć długiego podprogramu
MP123psycho.m, bez którego niestety żadna psychoakustyczna kompresja dźwięku nie może
być zrealizowana. Mam nadzieję, że teraz docenisz nasz trud poświęcony w środkowej części
tego rozdziału na zrozumienie podstaw teoretycznych modelowania psychoakustycznego ludz-
kiego narządu słuchu oraz napisanie tego podprogramu.
W programie koduje się i równocześnie rozkodowuje próbki dźwiękowe. Można także zapisy-
wać ostatnio utworzoną ramkę na dysk do zbioru ramka.mpg oraz dodawać ją do zbioru
nagranie.mpg. A jeśli można zapisywać, to także i odczytywać. Niektóre tablice są inaczej za-
pisane niż w rozdziale 21.5.1 podczas opisu algorytmu MP2, co ma zapewnić łatwiejsze ko-
rzystanie z nich podczas obliczeń.
Na co należy zwrócić uwagę? Przede wszystkim na fakt, że w starszych wersjach języka
Matlab wszystkie liczby są traktowane jako zmiennoprzecinkowe − brak jest zmiennych innych
typów, w szczególności liczb całkowitych i ułamkowych ze znakiem, zapisywanych w kodzie
uzupełnień do dwóch U2 (patrz rozdział 7). Mając na uwadze Czytelników dysponujących
starszym oprogramowaniem oraz czytelność kodu, podjęto decyzję, że wszystkie operacje
w programie będą wyłącznie wykonywane na liczbach zmiennoprzecinkowych. Dlatego w inny
sposób niż w standardzie jest wykonywana operacja kwantyzacji próbek dźwiękowych, w któ-
rej powinno się „zostawiać najbardziej znaczące bity i negować bit najstarszy”, co niestety
w zmiennoprzecinkowym Matlabie w prosty sposób nie jest możliwe. Należy jednak podkreś-
lić, ze choć zapis rekwantyzacji wygląda w programie inaczej, to jednak pod względem funk-
cjonalnym jest identyczny z normą. Konsekwencją podjętej decyzji implementacyjnej była
trudność w realizacji wszystkich operacji bitowych, które co prawda występującą w nowszych
wersjach Matlaba, ale były nie do wykorzystania. Dlatego sposób bitowego składania i rozkła-
dania ramki danych został oparty na operacjach tekstowych (głównie funkcji strcat()) oraz
na konwersjach dec2bin() i bin2dec().
Analiza poniższego programu jest Twoim zadaniem domowym, Czytelniku. Jest to najdłuższy
program w tej książce. „Płyń po morzach i oceanach!” i proszę Cię ... nie utoń.

Tab. 21-11. Program w języku Matlab implementujący algorytm MP2 kodera i dekodera sygnału audio
standardu MPEG-1

% Ćwiczenie: Koder i dekoder standardu MPEG-1 audio POZIOMU 2 (MP2)


% Tablice dla częstotliwości 32; 44,1 i 48 kHz

clear all; clf;

global Abwiersz, Abnrkwant, Qbity, Qgrupa

% KLASY KWANTYZACJI DLA POZIOMU 2


% wierszami: liczba kroków kwantowania, liczba bitów na słowo kodowe, liczba próbek na słowo kodowe, SNR [dB]
%=======================================================================================
% Nr klasy 1 2 3 4 5 6 7 8 ... 14 15 16 17
%=======================================================================================
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 639

Qpoziomy = [ 3 5 7 9 15 31 63 127 ... 8191 16383 32767 65535 ];


Qbity = [ 5 7 3 10 4 5 6 7 ... 13 14 15 16 ];
Qgrupa = [ 3 3 1 3 1 1 1 1 ... 1 1 1 1 ];
Qsnr = [ 7 11 16 20.84 25.28 31.59 37.75 43.84 ... 80.03 86.05 92.01 98.01 ];
%=======================================================================================
% TABLICE ALOKACJI BITÓW (AB) dla kolejnych podpasm; przepływności: 56 ... 192 kbity/s
sblimit1 = 27; sumabit1 = 88; % sblimit − numer ostatniego podpasma
sblimit2 = 30; sumabit2 = 94; % sumabit − liczba bitów na indeksy dla tablicy
% kolejno wierszami: ABbity − liczba bitów na numer klasy kwantyzacji, ABwiersz − numer wzorca (wiersza) w
% tablicach Abxxxx, Abmaks − ostatni element w kolejnych wierszach 1, 2, 3, 4 tablic ABxxxx
%=======================================================================================
% Nr podpasma 1 2 3 4 5 6 7 8 9 ..................................27....30
%=======================================================================================
ABbity = [ 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 ];
ABwiersz = [ 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 ];
ABmaks = [ 15 15 7 3 ];
%=======================================================================================
% Nr kolumny 1 2 3 4 5 6 7 8 ... 13 14 15
%=======================================================================================
ABnrkwant = [ 1 3 5 6 7 8 9 10 ... 15 16 17;
1 2 3 4 5 6 7 8 ... 13 14 17;
1 2 3 4 5 6 17 0 ... 0 0 0;
1 2 17 0 0 0 0 0 ... 0 0 0 ];
ABpSNR = [ 7 9 9.28 6.31 6.16 6.09 6.05 6.04 ... 6.02 5.96 6.00;
7 4 5 4.84 4.44 6.31 6.16 6.09 ... 6.03 6.02 17.98;
7 4 5 4.84 4.44 6.31 66.42 0 ... 0 0 0;
7 4 87.01 0 0 0 0 0 ... 0 0 0 ];
ABpbit = [ 60 48 36 36 36 36 36 36 ... 36 36 36;
60 24 24 12 24 36 36 36 ... 36 36 108;
60 24 24 12 24 36 396 0 ... 0 0 0;
60 24 492 0 0 0 0 0 ... 0 0 0 ];
%=======================================================================================
% 17 współczynników kwantyzacji
a = [ 0.750000000 0.625000000 0.875000000 0.562500000 0.937500000 ...
0.968750000 ........... ............ ........... 0.999984741 ];
b = [ -0.250000000 -0.375000000 -0.125000000 -0.437500000 -0.062500000 ...
-0.031250000 ........... ............ ........... -0.000015259 ];
% 17 współczynników rekwantyzacji
c = [ 1.33333333333 1.60000000000 1.14285714286 1.77777777777 1.06666666666 ...
1.03225806452 ............. ............. ............. 1.00001525902 ];
d = [ 0.50000000000 0.50000000000 0.25000000000 0.50000000000 0.12500000000 ...
0.06250000000 ............. ............. ............. 0.00003051758 ];
% 63 współczynniki skalujące
sc = [ 2.00000000000000 1.58740105196820 1.25992104989487 1.00000000000000 ...
0.79370052598410 0.62996052494744 0.50000000000000 0.39685026299205 ...
................ ................ ................ ................ ...
0.00000190734863 0.00000151386361 0.00000120155435 10^-20 ];
sctab = [ 32 16 8 4 2 1 ];
% Tabela wyboru transmitowanych współczynników skalujących (kod: 0 = 3 wsp, 1 = 12 x 2 razy, 2 = 123 x 3 razy,
% 3 = 23 x 2 razy, nr − który współczynnik się powtarza, bit − liczba bitów na numery wsp. skalujących i info o nich
sckod = [ 0 3 3 3 0; 1 2 2 2 1; 2 2 2 2 1; 2 2 2 2 0; 0 3 3 3 0 ];
scnr = [ 0 2 2 3 0; 1 1 1 4 1; 1 1 1 3 1; 2 2 2 3 0; 0 2 2 3 0 ];
scbit = [ 20 14 8 14 8 ];
% Parametry grupowania (w wierszach: liczba bitów/próbkę baza1 baza2 baza3 liczba bitów/triplet)
grupa = [ 2 1 3 9 5;
3 1 5 25 7;
4 1 9 81 10 ];
%==================================================================================
%==================================================================================
%==================================================================================
% Parametry wejściowe
M = 32; % liczba kanałów „kosinusowych”
L = 512; % długość filtra prototypowego
K = 12; % 1/3 liczby próbek w każdym podpaśmie częstotliwościowym w jednej ramce
fpr = 44100; % częstotliwość próbkowania: 32000, 44100 lub 48 kiloherców
poziom = 2; % poziom kodowania (tylko 2, chociaż model psychoakustyczny jest poprawny dla 1, 2 i 3)
strumien = 64; % 56, 64, 80, 96, 112, 128, 160, 192 kbity/s na kanał
640 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

MM=2*M; % liczba kanałów „zespolonych”, rząd decymacji


Lp=L/MM; % długość składowych polifazowych
M2=2*M; M3=3*M; M4=4*M; % pomocnicze parametry
K2=2*K; K3=3*K; blok1=1:K; blok2=K+1:2*K; blok3=2*K+1:3*K;
j = 0 : Lp-1;

% Sygnał testowy
% Nx=5*1152; n=0:Nx-1; x=sin(2*pi*n/27)+sin(2*pi*n/49)+sin(2*pi*n/155); x=x/max(x);
% Nx=2048; x=rand(1,Nx);
% [x,fpr,Nb] = wavread('a44.wav',3*fpr); % wczytaj kodowany fragment sygnału mowy
[x,fpr,Nb] = wavread('bach44100.wav',3*fpr); % wczytaj kodowany fragment sygnału audio
plot(x); title('Sygnał kodowany'); pause % pokaż go
soundsc(x,fpr); % odtwórz na głośnikach (słuchawkach)
Np=M*3*K; % całkowita liczba próbek w jednej ramce danych
Nx=length(x); x=x'; % długość sygnału testowego
Nr=ceil(Nx/Np); x=[x zeros(1,Nr*Np-Nx)]; % uzupełnienie sygnału zerami do pełnej liczby ramek

% Parametry alokacji bitów (Fbity - liczba bitów na jedną ramkę bez prefiksu i informacji o alokacji bitów)
sblimit= sblimit1; sumabit = sumabit1;
if ((fpr==32000 | fpr==48000) & (strumien>80)) sblimit=sblimit2; sumabit=sumabit2; end
Fbajty = floor(144*1000*strumien/fpr); % fpr w Hz, a powinno być w kHz, dlatego *1000
Fbity = 8*Fbajty - 32 - sumabit; % odejmij długość prefiksu oraz info o alokacji bitów
Fbitykopia = Fbity;

% Odpowiedź impulsowa p(n) filtra prototypowego (standardowa nr 1 i niestandardowa nr 2 − tab. 18-4, (18.101))
load enwindow.dat; pe1=enwindow'; % standardowe okno kodera
load dewindow.dat; pd1=dewindow'; % standardowe okno dekodera
Nw = length(pe1); n = 1 : Nw; % ich długość
plot(1:Nw,pe1,'r',1:Nw,pd1,'b'); title('okna: kodera (RED) dekodera(BLUE)'), pause

p = prototyp(L); p = sqrt(M)*p; plot(p); title('Filtr prototypowy'); grid; pause


for m = 1 : 2 : Lp-1
p( m*MM+1 : m*MM+MM ) = -p( m*MM+1 : m*MM+MM ); % negacja co 64 próbki
end
pe2 = p/(2*sqrt(2)); pd2 = (4*sqrt(2))*p; % nowe okna dla kodera i dekodera
plot(n,pe1,'r',n,pe2,'b'); title('okna kodera: norma (RED) nasze (BLUE)'), pause
plot(n,pd1,'r',n,pd2,'b'); title('okna dekodera: norma (RED) nasze (BLUE)'), pause

pe = pe1; pd = pd1; % wybór okien nr 1 lub 2: „do wyboru, do koloru”

% „Polifazowe” macierze filtracji (transformacji) 32-kanałowej: analizy A i syntezy B


m = 0 : 2*M-1;
for k=0:M-1
A(k+1,1:2*M) = 2*cos((pi/M)*(k+0.5).*(m-M/2)); % macierz analizy %
B(k+1,1:2*M) = 2*cos((pi/M)*(k+0.5).*(m+M/2)); % macierz syntezy %
end

% Zerowanie buforów roboczych na sygnał


bx512 = zeros(1,L); bx2304 = zeros(1,2*3*K*M); bv=zeros(1,2*L); y=[];

%
############################################################################################
% PĘTLA GŁÓWNA: Koder i dekoder razem (jedna operacja za drugą) ramka za ramką
% ##########################################################################################
for iter = 1 : Nr % kolejna ramka

iter

% Pobierz kolejną całą ramkę danych do bufora (36*32=1152 próbki)


bx1152 = x( 1+(iter-1)*Np : Np + (iter-1)*Np );
bx2304 = [ bx1152 bx2304(1:3*K*M) ];

% KODER #################################################################################

% Model psychoakustyczny: wyznacz transformatę FFT i funkcję SMR (Signal to Mask Ratio)
[SMR xxx yyy ] = MP123psycho( bx2304, fpr, poziom);
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 641

SMR(sblimit+1 : M) = -300;

% Zespół filtrów analizy


sb = [];
for k = 1 : K3
% załadowanie 32 nowych próbek do bufora
bx512 = [ bx1152(k*M:-1:(k-1)*M+1) bx512(1:L-M) ];
% zespół filtrów: analiza
for m = 1 : 2*M
u(m) = sum( bx512(m:2*M:L).*pe(m:2*M:L) ); % filtracja polifazowa
end
sb32 = A*u'; % modulacja kosinusowa
sb = [sb; sb32']; % dodaj jako kolejny wiersz macierzy
end

% Znajdź wszystkie współczynniki skalujące dla każdego kanału (3 grupy po 12 próbek)


sbmax(1,1:M) = max(abs(sb(1:K,:)));
sbmax(2,1:M) = max(abs(sb(K+1:2*K,:)));
sbmax(3,1:M) = max(abs(sb(2*K+1:3*K,:)));
for k = 1 : M
for l = 1 : 3
tmp = find(sc>sbmax(l,k)); scmax(l,k) = tmp(end);
end
end

% Wybierz optymalne współczynniki skalujące


m=1:M; dsc1(m)=scmax(1,m)-scmax(2,m); dsc2(m)=scmax(2,m)-scmax(3,m); Fbitysci=[];
csc1( find( dsc1 <= -3 ) ) = 1; csc2( find( dsc2 <= -3 ) ) = 1;
csc1( find( -3<dsc1 & dsc1<0 ) ) = 2; csc2( find( -3<dsc2 & dsc2<0 ) ) = 2;
csc1( find( dsc1 == 0 ) ) = 3; csc2( find( dsc2 == 0 ) ) = 3;
csc1( find( 0<dsc1 & dsc1<3 ) ) = 4; csc2( find( 0<dsc2 & dsc2<3 ) ) = 4;
csc1( find( 3 <= dsc1 ) ) = 5; csc2( find( 3 <= dsc2 ) ) = 5;
for k = 1 : sblimit
kod = sckod(csc1(k),csc2(k)); % kod sc i sci od 0 do 3
Fbitysci(k) = scbit(kod+1); % liczba bitów na sc i sci
end

% Dokonaj adaptacyjnej alokacji bitów dla poszczególnych kanałów


Fbity = Fbitykopia; Fballoc = zeros(1,sblimit); SMRkopia=SMR(1:sblimit);
while( (Fbity>0) )
k = find( SMRkopia == max(SMRkopia) );
if( Fballoc(k) == 0 ) Fbity = Fbity - Fbitysci(k); end
if(Fbity < 0) break; end

Fballoc(k) = Fballoc(k)+1;
ekstrabity = ABpbit( ABwiersz(k), Fballoc(k) );
Fbity = Fbity - ekstrabity;
if(Fbity < 0) Fballoc(k) = Fballoc(k)-1; break; end
SMRkopia(k) = SMRkopia(k) - ABpSNR( ABwiersz(k), Fballoc(k) );
end

% Unormuj dane w przesyłanych kanałach


nsci = 1; nsc=1; Fscfi = []; Fscf = [];
for k = 1 : sblimit
if(Fballoc(k)>0)
kod = sckod(csc1(k),csc2(k)); % kod sc i sci od 0 do 3
nr = scnr(csc1(k),csc2(k)); % numer powtarzającego się współczynnika skali
Fscfi(nsci) = kod; nsci=nsci+1; % zapisz
if(kod==0) msc1=scmax(1,k); msc2=scmax(2,k); msc3=scmax(3,k);
Fscf(nsc)=msc1; Fscf(nsc+1)=msc2; Fscf(nsc+2)=msc3; nsc=nsc+3;end
if(kod==1) msc1=scmax(1,k); msc2=msc1; msc3=scmax(3,k);
Fscf(nsc)=msc1; Fscf(nsc+1)=msc3; nsc=nsc+2; end
if(kod==2) if(nr~=4) msc=scmax(nr,k); else msc=min(scmax(1:3,k)); end
msc1=msc; msc2=msc; msc3=msc; Fscf(nsc)=msc; nsc=nsc+1; end
if(kod==3) msc1=scmax(1,k); msc2=scmax(nr,k); msc3=msc2;
Fscf(nsc)=msc1; Fscf(nsc+1)=msc2; nsc=nsc+2; end
sbn(1:K, k) = sb(1:K, k)./sc(msc1);
sbn(K+1:K2, k) = sb(K+1:K2, k)./sc(msc2);
sbn(K2+1:K3,k) = sb(K2+1:K3,k)./sc(msc3);
642 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

end
end

% Skwantuj próbki dźwiękowe w przesyłanych kanałach


Fsb=[]; ns = 0; sbpoziomy = zeros(1,sblimit); sbbity = zeros(1,sblimit);
for m = 1 : K % K = 12 razy
m3 = 1+(m-1)*3 : 3+(m-1)*3;
for k = 1 : sblimit % po trzy próbki w każdym podpaśmie
indeks = Fballoc(k);
if( indeks > 0 )
nrkwant = ABnrkwant( ABwiersz(k), indeks );
poziomy = Qpoziomy( nrkwant );
sbpoziomy(k) = poziomy; sbbity(k) = Qbity( nrkwant );
ak = a( nrkwant );
bk = b( nrkwant );
if( poziomy==3 | poziomy==5 | poziomy==9 ) skala = (poziomy-1);
else skala = (poziomy+1)/2; end
sbk(1:3) = floor( (ak * sbn(m3,k) + bk)*skala + skala );
if(poziomy==3) sbk = sbk(1) + 3.*sbk(2) + 9.*sbk(3); end
if(poziomy==5) sbk = sbk(1) + 5.*sbk(2) + 25.*sbk(3); end
if(poziomy==9) sbk = sbk(1) + 9.*sbk(2) + 81.*sbk(3); end
Fsb = [ Fsb; sbk(:) ];
end
end
end

% Zbuduj ramkę danych wykorzystując Fballoc, Fscfi, Fscf, Fsb: nagłówek, informacja o alokacji bitów
% oraz wyborze współczynników skalujących, numery współczynników skalujących, skwantowane próbki

% Zapisz na dysk ramkę danych


MP2zapis4( Fballoc, Fscfi, Fscf, Fsb, Fbajty, sbpoziomy, sbbity, fpr, ...
strumien, sblimit );

% Odczytaj z dysku ramkę danych


[ FballocX, FscfiX, FscfX, FsbX, fpr, strumien, sblimit ] = MP2odczyt4( Fbajty );

% Opcjonalne podstawienie
Fballoc = FballocX;
Fscfi = FscfiX;
Fscf = FscfX;
Fballoc = FballocX;

% DEKODER ##############################################################################

% Zsynchronizuj się z początkiem ramki i zdekoduj nagłówek, przeczytaj informację o alokacji bitów

% Rekwantyzacja próbek sygnału


ns = 0; ssbk=[];
for m = 1 : K % K=12 razy
m1 = 1+(m-1)*3; m3 = 1+(m-1)*3 : 3+(m-1)*3;
for k = 1 : sblimit % po 3 próbki w każdym kanale
indeks = Fballoc(k);
if( indeks > 0 )
nrkwant = ABnrkwant( ABwiersz(k), indeks );
poziomy = Qpoziomy( nrkwant );
ck = c( nrkwant );
dk = d( nrkwant );
if(poziomy==3 | poziomy==5 | poziomy==9)
skala = (poziomy-1);
tmp = Fsb(ns+1); ns=ns+1;
for(n=0:2) ssbk(m1+n,k)=rem(tmp,poziomy); tmp=floor(tmp/poziomy); end
else
skala = (poziomy+1)/2;
ssbk(m3,k) = Fsb(ns+(1:3)); ns=ns+3;
end
ssbk(m3,k) = ck*( (ssbk(m3,k)-skala) / skala + dk);
end
end
end
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 643

% Denormalizacja próbek sygnału


nsci = 1; nsc=1;
for k = 1 : sblimit
if(Fballoc(k)>0)
kod = Fscfi(nsci); nsci=nsci+1; % odczytaj kod z ramki
if(kod==0) msc1=Fscf(nsc); msc2=Fscf(nsc+1); msc3=Fscf(nsc+2); nsc=nsc+3; end
if(kod==1) msc1=Fscf(nsc); msc2=msc1; msc3=Fscf(nsc+1); nsc=nsc+2; end
if(kod==2) msc1=Fscf(nsc); msc2=msc1; msc3=msc1; nsc=nsc+1; end
if(kod==3) msc1=Fscf(nsc); msc2=Fscf(nsc+1); msc3=msc2; nsc=nsc+2; end
ssb(blok1, k) = sc(msc1) * ssbk(blok1, k);
ssb(blok2, k) = sc(msc2) * ssbk(blok2, k);
ssb(blok3, k) = sc(msc3) * ssbk(blok3, k);
else
ssb(1:K3,k) = zeros(K3,1);
end
end
ssb(1:K3,sblimit+1:M) = zeros(K3,M-sblimit);

% Zespół filtrów: synteza


for k = 1 : K3
v = B'*ssb(k,1:M)'; % demodulacja kosinusowa
bv = [ v' bv(1:2*L-MM) ]; % wstawienie do bufora
for n = 1 : M
ys(n) = sum( bv(n+M4*j).*pd(n+M2*j) ) + sum( bv(n+M3+M4*j).*pd(n+M+M2*j) );
end
y = [ y ys ];
end

% #####################################################################################
end % koniec kolejnej ramki
% #####################################################################################

% Sygnał wyjściowy
y = y/2; % jeśli wszystkie elementy przetwarzania, to wzmocnienie 2-krotne
Noffs=L-M+2; n1=1:Nx-Noffs+1; n2=Noffs:Nx;
xr=x(n1); yr=y(n2);
plot(n1,xr,'r',n1,yr,'b'); title('WE (czerw) WY (nieb)'); pause
plot(n1,xr-yr); title('Różnica WE-WY'); pause
SnrdB = 10*log10( sum(xr.^2) / sum((xr-yr).^2) ), pause
% Test odsłuchowy
plot(y); title('Sygnał zdekodowany'); pause
soundsc(y, fpr)

function MP2zapis( Fballoc, Fscfi, Fscf, Fsb, Nbajtow, sbpoziomy, sbbity, fpr, ...
strumien, sblimit )
% Podprogram zapisu binarnego ramki danych, wyniku kodowania algorytmu MP2
persistent InitPrefiks Prefiks sblimit1 sblimit2 sblimit3;

% Utwórz nagłówek (tylko jeden raz, zapamiętaj i wielokrotnie z niego korzystaj)


if( isempty(InitPrefiks) )
InitPrefiks = 1;
switch( strumien )
case 64, kodstr = '0100'; % 64 kilobity na sekundę
case 96, kodstr = '0110'; % 96
case 128, kodstr = '1000'; % 128
case 192, kodstr = '0110'; % 192
otherwise, disp('Zły strumien'); pause; break;
end
switch( fpr) % częstotliwość próbkowania
case 44100, kodfpr = '00'; % 44.1 kHz
case 48000, kodfpr = '01'; % 48
case 32000, kodfpr = '10'; % 32
otherwise, disp('Zła częstotliwość'); pause; break;
end
Prefiks = ''; % (b) = liczba bitów
Prefiks = strcat( Prefiks, '11111111111'); % (11b) preambuła synchronizacyjna
644 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

Prefiks = strcat( Prefiks, '11'); % (2b) nr algorytmu MPEG: 00=2.5, 10=2, 11=1
Prefiks = strcat( Prefiks, '10'); % (2b) poziom: 11=1, 10=2, 01=3, 00=zarezerwowane
Prefiks = strcat( Prefiks, '1'); % (1b) ochrona przed błędami CRC: 1=nie, 0=tak
Prefiks = strcat( Prefiks, kodstr); % (4b) strumień: 0101=64, 0111=96, 1001=128, 1011=192
Prefiks = strcat( Prefiks, kodfpr); % (2b) cz. próbkowania: 00=44.1, 01=48, 10=32
Prefiks = strcat( Prefiks, '0'); % (1b) znacznik dodatkowego bajtu: 0=nie, 1=tak
Prefiks = strcat( Prefiks, '0'); % (1b) bit wolny
Prefiks = strcat( Prefiks, '11'); % (2b) 00=stereo, 01=~stereo, 10=dwa kanały, 11=jeden
kanał
Prefiks = strcat( Prefiks, '00'); % (2b) tylko dla trybu uproszczone stereo
Prefiks = strcat( Prefiks, '0'); % (1b) prawa autorskie: 0=nie, 1=tak
Prefiks = strcat( Prefiks, '1'); % (1b) 1=oryginał, 0=kopia
Prefiks = strcat( Prefiks, '00'); % (2b) de-emfaza: 00=nie, 01=50/15 mikrosek, 1=CCITTJ.17

sblimit1=11; sblimit2=23; sblimit3=27; % liczba wierszy w tablicy alokacji bitów


if ((fpr==32000 | fpr==48000) & (strumien>80)) sblimit3=30; end
end

% Alokacja bitów
BitAlok = ''; Nb = [ 4 3 2 ]; sblim = [ 0 sblimit1 sblimit2 sblimit3 ];
for k = 1 : 3
Nbb = Nb(k); mod = 2^Nbb;
k1 = sblim(k)+1; k2 = sblim(k);
for(k = k1:k2) BitAlok = strcat( BitAlok, dec2bin(rem(Fballoc(k), mod), Nbb)); end
end

% Informacja o współczynnikach skali i indeksy samych współczynników


WspInfo = ''; WspSkal = '';
Nb=2; mod=2^Nb;
for(k=1:length(Fscfi)) WspInfo=strcat( WspInfo, dec2bin( rem(Fscfi(k),mod), Nb )); end
Nb=6; mod=2^Nb;
for(k=1:length(Fscf)) WspSkal=strcat( WspSkal, dec2bin( rem(Fscf(k),mod), Nb )); end

% Zakodowane próbki w podpasmach częstotliwościowych


Probki = ''; LenAll=0;
for m = 1 : 12 % K=12 razy
for k=1:sblimit % po 3 próbki w każdym podpaśmie
k; Nb = sbbity(k); mod = 2^Nb;
if (Nb ~= 0 )
poz = sbpoziomy(k);
if( poz==3 | poz == 5 | poz ==9) koniec = 1; else koniec=3; end
for m=1:koniec % 1 lub 3 kody w jednym podpaśmie w MP2
str = dec2bin( rem(Fsb(m),mod), Nb);
Probki = strcat( Probki, str );
end
Fsb = Fsb(koniec+1:end); % usuń to co już przeczytane
end
end
end

% Uzupełnienie ramki bitami zerowymi do długości Nbajtow*8


Ramka = strcat( Prefiks, BitAlok, WspInfo, WspSkal, Probki);

% Uzupełnienie ramki bitami zerowymi do długości Nbajtow*8


for k = length( Ramka )+1 : Nbajtow*8
Ramka = strcat( Ramka, '0');
end

% Zapisanie ramki do osobnego zbioru "ramka.mpg", dodanie jej do zbioru "nagranie.mpg" (utwórz jeśli nie istnieje)
ZbiorWY1 = fopen('ramka.mpg','w'); % 'w' = zapisz do zbioru, usuń starą zawartość jeśli zbiór istnieje
ZbiorWY2 = ('nagranie.mpg','a'); % 'a' = dodaj binarnie do zbioru
Nbajt = length(Ramka)/8;
for k = 0 : Nbajt-1
fwrite(ZbiorWY1, bin2dec( Ramka(1+k*8 : 8+k*8) ),'uchar');
fwrite(ZbiorWY2, bin2dec( Ramka(1+k*8 : 8+k*8) ),'uchar');
end
Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku 645

fclose(ZbiorWY1);
fclose(ZbiorWY2);

function [Fballoc, Fscfi, Fscf, Fsb, fpr, strumien, sblimit] = MP2odczyt(Nbajty)


% Podprogram odczytu binarnego wyniku kodowania MP2
global Abwiersz, Abnrkwant, Qbity, Qgrupa

Fballoc=[]; Fscfi=[]; Fscf=[]; Fsb=[];

% Wczytaj cały zbiór


ZbiorWE = fopen('ramka.mpg','r');
Ramka = fread(ZbiorWE,inf,'uchar');
fclose(ZbiorWE);

% Pobierz tylko pierwszych Nbajtów do tablicy znakowej, ponieważ brak synchronizacji


RamkaS = '';
for(k = 1 : Nbajty) RamkaS = strcat( RamkaS, dec2bin(Ramka(k),8)); end
disp( sprintf('Ramka = %s', RamkaS( 1:11)) );
disp( sprintf('ID = %s', RamkaS(12:13)) );
disp( sprintf('Poziom = %s', RamkaS(14:15)) );
disp( sprintf('Strumien = %s', RamkaS(17:20)) );
disp( sprintf('Częstotliwość = %s', RamkaS(21:22)) );
disp( sprintf('Stereo/mono = %s', RamkaS(25:26)) );
pause

Nstrumien = bin2dec( RamkaS(17:20) ); % numer przepływności bitowa


Nfpr = bin2dec( RamkaS(21:22) ); % numer częstotliwości próbkowania

switch( Nstrumien ) % przepływność bitowa


case 4, strumien = 64; % 64 kilobity na sekundę
case 6, strumien = 96; % 96
case 8, strumien = 128; % 128
case 10, strumien = 192; % 192
otherwise, disp('Zły strumień wejściowy');
end

switch( Nfpr ) % częstotliwość próbkowania


case 0, fpr = 44100; % 44.1 kHz
case 1, fpr = 48000; % 48
case 2, fpr = 32000; % 32
otherwise, disp('Zła częstotliwość próbkowania');
end

sblimit=27; sb1=11; sb2=12; sb3=4; % parametry "dostępu" do tablicy alokacji bitów


if ((fpr==32000 | fpr==48000) & (strumien>80)) sblimit=30; sb3=7; end

% Alokacja bitów
n1st=32; Nb=4;
for n=0:sb1-1, Fballoc(n+1) = bin2dec( RamkaS(n1st+1+n*Nb : n1st+Nb+n*Nb) ); end
n1st=n1st+sb1*Nb; Nb=3;
for n=0:sb2-1, Fballoc(sb1+n+1) = bin2dec( RamkaS(n1st+1+n*Nb : n1st+Nb+n*Nb) ); end
n1st=n1st+sb2*Nb; Nb=2;
for n=0:sb3-1, Fballoc(sb1+sb2+n+1) = bin2dec(RamkaS(n1st+1+n*Nb : n1st+Nb+n*Nb)); end
n1st=n1st+sb3*Nb;

% Informacja o współczynnikach skali


Nscfi = sum( Fballoc > 0 );
Nb=2; for n=0:Nscfi-1, Fscfi(n+1)=bin2dec( RamkaS(n1st+1+n*Nb : n1st+Nb+n*Nb) ); end
n1st=n1st+Nscfi*Nb;

% Współczynniki skali
Nscf = 3*sum(Fscfi==0) + 2*(sum(Fscfi==1)+sum(Fscfi==3)) + 1*sum(Fscfi==2);
Nb=6; for n = 0:Nscf-1, Fscf(n+1) = bin2dec( RamkaS(n1st+1+n*Nb : n1st+Nb+n*Nb) ); end
n1st=n1st+Nscf*Nb;
646 Projekt MPEG AUDIO: psychoakustyczna kompresja dźwięku

% Próbki dźwiękowe
m = 1; K = 12;
for l = 1 : K % K=12 razy
for k = 1 : sblimit % po trzy próbki w każdym podpaśmie
indeks = Fballoc(k);
if(indeks > 0 )
nrkwant = ABnrkwant( ABwiersz(k), indeks );
grupa = Qgrupa( nrkwant );
Nb = Qbity( nrkwant );
if( grupa==3 ) % jeden kod na trzy próbki
Fsb(m) = bin2dec( RamkaS(n1st+1 : n1st+Nb) ); m=m+1;
n1st = n1st+Nb;
else % jeden kod na próbkę, trzy próbki
for n=0:2, Fsb(m)=bin2dec(RamkaS(n1st+1+n*Nb : n1st+Nb+n*Nb)); m=m+1; end
n1st = n1st+3*Nb;
end
end
end
end

Fsb = Fsb';
22
Projekt OBRAZ:
podstawy analizy i przetwarzania
sygnałów dwuwymiarowych

Piękne widoki. Świat w dwóch, trzech i ... wielu wymiarach. Szaleństwo formy, bogactwo tre-
ści. W tym rozdziale chciałbym zaproponować Ci drogi Czytelniku rozstanie się na chwilę
z szarą rzeczywistością dwóch wymiarów osi x-y (argument x, wartość funkcji y) na rzecz ba-
jecznego, bo jeszcze nieznanego świata trzech wymiarów osi x-y-z (argumenty x i y, wartość
funkcji z). Do tej pory zajmowaliśmy się funkcjami (sygnałami) jednego argumentu (1D), np.
zmiennością sygnału mowy w czasie s(t), teraz chcemy dziarsko wkroczyć w świat funkcji
(sygnałów) dwuargumentowych s(x, y) (2D) i zacząć badać, na przykład, zmienność natężenia
pola magnetycznego lub chropowatości w zależności od położenia punktu pomiarowego na
płaszczyźnie wyznaczonej przez dwie osie x i y. A jakbyśmy się szybko uporali z tym proble-
mem, to zawsze mamy jeszcze w zapasie sygnały trzyargumentowe s(x, y, z), czyli np. dane
tomograficzne pacjenta, będące rejestracją gęstości materii w trzech wymiarach przestrzeni.
I tak dalej .... bez końca. Jak z ciągle oddalającym się horyzontem.
Czy mamy w związku z tym się martwić, że stajemy obecnie w obliczu problemów o złożo-
ności nie N, tylko N 2, N 3, N 4? Oczywiście, że nie. Mając prawo jazdy i znając zasady ruchu
drogowego, możemy wierzyć, że damy sobie radę przesiadając się z dwóch kółek na cztery,
a potem na sześć, osiem. Znam profesora, który zmieniając pracę i miejsce zamieszkania
w Stanach Zjednoczonych Ameryki, wynajął ciężarówkę i sam przewiózł dorobek swojego ży-
cia od zachodniego do wschodniego wybrzeża. Najważniejsze są podstawy. Jak się wkrótce
okaże, znajomość analizy i przetwarzania sygnałów 1D bardzo nam się przyda przy analizie
sygnałów dwuwymiarowych, w szczególności o b r a z ó w .
Istnieją tysiące medycznych, przemysłowych, wojskowych i naukowych zastosowań cyfrowej
analizy i przetwarzania obrazów. Nawet nie będę próbował ich wyliczać. Rysunek 22.1 stano-
wi zbiór luźno rzuconych, ale reprezentatywnych haseł (symboli). Taniejące cyfrowe aparaty
fotograficzne i kamery sprawiły, że i Ty drogi Czytelniku pewnie już próbowałeś bawić się
w artystę fotografa, a jeśli jeszcze nie − to może wkrótce to nastąpi. Dlatego, jeśli ciągle nie
jesteś zdecydowany czy kontynuować dzisiaj lekturę tego rozdziału, to wiedz, że pozwoli Ci
ona w jakimś sensie zrozumieć świat fotografii cyfrowej.
A więc w drogę!
648 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b)

c) d)

e) f)

g) h)

Rys. 22.1 Przykłady obrazów i zastosowań: a) obraz testowy Kamerzysta (Cameraman) do badania skutecz-
ności metod kompresji, b) nauka (powierzchnia Księżyca), c) bezpieczeństwo (samolot wroga, ciągle na zie-
mi), d) zdalny nadzór (np. sytuacja komunikacyjna i pożarowa w mieście), e) stan zdrowia (krew), f) jakość
produkcji (wełniane ubranie), g) identyfikacja (odciski palców), h) rozpoznawanie elementów obrazu (np.
kod pocztowy na kopercie, kody paskowe na sprzedawanych towarach, wyznaczanie optycznej rozdzielczo-
ści obiektywów aparatów fotograficznych). Pochodzenie obrazów: a) i e) Matlab, pozostałe −Signal & Image
Processing Institute, University of Southern California, http://sipi.usc.edu/database/
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 649

22.1. Wprowadzenie do świata 2D i 3D


W świecie rzeczywistym wartości wielkości fizycznych są funkcją jednego argumentu (np.
czasu t lub położenia x), dwóch argumentów (np. położenia na płaszczyźnie (x, y)) lub trzech
argumentów (np. położenia w przestrzeni (x, y, z)), a nawet czterech argumentów (np. położe-
nia w przestrzeni i w czasie (x, y, z, t), np. zmienny w czasie rozkład temperatury w obiekcie
3D). Po ich zdyskretyzowaniu w osiach argumentów i skwantowaniu w osi wartości otrzymuje
się macier ze liczb: jednowymiarowe (1D), dwuwymiarowe (2D), trójwymiarowe (3D) i czte-
rowymiarowe (4D). Funkcje te mogą być wizualizowane w różny sposób, w wyniku czego są
otrzymywane ich różne „obrazy”, np. widok (projekcja, rzut) obiektu 3D na powierzchni 2D
ekranu monitora komputerowego. Ale jest to zupełnie odrębne zagadnienie, które nie stanowi
przedmiotu naszego zainteresowania. My w tym rozdziale będziemy zajmować się wyłącznie
teoretycznymi i praktycznymi aspektami analizy i przetwarzania d wuwymiar o wych macie-
r zy liczb o wych i postaramy się adaptować do tego celu jak najwięcej narzędzi, które znamy
z analizy i przetwarzania sygnałów, czyli macierzy jednowymiarowych. Tylko j ako p r zy-
kład takich macierzy 2D świadomie wybierzemy obrazy cyfrowe z racji ich bardzo wielu,
ważnych zastosowań. Należy jednak podkreślić, że przeprowadzone rozważania będą miały
zdecydowanie ogólniejszy charakter.

Reprezentacje obrazów cyfrowych


Z powodu braku miejsca, idziemy w tej części na skróty. Możemy sobie na to pozwolić, bo
któż z nas nie robił zdjęć aparatem fotograficznym, na początku „lustrzanką” analogową u-
wieczniającą najczęściej uśmiechniętą rodzinkę na filmie światłoczułym (przypomnijmy rela-
cje: ogniskowa − odległość, czułość filmu − przesłona, dynamika obiektu fotografowanego −
czas otwarcia migawki), a potem aparatem cyfrowym, składającym się z: 1) przetwornika CCD
(Charge-Coupled Device), czyli pamięci analo go wej o postaci matrycy próbek zdyskretyzo-
wanych w przestrzeni lecz nieskwanto wanych w wartości (jasności), 2) rejestrów przesuw-
nych, 3) przetwornika analog-cyfra, oraz 4) karty pamięci cyfrowej typu FLASH, będącej od-
mianą pamięci EEPROM (Electrically Erasable Programmable Read-Only Memory). My zaj-
mujemy się cyfrowym przetwarzaniem sygnałów, więc zakładamy, że przedmiotem naszego
zainteresowania jest już zdjęcie w postaci cyfrowej, czyli zbiór liczb skwantowanych przez
przetwornik A/C, a więc całkowitych, o rozmiarach zależnych od źródła jego pochodzenia.
Każda liczba odpowiada jednemu punktowi w obrazie, nazywanemu pikselem. Piksele są uło-
żone w linie, a zbiór setek linii tworzy cały obraz. Rozmieszczenie pikseli w obrazie przypo-
mina więc widownię w kinie lub teatrze, gdzie mamy do czynienia z rzędami krzeseł. Z mate-
matycznego punktu widzenia możemy powiedzieć, że obrazy są zbiorem wektorów liczb (linie
pikseli), czyli macierzami, składającymi się z wierszy i kolumn. Typowe rozmiary obrazu cy-
frowego są następujące:
• w świecie komputerowym − 256 × 256, 512 × 512, 1024 × 1024, 640 × 480, 800 × 600,
1024 × 768, 1280 × 1024, 1600 × 1200 pikseli,
• w świecie cyfrowych aparatów fotograficznych − 1600 × 1200 (2 miliony pikseli), 2048 ×
× 1536 (3 miliony), 2272 × 1740 (4 miliony), 2560 × 1920 (5 milionów) i tak dalej,
• w świecie kamer cyfrowych różnego zastosowania od przemysłowych do studyjnych, filmów
DVD i telewizji cyfrowej włącznie z HD TV, czyli telewizją wysokiej rozdzielczości (High
-Definition) − 160 × 120, 320 × 240, 640 × 480, 720 × 480 (TV NTSC), 720 × 576 (TV PAL),
1280 × 720 (HD TV wersja 1), 1920 × 1080 (HD TV wersja 2).
650 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Po wymnożeniu liczby pikseli w poziomie i pionie otrzymujemy całkowitą liczbę pikseli, a po


uwzględnieniu liczby bitów przypadających na jeden piksel, całkowitą liczbę bitów potrzebną
do przechowania obrazu.
Na rysunku 22.2 jest przedstawiona interpretacja obrazu jako macierzy liczb x(m, n), m =1, 2,
3, ..., M, n = 1, 2, 3, ..., N, przy założeniu że numer koloru lub poziomu szarości przyjmuje
wartości od 0 do 255, czyli jest kodowany na 8 bitach (28 = 256 różnych możliwości). Zwróć-
my uwagę, że piksele (próbki) obrazu jako elementy macierzy liczb mogą być numerowane
zaczynając od (0, 0) lub (1, 1).
Kolor każdego piksela może być zapisany (zakodowany) w różny sposób. Najczęściej przed-
stawia się go jako linio wą ko mb inacj ę (sumę) trzech kolorów podstawowych: czerwonego
(Red − czyli „R”), zielonego (Green − czyli „G”), niebieskiego (Blue − czyli „B”), w skrócie
RGB:

kolor = kR ⋅ R ⊕ kG ⋅ G ⊕ kB ⋅ B (22.1)
Jest to addytywny, „emisyjny” model kolorów, w którym dodawane promienie R, G, B emitują
składowe światła białego (odpowiada on sytuacji nakładania na białej ścianie światła reflekto-
rów o trzech kolorach). Współczynniki wagowe kR, kG, kB są liczbami naturalnymi, przyjmują-
cymi wartości od 0 do wartości zakresowych, zależnych od liczby bitów, które na nie przezna-
czono. Przykładowo dla 6 bitów zmieniają się one od 0 do 63, a dla 8 bitów − od 0 do 255.

a) b)
n N 6

m
x(1, 1) x(1, 2) x(1, N) 11 22 33 44 55 66
x(2, 1) x(2, 2) x(2, N) 117 165 249 149 135 77
x(3, 1) x(3, 2) x(3, N) 43 125 0 0 217 88
M 6
x(4, 1) x(4, 2) x(4, N) 98 234 0 0 168 99
177 155 133 199 111 110
x(M, 1) x(M, 2) x(M, N) 236 43 76 87 99 121

d) 5 10 15 20 25
c)

200 5
x(m,n)

100
10
0
15
5
10
15 25 20
20
20 15
m 10
25 5 n 25

Rys. 22.2. Obraz cyfrowy jako macierz liczb: a) ogólny zapis obrazu jako macierzy o wymiarach M × N
(M wierszy, N kolumn), b) macierz obrazu o wymiarach 6 × 6 pikseli, przedstawiająca czarny kwadrat
(„kolor” 0) na pstrokatym tle (zmienne „kolory” od 11 do 249), c), d) wizualizacja macierzy litery „H” jako
funkcji 2D (mesh, waterfall) oraz obrazu w poziomach szarości (25 × 25 pikseli). Piksele (próbki) obrazu
jako elementy macierzy liczb mogą być numerowane zaczynając od (0, 0) lub (1, 1). Zgodnie ze zmienną
konwencją wyświetlania punkt ten może być przyporządkowany lewemu górnemu (tak jak u nas) lub lewe-
mu dolnemu rogowi wyświetlanego „pola”
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 651

W takim przypadku do zakodowania koloru jednego piksela potrzeba w pierwszym przypadku


3*6 = 18 bitów, a w drugim − 3*8 = 24 bity, co daje 218 = 262 144 lub 224 = 16 777 216 róż-
nych kolorów. Dla przykładu, dla 24-bitowego oznaczenia kolorów, czyli 8 bitów na każdy
kolor składowy, można każdemu kolorowi przyporządkować numer na podstawie (22.1),
przyjmując R = 216, G = 28, B = 20 (standard True Color). Aby zmniejszyć rozmiar plików gra-
ficznych należy przeznaczyć mniej bitów na określenie koloru każdego piksela. Co należy
wziąć pod uwagę? Z jednej strony nie wszystkie kolory mogą być wykorzystywane w obrazie,
np. na czarno-białych zdjęciach rentgenowskich, a z drugiej − czy każdy z nas jest w stanie
rozróżnić lub chcieć rozróżniać taką liczbę kolorów? Dlatego użytkownik może wybrać tzw.
paletę kolorów, jedną z dostępnych, np. czarno-białą, lub zdefiniować własną. Ma ona postać
macierzy, przedstawionej w tabeli 22-1. Ponieważ my będziemy analizować, przetwarzać i wy-
świetlać obrazy w środowisku Matlab, podano w niej także (w kolumnach po prawej stronie)
wartości współczynników RGB stosowane w tym programie: są to liczby rzeczywiste z prze-
działu [0, 1] , będące ułamkiem wartości zakresowej równej 255 (Matlab domyślnie operuje na
liczbach zmiennoprzecinkowych podwójnej precyzji).

Tab. 22-1. 64-elementowa paleta gray poziomów szarości (po lewej − karty graficzne, po prawej − pro-
gram Matlab)
Nr „koloru” Wartość współczynnika kR Wartość współczynnika kG Wartość współczynnika kB
Karta Graf Matlab Karta Graf Matlab Karta Graf Matlab
0 0 0 0 0 0 0
1 4 0,015873 4 0,015873 4 0,015873
2 8 0,031746 8 0,031746 8 0,031746
3 12 0,047619 12 0,047619 12 0,047619
... ... ... ... ... ... ...
62 251 0,984127 251 0,984127 251 0,984127
63 255 1 255 1 255 1

Wówczas w pliku graficznym jest umieszczana paleta oraz odwołania do niej: dla każdego
piksela jest zapisywany numer koloru, rozumiany jako numer wiersza palety, w której jest on
zdefiniowany. Bardzo częstym błędem osób zaczynających zabawy programowe z obrazami
cyfrowymi jest wczytywanie obrazu wraz z paletą ale „nieprzeładowanie” palety, tzn. nieuczy-
nienie z niej palety aktywnej, czyli takiej, która jest wykorzystywana podczas wyświetlania.
Numery kolorów są wówczas źle interpretowane i rysunek przypomina dzieła wielkich mis-
trzów pop-artu, a nie zdjęcie ... ukochanej Cioci.
Obrazy mogą być binarne (tylko dwa kolory czarny i biały), monochromatyczne (zwykle po-
ziomy szarości) oraz kolorowe. Kiedy współczynniki kR, kG, kB przyjmują identyczne wartości,
otrzymujemy jeden z kolorów palety „odcienie szarości”: kombinacja (0, 0, 0) odpowiada
w niej kolorowi czarnemu, a (255, 255, 255) kolorowi białemu.
W poligrafii (drukarkach kolorowych) wykorzystuje się nie definicję światła emitowanego tyl-
ko odbitego i stosuje czterokolorowy model subtraktywny CMYK, który wynika z pochłania-
nia barw RGB przez farby. Zamiast kolorów RGB używa się w nim: turkusu, karmazynu, żółci
i czerni (Cyan-Magenta-Yellow-Black). Obowiązują przy tym następujące zależności: turkus
(C) to biel (W) minus czerwień (R) C = W − R, karmazyn to biel minus zieleń M = W − G,
a kolor żółty to biały minus niebieski Y = W − B. Łącznie C + M + Y daje kolor czarny (K).
Ponieważ jednak oszczędza się na droższych farbach kolorowych i daje się ich mniej, to
w zmodyfikowanej sumie C’+M’+Y’ brakuje czerni i dlatego trzeba jeszcze dodać K.
652 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Ponieważ zdjęcia lub wyniki ich przetwarzania są często „prześwietlone” lub „niedoświetlone”
można tę niedoskonałość korygować. Należy wówczas znaleźć najniższy (min) i najwyższy
(max) wyko r zystywany indeks palety kolorów i przeskalować liniowo (w tym przypadku
p = 1) wszystkie indeksy stosując zależność (zakres palety to numer ostatniego indeksu kolo-
ru):
 indeks p 
stary − min 
indeksnowy = round   ⋅ zakres palety  (22.2)
 max − min  
 
czyli je liniowo „rozciągnąć” na całą skalę. Może to być bardzo ważny zabieg, np. podczas
wnikliwego oglądania zdjęć rentgenowskich przez lekarza. Ponieważ monitory komputerowe
wprowadzają nieliniowe zniekształcenia intensywności kolorów, redukuje się je wprowadzając
dodatkowo w (22.2) nieliniową (odwrotną w stosunku do monitora) korekcję gamma za pomo-
cą współczynnika p ( p < 1 − rozjaśnianie, p > 1 − przyciemnianie). Korekcję tę można także
stosować do uwypuklenia słabo widocznych detali.
Obrazy są pojedyncze (still images) oraz występują w sekwencjach (video, moving pictures).
W telewizji analogowej obrazy przesyła się 60 (NTSC) lub 50 (PAL/SECAM) razy na sekun-
dę, ale w celu zmniejszenia potrzebnego pasma częstotliwościowego dokonuje się redukcji
transmitowanych danych wprowadzając przeplot (interlacing) linii, tzn. wysyła się tylko linie
parzyste obrazu pierwszego oraz linie nieparzyste obrazu drugiego itd. O zapisie (wyświetla-
niu) progresywnym (progressive) mówimy wtedy, kiedy operuje się na wszystkich liniach każ-
dego obrazu. Ponieważ w chwili wprowadzania telewizji kolorowej wymagana była zgodność
standardu telewizji kolorowej i czarno-białej przesyłany sygnał wizyjny został podzielony się
na luminancję (Y ), która reprezentuje poziom szarości, oraz chrominancje: (I, Q) w standardzie
NTSC (razem YIQ):

 Y = 0, 299 R + 0,587G + 0,114



 I = 0,736( R − Y ) − 0, 268( B − Y ) = 0,596 R − 0, 274G − 0,321B (22.3a)
Q = 0,478( R − Y ) + 0.413( B − Y ) = 0, 211R − 0,523G + 0,311B

oraz (U, V ) w standardzie PAL (razem YUV ):

 Y = 0,299 R + 0,587G + 0,114 B



U = 0,492( B − Y ) = − 0,147 R − 0,289G + 0, 436 B (22.3b)
 V = 0,877( R − Y ) = 0,615R − 0,515G − 0,100 B

Czarno-biały odbiornik TV korzysta tylko z Y, natomiast kolorowy odtwarza kolory R, G, B


z powyższych układów równań. Natomiast telewizja cyfrowa oraz nośniki cyfrowego sygnału
wideo (np. płyty DVD z filmami) wykorzystują system kolorów YCbCr:

 Y = 0, 299 R + 0,587G + 0,114 B



Cb = 0,564( B − Y ) = − 0,1687 R − 0,3313G + 0,5B (22.4)
 Cr = 0,713( R − Y )0,5R − 0, 4187G − 0,0813B

gdzie Cb i Cr to poziomy „czerwoności” i „niebieskości”, które są zapisywane zazwyczaj


z wykorzystaniem mniejszej liczby bitów niż Y oraz rzadziej niż w każdym pikselu (np. co
drugi piksel w pionie i poziomie), ponieważ oko ludzkie jest mniej wrażliwe na zmiany kolo-
rów niż na zmiany jasności.
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 653

Podsumowaniem tej części omówionego materiału są rysunki 22.3 i 22.4. Na pierwszym z nich
zilustrowano proces akwizycji obrazu cyfrowego, w którym obraz analogowy jest dyskretyzo-
wany przestrzennie i kwantowany w wartościach (w zbiorze wszystkich możliwych kolorów
lub poziomów szarości). Z kolei na obrazie drugim podkreślono, że obraz jest zbiorem linii
(wierszy lub kolumn). Z tego powodu najprostszym sposobem analizy i przetwarzania obrazów
jest stosowanie w stosunku do nich metod dobrze znanych dla sygnałów 1D, tzn. wyznaczanie
transformat poszczególnych wierszy i kolumn oraz filtracja poszczególnych wierszy i kolumn.
Tak jak piksele tworzyły linie, a linie macierze, to uporządkowany zbiór macierzy 2D o tych
samych rozmiarach daje macierz 3D. Przykładowo film jest sekwencją pojedynczych obrazów.
A teraz żart: na rysunku 22.5 jest przedstawiony bardzo krótki film, inspirowany dramatem
Stanisława Ignacego Witkiewicza pod tytułem „W małym dworku”. Charakteryzuje go wyjąt-
kowa czystość formy i oszczędność środków ekspresji.

Dla dociekliwych. Należy jeszcze dwa słowa poświęcić zniekształceniom geometrycznym,


wprowadzanym przez wszystkie obiektywy szerokokątne niezależnie od ich ceny, w szczegól-
ności często stosowane, tanie kamery internetowe lub endoskopowe (przemysłowe, medyczne),
oraz możliwościom ich korekcji. Zniekształcenia te są konsekwencją rzutowania świata 3D na
przestrzeń (płaszczyznę) 2D. Typowym zjawiskiem jest dla tych kamer tzw. „efekt rybiego
oka”, czyli duże zniekształcenia r ad ialne obrazu. W celu ich korekcji należy wyznaczyć
wartości parametrów modelu deformacji obrazu: p o p ier wsze, położenia punktu centralnego
(środka zniekształceń), który może być różny od geometrycznego środka obrazu, oraz p o
d r ugie, funkcji zmienności promienia względem punktu centralnego w obrazie zniekształco-
nym w porównaniu do obrazu bez zniekształceń:
N −1
rz ( r ) = ∑ an r n (22.5)
n =0

gdzie rz(r) i r oznaczają odpowiednio promienie w obrazie ze zniekształceniami i bez nich.


Przykładowo dla N=3 i a = {0, 1, 0} mamy rz(r) = r, czyli obraz nie jest przez kamerę defor-
mowany. Wniosek: w obrazie zniekształconym piksele są położone w innych odległościach od
punktu centralnego niż odpowiadające im piksele w obrazie bez zniekształceń. Idea metody
korekcji zniekształceń geometrycznych polega na zarejestrowaniu kamerą obrazu kontrolnego,
złożonego z linii prostych lub zbioru punktów ułożonych w szachownicę. Następnie wyznacza
się punkt centralny zniekształceń, zakłada rząd wielomianu (22.5), „zbiera” odpowiadające
sobie punkty w obu obrazach i tworzy pary promieni (r, rz(k)), a na końcu wyznacza się opty-
malne wartości współczynników wielomianu (22.5) w sensie minimalizacji błędu średniokwa-
dratowego odchylenia punktów w zniekształconym obrazie od linii prostych. Następnie „od-
wraca się” zależność (22.5), czyli wyraża r w funkcji rz, oraz przeprowadza korektę dowolnego
obrazu uzyskanego z testowanej kamery. Dla przykładu na rysunku 22.6 pokazano obraz uzy-
skany z endoskopowej kamery medycznej przed korekcją i po niej.

Transformacje ortogonalne i nierekursywna filtracja obrazów c yfrowych

Rysunek 22.7 wyjaśnia w sposób poglądowy proces wyznaczania d o wo lnej , dyskretnej tran-
sformaty obrazu, separowalnej w osiach m i n, np. ortogonalnej transformaty Fouriera (DFT)
lub kosinusowej (DCT), czyli transformaty 2D macierzy 2D. Wykorzystuje się w nich
istniejące, szybkie algorytmy transformacji 1D, zdefiniowane np. równaniami od (2.76) do
654 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

dyskretyzacja
obraz kwantyzacja obraz cyfrowy
nxy
analogowy macierz liczb

yx
m

Rys. 22.3. Obraz cyfrowy jako wynik dyskretyzacji w przestrzeni i kwantyzacji wartości obrazu analogo-
wego (wartości pikseli w obrazie cyfrowym są zapisywane jako numery poziomów szarości, analogicznie jak
w macierzy na rysunku 22.2, np. od 0 do 255)

a) skanowanie 10. linii

1 wartość piksela, numer poziomu szarości

255
5
192

10 128

64
y
15
1 5 10 15 20 1 5 10 15 20

300
b)
kapelusz
250


poziom szarości

160 200

150

100

50
włosy

100 200 300 400 500


numer kolumny n

Rys. 22.4. Przykład skanowania linii obrazu cyfrowego, przejście od danych 2D do 1D: a) 10 linia dla cy-
frowego obrazu syntetycznego z rysunku 22.3, b) 160 linia dla obrazu rzeczywistego o wymiarach 512× 512
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 655

czas

klatka 1 filmu klatka 2 filmu klatka 3 filmu

Rys. 22.5. Sygnał wideo jako macierz 3D, czyli sekwencja macierzy 2D (bez kodowania)

a) b)

Rys. 22.6. Przykład korekcji zniekształceń radialnych wprowadzanych przez endoskopową kamerę me-
dyczną: a) obraz przed korekcją, b) obraz po korekcji

(2.80). Na początku są transformowane kolejne wiersze obrazu (u nas od 1 do 15), przy czym
wyznaczony wektor współczynników transformaty 1D (DFT, DCT lub innej) jest umieszczany
w miejscu wektora analizowanych pikseli (co symbolizuje znak „ ”). Następnie macierz
współczynników „poziomych” transformat 1D jest analizowana dalej, tzn. jej kolumny (u nas
od 1 do 20) są poddane serii transformacji 1D. Podobnie, wynik zastępuje dane wejściowe
(znak „”).
Na rysunku 22.8 są przedstawione kolejne wyniki przejściowe, otrzymane podczas transforma-
cji DFT i DCT obrazu z rysunku 22.1a, kolejno poziomo: moduł transformaty „poziomej” linii
o numerze 128, wynikowa macierz po serii transformat poziomych oraz wynikowa macierz po
serii transformacji pionowych (w obu przypadkach moduły). Ponieważ zespolone widmo Fou-
riera 1D sygnału o wartościach rzeczywistych jest (a)symetryczne, obserwujemy także (a)sy-
metrię, czyli nadmiarowość, w zespolonym widmie Fouriera 2D. Dodatkowo 2D DFT wymaga
obliczeń na liczbach zespolonych (jedno mnożenie zespolone w DFT to cztery mnożenia liczb
rzeczywistych i dwa dodawania), a sam wynik transformacji jest trudno interpretowalny, gdyż
macierze bazowe dekompozycji obrazu rzeczywistego są zespolone. Z tego powodu w algo-
rytmach kompresji obrazów w dziedzinie częstotliwościowej stosuje się wyłącznie transfor-
mację 2D DCT, mającą funkcje bazowe o wartościach rzeczywistych − w związku z tym nie-
nadmiarową, szybszą obliczeniowo i łatwiej interpretowalną. Dysponując współczynnikami
„częstotliwościowymi”, obrazów można je modyfikować, np. zerować. Wówczas po serii tra-
nsformat odwrotnych otrzymuje się ten sam obraz, pozbawiony usuniętych składowych czę-
stotliwościowych, czyli przefiltrowany. Należy pamiętać, że w lewym górnym rogu macierzy
656 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

1D DFT 1D DFT 1D DFT


a) b)
  

1D DFT 1

1D DFT 8

1D DFT 15 1 10 20

Rys. 22.7. Transformacja 2D obrazu jako sekwencja transformacji 1D dla obrazu syntetycznego, najpierw
a) wierszy (15 razy, wynik zastępuje dane wejściowe, w przypadku DFT macierz staje się zespolona), a po-
tem b) kolumn (20 razy, ponownie wynik zastępuje dane wejściowe). Już po pierwszej serii transformacji
obraz wejściowy „znika”. Zamiast dyskretnej transformacji Fouriera może być zastosowana dowolna inna
transformacja. Filtracja 2D obrazu również może być realizowana jako sekwencja dwóch filtracji 1D: naj-
pierw wierszy obrazu oryginalnego, a potem filtracja kolumn wyniku pierwszej operacji

po wierszach po kolumnach
a) 120
| DFT(linia128) |
100
80
60
40
20
0
0 50 100 150 200 250
numer prążka DFT

b) 120
| DCT(linia128) |
100
80
60
40
20
0
0 50 100 150 200 250
numer prążka DCT

Rys. 22.8. Transformacja 2D obrazu Kamerzysta (rys. 22.1a) o wymiarach 256 × 256 jako sekwencja trans-
formacji 1D. W kolejności od lewej do prawej: moduł transformaty tylko linii 128, moduł po transformacji
wierszy oraz moduł po transformacji kolumn wyniku transformacji wierszy (kolejne kroki tak jak na rysunku
22.7), oba w skali logarytmicznej: a) DFT, b) DCT

transformat DFT i DCT znajduje się wartość średnia obrazu, a w jego sąsiedztwie najniższe
częstotliwości. W przypadku DFT macierz po modyfikacji powinna być dalej (a)symetryczna,
w przeciwnym razie obraz otrzymany w wyniku 2D IDFT będzie zespolony. Zagadnieniem
tym zajmiemy się szczegółowo w podrozdziale 22.2.1.
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 657

obraz przed filtracją wagi filtra obraz po filtracji


1

maska

8 8

1 17 17

Rys. 22.9. Nierekursywna filtracja 2D jako dwuwymiarowy splot próbek obrazu z macierzą wag filtra:
9 próbek obrazu (centralna i najbliżsi sąsiedzi mieszczący się w ramce 3 × 3) jest mnożonych przez wagi
filtra odpowiadające im położeniem (także w ramce 3 × 3), kolejno od lewej górnej do prawej dolnej, na-
stępnie wszystkie wartości iloczynów są dodawane, a wynik jest przyporządkowywany próbce obrazu wyni-
kowego, odpowiadającej próbce środka ramki obrazu oryginalnego (u nas jest to próbka (8, 17)). Cała ope-
racja jest powtarzana dla wszystkich położeń ramki (okna obserwacji) na obrazie filtrowanym

W podobny sposób można także w najprostszy sposób przeprowadzać nierekursywną filtrację


FIR obrazów, tzn. sprowadzić ją do serii oddzielnych filtracji wszystkich wierszy (wynik za-
stępuje oryginał), a potem oddzielnej filtracji wszystkich kolumn (patrz rozdział 22.3.2, rów-
nania (22.38)(22.39), rysunek 22.19). Dzięki temu można ponownie bez problemu wykorzy-
stać wiedzę ze świata 1D w świecie 2D.

Ponieważ filtracja nierekursywna 1D może być interpretowana jako średnia ważona próbek
sygnału i współczynników filtra, podobnie powinno być z sygnałami 2D, czyli obrazami. Z tą
jedyną różnicą, że próbki i współczynniki mają teraz strukturę nie wektora tylko macierzy.
W konsekwencji mała macierz wag filtra przesuwa się obecnie „na tle” dużej macierzy próbek
obrazu i dla każdego jej położenia są mnożone przez siebie wartości wag oraz wartości odpo-
wiadających im, leżących „poniżej”, „zasłanianych” pikseli. Wartość sumy wszystkich iloczy-
nów stanowi wynik filtracji, który jest umieszczany w obrazie wynikowym, w punkcie odpo-
wiadającym środkowemu, zasłanianemu pikselowi. Tak rozumiana i realizowana filtracja 2D
jest przedstawiona na rysunku 22.9. Przesuwająca się, kwadratowa maska filtra (ze strzałkami)
jest na nim zaznaczona w lewym górnym rogu ciemnym kolorem. Dla przykładu, po prawej
stronie pokazano jej jedno położenie, w którym jest przez nią „wycinany” fragment drzewa.
Piksele obrazu „pobrane” przez maskę są mnożone przez odpowiadające im wagi filtra i su-
mowane, a uzyskana w ten sposób jedna liczba jest umieszczana w obrazie wynikowym w pik-
selu, odpowiadającym środkowi maski. Współczynniki wagowe filtra decydują o tym, które
częstotliwości zostaną w obrazie, a które będą usunięte. Istnieje wiele metod ich projektowa-
nia, w literaturze podaje się także wiele przykładowych zestawów wag.
Jeśli macierz wag filtra 2D może być przedstawiona jako wynik iloczynu wekto r o wego
dwóch wektorów wag filtrów 1D: h2D(m, n) = h1D(m)⋅g1D(n), 0 ≤ m≤ K−1, 0 ≤ n ≤ L−1 (co od-
powiada w dziedzinie widm Fouriera równości H2D( fm, fn) = H1D( fm)⋅G1D( fn)), to wówczas fil-
tracja 2D, przedstawiona na rysunku 22.9, jest równoważna oddzielnemu przefiltrowaniu
wszystkich wierszy obrazu za pomocą filtra h1D(n), a potem przefiltrowaniu kolumn wyniku tej
operacji za pomocą filtra g1D(n), według schematu pokazanego na rysunku 22.7. Zagadnienie
nierekursywnej filtracji 2D jest szerzej rozwinięte w rozdziale 22.3. Tam też są opisane naj-
prostsze metody projektowania wag filtrów 2D.
658 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Dalsza część tego rozdziału stanowi rozwinięcie zaprezentowanych powyżej zagadnień. Chcąc
zachować spójność książki podano w niej także definicje wybranych operacji dla sygnałów
ciągłych. Przecież w rozdziałach od 1 do 7 zajmowaliśmy się tylko takimi sygnałami. Dlaczego
mamy więc teraz o zapominać o ich rodzeństwie 2D? Operacje podpikselowe wykonywane na
obrazach są w bezpośredni sposób związane z obrazami analogowymi.

22.2. Transformacje ortogonalne 2D obrazów


Jak wiemy, transformacje ortogonalne sygnałów jednowymiarowych odgrywają bardzo ważną
rolę w analizie ich części składowych i przetwarzaniu, np. filtracji w dziedzinie częstotliwości.
Nie inaczej jest w przypadku sygnałów dwuwymiarowych, posiłkującymi się transformacjami
2D. W podejściu najprostszym transformacje te stanowią naturalne rozszerzenie transformacji
1D o drugi, do tej pory niewykorzystywany wymiar.

22.2.1. Dyskretna transformacja Fouriera

Na początek wprowadźmy oznaczenia, które będą stosowane w tym rozdziale. Niech x(u, v)
oznacza sygnał dwuwymiarowy, którego argumenty u i v zmieniają się w sposób c i ą g ł y ,
a X( fu, fv) − jego ciągłą transformatę Fouriera. Z kolei niech x(m, n) będzie dwuwymiarowym
sygnałem o argumentach d y s k r e t n y c h m oraz n, 0 ≤ m ≤ M−1, 0 ≤ n ≤ N−1, a XDT-FT( fm, fn)
i XDFT (k, l ) − jego dwuwymiarowymi transformatami Fouriera o częstotliwościach ciągłych
( fm, fn) oraz dyskretnych (k, l ). Przypomnijmy, że częstotliwości fm, fn oraz indeksy k oraz l są
związane z unormowanymi pulsacjami cyfrowymi:
fm k k
Ω m = 2π , Ω k = 2π , k↔ f mpr (22.6a)
f mpr M M
fn l l
Ωn = 2π , Ωl = 2 π , l↔ f npr (22.6b)
f npr N N

gdzie fmpr i fnpr oznaczają częstotliwości próbkowania w osiach m i n. Pulsacje Ωm i Ωn są cią-


głe, a pulsacje Ωk i Ωl − dyskretne. W przypadku 2D dyskretne zależności definicyjne powstają
w wyniku dyskretyzacji równań całkowych, podobnie jak to miało miejsce dla sygnałów jed-
nowymiarowych (patrz na przykład rozdziały 3.6 i 8.3.1).
• Transformacja Fouriera „ciągła − ciągła” (ciągłe parametry przestrzenne u, v; ciągłe zwią-
zane z nimi częstotliwości fu, fv), prosta i odwrotna:

∞ ∞ ∞  ∞ 
X ( fu , f v ) = ∫ ∫ x (u, v ) e − j (2 πfu u + 2 πf v v ) dudv = ∫  ∫ x( u, v )e − j 2 πf v v dv  e− j 2 πfu u du (22.7)

−∞ −∞ −∞  −∞ 
∞ ∞ ∞  ∞ 
x ( u, v ) = ∫ ∫ X ( f u , f v )e j (2 πfu u + 2 πf v v ) df u df v = ∫  ∫ X ( f u , f v )e j 2 πf u u df u  e j 2 πf v v df v (22.8)

−∞ −∞ −∞  −∞ 

• Transformacja Fouriera „dyskretna − ciągła” (m, n − indeksy d yskr e tne go położenia


przestrzennego; fm, fn − ciągłe częstotliwości związane z nimi; fmpr, fnpr − częstotliwości prób-
kowania w osi m i n), prosta i odwrotna (patrz (1.27a)):
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 659

∞  ∞ − j ( 2 π ( f n / f npr ) n )  − j ( 2 π ( f m / f mpr ) m )
X DT-FT ( f m , f n ) = ∑  ∑ x ( m, n ) e e (22.9)
m =−∞  n =−∞ 

1
f npr / 2  1 f mpr / 2 
j 2 π( f m / f mpr ) m j 2 π ( f n / f npr ) n
x ( m, n ) =
f npr
∫  f ∫ X DT-FT ( f m , f n ) e df m  e

df n
− f npr / 2  mpr − f mpr / 2 
(22.10)
Transformacja (22.9) umożliwia nam wyznaczenie widma Fouriera obrazu dla dowolnie wy-
branych częstotliwości fn, fm. Jednak podobnie jak w przypadku sygnałów 1D, po przekrocze-
niu częstotliwości próbkowania widmo 2D zaczyna się powtarzać okresowo: w osi pierwszej
częstotliwości co fmpr, a w osi drugiej − co fnpr. Z kolei (22.10) wykorzystuje się do projekto-
wania odpowiedzi impulsowych h(m, n) nierekursywnych filtrów 2D o zadanej charakterystyce
częstotliwościowej HDT-FT( fm, fn).
• transformacja Fouriera „dyskretna − dyskretna” , prosta i odwrotna:

M −1  N −1 2π  − j 2 π mk
−j nl
X DFT (k , l ) = ∑  ∑ x ( m, n ) e N e M (22.11)
m =0 
 n =0


N −1  M −1 2π  j 2 π nl
1 1 j mk
x ( m, n ) =
N
∑  M ∑ X DFT (k , l )e M e N

(22.12)
l =0  k =0 
gdzie m, n to indeksy d yskr etnego położenia przestrzennego, natomiast k, l to indeksy d ys-
kr etnych, związanych z nimi częstotliwości (0 ≤ m, k ≤ M−1; 0 ≤ n, l ≤ N−1):
k ↔ (k/M) fmpr; l ↔ (l/N) ⋅fnpr
Zwróćmy uwagę, że z powodu możliwości zastosowania przekształceń:

e j ( ab+ cd ) = e jab e jcd (22.13)


dwuwymiarowe, ciągłe i dyskretne transformacje Fouriera, tak proste jak i odwrotne, sprowa-
dzają się do wykonania dwóch serii jednowymiarowych transformacji, przy czym druga z nich
działa na wyniku pierwszej, tylko wzdłuż innej osi. Przykładowo w dwuwymiarowej, dyskret-
nej transformacji Fouriera 2D DFT (22.11) na początku są obliczane transformaty DFT
wszystkich wierszy, które zastępują oryginalne dane, a potem transformaty kolumn nowej ma-
cierzy. Natomiast w dwuwymiarowej, odwrotnej transformacie DFT na początku są obliczane
jednowymiarowe, odwrotne transformaty kolumn, a potem wierszy. Kolejność: wiersze-kolum-
ny-kolumny-wiersze może oczywiście zostać zmieniona (w ogólności dla 2D DFT mamy do-
wolną kolejność wiersze-kolumny lub kolumny-wiersze, podobnie dla 2D IDFT). Po pierwszej
serii w pierwszej kolumnie będziemy mieli wartości średnie każdego wiersza, w drugiej ko-
lumnie − wartości współczynników związanych z częstotliwościami podstawowymi każdego
wiersza, w trzeciej − współczynniki drugich harmonicznych itd. Jak pamiętamy, N-punktowa
transformata DFT sygnału rzeczywistego jest (a)symetryczna względem punktu N/2 (przy nu-
merowaniu od 0 do N−1), w związku z tym wartości w ostatnich kolumnach będą takie same
jak w pierwszych, tylko sprzężone. W drugiej serii wyznacza się transformatę Fouriera ko-
lumn, czyli po kolei: wartości średnich we wszystkich wierszach, potem pierwszych harmo-
nicznych, drugich itd. Jednak w tym przypadku symetria transformat już nie występuje, ponie-
660 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

waż dane wejściowe są teraz zespolone. W wyniku 2D DFT w lewym górnym rogu macierzy
wynikowej otrzymujemy sumę wartości wszystkich elementów macierzy (wartość średnią po
podzieleniu przez MN) oraz współczynniki małych częstotliwości „kolumnowych” wyznaczo-
nych dla małych częstotliwości „wierszowych”. Im dalej od niego, tym częstotliwości stają się
wyższe. Chcąc przeprowadzać filtrację macierzy (obrazów) w dziedzinie współczynników
dwuwymiarowej transformacji Fouriera, np. zerując część z nich, musimy pamiętać o tym, aby
nie naruszyć symetrii widma 2D (dwie alternatywne, uproszczone definicje, które nie u-
względniają punktów o indeksach zerowych):

N M  N M  N M
X  ± k, ± l  = X *  ∓ k, ∓ l  , 0 ≤ k ≤ − 1, 0 ≤ l ≤ −1 (22.14a)
 2 2   2 2  2 2

X ( k , l ) = X * ( N − k , M − l ) , 0 ≤ k ≤ N − 1, 0 ≤ l ≤ M − 1 (22.14b)

W przeciwnym przypadku w wyniku serii odwrotnych transformacji nie otrzymamy macierzy


o współczynnikach rzeczywistych.
Algorytm odwrotnej, dyskretnej transformacji Fouriera 2D IDFT stanowi powtórzenie operacji
2D DFT w odwrotnej kolejności, z uwzględnieniem innego znaku w wykładniku funkcji bazo-
wej w tym przypadku (teraz nie minus tylko plus).
A teraz przejdźmy do przykładów. Na rysunku 22.10 jest przedstawiony moduł i faza widma
2D DFT obrazu Kamerzysta (rys. 22.1a). W celu lepszej wizualizacji szerokiego zakresu
zmian dynamicznych zastosowano na nim następujące skalowanie (w Matbie zamiast funkcji
arctg() stosujemy atan2()):
A( k , l ) − min( A)
A ( k , l ) = log10 ( | X ( k , l ) | +1)
k ,l
⋅ 255, (22.15)
max( A) − min( A)
k ,l k ,l

B( k , l ) − min( B )
⋅ 255, B ( k , l ) = F ( k , l ) = arctg ( Im( X (k , l )), Re( X ( k , l )) )
k ,l
(22.16)
max( B ) − min( B )
k ,l k ,l

Składowa stała (DC) obrazu o częstotliwościach (0, 0) znajduje się w lewym górnym rogu ma-
cierzy DFT. Po uwzględnieniu symetrii (22.14) i przestawieniu ćwiartek macierzy według
schematu z rysunku 22.11a, otrzymuje się macierz symetryczną względem przestawionego
punktu DC, przedstawioną na rysunku 22.11b. Macierz tę można w prosty sposób wykorzystać
do filtracji obrazu. Należy tylko wygenerować funkcję maski często tliwo śc iowe j o wy-
miarach obrazu, także symetryczną względem punktu DC (na rysunku 22.11c jest to dolno-
przepustowa, prostokątna maska zero-jedynkowa, jedynki w środku) i wymnożyć ją z syme-
trycznym DFT obrazu (wynik tej operacji jest przedstawiony na rysunku 22.11d). Wykonując
odwrotne DFT tak spreparowanego widma otrzymujemy przefiltrowany obraz.
Ważne jest, aby zachować symetrię maski częstotliwościowej względem punktu DC. Kształt
maski na płaszczyźnie (k, l ) może być także kołem, elipsą, oponą itd. lub ich negacją. Przykła-
dowo, w przypadku zamiany wartości maski z rysunku 22.11c na przeciwne (0 ↔ 1) otrzymu-
jemy filtr górnoprzepustowy. Wartości maski nie muszą być wyłącznie równe 0 lub 1 lecz mo-
gą przyjmować wartości pośrednie. Wtedy dostajemy częściowe wytłumienie wybranych skła-
dowych częstotliwościowych obrazu.
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 661

a) b)

Rys. 22.10. Moduł (a) i faza (b) transformaty DFT obrazu Kamerzysta (rys. 22.1a)

a) b) c) d)
DC

DC DC DC

Rys. 22.11. Ilustracja operacji przestawienia ćwiartek macierzy DFT: a) DFT obrazu, b) DFT obrazu po
przestawieniu, c) przykładowa, dolnoprzepustowa, zero-jedynkowa maska częstotliwościowa, d) iloczyn
widma DFT obrazu i maski częstotliwościowej

Na rysunku 22.12 przedstawiono wszystkie operacje filtracji obrazu z wykorzystaniem trans-


formacji 2D DFT. Jak widać wynikowy obraz nie jest idealny. Zauważyć można na nim wy-
raźne zafalowania przy krawędziach obiektów, tzw. dzwonienie (ringing effect). Czym są one
spowodowane? Ponieważ iloczyn 2D w dziedzinie częstotliwości jest równoważny splotowi
2D w dziedzinie próbek obrazu, dlatego jest bardzo ważne jaka jest odpowiedź impulsowa
(wynik 2D IDFT) maski częstotliwościowej z rysunku 22.11c. Jeśli ma ona postać wolno ga-
snących, przestrzennych oscylacji, a tak jest w rozpatrywanym przez nas przypadku, to obraz
jest również bardzo zafalowany. W związku z powyższym kształt maski widmowej należy do-
bierać tak, aby była ona nie tylko dobrym, selektywnym filtrem w dziedzinie częstotliwości ale
także miała „zwartą” (compact) odpowiedź impulsową. Problem ten szczegółowo rozpatrzono
w podrozdziale 22.3. Rysunek 22.12 także dobrze tłumaczy podstawy transformacyjnych me-
tod stratnej kompresji obrazów: pozostawiliśmy około 15% współczynników transformaty,
a zrekonstruowany obraz jest nadal widoczny.
662 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b) c) d)

e) f) g) h)

Rys. 22.12. Przykład wykorzystania 2D DFT do filtracji obrazu: a) filtrowany obraz, b) moduł jego widma
DFT, c) widmo po przestawieniu DC do środka („scentrowane”), d) maska częstotliwościowa, e) iloczyn
symetrycznego widma obrazu i maski, f) widmo po ponownym przestawieniu („rozcentrowane”), g) obraz
powstały w wyniku odwrotnego DFT, h) jego powiększony fragment

a) b) c) d)

Rys. 22.13. Przykład wykorzystania maski filtra opisanego dwuwymiarową funkcją Gaussa: pierwszy wiersz
− filtr dolnoprzepustowy, drugi wiersz − filtr górnoprzepustowy (1 minus dolnoprzepustowy); a) maska fil-
tra, b) iloczyn symetrycznego widma obrazu i maski, c) „rozcentrowane” widmo, g) obraz powstały w wyni-
ku odwrotnego DFT

Na rysunku 22.13 przedstawiono przykład zastosowania dwuwymiarowych, gaussowskich ma-


sek częstotliwościowych: dolno- i górnoprzepustowej. Maksymalną wartością maski dolno-
przepustowej jest 1, a maskę górnoprzepustową otrzymano z dolnoprzepustowej poprzez od-
jęcie od jej wag liczby 1. Standardowa, dwuwymiarowa funkcja Gaussa powstaje w wyniku
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 663

iloczynu wektorowego funkcji jednowymiarowej (4.35): G = gTg, gdzie g to wektor poziomy.


Ponieważ funkcja gaussowska − także 2D − zachowuje swój kształt podczas transformacji Fo-
uriera (patrz (4.35)), unika się w ten sposób oscylacji w odpowiedzi impulsowej filtra i zafalo-
wań w wynikowych obrazach. Projektując maskę częstotliwościową zmienia się wartość pa-
rametru kształtu funkcji gaussowskiej (zmienna a w (4.35)), co prowadzi do jej rozszerzenia
lub zawężenia, czyli modyfikacji selektywności filtra. Zjawisku temu towarzyszy zmiana w
odwrotnym kierunku w odpowiedzi impulsowej, tzn. im filtr jest bardziej selektywny, tym ma
szerszą odpowiedź impulsową wymuszającą uśrednianie większej liczby pikseli obrazu. Po-
dobnie jak poprzednio dalsze szczegóły dotyczące tego zagadnienia poznamy w podrozdziale
22.3.2.
Jako ćwiczenie pozostawiamy Czytelnikowi zaprojektowanie i przetestowanie skuteczności
działania kilku, różnych masek częstotliwościowych. Interesujące też jest sprawdzenie jak in-
formacja zawarta w obrazie rozkłada się w różnych częściach zespolonego widma 2D DFT.
W tym celu należy wyz e r o wać część rzeczywistą, urojoną albo fazę widma, albo ustawić
na jeden moduł widma, i wykonać transformację odwrotną 2D IDFT. Z eksperymentów tych
powinno wynikać zaskakujące spostrzeżenie, że na pierwszy rzut oka bardzo „niezdyscyplino-
wane” widmo fazowe (22.11b) zawiera bardzo dużo informacji o obrazie.
Dla dociekliwych. Do wyznaczania widma częstotliwościowego obrazu x(m, n), m = 0, 1,
2, ..., M−1, n = 0, 1, 2, ..., N−1, można wykorzystać zależność (22.9) (stosując odpowiednią
dyskretyzację częstotliwości fm oraz fn) i dzięki temu uzyskać widmo gęściej spróbkowane niż
w przypadku (22.11), gdzie liczba prążków widma jest równa liczbie próbek obrazu. Z powodu
okresowości widma 2D (22.9) wystarczy je obliczyć tylko dla częstotliwości z zakresu
−fmpr/2 ≤ fm < fmpr/2 oraz −fnpr/2 ≤ fn < fnpr/2 (podobna okresowość widm występowała też dla
sygnałów 1D − patrz rysunki 4.16 i 4.17). Rozwiązanie takie może być celowe w przypadku
obliczania charakterystyk częstotliwościowych H(fm, fn) dla krótkich, nierekursywnych filtrów
2D, mających odpowiedź impulsową h(m, n). Alternatywnym rozwiązaniem interpolacji widma
2D jest uzupełnienie macierzy wag „krótkiego” filtra h(m, n) dużą liczbą wartości zerowych
i skorzystanie z DFT (22.11).

22.2.2. Dyskretna transformacja kosinusowa

Podobnie jak w przypadku dwuwymiarowej, dyskretnej transformacji Fouriera, dwuwymiaro-


wa dyskretna transformacja kosinusowa 2D DCT jest złożeniem dwóch serii transformacji 1D
(2.76), po wierszach i po kolumnach obrazu (patrz rysunek 22.7):
M −1  N −1
 πl   πk 
X DCT ( k , l ) = ∑  ∑ x (m, n) ⋅β(l )cos  N (n + 1/ 2)  ⋅ α( k ) cos  M (m + 1/ 2)  , (22.17)
m =0  n =0    
N −1  M −1
 πk   πl 
x ( m, n ) = ∑∑ X DCT ( k , l ) ⋅ α( k )cos  ( m + 1/ 2)  ⋅β(l )cos  ( n + 1/ 2)  , (22.18)
l =0  k =0 M  N 

gdzie
 1/ M , k = 0  1/ N , l = 0
α( k ) =  , β( l ) =  (22.19)
 2 / M , k = 1...M − 1  2 / N , l = 1... N − 1

W rozdziale 9.8 przedstawiono najprostszą metodę szybkiego wyznaczania transformaty 1D


DCT za pomocą algorytmu szybkiej transformacji Fouriera FFT. Oczywiście, w literaturze są
664 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

proponowane rozwiązania jeszcze efektywniejsze, np. algorytm Chena [Chen77], ale wymaga-
jące własnoręcznego napisania programu (w środowisku Matlab mamy „szybkie” funkcje
dct.m i dct2.m). Należy także zwrócić uwagę na fakt, że w literaturze są definiowane cztery
odmiany 1D DCT-I, II, III i IV, podane w rozdziale 2.4. Równania (22.17) ÷ (22.19) definiują
transformację 2D DCT-II. Skąd się bierze tak duża popularność tej transformacji w przetwa-
rzaniu obrazów? Ponieważ obrazy najczęściej modeluje się za pomocą dwuwymiarowych mo-
deli autoregresyjnych pierwszego rzędu AR(1,1) (2.93), mających funkcję autokorelacji po-
staci (2.94), której wektory własne (optymalna baza Karhunena-Loevego (KL)) są bardzo zbli-
żone do wektorów bazowych transformacji 1D DCT-II. Transformacja ta jest więc subopty-
malna.
W porównaniu z 2D DFT dużą zaletą 2D DCT jest fakt, że jej funkcje bazowe nie mają warto-
ści zespolonych tylko rzeczywiste. Znacznie redukuje to jej złożoność obliczeniową oraz po-
woduje niewystępowanie redundancji w widmie DCT (patrz rys. 22.8b). Transformację tę
można także wykorzystać do filtracji obrazu poprzez usunięcie z jej widma mniej istotnych
(najmniejszych) współczynników. Zazwyczaj wykonuje się to metodą „strefową” (np. w przy-
padku filtracji dolnoprzepustowej pozostawia się współczynniki leżące w lewym, górnym rogu
w okolicy DC) lub „progową” (pozostawia się tylko współczynniki przekraczające zadaną
wartość progową, przy czym wartość ta może zależeć od położenia współczynnika w macierzy
2D DCT; w przypadku kompresji stratnej obrazu tą metodą współrzędne pozostawianych
współczynników należy także zapamiętać w skompresowanym zbiorze). Ponieważ właśnie ten
drugi sposób jest stosowany w standardzie JPEG do kompresji pojedynczych obrazów oraz
w standardzie MPEG do kompresji ich sekwencji, poświęcimy mu nieco więcej miejsca w roz-
dziale 22.5.1. Należy jednak już teraz zaznaczyć, że w standardach tych transformata 2D DCT
nie jest stosowana w stosunku do całego obrazu tylko jego fragmentów o wymiarach 8 × 8
pikseli.
Na rysunku 22.14 przedstawiono prosty przykład filtracji (kompresji) całego obrazu w dzie-
dzinie współczynników jego transformaty 2D DCT. Przetwarzaniu poddano obraz Kamerzysta
(rys. 22.1a), którego widmo 2D DCT zostało już przedstawione na rysunku 22.8b (ostatnie
w drugim wierszu). Widmo to zmodyfikowano dwoma sposobami. Po pierwsze, wymnożono
go z trójkątną maską częstotliwościową zero-jedynkową, zlokalizowaną w narożniku składo-
wej DC (lewy górny), o powierzchni 1/8 całego widma. Po drugie, wymnożono go z progową
maską częstotliwościową, przy czym wartość progu dobrano tak, aby pozostawić w przybliże-
niu 1/8 liczby wszystkich współczynników transformaty, tak jak w poprzednim przypadku.
Następnie zsyntezowano obrazy ze zmodyfikowanych widm za pomocą transformacji odwrot-
nej 2D IDCT. W przypadku maski trójkątnej w wynikowym obrazie są wyraźnie widoczne
oscylacje (tzw. dzwonienie), przypominające te z rysunków 22.12g i 22.12h, dotyczące filtracji
metodą DFT. Jednak obecnie operacja filtracji jest realizowana o wiele szybciej ze względu na
rzeczywiste wartości funkcji bazowych (przypomnijmy: jedno mnożenie liczb zespolonych
w DFT to cztery mnożenia i dwa dodawania „rzeczywiste”). Natomiast zastosowanie metody
progowej prowadzi do generacji zniekształceń przypominających szum, odbieranych jako
zwiększenie ziarnistości obrazu. Kwestia gustu, ale dla autora deformacja obrazu w drugim
przypadku jest bardziej naturalna i mniej irytująca. Oczywiście, maskowanie progowe można
także zastosować w stosunku do współczynników transformaty 2D DFT obrazu. Pozostawiamy
to jako ćwiczenie Czytelnikowi.
Ponieważ w omówionym przykładzie usunięto część próbek widma, jednocześnie dokonano
filtracji jego zawartości oraz kompresji zapisu: całość zastąpiono częścią. Co stracono? Jaki
rodzaj informacji jest związany z każdym współczynnikiem transformaty 2D, także tym usu-
wanym? O tym w kolejnym podrozdziale.
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 665

a)

b)

Rys. 22.14. Filtracja obrazu Kamerzysta za pomocą modyfikacji jego widma 2D DCT z rysunku 22:
a) z trójkątną maską częstotliwościową „1/8”, b) z „progową” maską częstotliwościową − próg ustawiony
tak, aby pozostawić 1/8 liczby wszystkich współczynników. Kolejno w wierszu: zmodyfikowane widmo
(góra) lub sama, zero-jedynkowa maska progowa (dół), odtworzony obraz metodą 2D IDFT, jego powięk-
szony fragment

22.2.3. Dowolna transformacja ortogonalna − interpretacja współczynników

Dowolna dwuwymiarowa transformacja ortogonalna obrazu x(m, n) o wymiarach M × N, po-


wstała w wyniku złożenia sekwencji dwóch transformat jednowymiarowych wierszy, a potem
kolumn, może zostać przedstawiona za pomocą poniższych równań:
M −1  N −1 
Y (k , l ) = ∑  ∑ x (m, n) ⋅ bN* (l , n)  ⋅ bM* (k , m), YMxN = B*M ⋅ X MxN ⋅ B*NT (22.20)
m =0  n =0 
M −1  N −1 
x ( m, n ) = ∑  ∑ Y (k , l ) ⋅ bN (l , n)  ⋅ bM ( k , m ), X MxN = BTM ⋅ YMxN ⋅ B N (22.21)
k =0  l =0 

gdzie m, n to indeksy przestrzenne, k, l − indeksy częstotliwościowe, XMxN − macierz analizo-


wanego obrazu o elementach x(m, n) i wymiarach M × N, YMxN − macierz wynikowego widma
o elementach Y(k, l ) i wymiarach M × N ,
a macierze transformacji BP o wymiarach P × P (P jest równe M lub N ) mają w swoich wier-
szach wektory dowolnej transformacji ortogonalnej, na przykład fourierowskiej (0 ≤ k ≤ P − 1,
0 ≤ m ≤ P − 1):
1  2 πk 
bP ( k , m ) = exp  j m (22.22)
P  P 
666 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

kosinusowej (2.76), (22.17):

 πk 
bP ( k , m ) = α( k )cos  (m + 1/ 2)  (22.23)
 P 
lub sinusowej (2.77), Hartleya (2.78), Hadamarda (2.79) i Haara (2.80). W równaniach (22.20)
i (22.21) „*” oznacza sprzężenie zespolone (negacja części urojonej liczby zespolonej), T zaś
− transpozycję. W (22.22) zastosowano ortonormalne (2.34) funkcje bazowe Fouriera (2.72),
tzn. podzielone przez P i unormowane w ten sposób do wartości 1. W takim przypadku
w równaniach (22.11) i (22.12) współczynniki skalujące wynoszą nie 1 i 1/(MN) tylko 1/ MN
i 1/ MN . Ponieważ funkcje (22.22) są wykorzystywane podczas syntezy sygnału na podsta-
wie współczynników transformaty, to w wykładniku nie występuje znak minus.
W przypadku ortogonalnych transformat 1D sygnał był przedstawiany jako suma funkcji ba-
zowych wymnożonych przez współczynniki transformacji. Podobnie jest dla transformacji 2D:
analizowana macierz jest przedstawiana jako suma macierzy bazowych wziętych z wagami
równymi współczynnikom widma 2D. Jeśli założymy, że wszystkie współczynniki widma
Y(k, l ), 0 ≤ k ≤ M−1 i 0 ≤ l ≤ N−1, są równe zeru poza jednym, np. Y(k0, l0), i macierz tę ozna-
czymy przez Yk0, l0, to z zapisu macierzowego (22.21) otrzymamy (proszę rozpisać elementy
macierzy i sprawdzić osobiście):

X k0 ,l0 = BTM ⋅ Yk0 ,l0 ⋅ B N = Y ( k0 , l0 ) ⋅ bTM ( k0 ) ⋅ b N ( l0 ) (22.24)

gdzie bP(p) oznacza p-ty wiersz macierzy transformacji ortogonalnej BP. Ponieważ transfor-
macja jest liniowa, to transformata sumy macierzy elementarnych Yk0, l0 (z tylko jednym ele-
mentem niezerowym Y(k0, l0)) jest równa sumie ich transformat, a stąd mamy:
M −1 N −1 M −1 N −1 M −1 N −1
Y= ∑ ∑ Yk0 , l0 ⇒ X= ∑ ∑ X k0 , l0 = ∑ ∑ Y (k0 , l0 ) ⋅ bTM ( k0 ) ⋅ b N (l0 ) (22.25)
k0 =0 l0 = 0 k0 = 0 l0 = 0 k0 = 0 l0 = 0

Jak widać obraz X jest sumą macierzy Bk0, l0: o wymiarach M × N:


M −1 N −1
X= ∑ ∑ Y (k0 , l0 ) ⋅ Bk0 l0 , B k0 l0 = bTM ( k0 ) ⋅ b N (l0 ) (22.26)
k0 =0 l0 = 0

będących iloczynem wektorowym k0-tego wiersza macierzy transformacji BM oraz l0-tego wier-
sza macierzy transformacji BN (czyli k0-tej i l0-tej bazy odpowiednich transformacji 1D),
wziętych z wagami Y(k0, l0).
Na rysunku 22.15 są zaprezentowane w poziomach szarości wszystkie macierze bazowe Bk0, l0
dla transformaty ko sinuso wej o wymiarach 8 × 8 (M = 8, N = 8). Jak widać, w zależności od
indeksów są to oscylacje (o rosnącej częstotliwości) tylko poziome (k = 0), tylko pionowe
(l = 0) oraz łączone. Z każdym współczynnikiem transformaty Y(k0, l0) jest związana konkretna
macierz Bk0, l0 (22.26), która jest wykorzystywana w sumie (22.26). Jeśli wyzerujemy jeden ze
współczynników i wykonamy odwrotną transformatę 2D, to związana z nim macierz (wzorek
graficzny o różnych kształtach i częstotliwościach oscylacji przestrzennych) „znika” z obrazu.
Za pomocą zależności (22.26) można wygenerować macierze (obrazy) związane z każdym
współczynnikiem częstotliwościowym dowolnej, ortogonalnej transformacji 2D, także fourie-
rowskiej. W tym przypadku macierze Bk0, l0 są zespolone. Ćwiczenie to pozostawiamy Czytel-
nikowi.
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 667

l=0 l=1 l=2 l=3 l=4 l=5 l=6 l=7


k=0

k=1

k=2

k=3

k=4

k=5

k=6

k=7

Rys. 22.15. Funkcje bazowe Bk ,l = bTM ( k ) ⋅ b N (l ) (22.26) dla dwuwymiarowej transformacji kosinusowej
(22.17) o wymiarach: a) 8 × 8 (M = N = 8)

Jak widać w dziedzinie współczynników transformaty możemy dokonywać filtracj i wybra-


nych składowych obrazu: pozostawiać je (Y(k0, l0) bez zmiany), usuwać (Y(k0, l0) = 0) lub tylko
zmieniać ich intensywność (np. Y(k0, l0) = 0,5⋅Y(k0, l0) ). Modyfikujemy w ten sposób współ-
czynniki w równaniu syntezy obrazu (22.26) na podstawie macierzy bazowych transformacji.
Ale filtracja obrazów to już inna bajka, którą usłyszą wszyscy zainteresowani w następnym
rozdziale.
Podsumowująca, bardzo ważna dygresja. Czym jest „częstotliwość” w obrazie? Jak poszcze-
gólne elementy obrazu wyglądają w świecie „częstotliwości”? Przykładowo, pojedynczy jasny
piksel na czarnym tle to impuls Kroneckera, mający bardzo szerokie widmo. Podobnie szero-
kie widmo mają czyjeś włosy przypominające szum. Krawędź twarzy to jak „kierunkowy”
skok jednostkowy na płaszczyźnie 2D, a więc także bogaty w różne częstotliwości. Ortogonal-
ne transformacje 2D umożliwiają nam przejście na współczynniki „częstotliwościowe”, będące
wagami podczas sumowania wszystkich bazowych macierzy częstotliwościowych Bk0, l0 w su-
mie (22.26). „Częstotliwości” obrazu to właśnie oscylacje występujące we współczynnikach
tych macierzy. Prosty interpretacyjnie dla nas obraz rozkłada się na szachownicę współczynni-
ków „częstotliwościowych”. Istotne są te z nich, które mają duże wartości, gdyż zawierają
najwięcej informacji o obrazie, i to one są wykorzystywane podczas kompresji obrazów
w dziedzinie współczynników transformat. Natomiast, po odtworzeniu obrazu tylko z jego
współczynników niskoczęstotliwościowych, otrzymujemy wersję wygładzoną, aproksymatę
obrazu. Obraz jest „nieprzewidywalny”, podobnie jego widmo. Nie ma prostych odpowiedzi.
Cóż nam pozostaje? Eksperyment! W tym względzie polecam wyniki zaprezentowane
w [Tade97].
Podobnie często zadawane pytanie dotyczy „najlepszego” kształtu maski filtra w dziedzinie
częstotliwości: kwadratowa czy okrągła? Ja bym optował za okrągłą, ponieważ odpowiedzią
powierzchni wody na wrzuconą do niej kropelkę są gasnące zafalowania, rozchodzące się rów-
nomiernie we wszystkich kierunkach, a taka jest właśnie odpowiedź impulsowa filtra o masce
668 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

okrągłej. O czym w podrozdziale 22.3. W tym miejscu otrzymujemy także odpowiedź na py-
tanie jak filtrować: filtrami 1D oddzielnie po wierszach i kolumnach obrazu, czy filtrami 2D?
Jeśli odpowiedź impulsową filtra 2D, o kształcie gasnących oscylacji rozchodzących się ra-
dialnie, można uzyskać w wyniku iloczynu wektorowego odpowiedzi impulsowych filtrów 1D
(a tak jest np. w przypadku dolnoprzepustowego filtra Gaussa), to ze względów obliczenio-
wych (mniej mnożeń i dodawań) korzystniej jest stosować sekwencję filtracji 1D.

22.2.4. Program komputerowy

W tabeli 22-2 jest przedstawiony program komputerowy wykorzystany do generacji rysunków,


zaprezentowanych w tym rozdziale. Wykorzystuje on jednowymiarową funkcję dct.m z bi-
blioteki Signal Processing Toolbox oraz dwuwymiarowe funkcje dct2.m i idct2.m z biblio-
teki Image Processing Toolbox. Jeżeli Czytelnik nie dysponuje tymi przybornikami, zapropo-
nowano ich własną, wolniejszą implementację. Skorzystano w tym przypadku z programu za-
mieszczonego w tablicy 2-1 (transformacja kosinusowa 1D DCT) oraz macierzowych zależ-
ności (22.20) i (22.21). Przy okazji w celu poglądowym w podobny sposób zrealizo-
wano także transformacje 2D: DFT i IDFT. W przyborniku IP Toolbox istnieje także funkcja
fftshift.m działająca na macierzach, którą można zastąpić napisaną przez nas procedurę
fftshift2D.m.

Tab. 22-2. Program do transformacji 2D obrazu i jego filtracji w dziedzinie częstotliwości

% Ćwiczenie: Wykorzystanie transformacji 2D DFT i 2D DCT do filtracji obrazu

clear all; close all;

% Inicjalizacja − wczytaj obraz


[x,cmap] = imread('cameraman.tif'); % wczytaj obraz do "x" i jego paletę kolorów do "cmap"
imshow(x,cmap), title('Obraz'); pause % pokaż obraz wykorzystując jego paletę
[M, N] = size(x); % odczytaj liczbę wierszy i kolumn; założenie M=N !!!
x = double(x); % zamień reprezentację pikseli

% Macierz transformacji 1D DCT oraz 1D DFT


n=0:N-1; % numery próbek funkcji bazowych
c = [sqrt(1/N) sqrt(2/N)*ones(1,N-1)]; f = 1/sqrt(N); % współczynniki normalizujące
for k=0:N-1 % wyznacz macierz transformacji
C(k+1,n+1) = c(k+1) * cos( pi*k*(n+1/2) / N ); % funkcje bazowe 1D DCT
F(k+1,n+1) = f * exp(j*2*pi/N*k*n); % funkcje bazowe 1D DFT
end

% JEDNA LINIA
Nr = 100; K = 2; y = x; % numer linii, szerokość znacznika, kopia obrazu
linia = x(Nr,1:N); % pobranie linii
y(Nr-K:Nr+K,1:N) = 0*ones(2*K+1,N); % zaznacz wybraną linię czarnym kolorem
subplot(121); imshow(y,cmap); title('Obraz'); % pokaż obraz z czarną linią
subplot(122); plot(linia); title('Jedna linia'); pause % pokaż wykres linii obrazu
subplot(211); plot( abs(fft(linia))/N ); title('|DFT|'); % DFT linii obrazu
% subplot(212); plot( dct(linia)/sqrt(N) ); title('DCT'); pause % DCT (Matlab) linii
subplot(212); plot( (conj(C)*linia')/sqrt(N) ); title('DCT'); pause % DCT (nasze) linii

% FILTRACJA za pomocą 2D DCT


K = 64; H = zeros(M,N); H(1:K,1:K) = ones(K,K); % maska częstotliwościowa, lewy górny róg
Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych 669

% X = dct2(x); % 2D DCT − MATLABA


X = conj(C) * x * conj(C).'; % 2D DCT − NASZE (dla DCT conj(C)=C)
Y = X .* H; % iloczyn widma DCT i maski
% y = idct2(Y); % 2D IDCT − MATLABA
y = C.' * Y * C; % 2D IDCT − NASZE
XdB = skaladB( X ); YdB = skaladB( Y ); % wyskalowanie intensywności pikseli w dB
subplot(221); imshow(x, cmap); title('Obraz'); % dalej tylko wizualizacja
subplot(222); imshow(XdB, cmap); title('Widmo DCT');
subplot(223); imshow(YdB, cmap); title('Widmo DCT + Maska');
subplot(224); imshow(y(1:128,65:192), cmap); title('Fragment wyniku'); pause

% FILTRACJA 2D za pomocą 2D DFT (fftshift2D - przestawianie ćwiartek widma 2D DFT, patrz rys. 22.11a)
K = 32; H = zeros(M,N); % maska częstotliwościowa H (MxN)
H(M/2+1-K : M/2+1+K, N/2+1-K : N/2+1+K) = ones(2*K+1,2*K+1); % środek = (M/2+1, N/2+1)
h = fftshift2D( real( ifft2( fftshift2D(H) ) ) ); % jej odpowiedź impulsowa
subplot(121); imshow(255*H,cmap); title('Maska Freq'); % rysunek maski
subplot(122); mesh(h); title('Jej odpowiedź impulsowa'); pause % rysunek jej odp. impulsowej

% X = fft2(x)/N; % transformacja Fouriera 2D DFT − MATLABA


X = conj(F) * x * conj(F).'; % transformacja Fouriera 2D DFT − NASZA
Xp = fftshift2D(X); % przestawienie miejscami ćwiartek widma
Yp = Xp .* H; % filtracja = iloczyn widma 2D DFT i maski 2D
Y = fftshift2D(Yp); % powrotne przestawienie ćwiartek widma
% y1 = ifft2(Y)*N; % odwrotna transformacja Fouriera 2D IDFT − MATLABA
y1 = F.' * Y * F; % odwrotna transformacja Fouriera 2D IDFT − NASZA
y1 = real(y1); % część rzeczywista, urojona równa zeru
y1f = y1(1:128,65:192); % wybranie fragmentu obrazu do wizualizacji

XdB = skaladB( X ); XpdB = skaladB( Xp );


YdB = skaladB( Y ); YpdB = skaladB( Yp );
subplot(231); imshow(x, cmap); title('1. Obraz');
subplot(232); imshow(XdB, cmap); title('2. 2D DFT');
subplot(233); imshow(XpdB, cmap); title('3. Po przestawieniu');
subplot(234); imshow(YpdB, cmap); title('4. Po filtrze');
subplot(235); imshow(YdB, cmap); title('5. Po przestawieniu');
subplot(236); imshow(y1f, cmap); title('6. Fragment wyniku'); pause

% FILTRACJA 2D za pomocą splotu 2D


L = 32; y2 = conv2(x, h(M/2+1-L:M/2+1+L, N/2+1-L:N/2+1+L),'same');
subplot(121); imshow(y1,cmap); title('Obraz po filtrze FREQ - splot cykliczny');
subplot(122); imshow(y2,cmap); title('Obraz po filtrze CONV - splot liniowy'); pause

function Y = fftshift2D( X )
% przestawianie ćwiartek widma 2D DFT

[M N] = size(X);
Y(M/2+1:M,N/2+1:N) = X(1:M/2,1:N/2);
Y(1:M/2,1:N/2) = X(M/2+1:M,N/2+1:N);
Y(M/2+1:M,1:N/2) = X(1:M/2,N/2+1:N);
Y(1:M/2,N/2+1:N) = X(M/2+1:M,1:N/2);

function XdB = skaladB(X)


% skalowanie intensywności pikseli obrazu w decybelach

XdB = log10(abs(X)+1); maxXdB = max(max(XdB)); minXdB = min(min(XdB));


XdB = (XdB-minXdB)/(maxXdB-minXdB)*255;
670 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

22.3. Filtracja 2D obrazów


Jak wiemy z lektury poprzednich rozdziałów, przykładowo dziesiątego, l i n i o wą filtrację cy-
frową dzielimy na nierekursywną i rekursywną (rys. 10.4). W pierwszej z nich każda kolejna
próbka wyjściowa z filtra jest ważoną sumą M ostatnich próbek wejściowych, gdzie liczby wa-
żące są specjalnie zaprojektowanymi współczynnikami {bm} filtra. Z kolei w filtrach rekursyw-
nych próbki wyjściowe są nie tylko ważoną sumą M ostatnich próbek wejściowych, ale także
ważoną sumą N ostatnich próbek wyjściowych. W tym przypadku projektuje się dwa zestawy
wag: {bm} i {ak}.
Opisana powyżej sytuacja jest identyczna dla sygnałów 1D i 2D, różnica polega jedynie na wy-
miarowości danych. Ponieważ rekursywne filtry cyfrowe mogą być niestabilne, my w tym roz-
dziale będziemy się zajmowali wyłącznie liniowymi filtrami nierekursywnymi, opisanymi rów-
naniem dwuwymiarowego splotu. Jego algorytm przedstawiono na rysunku 22.9 i wstępnie
opisano w rozdziale 22.1.
W tym rozdziale rozszerzymy nasze wiadomości dotyczące splotu 2D, poznamy dwie metody
projektowania wag filtrów 2D (metodę okien oraz metodę częstotliwościową) oraz związki po-
między filtracją splotową, a opisaną w rozdziale 22.2 filtracją realizowaną w dziedzinie współ-
czynników transformaty Fouriera, zaznajomimy się z filtrami najważniejszych operacji prze-
twarzania obrazów. Skrótowo dowiemy się także o filtracji nieliniowej. Bez dwóch zdań: ma-
my piękny plan!
Oczywiście, aby zwiększyć naszą motywację do uważnej lektury tego rozdziału, na początku
musimy sobie odpowiedzieć na pytanie: po co w ogóle filtrować obrazy? Oto jedna z możli-
wych odpowiedzi. W aparatach cyfrowych przetwornik CCD/CMOS jest poprzedzony w osi
optycznej analogowym filtrem dolnoprzepustowym LP w celu redukcji zjawiska aliasingu. Filtr
ten ma postać płytki szklanej o odpowiednich właściwościach oraz odznacza się „paskudną”
charakterystyką amplitudowo-częstotliwościową: nie jest zbyt stromy w sytuacji kiedy my
oczekujemy „ostrych” zdjęć w zakresie do połowy częstotliwości przestrzennego próbkowania
obrazu (chcemy widzieć krawędź na 2 pikselach – jeden ciemny drugi jasny). W związku z tym
po akwizycji sygnału stosuje się c yfr o wą filtracj ę wszechprzepustową (AllPass), uwypu-
klająca wysokie częstotliwości (detale). Daje to efekt wyostrzania zdjęcia, które przeważnie da
się regulować specjalnym parametrem filtra.

22.3.1. Splot 2D

Zacznijmy od definicji dwuwymiarowego splotu oraz zbliżonej do niej definicji dwuwymiaro-


wej funkcji korelacji dla sygnałów ciągłych i dyskretnych. Nie zaniedbamy definicji całkowych
doceniając znaczenie podpikselowej analizy i przetwarzania obrazów.
• Ciągły splot 2D oraz odpowiadający mu w dziedzinie częstotliwości iloczyn ciągłych widm
2D Fouriera:

∞ ∞ ∞ ∞
y ( u, v ) = ∫ ∫ x ( a, b)h( u − a, v − b)dadb = ∫ ∫ x ( u − a, v − b)h( a, b)da db (22.27)
−∞ −∞ −∞ −∞

G ( fu , f v ) = X ( fu , f v ) ⋅ H ( fu , f v ) (22.28)
Filtracja 2D obrazów 671

• Ciągła funkcja korelacji 2D (własnej i wzajemnej, dla bardziej intuicyjnego zrozumienia ze


znakiem „+” a nie „−”):
∞ ∞
Rx , x ( a , b ) = ∫ ∫ x (u, v ) x* ( u + a, v + b)du dv (22.29)
−∞ −∞
∞ ∞
Rx , y ( a , b) = ∫ ∫ x (u, v ) y * ( u + a, v + b)du dv (22.30)
−∞ −∞

• Dyskretny splot 2D − liniowy i cykliczny oraz iloczyn widm 2D DFT w przypadku splotu cy-
klicznego (dla sygnałów 2D cykliczne powielanie danych, czyli ich uokresowienie, dotyczy
macierzy i dlatego jest wykonywane poprzez operację modulo w dwóch wymiarach):
∞ ∞
y ( m, n ) = ∑ ∑ x (i , j ) h ( m − i , n − j ) (splot liniowy) (22.31)
i =−∞ j =−∞

M −1 N −1
y ( m, n ) = ∑ ∑ (
x (i, j ) ⋅ h ( m − i ) mod M ,( n − j ) mod N ) (splot cykliczny) (22.32)
i =0 j =0

G (k , l ) = F ( k , l ) ⋅ H (k , l ) , (prawdziwe tylko dla (22.32)) (22.33)

• Dyskretna funkcja korelacji 2D (własna i wzajemna, ponownie ze znakiem „+” a nie „−”):
∞ ∞
Rx , x ( i , j ) = ∑ ∑ x ( m, n ) x * ( m + i , n + j ) (22.34)
m =−∞ n =−∞
∞ ∞
R x , y (i , j ) = ∑ ∑ x ( m, n ) y * ( m + i , n + j ) (22.35)
m =−∞ n =−∞

Filtracja dwuwymiarowa realizowana za pomocą operacji liniowego splotu 2D (22.31) spro-


wadza się do wykonania sekwencji następujących operacji:

• h(i, j) → h(−i, −j) odwrócenia w przestrzeni x-y wag filtra h(i, j), czyli jego od
powiedzi impulsowej
• h(−i, −j) → h(m − i, n − j) przesunięcia ich do punktu (m, n)
• sm,n(i, j) = x(i, j) h(m − i, n − j) wymnożenia z filtrowanym sygnałem x(i, j) dla wszystkich i, j

• g ( m, n ) = ∑∑ sm,n (i , j ) zsumowania tych iloczynów i otrzymania wartości g(m, n)


i j

Koncepcyjnie operacje te są identyczne jak dla dyskretnego splotu 1D, opisanego w rozdziale
1.3.6 i graficznie wytłumaczonego na rysunku 1.8, są tylko rozszerzone o nowy wymiar. Nale-
ży je powtórzyć dla wszystkich przesunięć (m, n). Przypomnijmy, pierwsze przybliżenie ope-
racji splotu 2D przedstawiono na rysunku 22.9. Jego uzupełnienie stanowią rysunki 22.16
i 22.17, wzbogacone szczegółowym komentarzem umieszczonym w ich podpisach.
Na co należy zwrócić szczególną uwagę w przypadku splotu 2D? Po pierwsze, na ewentualny
brak przyczynowości stosowanej dwuwymiarowej odpowiedzi impulsowej filtra. Przypomnij-
my, układ jest przyczynowy, jeśli jego odpowiedź nie wyprzedza pobudzenia (skutek nie może
występować przed przyczyną). Dlatego odpowiedź przyczynowego układu dwuwymiarowego
na impuls 2D δ (i, j) (sygnał 2D delta Kroneckera):
672 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b) c)
j j j
x(i, j)
h(i, j)

i i n

i
h(−i, −j)
m

Rys. 22.16. Graficzna interpretacja splotu dwuwymiarowego, czyli nierekursywnej, dwuwymiarowej filtracji
cyfrowej: a) odpowiedź impulsowa filtra h(i, j) (wartość proporcjonalna do poziomu szarości wypełnienia
symbolu „o”), b) odpowiedź impulsowa filtra po zanegowaniu jej argumentów (lustrzane odbicie względem
punktu (0, 0)), otrzymujemy h(−i, −j), c) przesunięcie h(−i, −j) do punktu (m, n) i otrzymanie w ten sposób
h(m − i, n − j), które jest następnie wymnażane z próbkami macierzy x(i, j) znajdującymi się „pod” maską
wagową filtra; na końcu wartości wszystkich iloczynów są dodawane, a otrzymana liczba, wynik filtra-
cji, jest podstawiana do macierzy wynikowej y(i, j) w punkcie (m, n). Operacje z rysunku c) są powtarzane
dla wszystkich par wartości (m, n)

a) b) c)
j j j
x(i, j)
h(i, j)
i i
n

h(−i, −j)
i

Rys. 22.17. Graficzna interpretacja splotu dwuwymiarowego, w sytuacji kiedy odpowiedź impulsowa filtra
jest nieprzyczynowa (h(i, j) ≠ 0 dla i < 0 lub j < 0). Wówczas zostaje obliczona próbka y(m, n) macierzy
wynikowego obrazu, odpowiadająca próbce środkowej przesuniętej maski wagowej filtra. W ogólności
punkt przyporządkowania może być dowolny

 1, i = 0, j = 0
δ (i , j ) =  (22.36)
0, i, j pozostale

powinna spełniać warunek:

h (i, j ) = 0 dla i < 0 lub j < 0 (22.37)

czyli być niezerowa tylko dla i ≥ 0 i j ≥ 0. Wówczas podczas splotu z przyczynową odpowie-
dzią h(i, j) wartość „sumy iloczynów” jest przyporządkowywana próbce macierzy wynikowej,
odpowiadającej prawemu górnemu narożnikowi maski wagowej filtra, tak jak na rysunku
22.16. Ale podczas projektowania wag filtra 2D najczęściej otrzymuje się nieprzyczynowe
odpowiedzi impulsowe, podobnie jak to było w przypadku nierekursywnych filtrów jednowy-
miarowych (patrz rozdział 12, w szczególności podrozdział 12.5 oraz rysunki 12.9 i 12.10).
Filtracja 2D obrazów 673

Wówczas h(i, j) przyjmuje wartości niezerowe wokół środka układu współrzędnych (0, 0), tak
jak jest to pokazane na rysunku 22.17a. Wtedy po lustrzanym „odbiciu” i przesunięciu h(i, j)
do punktu (m, n), wynik splotu jest przyporządkowywany punktowi y(m, n), pokrywającemu
się ze środkiem maski wagowej filtra, tak jak na rysunku 22.17b. W ogólności jednak punkt
przyporządkowania może być dowolny. W osi (dziedzinie) czasu raczej nie spotykamy w życiu
nieprzyczynowości, natomiast w osi położenia (1D, 2D, 3D), gdzie „minus” jest umowny, kie-
runki „plus” i „minus” są równoprawne. Dlatego nieprzyczynowe filtry 2D nie powinny nas
dziwić.
Ponieważ obraz ma skończone wymiary, napotykamy problemy z realizacją operacji filtracji na
brzegach obrazu. Tam zwyczajnie brakuje nam próbek. Szczególnie jest to „bolesne” dla du-
żych macierzy współczynników wagowych, charakterystycznych dla bardzo selektywnych fil-
trów. Cóż wtedy robimy? Mamy do wyboru trzy możliwości: 1) uzupełnienie obrazu dookoła
wartościami zerowymi, 2) powiększenie obrazu metodą powtarzania wszystkich próbek brze-
gowych, 3) odbicie lustrzane próbek względem brzegów, 4) przedłużenie okresowe: powięk-
szenie obrazu metodą jego powielenia z każdej ze stron (np. utworzenie szachownicy 3×3,
składającej się z filtrowanego obrazu), Żadna z tych metod nie jest idealna, ponieważ ewentu-
alne nieciągłości wprowadzone w ten sposób na b r zegach o b r azu spowodują powstanie
tam lokalnych zafalowań w obrazie po filtracji.
Transformacja Fouriera 1D charakteryzuje się tzw. właściwością splotu (4.13), (8.20)÷(8.24),
która także funkcjonuje w dwóch wymiarach. Dlatego możemy: 1) uzupełnić macierz wag ze-
rami do rozmiarów obrazu, 2) obliczyć transformaty 2D DFT dla wag i obrazu, 3) wymnożyć
je oraz 4) wykonać transformację odwrotną 2D IDFT. Obraz zostanie przefiltrowany. Jednak
podobnie jak w świecie 1D, będzie zrealizowany w ten sposób splot cykliczny (kołowy)
(22.32), a nie liniowy (22.31). Co to znaczy? Upraszczając, możemy powiedzieć, że splotą się
nam ze sobą w sposób liniowy: „szachownica” powstała z powielenia macierzy obrazu (jak
wyżej: trzy wiersze i trzy kolumny) oraz macierz wag filtra. Przypomnijmy, że w przypadku
1D splatały się ze sobą: powielony fragment sygnału i wektory wag filtra (patrz rysunki 13.11
i 13.12). Ilustrację wyniku takiego splotu stanowią przykłady filtracji pokazane na rysunkach
22.12 i 22.13. Należy zwrócić na nich uwagę na niespodziewane wartości i zafalowania wystę-
pujące na krawędziach obrazu po filtracji, szczególnie tam gdzie występuje skokowa zmiana
wartości pikseli po „szachownicowym” powieleniu obrazu, np. na wyraźny wpływ ciemnych
spodni Pana fotografa (kamerzysty) na zafalowania występujące na niebie. W przypadku splotu
liniowego filtr „wjeżdża” na obraz startując od wartości, którymi sami ten obraz uzupełniliśmy
na brzegach. Podczas opisanej powyżej operacji szybkiego splotu, takiego wyboru nie mamy.

Dygresja. Obecnie typowy obrazek w aparacie fotograficznym ma rozmiar około 3000×2000 =


= 6 megapikseli, więc i stosowane filtry mogą być dłuższe, gdyż do brzegu nieprędko dojadą.
A jak tam dotrą, to niekoniecznie zastaną tam „czarną dziurę”, gdyż przetwornik każdego apa-
ratu ma więcej pikseli niż wykorzystuje, przykładowo ma 8,2 megapikseli a oferuje tylko 8. Te
niewykorzystane piksele leżą właśnie na brzegach i powodują, że efekt brzegowy dla fotografa
nie występuje: nie trzeba nic odbijać − możemy poświęcić (odrzucić) rzeczywiste piksele i tak
wątpliwej jakości, gdyż leżące blisko krawędzi obiektywu. I tu następna uwaga: szybkość! Ty-
powy aparat robi zdjęcia z prędkością dwóch klatek na sekundę, czyli na zastosowanie filtra
jest znacznie mniej czasu niż pół sekundy, a do obsłużenia są miliony pikseli.
674 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

22.3.2. Projektowanie filtrów 2D

Poniżej przedstawiono trzy inżynierskie metody, służące do projektowania macierzy wag fil-
trów 2D. Przechodzimy więc obecnie od rozważań jakościowych do ilościowych.

Rodzaje charakterystyk częstotliwościowych filtrów 2D

Na początku musimy sobie odpowiedzieć na pytanie, jak powinna wyglądać pożądana przez
nas charakterystyka amplitudowo-częstotliwościowa filtra 2D? Dla jakich wartości (fm, fn) ma
być ona równa 1, a dla jakich 0? Na rysunku 22.18 są przedstawione naj częściej stosowane
kształty charakterystyk dolnoprzepustowych (LP), górnoprzepustowych (HP), pasmowoprze-
pustowych (BP) oraz pasmowozaporowych (BS), w których dziedzina argumentów (fm, fn) pas-
ma przepustowego opiera się na prostokącie lub okręgu. Oczywiście, wybór współczynników
charakterystyki filtra jest całkowicie dowolny i zależy od jego zastosowania.

Filtry i okna 2D będące wynikiem iloczynu wektorowego funkcji 1D

Filtry 2D. Załóżmy początkowo, że odpowiedź impulsowa filtra 2D jest iloczynem wektoro-
wym odpowiedzi impulsowej dwóch filtrów 1D:

h2D(m, n) = h1D(m)⋅g1D(n), 0 ≤ m≤ K−1, 0 ≤ n ≤ L−1 (22.38)

Ich długości są zazwyczaj znacznie mniejsze niż wymiary obrazu (K < M, L < N). Z powodu
rozdzielności zmiennych m i n w (22.38), po podstawieniu (22.38) do (22.9) w prosty sposób
otrzymujemy:

H2D(fm, fn) = H1D(fm)⋅G1D(fn) (22.39)

czyli widmo filtra 2D jest iloczynem wektorowym widm użytych filtrów 1D. W tym miejscu
należy zwrócić uwagę, że opisana w rozdziale 22.1 filtracja obrazu, składająca się z dwóch
sekwencji splotów 1D − najpierw g1D(n) po wierszach, a potem h1D(m) po kolumnach − jest
równoważna splotowi 2D z filtrem h2D(m, n) (22.38), gdyż podstawiając (22.38) do (22.31)
otrzymujemy:

∞ ∞ ∞  ∞ 
y ( m, n ) = ∑ ∑ x (i, j )h1D ( m − i ) g1D ( n − j ) = ∑  ∑ x (i , j ) g1D ( n − j )  h1D ( m − i )
 
i =−∞ j =−∞ i =−∞  j =−∞ 

Dla przykładu na rysunkach 22.19 a), b) i c) przedstawiono 49-elementową odpowiedź impul-


sową h1D(n) dolnoprzepustowego filtra 1D o częstotliwości granicznej równej 1/4 częstotliwoś-
ci próbkowania (zaprojektowaną z wykorzystaniem okna Blackmana) oraz otrzymaną z niej
49×49-elementową odpowiedź impulsową h2D(m, n) filtra 2D i jej widmo 2D H2D( fm, fn). Jak
do tej pory „wszystko gra”, gdyż otrzymana charakterystyka amplitudowo-częstotliwościowa
filtra jest podobna do tej z rysunku 22.18a (po lewej). Jednak przykładowe charakterystyki
filtrów: górnoprzepustowego (HP), pasmowoprzepustowego (BP) oraz pasmowozaporowego
(BS), pokazane na rysunkach 22.19 d), e) i f), są już różne od tych z rysunków 22.18 b), c) i d)
(po lewej). Dlaczego tak się dzieje? Ponieważ zgodnie z (22.39) wartości zerowe widma
H1D( fm) zerują całe „wiersze” H2D( fm, fn), a wartości zerowe H1D( fn) − całe „kolumny”. Przy-
kładowo dla idealnego filtra górnoprzepustowego HP z rysunku 22.18b mamy:
Filtracja 2D obrazów 675

a) fn/fpr fn/fpr
0,5 0,5

f0/fpr fm/fpr f0/fpr fm/fpr

0,5 0,5

b) fn/fpr fn/fpr
0,5 0,5

fm/fpr fm/fpr
f0/fpr f0/fpr
0,5 0,5

c) fn/fpr fn/fpr
0,5 0,5

fm/fpr fm/fpr
f0/fpr f1/fpr f1/fpr
f0/fpr
0,5 0,5

d) fn/fpr fn/fpr
0,5 0,5

fm/fpr fm/fpr
f0/fpr f1/fpr f1/fpr
f0/fpr
0,5 0,5

Rys. 22.18. Idealne charakterystyki amplitudowo-częstotliwościowe zadawane podczas projektowania nie-


rekursywnych filtrów 2D metodą okien: prostokątne (po lewej) oraz kołowe (po prawej): a) dolnoprze-
pustowe LP, b) górnoprzepustowe HP, c) pasmowoprzepustowe BP, d) pasmowozaporowe BS. Ciemny
kolor = 0, biały kolor = 1. Charakterystyki filtrów HP i BS stanowią negację charakterystyk filtrów LP i BP
676 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) 0.5 b)
0.4
0.3

h(n)
0.2
0.1
0
-0.1
-20 -10 0 10 20
n

c) d)

e) f)

Rys. 22.19. Przykłady projektowania filtrów 2D metodą iloczynu wektorowego odpowiedzi impulsowych
filtrów 1D: a) odpowiedź impulsowa h1D(n) filtra LP jednowymiarowego, b) otrzymana z niej (22.38) od-
powiedź impulsowa h2D(m, n) filtra LP dwuwymiarowego, c) charakterystyka amplitudowo-częstotliwoś-
ciowa filtra 2D LP, d) e) f) − przykładowe charakterystyki amplitudowo-częstotliwościowe filtrów 2D: HP,
BP i BS

 1, pozostałe
H HP ( f m , f n ) = 
0, | f m |< f 0 i | f n |< f 0

natomiast w rozpatrywanym przypadku dla idealnego filtra HP otrzymujemy:

 1, pozostałe
H HP ( f m , f n ) = 
0, f m < f 0 lub f n < f 0
Filtracja 2D obrazów 677

a)

b)

Rys. 22.20. Okna 2D, składające się z 49 × 49 elementów i uzyskane z 49-elementowych okien 1D metodą
wymnożenia (iloczyn wektorowy), oraz ich widma 2D Fouriera: a) okno Hamminga, b) okno Gaussa σ( = 3)

Jeśli jesteśmy zainteresowani charakterystykami filtrów z rysunku 22.18, to z powyższych roz-


ważań wynika, że rozpatrywaną metodę można stosować tylko w przypadku projektowania
d o lno p r zep usto wych filtrów 2D i to wyłącznie o charakterystyce amplitudowo-częstotli-
wościowej mającej kształt prostokątny. Najprostszymi filtrami dolnoprzepustowymi 1D są po-
wszechnie stosowane funkcje okien czasowych (tabela 8-1 oraz (8.52), (8.55)), po unormowa-
niu sumy ich próbek do wartości 1 (wówczas składowa stała jest przenoszona bez zmiany).
Dygresja. Pytanie, czy powinniśmy być wyłącznie zainteresowani charakterystykami filtrów
z rysunku 22.18? Wyprzedzając nieco „tok wydarzeń”, powiedzmy, że maski wspaniałych fil-
trów kierunkowych Sobela i Prewitta z tabeli 22-3 spełniają także zależność (22.38) i w prosty
sposób dekomponują się na dwa filtry 1D, a wcale nie są dolnoprzepustowe. Równocześnie ist-
nieją proste maski uśredniające, czyli w klasycznej konwencji „dolnoprzepustowe”, które
wcale nie spełniają zależności (22.38). Wynika stąd, że odpowiedzi na pytania w świecie 2D
niekoniecznie są w zgodzie z naszymi przyzwyczajeniami i oczekiwaniami, wyniesionymi ze
świata 1D. Ale na pewno wiedza 1D jest dobrym punktem startowym do wiedzy 2D.

Okna 2D. Korzystając z (22.38) można uzyskać także wersje 2D okien 1D, które będą nam po-
trzebne w dwóch następnych metodach projektowych (tym razem zakładamy wykorzystanie
jednego okna 1D o tej samej długości: −K ≤ m ≤ K, −K ≤ n ≤ K):
w2D(m, n) = w1D(m)⋅w1D(n) (22.40)
Tym razem okna nie są normowane, tzn. mają wartość maksymalną równą 1. Na rysunku 22.20
przedstawiono otrzymane w ten sposób 49×49-elementowe okna 2D Hamminga i Gaussa
(σ = 3) oraz ich widma 2D DFT po „centrowaniu, czyli po ustawieniu współczynnika DC
678 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

w środku. W obu przypadkach okna 2D są symetryczne względem punktu środkowego macie-


rzy, a ich widma − nieoscylacyjne (widok w skali liniowej). W przypadku okna Gaussa mamy:

 1 2 2  1 2 2  1 2 2 2
w2D ( m, n ) = w1D (m) ⋅ w1D (n ) =  e −m / 2σ   e − n / 2σ  = 2
e − ( m + n ) / 2σ (22.41)
 2πσ   2πσ  2 πσ

Obliczmy w celach poglądowych widmo 2D (22.7) ciągłego okna Gaussa 2D (uwzględniamy


(4.35)):
∞ ∞
 1 2 2 2 
W ( fu , f v ) = ∫ ∫  2
e −( u + v ) / 2σ  e − j (2 πfu u + 2 πf v v ) du dv =
−∞ −∞  2 πσ 

∞ 1 2 2  ∞ 1 2 2 
= ∫ e −u / 2 σ e − j 2 πf u u du   ∫ e− v / 2σ e − j 2 πfv v dv  = (22.42)
   
 −∞ 2πσ   −∞ 2πσ 

(
= e −2 π
2 2
σ f u2
) ⋅ (e −2 π2 σ2 f v2
)=e −2 π2 σ2 ( f u2 + f v2 )

Jak widać widmo 2D Fouriera ciągłej funkcji 2D Gaussa jest także funkcją 2D Gaussa. Zwięk-
szenie wartości σ rozszerza okno oraz proporcjonalnie zawęża jego widmo.

Metoda okien

Jak pamiętamy z rozdziału 12 poświęconego projektowaniu współczynników wagowych nie-


rekursywnych filtrów cyfrowych, podstawowe miejsce zajmowała w nim metoda okien (pod-
rozdział 12.5). Przypomnijmy, na początku analitycznie wyznacza się w niej odpowiedź impul-
sową idealnego filtra LP, HP, BP i BS metodą odwrotnej transformacji Fouriera zadanych wy-
magań częstotliwościowych, a następnie wymnaża się ją z wybraną funkcją okna czasowego.
Od długości tego okna oraz jego kształtu zależy stromość charakterystyki amplitudowo-czę-
stotliwościowej filtra oraz jego poziom tłumienia w paśmie zaporowym. Powtórzmy ten scena-
riusz w przypadku filtrów 2D. Załóżmy na początku, że chcemy zaprojektować dolnoprzepu-
stowy filtr 2D o prostokątnej charakterystyce amplitudowo-częstotliwościowej HDT-FT( fm, fn),
przedstawionej na rysunku 22.18a (po lewej stronie). Z (22.10) otrzymujemy jego odpowiedź
impulsową (−∞ ≤ m, n ≤ ∞):

1
f0  1 f0
j 2 π( f m / f mpr ) m
 j 2π( f / f )n
( f 0)
hLP ( m, n ) = ∫  ∫ 1⋅e df m  e n npr
df n =
f npr  f
− f 0  mpr

− f0 
 fm0 j 2 π( f m / f mpr ) m
  f n 0 j 2 π( f / f ) n 
=  ∫ 1⋅ e df m  ⋅  ∫ e n npr
df n  = (22.43)
− f  −f 
 m0   n0 

=
(
sin 2πmf m0 / f mpr ) ⋅ sin ( 2πnfn0 / fnpr ) , hLP (0,0) =
4 f m0 f n 0
πm πn f mpr f npr

Podobnie jak w przypadku 1D odpowiedzi impulsowe pozostałych filtrów: górnoprzepusto-


wego HP, pasmowoprzepustowego BP oraz pasmowozaporowego BS znajdujemy jako kombi-
nację odpowiedzi impulsowej filtrów LP oraz impulsu Kroneckera (22.36), czyli odpowiedzi
Filtracja 2D obrazów 679

impulsowej idealnego filtra wszechprzepustowego (patrz rysunki 22.18 b, c, d − lewa kolum-


na):
( f 0) ( f 0)
hLP (m, n ) = δ(m, n ) − hLP ( m, n ) (22.44)
( f 1, f 2) ( f 2) ( f 1)
hBP (m, n ) = hLP ( m, n ) − hLP ( m, n ) (22.45)
( f 1, f 2) ( f 1, f 2)
hBS ( m, n ) = δ( m, n ) − hBP ( m, n ) (22.46)

W przypadku wyboru charakterystyki częstotliwościowej o kształcie koła, przedstawionej na


rysunku 22.18a (po prawej stronie), teoretyczna odpowiedź impulsowa filtra dolnoprzepusto-
wego, wyznaczona z (22.10), jest równa (−∞ ≤ m, n ≤ ∞ oraz fpr = fmpr = fnpr) [Lim90]:

( f 0)
hLP ( m, n ) =
R
2 πR m 2 + n 2
(
J1 R m 2 + n 2 , ) R=
2 πf 0
f pr
(22.47)

gdzie J1(x) oznacza funkcję Bessela pierwszego rodzaju i pierwszego rzędu (jest zaimplemen-
towana w języku Matlab). Odpowiedzi impulsowe filtrów HP, BP i BS wyznacza się jak po-
przednio ze wzorów (22.44) ÷ (22.46) (patrz rysunki 22.18 b, c, d − prawa kolumna).
Na rysunkach 22.21a i 22.21b przedstawiono przykładowe odpowiedzi impulsowe filtrów
(22.43) i (22.47), w sytuacji kiedy są one zaprojektowane na 1/2 ograniczenia pasma częstotli-
wościowego (2f0/fpr =1/2) oraz są macierzami 49×49-elementowymi (−K ≤ m ≤ K, −L ≤ m ≤ L,
K = L = 24). Jak widać w obu występują wolno gasnące oscylacje, ale w przypadku charakte-
rystyki częstotliwościowej o kształcie koła rozchodzą się one równomiernie we wszystkich
kierunkach i gasną nieco szybciej.
Zastosowanie 49×49-elementowych macierzy wag filtrów z rysunków 22.21a i 22.21b jest
równoznaczne z uwzględnieniem nie wszystkich próbek teoretycznych odpowiedzi impul-
sowych (22.43), (22.47), gdyż indeksy m, n tych odpowiedzi zmieniają się od −∞ do +∞, a są
uwzględnione tylko te o numerach od −24 do 24. Odpowiada to nałożeniu na idealne odpowie-
dzi impulsowe prostokątnego okna 2D 0/1 (o kwadratowym kształcie powierzchni). W dzie-
dzinie częstotliwości jest to równoważne splotowi zadanej charakterystyki 2D filtra z widmem
Fouriera prostokątnego okna 2D. Widmo to ma w przybliżeniu kształt funkcji z rysunku 22.21a
(w końcu funkcje z rysunków 22.21a i 22.21b to para transformat 2D Fouriera, a po prawej
stronie widzimy „okno prostokątne” tylko w dziedzinie częstotliwości). W związku z tym wy-
nikowy filtr będzie więc miał inną charakterystykę niż zadana. Dla przykładu na rysunkach
22.21c i 22.21d są przedstawione charakterystyki amplitudowo-częstotliwościowe filtrów z ry-
sunków 22.21a i 22.21b. Jak widać widmo okna dwuwymiarowego prostokątnego nie psuje
stromości filtra, ale doprowadza do bardzo silnych oscylacji, zwłaszcza na granicy jego pasma
przenoszenia. Powtarza się więc stara piosenka, bardzo dobrze znana z projektowania filtrów
1D: musimy zastosować inne okno 2D w(m, n), mające widmo mniej oscylacyjne ale za to
szersze. Szerokość widma możemy zmniejszyć rozszerzając okno.
Jak już było powiedziane powyżej, funkcje dwuwymiarowych okien przestrzennych w(m, n)
najczęściej uzyskuje się w wyniku iloczynu wektorowego próbek wybranego okna 1D
w(m, n) = w(m)w(n) i wówczas W(fm, fn) = W(fm)W(fn). Zależy nam na tym, aby widmo W(fm, fn)
było jak najwęższe, gdyż wówczas jego splot z zadaną, idealną charakterystyką częstotliwo-
ściową filtra najmniej ją zdeformuje. Na rysunku 22.20 były już pokazane przykładowe okna
2D, otrzymane w opisany powyżej sposób, oraz ich widma.
680 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) c)

b) d)

Rys. 22.21. Teoretyczne, ograniczone oknem prostokątnym odpowiedzi impulsowe dolnoprzepustowych fil-
trów h(m, n) (22.43) i (22.47), odpowiadające prostokątnej i kołowej charakterystyce amplitudowo-częstotli-
wościowej z rysunku 22.18a, oraz ich widma 2D Fouriera obliczone za pomocą 2D DFT: a) wizualizacja
(22.43), b) wizualizacja (22.47); 2f0/fpr = 1/2

Na rysunku 22.22 pokazano przykładowe odpowiedzi impulsowe filtrów LP, HP, BP i BS za-
projektowane z wykorzystaniem wzorów (22.47) i (22.44) ÷ (22.46) oraz okna 2D Hamminga
z rysunku 22.20a. Jak widać, są one zgodne z naszymi oczekiwaniami i wymaganiami projek-
towymi. Z kolei zastosowanie zaprojektowanych filtrów do obrazu Kamerzysta daje wynik
przedstawiony na rysunku 22.23. I tu niestety sen o p o tęd ze b r utalnie p r yska, nie
po ra z p i e r wsz y p o d c z a s nasz e j wspólnej podró ży! Odpowiedzi impulsowe LP da-
lej są za długie i wprowadzają irytujące zafalowania w obrazie. Co z tym można dalej zrobić?
Jedynym lekarstwem jest radykalne skrócenie odpowiedzi impulsowych filtrów, co zdecydo-
wanie pogorszy ich selektywność częstotliwościową. Przykłady znanych z literatury takich
„gotowców” podano w następnym podrozdziale 22.3.3.
Alternatywnym rozwiązaniem jest odejście od filtrów liniowych na rzecz krótkich filtrów nie-
liniowych (statystycznych, logicznych, kontekstowych), np. medianowych lub morfologicz-
nych, oraz zastąpienie przetwarzania typu „to samo dla wszystkich” przetwarzaniem typu
„każdemu według jego potrzeb”: adaptacyjnemu i lokalnemu. Przykładem takiego przetwarza-
nia może być adaptowanie wag filtra w zależności od lokalnej zawartości obrazu, np. stosowa-
nie długich filtrów na gładkich płaszczyznach obrazu, a krótkich − przy krawędziach obiektów.
Cóż, jak widać jesteśmy dopiero na początku bardzo długiej drogi. W końcu jest to podręcznik
dotyczący jedynie podstaw cyfrowej analizy i przetwarzania sygnałów.
Filtracja 2D obrazów 681

a)

b)

c)

d)

Rys. 22.22. Przykłady filtrów 2D zaprojektowanych na podstawie wzorów (22.47) oraz (22.44) ÷ (22.46)
z zastosowaniem okna 2D Hamminga z rysunku 22.20a: a) dolnoprzepustowy (LP), czyli filtr z rysunku
22.21b z nałożonym oknem, b) górnoprzepustowy (HP), c) pasmowoprzepustowy (BP), d) pasmowozapo-
rowy (BS)
682 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) LP b) HP

c) BP d) BS

e) powiększony oryginał f) powiększony wynik LP

Rys. 22.23. Wynik zastosowania filtrów z rysunku 22.22. Jak widać, filtr dolnoprzepustowy LP, mający
istotnych około 25 × 25 wag, dalej jest za szeroki, gdyż wprowadza wyraźnie widoczne oscylacje w okolicy
skokowych zmian intensywności pikseli (patrz rysunek f). Jak widać koniecznością staje się użycie filtrów
jeszcze krótszych, np. 5 × 5 lub 3 × 3 lecz o wiele mn i ej s el ek t y w n y c h

Metoda częstotliwościowa

Trzecią bardzo naturalną i nietrudną metodą projektowania nierekursywnych filtrów 2D jest


metoda w dziedzinie częstotliwości. Jej scenariusz jest bardzo prosty: należy zadać macierz,
czyli konkretne wartości próbek, zadowalającej nas charakterystyki amplitudowo-częstotliwo-
ściowej filtra HDFT(k, l ), następnie ją transformować do dziedziny położenia (m, n) metodą od-
wrotnej transformacji Fouriera 2D IDFT (22.12), potem nałożyć okno przestrzenne na uzyska-
Filtracja 2D obrazów 683

ne w ten sposób wagi, zmniejszając oscylacje na ich brzegach oraz je ... z radością stosować.
Należy zwrócić szczególną uwagę na umieszczanie próbek widma w paśmie przejściowym
filtra, gdyż to czyni go mniej stromym, co z kolei zmniejsza oscylacje w odpowiedzi impulso-
wej filtra. Na rysunku 22.24 przedstawiono kolejne etapy projektowania dwóch filtrów według
powyższego przepisu oraz uzyskane przykładowe charakterystyki amplitudowo-częstotliwo-
ściowe. W celu łatwiejszej interpretacji częstotliwościowej osie zadanych i otrzymanych cha-
rakterystyk amplitudowo-częstotliwościowych opisano na tym rysunku w częstotliwościach
unormowanych, a nie numerami prążków widma 2D DFT. Szczegóły implementacyjne metody
można znaleźć w programie zamieszczonym w tabeli 22-5.
W porównaniu z metodą okien w metodzie częstotliwościowej nie wyznacza się odpowiedzi
impulsowej filtra analitycznie, tylko numerycznie: stosując 2D IDFT ze swoich wymagań.

22.3.3. Przykładowe filtry 2D

Z przeprowadzonych powyżej rozważań jednoznacznie wynika, że wymagana stromość filtra


w dziedzinie częstotliwości pociąga za sobą bardzo silne i rozległe przestrzenne oscylacje od-
powiedzi impulsowej. W konsekwencji suma splotowa staje się bardzo długa. Powoduje to, że
w miejscach występowania nieciągło śc i i sko ko wych z mian war to śc i p r ó b e k w ob-
razie filtr wprowadza silne zafalowania (tzw. dzwonienie), irytujące oglądającego, tym rozle-
glejsze im filtry są dłuższe. A przecież w obrazie często występują skokowe zmiany. Równo-
cześnie z powodu skończonych rozmiarów obrazu i problemów z brakującymi próbkami na
jego brzegach, musimy dokonać jego ekstrapolacji i sami możemy w ten sposób wprowadzić
nieciągłości, powodujące oscylacje. Skracanie odpowiedzi impulsowej przez umiarkowane
okienkowanie tylko częściowo rozwiązuje ten problem. Koniecznością staje się radykalne
okienkowanie i zmniejszenie wymiarów macierzy filtrów, przykładowo do rozmiarów 3 × 3 lub
5 × 5. Jako ćwiczenie pozostawiamy Czytelnikowi wykonanie samodzielnych eksperymentów
z wykorzystaniem programu, przedstawionego w dalszej części tego rozdziału w tabeli 22-5.
W literaturze podaje się wiele przykładowych zestawów współczynników wagowych (macierze
o wymiarach od 2 × 2 do 9 × 9) gotowych do zastosowania. Wybrane z nich przedstawiono
w tabeli 22-3.
Dysponując macierzami wag filtrów liniowych, można obliczyć ich charakterystyki częstotli-
wościowe. W tym celu należy uzupełnić macierze współczynników dokoła zerami w taki spo-
sób, aby punkt środkowy filtra zajmował pozycję współczynnika DC z rysunków 22.11b
i 22.11c, następnie dokonać przestawienia ćwiartek powiększonej macierzy tak jak na rysunku
22.11a oraz transformować wynik do dziedziny częstotliwości za pomocą 2D DFT (niezacho-
wanie pozycji punktu DC wpłynie na zmianę charakterystyki fazowo-częstotliwościowej).
Ponieważ filtry liniowe mogą być także różniczkujące (patrz rozdz. 12.6.2) lub podwójnie
różniczkujące, w tabeli 22-3 rozszerzono omówione do tej pory zagadnienia i podano bez do-
wodu również ich przykłady (gradient kierunkowy skośny, Sobela, Prewitta, Robertsa).
W przypadku świata 2D filtry różniczkujące są kierunkowe. Aby dokonać detekcji krawędzi
z ich pomocą należy ten sam obraz przefiltrować osobno dwoma filtrami wykrywającymi
(uwydatniającymi) kierunki prostopadłe, np. linie poziome i pionowe, a potem wyznaczyć
pierwiastek z sumy kwadratów obu obrazów „kierunkowych” (dla tego samego piksela w obu
obrazach). Detekcja krawędzi (konturów) jest bardzo ważnym zagadnieniem w automatycz-
nych systemach rozpoznawania obiektów, np. w medycynie oraz automatyce i robotyce.
684 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b)

Rys. 22.24. Przykład projektowania odpowiedzi impulsowej filtra dolnoprzepustowego w dziedzinie czę-
stotliwości dla dwóch kształtów charakterystyk amplitudowych (rys. 22.18a): a) prostokątnego oraz b) ko-
łowego. Kolejno pionowo: zadana charakterystyka częstotliwościowa filtra HDFT(k, l ) (po przestawieniu z ry-
sunku 22.11a, opisana w częstotliwościach unormowanych), oscylacyjna odpowiedź impulsowa uzyskana
w wyniku odwrotnej transformacji Fouriera 2D IDFT, efekt wymnożenia tej odpowiedzi z oknem 2D Gaussa
(σ = 10) oraz jej widmo 2D, obliczone za pomocą 2D DFT (ponownie przestawione i opisane w częstotliwo-
ściach unormowanych)
Filtracja 2D obrazów 685

Tab. 22-3. Definicje przykładowych filtrów 2D, liniowych i nieliniowych (medianowy, minimalny, maksy-
malny)
Rodzaj filtra
Definicja
Zastosowanie
LP 1 4 7 4 1
wygładzanie 1 1 1 1 1 1 1 2 1  4 16 26 16 4
1  1   1   1  
1 1 1 , 1 2 1 , 2 4 2 ,
9  10   16   273  7 26 41 26 7
1 1 1 1 1 1  1 2 1   
 4 16 26 16 4
1 4 7 4 1

Różniczkujący gradient kierunkowy Sobela gradient kierunkowy Prewitta


detekcja krawędzi 1 2 1  1 0 −1 1 1 1 1 0 −1
poziomych lub  0 0 0 ,  2 0 −2   0 0 0 , 1 0 −1
pionowych        
 −1 −2 −1  1 0 −1  −1 −1 −1 1 0 −1

Różniczkujący gradient kierunkowy Robertsa gradient skośny


detekcja krawędzi 1 1 1  1 1 1
1 0   0 1  1 -2 −1 ,  −1 -2
ukośnych
 0 −1 ,  −1 0 1
       
1 −1 −1  −1 −1 1

BP laplasjan 1 laplasjan 2 laplasjan 3 laplasjan 4


Podwójnie  −1 −1 −1 −1 − 1
różniczkujący  0 −1 0  1 −2 1   −1 −1 −1  −1 −1 −1 −1 −1
detekcja krawędzi  −1 4 −1  −2 4 −2   −1 8 −1  
       −1 −1 24 −1 −1
o dowolnych  
kierunkach  0 −1 0  1 −2 1   −1 −1 −1  −1 −1 −1 −1 −1
 −1 −1 −1 −1 −1

BP laplasjan funkcji gaussowskiej


Podwójnie 0 1 1 2 2 2 1 1 0
różniczkujący 1 2 4 5 5 5 4 2 1
wstępne przetwarzanie 0 0 1 0 0  
  1 4 5 3 0 3 5 4 1
0 1 2 1 0  
   2 5 3 −12 −24 −12 3 5 2 
,
 1 2 -16 2 1   2 5 0 −24 -40 −24 0 5 2 
   
 0 1 2 1 0   2 5 3 −12 −24 −12 3 5 2 
 0 0 1 0 0 1 4 5 3 0 3 5 4 1
 
 1 2 4 5 5 5 4 2 1
0 1 1 2 2 2 1 1 0

MEDIANOWY  x1 x2 x3 
usuwanie szumu med  x4 x5 x6  wartość środkowa po uporządkowaniu {min...max}
impulsowego  
 x7 x8 x9 

EROZJI  x1 x2 x3   x1 x2 x3 
DYLATACJI min  x4 − x6 , max  x4
 − x6  wartość min/max sąsiadów piksela
ścienianie    
pogrubianie  x7 x8 x9   x7 x8 x9 
686 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

W przetwarzaniu obrazu stosuje się także proste filtry nieliniowe, które okazują się być bardzo
skuteczne. Z tego powodu ich definicje także podano w tablicy 22-2. Należy do niej filtr me-
dianowy, minimalny (erozji) oraz maksymalny (dylatacji). W tym przypadku filtr nie ma żad-
nych wag tylko jest reprezentowany przez maskę, na przykład o wymiarach 3 × 3 lub 5 × 5, któ-
ra przesuwa się nad obrazem. W każdym położeniu maska „widzi” wybraną grupę pikseli ob-
razu. Na podstawie ich wartości w obrazie wynikowym jest ustawiana wartość piksela pokry-
wającego się z środkiem maski. W filtrze medianowym wartości „widzianych” pikseli są usta-
wiane w kolejności od najmniejszego do największego, a jako wynik filtracji jest wybierana
wartość znajdująca się w środku tak uporządkowanego zbioru. Ponieważ zakłócenia impulso-
we w obrazie mają wartości odbiegające od „otoczenia”, zostają one skutecznie usunięte w ten
sposób. Nie towarzyszy temu szkodliwe wygładzenie skokowych zmian intensywności pikseli
w obrazie, typowe dla liniowego filtra dolnoprzepustowego. W podobny sposób pod względem
metodologicznym działają filtry minimalny i maksymalny: do obrazu wynikowego jest kopio-
wana minimalna lub maksymalna wartość przyjmowana przez piksele sąsiadujące z pikselem
„wybranym” przez środek maski. Filtrowi minimalnemu towarzyszy „erozja” (zmniejszenie)
wielkości obiektów obrazu, maksymalnemu zaś − ich „dylatacja” (powiększenie). Dodatkowo
definiuje się operacje złożone, będące sekwencją wywołań tych filtrów: otwarcia (min + max)
− usunięcie zakłóceń typu zewnętrzne „wypustki” obiektu obrazu oraz domknięcia (max +
+ min) − usunięcie zakłóceń typu wewnętrzne „nadżerki” obiektu obrazu [Wojn94, Wojn98,
Tade97].

Dla dociekliwych. Na zakończenie, w tabeli 22-4 podano wzo r y p r o j ekto we, które umożli-
wią nam prosty dobór parametrów filtrów obrazu, wywodzących się z funkcji Gaussa (przy-
pomnijmy (22.41)), zajmującej jedno z najważniejszych miejsc w analizie i przetwarzaniu syg-
nałów 1D i 2D ze względu na: minimalne pole powierzchni jej atomu czasowo-częstotli-
wościowego (17.7)÷(17.9) oraz ten sam kształt funkcji czasowej i jej widma (4.35), (22.42).
Z ich wykorzystaniem można wygenerować różne filtry zastępujące te z tabeli 22-3. Oryginal-
na, jednowymiarowa funkcja Gaussa g0(m) jest filtrem dolnoprzepustowym, jej pierwsza po-
chodna g1(m) − filtrem różniczkującym, a druga pochodna g2(m) − filtrem pasmowoprzepu-
stowym. Podobnie jest z dwuwymiarową funkcją Gaussa i jej pochodnymi cząstkowymi, które
w tym przypadku są filtrami kierunkowymi. Jej pierwsze pochodne cząstkowe mogą zastępo-
wać filtry gradientowe Sobela, horyzontalny i wertykalny. Natomiast laplasjan:
∂ 2 g 0 ( m, n ) ∂ 2 g 0 ( m, n )
L ( m, n ) = + = g 2 m ( m, n ) + g 2 n ( m, n ) (22.48)
∂2 m ∂2n
jest dwuwymiarowym filtrem pasmowoprzepustowym o charakterystyce częstotliwościowej 2D
o postaci z rysunku 22.18c (po prawej). Program z tabeli 22-5 umożliwia projektowanie filtrów
gaussowskich. Na rysunku 22.25 przedstawiono kształty gaussowskich filtrów 1D (K = L = 25)
i 2D (K = L = 15), w obu przypadkach σ = 5, a na rysunku 22.26 − przykłady zastosowania
filtrów 2D (K = L = 4, σ = 1,4).

22.3.4. Program komputerowy

Kończąc ten podrozdział chcielibyśmy dać Czytelnikowi możliwość samodzielnego zmierzenia


się z bardzo delikatną materią projektowania wag nierekursywnych filtrów dwuwymiarowych.
Z tego powodu w tabeli 22-5 zamieszczono kod źródłowy przykładowego programu napisane-
go w języku Matlab, implementujący: 1) wyznaczanie współczynników filtrów gaussopochod-
nych, 2) metodę okien oraz 3) metodę projektowania filtrów w dziedzinie częstotliwości.
Umożliwia on zapoznanie się z kształtami odpowiedzi impulsowych filtrów, ich widm oraz
samymi wynikami filtracji.
Filtracja 2D obrazów 687

a) 0.08

0.06

g 0 (m)
0.04

0.02

0
-20 -10 0 10 20
m

b) 0.01

0.005
g1(m)

-0.005

-0.01
-20 -10 0 10 20
m

c) 0.002
0.001
0
g 2 (m)

-0.001
-0.002
-0.003
-20 -10 0 10 20
m

Rys. 22.25. Kształty filtrów „gaussowskich” (σ = 5) 1D i 2D, zdefiniowanych w tabeli 22-4: a) dolnoprze-
pustowe, b) różniczkujące (kierunkowe: po wierszach i kolumnach), c) pasmowoprzepustowe
688 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Tab. 22-4. Filtry 1D i 2D wywodzące się z funkcji Gaussa (−K ≤ m ≤ K, −L ≤ n ≤ L)


1D 2D
Funkcja 1  m  2
1  m2 + n 2 
g0 ( m) = exp  − 2  g0 ( m, n ) = exp  − 
Gaussa 2πσ  2σ  2 πσ2 2σ2 
  
1-sza m m n
g1m ( m) = − g0 ( m) g1m ( m, n ) = − 2 ⋅ g0 ( m, n ), g1n ( m, n ) = − 2 ⋅ g0 ( m, n )
pochodna σ2 σ σ
2-ga m 2 − σ2 m 2 − σ2 n 2 − σ2
g 2m (m) = g0 ( m) g 2 m ( m, n ) = g0 ( m, n ), g2 n ( m, n ) = g 0 ( m, n )
pochodna σ4 σ 4
σ4
m 2 + n 2 − 2σ 2
Laplasjan g 2 ( m, n ) = g 2 m ( m, n ) + g 2 n ( m , n ) = g 0 ( m, n )
σ4

a) b)

c) d) e)

Rys. 22.26. Przykłady zastosowania filtrów „gaussowskich” do przetwarzania obrazu Kamerzysta (rys.
22.1a): a) filtracja dolnoprzepustowa, b) filtracja pasmowoprzepustowa z wykorzystaniem laplasjanu funkcji
Gaussa, c) filtracja gradientowa po wierszach, d) filtracja gradientowa po kolumnach, e) pierwiastek z sumy
kwadratów obrazów c) i d); parametry filtrów: K = 4, L = 4, σ = 1,4

Tab. 22-5. Program do projektowania współczynników wagowych nierekursywnych filtrów 2D

% Ćwiczenie: Projektowanie filtrów 2D

clear all; close all;

L = 15; % szerokość macierzy wag filtra (nieparzysta: 3, 5, 7, 9, ...)


K = (L-1)/2; df = 0.5/K; % zmienne pomocnicze do generacji wag
Filtracja 2D obrazów 689

m = ones(L,1)*(-K:K); % i opisu osi rysunków


n = (-K:K)'*ones(1,L); %
fm = ones(L,1)*(-0.5:df:0.5); %
fn = (-0.5:df:0.5)'*ones(1,L); %

% Wczytaj obraz do filtracji


[x,cmap] = imread('cameraman.tif');
imshow(x,cmap), title('Obraz'); pause
[N, M] = size(x);
x = double(x);

% FILTRY POCHODZĄCE OD FUNKCJI GAUSSA


sigma = 1.4; df = 0.5/K;
g0 = 1/(2*pi*sigma^2) .* exp(-(m.^2+n.^2)/(2*sigma^2)); % funkcja Gaussa
g1m = -m/(sigma^2) .* g0; % pochodna względem osi m
g1n = -n/(sigma^2) .* g0; % pochodna względem osi n
g2 = (m.^2 + n.^2 - 2*sigma^2)/(sigma^4) .* g0; % laplasjan funkcji Gaussa
subplot(221); mesh(m,n,g0); title('Filtr Gaussa');
subplot(222); mesh(m,n,g2); title('Laplasjan f. Gaussa'); colormap([0 0 0]); pause
subplot(223); imshow( conv2(x,g0,'same'),cmap );
subplot(224); imshow( conv2(x,g2,'same'),cmap ); pause; clf

subplot(231); mesh(m,n,g1m); title('Gradient "m"');


subplot(232); mesh(m,n,g1n); title('Gradient "n"'); colormap([0 0 0]); pause
subplot(234); imshow( conv2(x,g1m,'same'),cmap );
subplot(235); imshow( conv2(x,g1n,'same'),cmap );
subplot(236); imshow(sqrt(conv2(x,g1m,'same').^2+conv2(x,g1n,'same').^2),cmap); pause

% METODA OKIEN
chka = 1; % 0 = charakterystyka prostokątna, 1 = kołowa
w = hamming(L); w = w * w'; % okno 2D
subplot(111); mesh(m,n,w); colormap([0 0 0]); title('2D Okno'); pause

if(chka==0) % Charakterystyka prostokątna - odp. impulsowa dwóch filtrów LowPass


f0=0.25; wc=pi*f0; sinc=sin(wc*(-K:K))./(pi.*(-K:K)); sinc(K+1)=f0; lp1=sinc'*sinc;
f0=0.50; wc=pi*f0; sinc=sin(wc*(-K:K))./(pi.*(-K:K)); sinc(K+1)=f0; lp2=sinc'*sinc;
else % Charakterystyka kołowa - odp. impulsowa dwóch filtrów LowPass
f0=0.25; wc=pi*f0; lp1=wc*besselj( 1,wc*sqrt(m.^2 + n.^2))./(2*pi*sqrt(m.^2+n.^2));
lp1(K+1,K+1)= wc^2/(4*pi);
f0=0.50; wc=pi*f0; lp2=wc*besselj( 1,wc*sqrt(m.^2+n.^2))./(2*pi*sqrt(m.^2+n.^2) );
lp2(K+1,K+1)= wc^2/(4*pi);
end

lp = lp1; % LowPass bez okna 2D


lpw = lp .* w; % z oknem
hp = - lp1; hp(K+1,K+1) = 1 - lp1(K+1,K+1); % HighPass bez okna 2D
hpw = hp .* w; % z oknem
bp = lp1 - lp2; % BandPass bez okna 2D
bpw = bp .* w; % z oknem
bs = - bp; bs(K+1,K+1) = 1 - bp(K+1,K+1); % BandStop bez okna 2D
bsw = bs .* w; % z oknem

for typ = 1 : 4 % pokaż odp. impulsową, jej widmo i przefiltrowany obraz


switch (typ) % wybierz typ filtra
case 1, h = lp; hw = lpw; % LP
case 2, h = hp; hw = hpw; % HP
case 3, h = bp; hw = bpw; % BP
case 4, h = bs; hw = bsw; % BS
end
subplot(221); mesh(m,n,h); title('Filtr h(m,n)');
subplot(222); mesh(m,n,hw); title('Filtr hw(m,n)');
subplot(223); mesh(fm,fn,abs( fftshift2D(fft2(h)) ) ); title('|H(fm,fn)|');
subplot(224); mesh(fm,fn,abs( fftshift2D(fft2(hw)) ) ); title('|Hw(fm,fn)|');
colormap([0 0 0]); pause
subplot(121); y = conv2(x, h,'same'); imshow(y,[min(min(y)),max(max(y))]);
subplot(122); y = conv2(x, hw,'same'); imshow(y,[min(min(y)),max(max(y))]); pause
690 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

end

% FILTRY PROJEKTOWANE W DZIEDZINIE CZĘSTOTLIWOŚCI


% Zmienne pomocnicze do generacji wag i opisu osi rysunków
N=L+1; df = 0.5/(K+1);
m = ones(L+1,1)*(-(K+1):K); n = (-(K+1):K)'*ones(1,L+1);
fm = ones(L+1,1)*(-0.5:df:0.5-df); fn = (-0.5:df:0.5-df)'*ones(1,L+1);
% Okno 2D - jego kształt i widmo
w = hamming(N); w = w * w';
% Zadana charakterystyka częstotliwościowa - kołowa lub prostokątna
Q = round(K/2); % szerokość filtra LP
H = zeros(N,N);
for k = N/2+1-Q : N/2+1+Q % kołowa
for l = N/2+1-Q : N/2+1+Q
if( (k-N/2-1)^2 + (l-N/2-1)^2 <= Q^2) H(k,l) = 1; else H(k,l) = 0; end
end
end
% H(N/2+1-Q : N/2+1+Q, N/2+1-Q : N/2+1+Q) = ones(2*Q+1,2*Q+1); % prostokątna
% Zaprojektowanie filtra i sprawdzenie jego działania
h = real( ifft2(fftshift2D(H)) ); h = fftshift2D(h); % odpowiedź impulsowa
hw = h .* w; % odp. impulsowa z oknem
Hw = abs( fftshift2D( fft2( hw ) ) ); % jej widmo
y = conv2(x, hw, 'same'); % filtracja
% Rysunki
subplot(121); mesh( m,n,w ); title('Okno 2D w(m,n)');
subplot(122); mesh( fm,fn,abs( fftshift2D(fft2(w)) ) ); title('|W(fm,fn)|');
colormap([0 0 0]); pause
subplot(221); mesh(fm,fn,H); title('Zadane H(fm,fn)');
subplot(222); mesh(m,n,h); title('Filtr 2D h(m,n)');
subplot(223); mesh(fm,fn,Hw); title('Ch-ka |Hw(fm,fn)|');
subplot(224); mesh(m,n,hw); title('Filtr 2D hw(m,n) z oknem');
colormap([0 0 0]); pause
subplot(121); imshow(y, cmap); title('Cały obraz po filtrze'); y = y(1:128,65:192);
subplot(122); imshow(y,[min(min(y)),max(max(y))]); title('Tylko fragment'); pause

22.4. Falkowa dekompozycja 2D obrazów


Drogi Czytelniku! Analiza i przetwarzanie obrazów to obecnie jedna z najdynamiczniej roz-
wijających się gałęzi cyfrowego przetwarzania sygnałów: tysiące interesujących zastosowań
i oryginalnych metod. Niestety, nie jesteśmy w stanie poznać ich wszystkich. Musimy wybie-
rać. A jeśli tak, to w naszych wyborach będziemy się kierować atrakcyjnością intelektualną
i funkcjonalnością. Dlatego − jako przykład ciekawej koncepcyjnie, bardzo użytecznej oraz
nowej metody analizy i przetwarzania obrazów − szczegółowo przedstawiono poniżej wersję
predykcyjną biortogonalnej transformacji falkowej (patrz rozdział 17.4) [Swel96]. Dyskretną
transformację falkową podobnie jak dyskretną transformację Fouriera oraz dyskretną transfor-
mację kosinusową można stosować do analizy, filtracji (odszumiania) oraz kompresji obrazów
w dziedzinie współczynników transformaty. Często wykorzystuje się ją do analizy i rozpozna-
wania tekstur. Natomiast opisanej w tym rozdziale predykcyjnej, biortogonalnej transformacji
falkowej używa się do kompresji pojedynczych obrazów (standard JPEG2000, archiwizacja
odcisków palców w Stanach Zjednoczonych Ameryki) oraz kompresji ich sekwencji z kom-
pensacją ruchu.
Aby jeździć samochodem, trzeba mieć prawo jazdy. Aby w pełni wykorzystać właściwości ja-
kiegoś narzędzia, należy go poznać. My na początku nauczymy się w tym podrozdziale pod-
staw projektowania predykcyjnych, biortogonalnych systemów falkowych, a potem poznamy
istotę oraz możliwości ich licznych zastosowań do analizy i przetwarzania obrazów.
Falkowa dekompozycja 2D obrazów 691

Nie wiem dlaczego, ale często podczas pisania tej książki przychodzi mi do głowy porównanie
dokonywanych przeze mnie wyborów do ... łyżwiarstwa figurowego, którego już notabene od
wielu lat nie oglądam. Program obowiązkowy jest w nim mniej więcej znany. W tym rozdziale
się już on skończył. Problem dotyczy wyboru programu dowolnego: krótkiego, dynamicznego,
porywającego i ... inspirującego. Miejmy nadzieję, że taka właśnie będzie w Twoich oczach,
drogi Czytelniku, biortogonalna, predykcyjna wersja transformacji falkowej.

22.4.1. Jednowymiarowa predykcyjna transformacja falkowa

Jak już było powiedziane, predykcyjna transformacja falkowa (PTF) jest specyficzną imple-
mentacją zespołu filtrów dyskretnej transformacji falkowej, opisanej w rozdziale 17.4, ale tym
razem w wersji biortogonalnej (patrz rysunki 17.14 i 17.15). Przypomnijmy, poprzednio
w dwukanałowym, krytycznie próbkowanym zespole filtrów występowały dwa filtry: dolno-
przepustowy h0(n) oraz górnoprzepustowy h1(n): na wyjściu pierwszego z nich otrzymywali-
śmy dolnoprzepustową aproksymatę sygnału Ω, a na wyjściu drugiego − wysokoczęstotliwoś-
ciowe detale (szczegóły) Π, stanowiące uzupełnienie aproksymaty do oryginalnego sygnału.
W predykcyjnej wersji transformacji falkowej jest podobnie, tylko filtry są realizowane w inny
sposób. Na rysunku 22.27 są przedstawione schematy blokowe predykcyjnej transformacji
prostej i odwrotnej. Bloczek podział dzieli sygnał wejściowy sj (na j-tym poziomie dekompo-
zycji) na dwie składowe polifazowe: sj(e) − próbki o indeksach parzystych (even) oraz sj(o) −
próbki o indeksach nieparzystych (odd). Zakładając, że sygnał sj jest wektorem o parzystej
liczbie elementów (sj = sj(n), n = 0...N − 1, N − liczba naturalna parzysta), otrzymujemy:
N
s (e)
j ( n ) = s j (2n ), n = 0... −1 ( próbki parzyste) (22.49)
2
N
s (o)
j ( n ) = s j (2n + 1), n = 0... − 1 ( próbki nieparzyste) (22.50)
2
Następnie wyznacza się współczynniki aproksymacji sj−1 (odpowiadające Ω) oraz detali dj−1
(odpowiadające Π) na ( j −1)-ym poziomie dekompozycji. Wyjściowy sygnał detali dj−1 otrzy-
muje się jako błąd predykcji P próbek nieparzystych sj(o) na podstawie próbek parzystych sj(e).
Sygnał ten zawiera informację o wyższych częstotliwościach. Wyjściowy sygnał aproksymacji
sj−1 powstaje natomiast w wyniku działania operatora opisanego na schemacie bloczkiem U
− uaktualnienie, który dobiera się tak, aby wartość średnia sygnałów sj i sj−1 była taka sama.
Podsumowując mamy:
Podział: sj → sj(e), sj(o)
Predykcja: dj−1 = sj(o) – P{ sj(e)} (22.51)
Uaktualnienie: sj−1 = sj(e) + U{ dj−1}

Analiza Synteza
parzyste Aproksymata LP parzyste
(e) (e)
sj s j−1 s j−1 sj
sj sj
Podział P U U P Łączenie
(o) (o)
s j d j−1 d j−1 s j
nieparzyste Detale HP nieparzyste

Rys. 22.27. Schematy blokowe prostej i odwrotnej predykcyjnej transformacji falkowej, P – predykcja,
U – uaktualnienie (LP − niskoczęstotliwościowa, HP − wysokoczęstotliwościowa)
692 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Odwrotną transformację PTF otrzymuje się poprzez odwrócenie (po angielsku: undo) wszyst-
kich operacji, wykonanych w transformacji prostej (patrz rysunek 22.27):
Odwrócenie uaktualnienia: sj(e) = sj−1 − U{ dj−1}
Odwrócenie predykcji: sj(o) = dj−1 + P{ sj(e)} (22.52)
(e) (o)
Łączenie: sj , sj → sj
Transformacja PTF, określona równaniami (22.51) i (22.52), jest zawsze odwracalna niezależ-
nie od tego jakich filtrów (funkcji) P i U użyto: sygnał wejściowy jest zawsze perfekcyjnie re-
konstruowany na jej wyjściu (lecz tylko wtedy, kiedy współczynniki transformaty nie są mo-
dyfikowane, np. kwantowane, progowane, adaptowane). Właściwość ta jest spełniona także
w przypadku, gdy funkcje (filtry) predykcji i uaktualnienia są nieliniowe (np. medianowe).
Schemat PTF umożliwia prostą implementację transformacji całkowitoliczbowych (dla sygnału
całkowitoliczbowego współczynniki transformaty są również całkowitoliczbowe − ważne pod-
czas bezstratnej kompresji sygnałów), realizację różnych typów adaptacji oraz efektywne roz-
wiązanie problemu brzegowego (o czym dalej). Dodatkowo w PTF są możliwe obliczenia
z podstawianiem (czyli nie są wymagane dodatkowe zasoby pamięci), a wydajność oblicze-
niowa jest większa niż dla klasycznej dyskretnej transformacji falkowej, liczonej za pomocą
zespołu filtrów (w przypadku zastosowania tych samych funkcji bazowych).

Bardzo proszę o jeszcze trochę cierpliwości. W najprostszym przypadku można zastosować


predykcję, zakładającą, że wartość próbki nieparzystej sj(o)(n) jest taka sama jak wartość próbki
parzystej sj(e)(n). Oznacza to, że jeśli przedstawimy predyktor P jako średnią ważoną (lub li-
niowy filtr nierekursywny, w ogólności nieprzyczynowy), to opisany jest on wówczas za po-
mocą tylko jednego współczynnika niezerowego: p0 = 1. W takim przypadku zgodnie ze wzo-
rami (22.51) otrzymujemy:
d j−1 = sj(o) – sj(e) (22.53)
(e)
s j−1 = sj + U{ dj−1} (22.54)
Przy dodatkowym założeniu, że uaktualnienie U jest też średnią ważoną (liniowym filtrem nie-
rekursywnym, w ogólności nieprzyczynowym), mającym tylko jeden niezerowy współczynnik
u0, sygnał aproksymacji można wyrazić w następujący sposób:

s j −1 = s(e) (e) (o)


( (e)
j + u0 ⋅ d j −1 = s j + u0 s j − s j )
= (1 − u0 ) ⋅ s(e) (o)
j + u0 ⋅ s j (22.55)

Ponieważ wartość średnia sygnału aproksymacji na j-tym poziomie dekompozycji wynosi:

 N −1 N
−1 
N −1
1 12 2 
sj =
N
∑ s j ( n) = N  ∑ s j (n ) + ∑ s j ( n ) 
(e) (o)
(22.56)
n =0  n =0 n =0 
 
po uwzględnieniu (22.55), otrzymujemy dla poziomu j – 1:
N
−1  N −1 N
−1 
2 2 12 2 
s j −1 = ∑ s j −1 ( n ) =  ∑ ( 2 − 2u0 ) ⋅ s (e)
j (n ) + ∑ 2u0 ⋅ s (o)
j (n)  (22.57)
N n =0 N  n =0 n =0 
 
Falkowa dekompozycja 2D obrazów 693

a) Haar b) rząd II c) rząd IV


s j(e) s j(e) s j(e)
n=0 n=0 n=1 n=0 n=1 n=2 n=3

n n n
sj sj sj

n=0 n = 0,5 n = 1,5


0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
m m m
Rys. 22.28. Przykłady interpolacji prostej sygnałów: a) predyktor rzędu I, sj(o)(0) = sj (1) = sj(e)(0), b) predyk-
tor rzędu II, sj(o)(0) = sj (1) = sj(e)(0,5), c) predyktor rzędu IV, sj(o)(1) = sj (3) = sj(e)(1,5). Linią przerywaną są
zaznaczone efekty brzegowe (kropki oznaczają próbki parzyste, a gwiazdki próbki nieparzyste)

Ponieważ żądamy, aby s j = s j −1 , to z porównania (22.56) i (22.57) możemy wyznaczyć war-


tość wagi uaktualnienia, skąd otrzymujemy u0 = 1/2. W ten sposób otrzymaliśmy predykcyjną
transformację falkową ( p0 = 1, u0 = 1/2), dla której funkcje bazowe, falka i funkcja skalującą,
są funkcjami Haara. J est to j ed yny p r zykład ortogo nalnej transformacj i falkowej ,
któ r ą mo żna zrealizować wed ług schematu z r ysunku 2 2 .2 7 . Wszystkie pozostałe
PTF, stosujące predykcję i uaktualnienie rzędu większego niż 1, tworzą falkowe systemy b i-
o r to go nalne (patrz rozdział 17.1).
Błąd predykcji transformacji PTF z predyktorem p0 = 1 wynosi zero tylko wtedy, kiedy dwie
kolejne próbki analizowanego sygnału, parzysta i nieparzysta, mają takie same wartości (rysu-
nek 22.28a). Ale do predykcji próbki nieparzystej można wykorzystać większą liczbę próbek
parzystych! Dla przykładu na rysunkach 22.28b i 22.28c jest przedstawiona predykcja (inter-
polacja) wyższych rzędów. Rzędem predyktora nazywa się jego długość: jest to liczba próbek
parzystych, wykorzystywanych do predykcji jednej próbki nieparzystej. Dla predyktora dru-
giego rzędu wartość próbki nieparzystej przewiduje się na podstawie wartości jednego „parzy-
stego” sąsiada po obu stronach, na przykład branych z wagami p0 = 1/2 oraz p1 = 1/2. Wtedy
błąd predykcji jest równy zeru, gdy wartości sj(m) próbek fragmentu analizowanego sygnału
zależą liniowo od ich numeru m, czyli kiedy leżą na linii prostej. Wówczas fr agment sygna-
łu, zaczynający się na przykład od próbki m = 0 (próbka ta jest umowna!) jest opisany wielo-
mianem interpolującym co najwyżej pierwszego stopnia: sj(m) = c1⋅m + c0, m = 0, 1, 2. Jak wi-
dać stopień wielomianu interpolującego jest o 1 mniejszy od rzędu predykcji. Kiedy zapiszmy
zależność wielomianową dla sygnału próbek parzystych sj(e)(n) = a1⋅n + a0, n = 0, 1, to pod-
stawiając n = 0,5 otrzymamy przewidywaną wartość próbki nieparzystej, leżącej pomiędzy
próbkami parzystymi sj(e)(0) i sj(e)(1): sj(o)(0) = sj(1) = sj(e)(0,5). Z kolei dla predyktora rzędu
czwartego wartość próbki nieparzystej określa się na podstawie dwóch sąsiadów po obu stro-
nach (z wagami na przykład równymi p0 = −1/16, p1 = 9/16, p2 = 9/16, p3 = −1/16) i wówczas
błąd predykcji wynosi zero, kiedy analizowany fragment sygnału sj(e)(n) jest wielomianem co
najwyżej trzeciego stopnia: sj(e)(n) = a3⋅n3 + a2⋅n2 + a1⋅n + a0, n = 0, 1, 2, 3. Wówczas progno-
zowana wartość „środkowej” próbki nieparzystej jest wartością wielomianu dla n = 1,5. Dla
predyktorów wyższych rzędów brakuje sąsiadów dla próbki nieparzystej po lewej stronie na
początku sygnału oraz po prawej na jego końcu, co na rysunku 22.28 zaznaczono linią przery-
694 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

waną. W takim przypadku przewidywaną wartość próbki nieparzystej oblicza się na podstawie
dostępnych wartości próbek parzystych odpowiednio modyfikując wagi (na przykład na rysun-
ku 22.28c wagi predyktora na lewym brzegu są wyznaczone na podstawie jednego sąsiada
z lewej strony i trzech z prawej strony). Takie rozwiązanie problemu brzegowego nie jest moż-
liwe w klasycznym zespole filtrów, gdzie rutynowo stosuje się odbicie lustrzane lub periody-
zację sygnału.

Dla dociekliwych. Interpolacji wielomianowej dokonuje się na podstawie parzystej liczby


N próbek, wykorzystując taką samą liczbę sąsiadów po obu stronach próbki, za wyjątkiem
brzegów. Naszym zadaniem jest więc wyznaczenie wartości nieparzystych próbek sygnału sj na
podstawie znajomości wartości próbek parzystych, czyli wyznaczenie próbek sygnału sj(o) na
podstawie próbek sygnału sj(e). W tym celu konstruuje się wielomian stopnia N − 1 , lokalnie
opisujący sygnał składający się tylko z próbek parzystych:
N −1
s (e)
j ( n ) = a N −1n + a N − 2 n N −2 + … + a1n1 + a0 (22.58)

gdzie n = 0, 1, 2, ..., N−1, który w węzłach n1 = 0, n2 = 1, ..., nN = N−1 przyjmuje wartości:

 s (e) (n1 ) = n1N −1a N −1 + n1N − 2 a N − 2 + … + a0


 j
 s (e) (n2 ) = n2N −1a N −1 + n2N − 2 a N −2 + … + a0
j
 (22.59a)

 (e) N −1 N −2
 s j (n N ) = nN a N −1 + nN a N − 2 + … + a0

 s (e)
j ( n1 )
  N −1 n N − 2 1  a N −1 
   n1 1

 a N −1 
 s (e) (n2 )   n N −1 n N − 2  a 
1  a N − 2 
 j = 2 2
 = B NxN ⋅  N −2  (22.59b)
     
   
 (e)   N −1
n n NN −1 1  a0  a
 0 
 s j (nN )   N

Następnie zakłada się, że ten sam wielomian opisuje także sygnał składający się z próbek nie-
parzystych i wykorzystuje się go do obliczenia wartości funkcji w punktach pomiędzy węzła-
mi, czyli właśnie wartości próbek nieparzystych. Przykładowo załóżmy, że znamy wartości
wielomianu dla próbek sj(e) o numerach n = 0, 1, 2, 3, odpowiadających próbkom 0, 2, 4, 6 syg-
nału oryginalnego sj, a szukamy jego wartości dla n = 1,5 − czyli dla próbki o numerze 3 syg-
nału oryginalnego, będącą równocześnie drugą próbką sygnału sj(o). W sytuacji kiedy znamy
wartości próbek sj(e)(n1), ..., sj(e)(nN), współczynniki wielomianu (22.58) stanowią rozwiązanie
równania (22.59) i są dane wzorem:
−1  s (e)   s (e) 
j ( n1 ) j ( n1 )
N −1
 a N −1   n1 n1N −2 1    
a   
N −1
n2N −2  s (e) (n2 )   s (e) (n2 ) 
 N − 2  =  n2 1
 j
 = B −N1× N  j
 (22.60)
   
   
   
 (e)   (e) 
 a0   n NN −1 nNN −1 1  s j (n N )   s j ( nN ) 
Falkowa dekompozycja 2D obrazów 695

Szukaną, interpolowaną wartość funkcji sj(e)(n) w dowolnym punkcie n, leżącym pomiędzy


węzłami n1, ..., nN, obliczamy na podstawie równania (22.58):

 a N −1 
a 
N −2 
s (je ) ( n ) =  n N −1 n N − 2 1  (22.61)
  
 
 a0 

które po dodatkowym uwzględnieniu zależności (22.60) przyjmuje postać:

 s ( e ) ( n1 )  −1
 n1N −1 n1N −2 1
 j   
 s ( e ) ( n2 )   n N −1 n2N −2 1
s j ( xi ) = p ⋅  j , p =  n N −1 n N −2 1  2  (22.62)
   
 
 ( e)   n N −1 n N −1
 s j (n N )   N N 1

Nowa, wyznaczona interpolacyjnie wartość sj(e)(n) jest sumą ważoną wartości sj(e)(n1), sj(e)(n2),
... sj(e)(nN), a wartości wektora wag p są współczynnikami predyktora P. Przyjmując, na przy-
kład n = 0,5 lub 1,5 otrzymujemy w ten sposób predykcję (prognozę) wartości odpowiednich
próbek oryginalnego sygnału sj(m) o numerach nieparzystych (patrz rysunek 22.28). Przez rząd
interpolacji rozumie się stopień wielomianu interpolacyjnego. Rząd predyktora jest zawsze
o jeden większy od rzędu interpolacji (stopnia wielomianu) i jest liczbą parzystą.

Przedstawiona powyżej metodologia doboru wag predyktora [Sweld, Duda02] gwarantuje, że


jeśli sygnał wejściowy sj jest wielomianem stopnia N − 1, to dla predyktora stopnia większego
od N − 1 predykcja jest dokładna, tzn. dj−1 = 0. Właściwość tę określa się mianem wielomiano-
wego usuwania ( polynomial cancelling). Przekłada się ona na gładkość charakterystyki czę-
stotliwościowej falki i określa liczbę tzw. „znikających” momentów (vanishing moments), rów-
ną rzędowi predyktora (zobacz uwagę na końcu rozdziału 17.4).
Oczywiście, przedstawiona powyżej metoda pozwala także interpolować próbki rozmieszczone
nierównomiernie oraz z różną liczbą sąsiadów po obu stronach, co prowadzi do generacji sys-
temów falkowych drugiej generacji. Z tego powodu może być ona wykorzystana do analizy
sygnałów nierównomiernie próbkowanych oraz do efektywnego rozwiązania problemu brze-
gowego (kiedy brakuje sąsiadów wykorzystuje się tych, których mamy, w sposób pokazany
liniami przerywanymi na rysunku 22.28).
Predykcyjna transformacja falkowa PTF, przedstawiona na rysunku 22.27, oprócz funkcji pre-
dykcji P zawiera również funkcję uaktualnienia U, dobieraną w ten sposób, aby sygnały aprok-
symacji na różnych poziomach dekompozycji miały tę samą wartość średnią. Przeprowadzając
rozważania analogiczne do opisanych zależnościami (22.55) − (22.57) można pokazać, że przy
założeniu takiej samej d ługo ści wektorów obu funkcji średnich wagowych otrzymujemy
u = p /2, czyli że wówczas zaprojektowanie filtra predykcji p, pociąga za sobą wy-
bór filtra uaktualnienia u. Warto to zapamiętać! Należy zwrócić także uwagę na fakt, że
rząd predyktora P może być różny od rzędu uaktualnienia U.
W tabeli 22-6 znajduje się program implementujący omówiony algorytm doboru predyktorów.
Jako ćwiczenie pozostawiamy Czytelnikowi jego samodzielną analizę.
696 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Tab. 22-6. Obliczanie wag predyktora dla predykcyjnej transformacji falkowej

% Ćwiczenie: Projektowanie wag funkcji predyktora dla predykcyjnej transformacji falkowej

function wagi = prd(rzad);

flag=0;
N=2*rzad;

if N>0
x=1:1:N;
for i=1:N
for j=1:N
a(i,j)=x(i)^(N-j);
end
end
xp=-0.5;
for k=1:N+1;
xp=xp+1;
if xp==rzad+0.5; xp=xp; flag=1; end
for i=1:N
p(i)=xp^(N-i);
end
if flag==1, xp=rzad+0.5; flag=0; end
for i=1:N
for j=1:N
if i==j
b(i,j)=p(i);
end
end
end
c=b*inv(a);
for i=1:N
w(i)=sum(c(:,i));
end
wagi(k,:)=w;
end
end
if N==0;
wagi=1;
end
if N==1;
wagi=fliplr(wagi);
end

Przykładowe wartości zwracane przez funkcję prd dla predyktora IV rzędu są następujące
(dwóch sąsiadów po każdej stronie dla n = 1,5):
» prd(2)

ans =

2,1875 − 2,1875 1,3125 − 0,3125 (n = − 0,5) (czterech sąsiadów po prawej stronie)


0,3125 0,9375 − 0,3125 0,0625 (n = 0,5) (trzech po prawej, jeden po lewej)
− 0,0625 0,5625 0,5625 − 0,0625 (n = 1,5) (dwóch po prawej, dwóch po lewej)
0,0625 − 0,3125 0,9375 0,3125 (n = 2,5) (jeden po prawej, trzech po lewej)
− 0,3125 1,3125 − 2,1875 2,1875 (n = 3,5) (czterech sąsiadów po lewej stronie)
Wartości pogrubione są stosowane w środku sygnału, natomiast pozostałe zestawy współ-
czynników są używane tylko raz na prawym i lewym brzegu sygnału (patrz rysunek 22.28).
Falkowa dekompozycja 2D obrazów 697

22.4.2. Związki pomiędzy klasyczną a predykcyjną transformacją falkową

W klasycznej teorii falkowej do wyznaczenia współczynników aproksymacji sj−1 i detali dj−1


używa się pary filtrów: dolnoprzepustowego h0(n) i górnoprzepustowego h1(n), w układzie
przedstawionym na rysunku 17.14. Poniżej pokazano związki łączące predykcyjną transfor-
mację falkową PTF z rysunku 22.27 z falkowym zespołem filtrów, na przykładzie PTF z pre-
dyktorem P o wagach p = [1/2, 1/2] oraz uaktualnieniem U o wagach u = [1/4, 1/4]. Na rysun-
ku 22.29 jest przedstawiony rozpływ próbek sygnału w PTF w rozpatrywanym przypadku
[Clay98].
Sygnał detali dj−1 jest otrzymywany w wyniku przesuwania po sygnale sj filtra górnoprzepusto-
wego o wagach g = [−1/2, 1, −1/2] co dwie próbki. Jest to równoważne z filtracją sygnału
sj filtrem g~ i decymacji jej wyniku. Analogicznie otrzymuje się sygnał aproksymacji sj−1 w wy-
niku przesuwania po sygnale sj filtra dolonprzepustowego o wagach h = [−1/8, 1/4, 3/4, 1/4,
~
−1/8], także co dwie próbki. Filtry g~ (górno) i h (dolnoprzepustowy) generują znany z litera-
tury falkowy układ biortogonalny Cohen-Daubechies-Feauveau, oznaczany jako:
• (2.2) − pierwsza dwójka oznacza liczbę znikających momentów filtra górnoprzepustowego
syntezy, a druga liczbę znikających momentów filtra górnoprzepustowego analizy (patrz
(17.65)),
~
• 5/3 − gdzie liczby 5 i 3 oznaczają długości filtrów h i g~ .
W języku Matlab współczynniki tych filtrów falkowych można uzyskać za pomocą funkcji
wfilters('bior2.2'), z tą różnicą, że wówczas są one przeskalowane przez 2 .
Jak już było zaznaczone po równaniu (22.57), zastosowanie w predykcyjnej transformacji fal-
kowej filtrów predykcji lub uaktualnienia rzędu większego niż 1 powoduje, że staje się ona bi-
ortogonalna. Na rysunku 22.30 jest przedstawiony schemat blokowy falkowego, biortogonal-
nego zespołu filtrów, który jest uogólnieniem zespołu ortogonalnego z rysunków 17.14 i 17.15.
System biortogonalny przechodzi w ortogonalny, jeśli h ( n ) = h( − n ) oraz g ( n ) = g ( − n ) . Różni-
ce we właściwościach użytkowych pomiędzy tymi systemami są następujące [Burr98].

sj = sj (0) sj (1) sj (2) sj (3) sj (4) oryginalne


(e) (e)
sj = (e)
sj (0) sj (1) sj(e)(2) parzyste
(o) (o) (o)
sj = sj (0) sj (1) nieparzyste

1 1
predykcja
−1/2 −1/2 −1/2 −1/2

dj−1 = dj−1(0) 1 dj−1(1)

1/4 1/4 uaktualnienie

sj−1 = sj−1(0)

Rys. 22.29. Rozpływ próbek sygnału w PTF z rysunku 22.27 dla predyktora P o wagach p = [1/2, 1/2] oraz
uaktualnienia U o wagach u = [1/4, 1/4]. Układ ten odpowiada biortogonalnemu systemowi falkowemu z ry-
sunku 22.30 z filtrami: górnoprzepustowym g = [−1/2, 1, −1/2] oraz dolnoprzepustowym h == [−1/8, 1/4,
3/4, 1/4, −1/8]. Aby obliczyć wagi filtrów g i h wystarczy obliczyć sumaryczne wagi wszystkich dróg
przejścia każdej próbki sygnału sj z wejścia na wyjście (przykładowo dla sj (2) mamy: (−1/2) ⋅ (1/4) + 1 +
+ (−1/2) ⋅ (1/4) = 3/4)
698 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Analiza Synteza
s j−1 s j−1
~
h ↓2 Aproksymata LP ↑2 h

sj sj
d j−1 d j−1
~g ↓2 Detale HP ↑2 g

Rys. 22.30. Transformacja PTF jako zespół filtrów biortogonalnych. Wzory projektowe dla b i o r t o go n a l -
n y c h filtrów analizy g (LP), h (HP) oraz syntezy g (LP), h (HP) falkowej przedstawiono w tabeli 22-7
i porównano z wymaganiami stawianymi filtrom ortogonalnym h0 i h1 (LP − dolnoprzepustowy, niskoczę-
stotliwościowy, HP − górnoprzepustowy, wysokoczęstotliwościowy)

Tab. 22-7. Zestawienie wymagań i równań projektowych dla ortogonalnych i biortogonalnych systemów
falkowych [Burr98]

Lp. Falki ortogonalne Falki biortogonalne

liczba współczynników filtra h(n) musi być r ó ż n i c a liczby współczynników filtrów


1
liczbą parzysta h (n ) i h ( n ) musi być liczbą parzystą

2 ∑ h(n) = 2 ∑ h( n ) = ∑ h ( n ) = 2
n n n

1, dla k = 0 1, k = 0


3 ∑ h (n )h(n − 2k ) = 0, dla k ≠ 0 ∑ h (n )h(n + 2k ) = 0,
n  n  k ≠0

 g ( n ) = ( −1) h(1 − n )
n
4 g ( n ) = ( −1) n h( N − n )  n
 g ( n ) = ( −1) h (1 − n )

• Projektowanie systemów biortogonalnych jest łatwiejsze i bardziej elastyczne.


• System biortogonalny umożliwia projektowanie symetrycznych falek i funkcji skalujących.
Jest to podstawowa zaleta tego systemu.
• System biortogonalny nie zachowuje energii sygnału. Jest to jego podstawowa wada.
• W systemie biortogonalnym można zamienić filtry analizy z filtrami syntezy, co prowadzi
do tzw. odwrotnych systemów biortogonalnych (reverse biorthogonal), w których falki ana-
lizy stają się falkami syntezy i odwrotnie.
• Szum biały pozostaje biały po transformacji ortogonalnej, natomiast dla transformacji nie-
ortogonalnych staje się szumem skorelowanym (kolorowym).

W tabeli 22-7 zestawiono równania projektowe dotyczące filtrów, obowiązujące dla o r to go -


nalnych i b io r to go nalnych systemów falkowych. Odpowiadają one równaniom (17.53),
(17.57) i (17.58), wyprowadzonym w rozdziale 17.4. Z przedstawionych warunków, które mu-
szą być spełnione w przypadku systemu biortogonalnego lub ortogonalnego wynika, że przy
określonych długościach filtrów istnieją stopnie swobody w doborze współczynników. Są one
wykorzystywane np. do zapewniania symetrii funkcji bazowych w układach biortogonalnych
lub uzyskania wymaganej regularności w systemach ortogonalnych.
Dla przykładu na rysunku 22.31 są pokazane charakterystyki częstotliwościowe oraz funkcje
bazowe (symetryczne!) biortogonalnego systemu falkowego 5/3: p = [1/2, 1/2] i u = [1/4, 1/4],
rozpatrywanego na rysunku 22.29. Może on być realizowany w układzie z rysunku 22.27 lub
Falkowa dekompozycja 2D obrazów 699

a) układ PU ( pierwsza predykcja) b) układ UP ( pierwsze uaktualnienie)


----------------------------------------------- -----------------------------------------------
p = [1/2, 1/2], u = [1/4, 1/4] u = [1/4, 1/4], p = [1/2, 1/2]
sekcja analizy: sekcja analizy
g = [−1/2, 1, −1/2] g = [1/2, 1, 1/2]
h = [−1/8, 1/4, 3/4, 1/4, −1/8] h = [−1/8, −1/4, 3/4, −1/4, −1/8]
sekcja syntezy: sekcja syntezy
h = [1/2, 1, 1/2] h = [−1/2, 1, −1/2]
g = [−1/8, −1/4, 3/4, −1/4, −1/8] g = [−1/8, 1/4, 3/4, 1/4, −1/8]
----------------------------------------------- -----------------------------------------------
2 2
filtry analizy układu P U filtry analizy układu U P

1.5 1.5

1 1

0.5 0.5

0 0
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1

funkcja skalująca analizy falka analizy funkcja skalująca analizy falka analizy

0
0 0
t t 0 t t
funkcja skalująca syntezy falka syntezy funkcja skalująca syntezy falka syntezy

0
0 0
0 t t t t

Rys. 22.31. Porównanie charakterystyk częstotliwościowych biortogonalnych filtrów falkowych g , h , g,


h (rys. 22.30) oraz odpowiadających im falkowych funkcji bazowych dla układów PTF 5/3 typu pierwsza
predykcja PU i pierwsze uaktualnienie UP − predyktor P i uaktualnienie U (rys. 22.27). Widoczna jest za-
~
miana funkcji bazowych pomiędzy tymi układami oraz biortogonalność filtrów g~ , h z filtrami g, h

22.30. W tym pierwszym przypadku zastąpienie funkcji bazowych analizy przez funkcje synte-
zy i odwrotnie można uzyskać przez zamianę kolejności gałęzi poprzecznych, tj. wyko nanie
naj p ier w uaktualnienia, a następ nie p r ed ykcj i. W przypadku drugim następuje za-
miana miejscami filtrów sekcji analizy i syntezy.
Falkowy schemat predykcyjny umożliwia projektowanie odwracalnych transformacji całkowi-
toliczbowych, które odwzorowują zbiór liczb całkowitych w zbiór liczb całkowitych (nie są
one liniowe). Błąd rekonstrukcji sygnałów w wyniku zastosowania takich transformat wynosi
zero, a ich właściwości są zbliżone do właściwości zmiennoprzecinkowych pierwowzorów.
Transformaty całkowitoliczbowe znajdują zastosowanie w algorytmach kompresji bezstratnej
(np. sygnałów biomedycznych), gdzie w torze kompresji poprzedzają koder entropijny. Ich
realizacja programowa jest bardzo prosta, gdyż polega wyłącznie na całkowitoliczbowym za-
okrągleniu sygnałów wyjściowych z filtrów predykcji i uaktualnienia, takim samym w sekcji
analizy i syntezy transformacji.
700 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Dla dociekliwych. Jak wynika z przeprowadzonych powyżej rozważań zamiana falkowego


schematu predykcyjnego na odpowiadający mu zespół filtrów jest zadaniem bardzo prostym
(patrz rysunek 22.29). Natomiast wykonanie operacji odwrotnej, to znaczy znalezienie schema-
tu predykcyjnego dla wybranego zestawu filtrów falkowych jest zadaniem znacznie trudniej-
szym, ale zawsze możliwym. Faktoryzacja zespołu filtrów falkowych do postaci predykcyjnej
może wymagać więcej niż dwóch gałęzi poprzecznych w schemacie na rysunku 22.27 (tzn.
kilku naprzemiennych stopni predykcji i uaktualnienia) oraz nie jest jednoznaczna, co wynika
z niejednoznaczności dzielenia wielomianów Laurenta [Daub98].

22.5.3. Program komputerowy do falkowej dekompozycji obrazów

Zdaję sobie sprawę, że większość Czytelników jest w tym momencie bardzo znużona i czuje
się oszukana: miały być obrazy, a tu ciągle dekompozycja falkowa, w dodatku 1D a nie 2D!
Totalna klapa: uwertura przerosła symfonię! No cóż. Dla podniesienia na duchu powiem, że
w standardzie kompresji obrazów JPEG2000 jest m.in. stosowana predykcyjna transformacja
falkowa 1D z filtrami Cohen-Daubechies-Feauveau 5/3, które poznaliśmy, oraz 9/7. Transfor-
macja falkowa jest także używana przez Federalne Biuro Śledcze w Stanach Zjednoczonych
Ameryki do kompresji odcisków palców. Obecnie próbuje się ją także wykorzystać do różni-
cowej kompresji kolejnych ramek (klatek) obrazu w zapisach wideo. Wersja predykcyjna
transformacji falkowej ma wiele zalet, m.in. jest obliczeniowo szybsza i umożliwia obliczenia
bez konieczności wprowadzania dodatkowych zmiennych pomocniczych (oszczędność pamię-
ci). Trzeba iść pod górę, aby wejść na szczyt. Czy warto było się trudzić? Na to pytanie każdy
z Czytelników już wkrótce sam sobie odpowie po zapoznaniu się z częścią praktyczną tego
podrozdziału.
Do falkowej analizy o b r azó w, czyli sygnałów dwuwymiarowych, najczęściej wykorzystuje
się j ed no wymiar o wą transformację falkową (patrz rysunek 22.32):
1) w pierwszym kroku są dekomponowane kolejne wiersze obrazu na współczynniki aproksy-
macji i detali za pomocą sekcji analizy układów z rysunków 22.27 lub 22.30; wynik takiego
przekształcenia jest pokazany na rysunku 22.32b;
2) w drugim kroku są dekomponowane kolejne kolumny obu podobrazów aproksymacji i deta-
li, otrzymane w kroku pierwszym, ponownie na współczynniki aproksymacji i detali za pomocą
tych samych układów; końcowy wynik dekompozycji (jednopoziomowej) obrazu jest przed-
stawiony na rysunku 22.32c.
Po dekompozycji obraz jest reprezentowany przez cztery macierze współczynników falko-
wych, które łącznie mają tyle samo elementów co obraz oryginalny: macierz aproksymacji oraz
macierze detali horyzontalnych, wertykalnych i diagonalnych. Uzasadnienie nazw poszczegól-
nych macierzy detali wynika wprost z rysunku 22.35b, na którym wyraźnie widać jak prefero-
wane są w nich wybrane kierunki krawędzi na obrazie. Także kierunek oscylacji bazowych
funkcji falkowych, związanych z macierzami (podobrazami) detali i pokazanych na rysunku
22.36, także potwierdza słuszność tych nazw.
Na rysunku 22.33 są jeszcze raz zbiorczo przedstawione wszystkie macierze współczynników,
otrzymywanych podczas dekompozycji obrazu Lena. W tym przypadku należy zapamiętać
zwyczajowy sposób prezentacji wyników transformaty falkowej obrazów, czyli układ podobra-
zów współczynników: LP-LP, LP-HP, HP-LP, HP-HP (A-A, A-D, D-A, D-D). Ponieważ po-
dział na aproksymatę (A) i detale (D) jest równoważny filtracji dolnoprzepustowej LP oraz
górnoprzepustowej HP, wybrano na tym rysunku oznaczenia związane z filtrami, ponieważ są
one bardziej naturalne (i intuicyjne) w książce z przetwarzania sygnałów. Z kolei na rysunku
22.34a jest przedstawiony wynik dwupoziomej dekompozycji falkowej obrazu Lena. Jak widać
Falkowa dekompozycja 2D obrazów 701

Filtracja Filtracja
wierszy + kolumn +
decymacja decymacja
Aproksymata

A A-A
LP+↓2 LP-LP

Obraz oryginalny A
LP+↓2
D A-D
HP+↓2 LP-HP

Detale

A D-A
LP+↓2 HP-LP
D
HP+↓2

D D-D
HP+↓2 HP-HP

Rys. 22.32. Wytłumaczenie kolejnych etapów dekompozycji obrazu za pomocą transformacji falkowej 1D:
krok 1 − dekompozycja każdego wiersza na jego aproksymatę (filtracja dolnoprzepustowa LP + usunięcie co
drugiej próbki, czyli decymacja ↓2) oraz detale (filtracja górnoprzepustowa HP tego samego wiersza + de-
cymacja ↓2), krok 2 − dekompozycja każdej kolumny dwóch półobrazów wynikowych z kroku 1 na jego
aproksymatę (LP + ↓2) i detale (HP + ↓2), identycznie jak w kroku 1 tylko teraz po kolumnach. Podczas
dekompozycji jest wykorzystywana sekcji analizy transformacji falkowej z rysunku 22.27 lub 22.30. Synte-
za obrazu przebiega w odwrotnej kolejności z użyciem sekcji analizy transformacji. W przypadku dwukana-
łowego zespołu filtrów z rysunku 22.30 układ „LP lub HP + ↓2” jest teraz zastąpiony przez blok „↑2 + LP
lub HP”, tzn. w miejsce usuwania co drugiej próbki po filtracji występuje teraz wstawianie wartości zero-
wych pomiędzy każde dwie próbki przed filtracją

a) b) c)
LP-LP LP-HP
LP HP

HP-LP HP-HP

Rys. 22.33. Jednopoziomowa dekompozycja obrazu z wykorzystaniem transformaty jednowymiarowej: a)


obraz oryginalny Lena, b) dekompozycja aproksymata/detale (filtracja LP/HP + dwukrotna decymacja) wier-
szy obrazu z rysunku a, c) dekompozycja aproksymata/detale (filtracja LP/HP + dwukrotna decymacja) ko-
lumn obrazu z rysunku b. W celu wizualizacji pokazano moduły współczynników detali przeskalowane do
zakresu 0 − 255
702 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

w dekompozycji wielopoziomowej dalszemu przetwarzaniu jest poddawana wyłącznie macierz


LP-LP (czyli aproksymata A-A, otrzymana z poprzedniego poziomu), co jest wyraźniej przed-
stawione na rysunku 22.34b. Aż dech zapiera w piersiach do jakich rozmiarów po kilku itera-
cjach możemy zmniejszyć obraz biednej Leny!
Dla dociekliwych. Na kolejnych poziomach dekompozycji sygnałem wejściowym dla falkowej
transformacji 2D mogą być nie tylko współczynniki aproksymacji z poprzedniego poziomu
dekompozycji, tak jak na rysunku 22.34, ale także współczynniki detali. Takie podejście jest
nazywane falkową dekompozycją pakietową.
Na rysunku 22.35a są zaprezentowane histogramy współczynników falkowych. Współczynniki
aproksymacji zawierają się w przedziale 0 − 255, podobnie jak obraz oryginalny, natomiast
współczynniki detali mogą być dodatnie i ujemne, są one skoncentrowane wokół zera oraz ma-
ją rozkład podobny do normalnego. To właśnie w dużej liczbie takich samych, zerowych
współczynników detali jest ukryta „siła” dekompozycji falkowej w zastosowaniu do kompresji
obrazów: większość energii sygnału jest skoncentrowana w małej liczbie współczynników de-
tali. W algorytmach kompresji stratnej przy rekonstrukcji obrazu uwzględnia się tylko współ-
czynniki o odpowiednio dużej amplitudzie, które stanowią niewielki odsetek wszystkich
współczynników detali, a i tak zachowuje się bardzo dobrą jakość obrazu. Natomiast algoryt-
my bezstratne wykorzystują rozkład współczynników detali w ten sposób, że wartości występu-
jące bardzo często otrzymują krótkie ciągi bitowe (oznacza to, że np. wartość 0 występująca
we współczynnikach detali bardzo często może być zakodowana 1 bitem, a nie 8 jak w obrazie
oryginalnym).
W algorytmach kompresji opartych na transformacji falkowej stosuje się zaawansowane meto-
dy progresywnego kwantowania współczynników, wykorzystujące zależności przestrzenne
pomiędzy współczynnikami falkowej reprezentacji obrazu. Do tego celu są stosowane wyrafi-
nowane algorytmy typu EZW (Embedded Zerotree Wavelet) [Shap93] i SPIHT (Set Partitio-
ning in Hierachical Trees) [Said96]. Stosując wielopoziomową dekompozycję falkową można
dodatkowo wykorzystywać w koderze fakt, że istotne współczynniki detali na różnych pozio-
mach dekompozycji grupują się w tych samych miejscach (patrz rysunek 22.34a). Cały obraz
może już być także wstępnie aproksymowany w dekoderze na podstawie początkowych frag-
mentów strumienia bitów, a w miarę ich dalszego napływu sukcesywnie uzupełniany o braku-
jące detale. Jest to szczególnie istotne podczas pobierania obrazów w sieci Internet, kiedy użyt-
kownik może zrezygnować z dalszego pobierania pliku obrazu już po otrzymaniu wstępnej
informacji o jego zawartości.
Na rysunku 22.35b jest z kolei pokazana dekompozycja specjalnie wybranego obrazu testowe-
go, pokazująca „wrażliwość” współczynników detali na zmiany częstotliwości w obrazie
w odpowiednich kierunkach: horyzontalnym, wertykalnym i diagonalnym. Jak widać detekcja
krawędzi w przestrzeni współczynników transformaty falkowej jest w zasięgu naszej ręki! O-
czywiście malkontenci powiedzą: za jaką cenę! Ale gdy kilka operacji trzeba wykonywać rów-
nocześnie ... dlaczego nie wybrać dziedziny współczynników falkowych.
Dekompozycja obrazów, czyli sygnałów 2D, jest dokonywana na podstawie falkowych funkcji
bazowych 2D, podobnie jak w przypadku jednowymiarowym. Przykładowe kształty tych
funkcji, tj.: funkcji skalującej oraz trzech falek, są pokazane na rysunku 22.36. Wartość średnia
funkcji skalującej wynosi 1 i ma ona charakter dolnoprzepustowy, podczas gdy wartość średnia
każdej z falek wynosi 0 i mają one charakter górnoprzepustowy. Funkcje bazowe współczyn-
ników detali charakteryzują się oscylacjami w różnych kierunkach. Podczas analizy i syntezy
falkowej stosujemy filtry. Jak można zobaczyć falki? Należy zastosować trik znany już nam ze
świata 1D: trzeba wyzerować wszystkie współczynniki macierzy współczynników po wielo-
poziomowej dekompozycji, zostawić tylko jeden współczynnik, np. centralny, w jednej z ma-
Falkowa dekompozycja 2D obrazów 703

a) b)

LP-LP LP-HP
LP-HP

HP-LP HP-HP

HP-LP HP-HP

Rys. 22.34. Dwupoziomowa dekompozycja obrazu z wykorzystaniem transformaty jednowymiarowej:


a) wynik dekompozycji obrazu testowego Lena, b) ogólna zasada wizualizacji podobrazów wynikowych
z dekompozycji dwu- i wielopoziomowej

a) b)

Rys. 22.35. Ilustracja dwóch właściwości współczynników transformacji falkowej: a) histogramy współ-
czynników dla obrazu testowego Lena, pokazujące, że współczynniki w podobrazach detali przyjmują małe
wartości wokół zera (wykresy sporządzono dla odpowiednich macierzy falkowych z rys. 22.33c), b) dekom-
pozycja obrazu testowego pokazująca „wrażliwość” współczynników detali na zmiany częstotliwości w ob-
razie w odpowiednich kierunkach: horyzontalnym, wertykalnym i diagonalnym

a) b)

Rys. 22.36. Przykładowe dwuwymiarowe falkowe funkcje bazowe: a) wizualizacja trójwymiarowa (pła-
szczyzna oznacza wartość zero), b) wizualizacja w poziomach szarości (kolor jasny to duża wartość). Poło-
żenie funkcji bazowych jest adekwatne do rys. 22.33c i rys. 22.35b. Należy zwrócić uwagę na różny kieru-
nek oscylacji w falkowych funkcjach bazowych, związanych z podobrazami detali: horyzontalny, wertykal-
ny i diagonalny
704 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

cierzy wynikowych ostatniego poziomu analizy i ... wrócić z powrotem. Cóż otrzymamy?
Funkcję skalującą lub falkę, w zależności od tego co wybraliśmy. W świecie 1D jeden współ-
czynnik transformacji falkowej na wybranym poziomie dekompozycji mówił nam, że w sygna-
le w danej chwili czasowej występuje falka o określonej częstotliwości (związanej z pozio-
mem). W świecie 2D jest podobnie. Teraz otrzymujemy informację, że w danym miejscu
przestrzeni występuje falka 2D o określonej częstotliwości. Stąd już krok do zrozumienia tak
dużej popularności stosowania transformat falkowych do rozpoznawanie tekstur w obrazach!
Jednak uwertura naprawdę była długa (z konieczności), więc musimy powoli zmierzać do koń-
ca naszej ledwo rozpoczętej symfonii. W tabeli 22-8 znajduje się program napisany w języku
Matlab, stanowiący implementację dwuwymiarowej, predykcyjnej transformaty falkowej, który
stanowi uwieńczenie naszych rozważań przeprowadzonych w tym podrozdziale. Mamy nadzie-
ję, że jego użycie stanowić będzie nie lada gratkę dla Czytelników, żądnych wyzwań „ekstre-
malnych”.
Zaokrąglenia (round) w funkcjach l2int.m i il2int.m powodują, że współczynniki fal-
kowe są liczbami całkowitymi. Z tego powodu mogą być one kodowane bezstratnie, na przy-
kład z wykorzystaniem kodowania entropijnego Huffmana lub arytmetycznego.

Tab. 22-8. Program do dekompozycji obrazu za pomocą predykcyjnej transformacji falkowej

% Ćwiczenie: Falkowa dekompozycja obrazu metodą predykcyjną (predykcja − uaktualnienie)

close all; clear all;

A = imread('lena.bmp'); B=double(A);

rzadP=2;
rzadU=2;

% Analiza
[AA, AD, DD, DX]=lwt2d(B,rzadP,rzadU);

% Rekonstrukcja
BR=ilwt2d(AA, AD, DD, DX,rzadP,rzadU);

% Wykresy
BO=[AA, s256(abs(AD)); s256(abs(DD)), s256(abs(DX))];
figure, imshow(uint8(BO),256); title('Współczynniki falkowe')
figure, imshow(uint8(BR),256); title('Rekonstrukcja')
blad=(sum(sum(abs(B-BR))))

function [AA, AD, DD, DX]=lwt2d(B,rzadP,rzadU);

% Dekompozycja falkowa obrazów


% AA | DD
% --------------
% AD | DX

[w k]=size(B);
k2=round(k/2);
w2=round(w/2);

A=zeros(w,k2);
D=zeros(w,k2);
AA=zeros(w2,k2); AD=AA; DD=AA; DX=AA;
Falkowa dekompozycja 2D obrazów 705

for j=1:w
[A(j,:),D(j,:)]=l2int(B(j,:),rzadP,rzadU);
end
[w k]=size(A);
for j=1:k
[a,d]=l2int(A(:,j)',rzadP,rzadU);
AA(:,j)=a';
AD(:,j)=d';
end
for j=1:k
[a,d]=l2int(D(:,j)',rzadP,rzadU);
DD(:,j)=a';
DX(:,j)=d';
end

function B=ilwt2d(AA, AD, DD, DX,rzadP,rzadU);

% Rekonstrukcja falkowa obrazów


% AA | DD
% -------------
% AD | DX

[w k]=size(AA);

D=zeros(2*w,k);
A=zeros(2*w,k);
B=zeros(2*w,2*k);

for j=1:k
a=DD(:,j)';
d=DX(:,j)';
x=il2int(a,d,rzadP,rzadU);
D(:,j)=x';
end
for j=1:k
a=AA(:,j)';
d=AD(:,j)';
x=il2int(a,d,rzadP,rzadU);
A(:,j)=x';
end
[w k]=size(A);

for j=1:w
B(j,:)=il2int(A(j,:),D(j,:),rzadP,rzadU);
end

function [even,odd]=l2int(x,rzadP,rzadU)

% Prosta, całkowitoliczbowa, predykcyjna transformacja falkowa


% [even,odd]=l2(x,rzadP,rzadU)
% rzadP - rząd Predyktora
% rzadU - rząd Update

%podział
even = x(1:2:length(x));
odd = x(2:2:length(x));

odd=odd-round(sub(even,rzadP));
even =round(update(odd,rzadU))+even;

function x=il2int(even,odd,rzadP,rzadU)

% Odwrotna, całkowitoliczbowa, predykcyjna transformacja falkowa

even =even-round(update(odd,rzadU));
odd=round(sub(even,rzadP))+odd;

x=merge(even,odd);
706 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

function odd=sub(even,rzad);

odd=[];
wagi=prd(rzad); [w,d]=size(wagi);
wagi=wagi(2:w,:);[w,d]=size(wagi);

if rzad==0
odd=even;
end
if rzad>0;
% brzegi na początku
for i=1:floor(w/2-1)
odd(i)=even(1:d)*wagi(i,:)';
end
if rzad==1; i=0; end
% środek
pom = conv(even, wagi((w/2),:));
pom(1:w-1)=[]; pom(length(pom)-w+2:length(pom))=[];
j=length(even)-w+1;
odd=[odd pom];
% brzegi na końcu
for k=1:floor(w/2)
odd(i+j+k)=even(length(even)-d+1:length(even))*wagi(ceil(w/2)+k,:)';
end
end

function even=update(odd,rzad);

wagi=prd(rzad); [w,d]=size(wagi);
wagi=wagi(1:w-1,:);[w,d]=size(wagi);
wagi=0.5*wagi;

if rzad==0
even=0.5*odd;
end

if rzad>0;
% brzegi na początku
for i=1:floor(w/2)
even(i)=odd(1:d)*wagi(i,:)';
end
pom = conv(odd, wagi(ceil(w/2)+1,:));
pom(1:w-1)=[]; pom(length(pom)-w+2:length(pom))=[];
j=length(odd)-w+1;
even=[even pom];
% brzegi na końcu
for k=1:floor(w/2)-1
even(i+j+k)=odd(length(odd)-d+1:length(odd))*wagi(ceil(w/2)+k+1,:)';
end
end

function x=merge(even,odd);

x=zeros(1,length(even)+length(odd));
x(1:2:length(x))=even;
x(2:2:length(x))=odd;

function A=s256(A);

% Skalowanie wartości macierzy do przedziału 0 - 255;

Amin=min(A(:));
A=A-Amin;
Amax=max(A(:));
A=255*A/Amax;
Przykłady zastosowań 707

22.5. Przykłady zastosowań

22.5.1. Kompresja JPEG i MPEG

Przybliżymy teraz bardzo skrótowo najpopularniejsze standardy JPEG (Joint Photographic


Experts Group) i MPEG (Moving Pictures Experts Group) kompresji pojedynczych obrazów
oraz ich sekwencji (wideo) [Bhas97, Skar93].
W standardzie JPEG kompresowany obraz jest dzielony na bloki pikseli o wymiarach 8×8.
Każdy z nich jest dalej do pewnego momentu przetwarzany osobno. Na początku jest oblicza-
na jego dwuwymiarowa transformata kosinusowa (22.17) dla N = M = 8. Następnie jej współ-
czynniki XDCT (k, l ) są kwantowane z wykorzystaniem przyporządkowanych im wartości Q(k, l )
z tablicy kwantyzacji Q:

Y (k , l )   YDCT (k , l ) ± Q ( k , l ) / 2  
Z (k , l ) = round  DCT =  , k , l = 0, 1,..., 7 (22.63)
 Q ( k ,l )   Q (k , l ) 

gdzie „x” oznacza największą liczbę całkowitą mniejszą od lub równą x, czyli zaokrąglenie
do dołu. W wyniku tej operacji współczynniki transformaty o małych wartościach zostają wy-
zerowane. W normie JPEG jest zalecanych kilka tablic kwantyzacji, przykładowo następujące
dla składowej luminancji Y oraz obu chrominancji Cb i Cr (22.4) 24-bitowego obrazu RGB:

 16 11 10 16 24 40 51 61  17 18 24 47 99 99 99 99 
12 12 14 19 26 58 60 55  18 21 26 66 99 99 99 99 
   
14 13 16 24 40 57 69 56   24 26 56 99 99 99 99 99 
   
14 17 22 29 51 87 80 62  47 69 99 99 99 99 99 99 
QY (k , l ) =  QC (k , l ) = 
18 22 37 56 68 109 103 77   99 99 99 99 99 99 99 99 
   
 24 35 55 64 81 104 113 92   99 99 99 99 99 99 99 99 
 49 64 78 87 103 121 120 101  99 99 99 99 99 99 99 99 
   
 72 92 95 98 112 100 103 99   99 99 99 99 99 99 99 99 

W (22.63) znak „+” w liczniku stosuje się dla XDCT(k, l ) ≥ 0, a „−” w przeciwnym przypadku.

Ponieważ współczynniki DC (lewy górny narożnik) sąsiednich bloków 8×8 pikseli są najczęś-
ciej duże i skorelowane (z powodu składowej stałej obrazu), dlatego są one traktowanie spe-
cjalnie: współczynnik DC pierwszego bloku oraz różnice tych współczynników pomiędzy ko-
lejnymi blokami są zapisywane w kodzie VLI (Variable Length Integers). W zastosowanym do
DC kodowaniu VLI każda kodowana liczba jest zastępowana następującą parą sekwencji bito-
wych (B, X):
• B − czterema bitami, na których podaje się liczbę bitów potrzebnych do zapisania modułu
kodowanej liczby (dla różnic współczynników DC dopuszcza się od 0 do 11 bitów),
• X − zapisanym binarnie modułem liczby (tylko bity znaczące), którego bity się neguje, jeśli
liczba jest ujemna (jest to część opcjonalna dla DC, niewystępująca dla wartości zerowych
różnic).
Na końcu stosuje się koder entropijny Huffmana (patrz rysunek 19.1) (obowiązkowy) lub
arytmetyczny (opcjonalny), ale tylko w odniesieniu do bitów modułów liczb (używa się od-
dzielnych tablic dla różnych długości modułów). W dekoderze sprawdza się najstarszy z bitów
modułu liczby i jeśli jest on równy 0, to wszystkie bity się neguje.
708 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Natomiast pozostałe współczynniki, tzw. AC, każdego bloku są kodowane oddzielnie. Ich war-
tości skanuje się wzdłuż linii ukośnych prostopadłych do głównej diagonali macierzy współ-
czynników transformaty, zaczynając od lewego górnego rogu (patrz rysunek 22.37), czyli po-
rządkuje od najniższych do najwyższych częstotliwości. Ponieważ w wyniku kwantyzacji wię-
kszość współczynników AC jest wyzerowanych, uzyskuje się długie sekwencje zer, poprze-
dzielane nielicznymi wartościami niezerowymi. Na p o czątku metodą Huffmana koduje się
8-bitowy obiekt typu (Z, B), gdzie:
• Z − długość sekwencji zer poprzedzających (kod RLC − Run Length Coding) (4 bity),
• B − najmniejsza liczba bitów potrzebna do zapisania modułu elementu niezerowego (4 bity),
dla współczynników AC zmieniająca się od 1 do 10.
Kiedy sekwencje zer mają więcej niż 15 elementów, to sztucznie się je dzieli na porcje: (15, 0)
plus reszta, dążąc do tego, aby kod pary (Z, B) zmieścił się na 8 bitach. W ten sposób dąży się
do ograniczenia wielkości tablic kodowych Huffmana. Należy zwrócić uwagę, że zapis (15, 0)
oznacza 16 zer: 15 poprzedzających i jedno zero, które po nich następuje. Do p ie r o p o te m
koduje się binarnie sam element niezerowy X: zapisuje się binarnie moduł liczby, pozostawia
tylko bity znaczące potrzebne do jego zdekodowania oraz neguje wszystkie bity, jeśli liczba
jest ujemna. Następnie koduje się metodą Huffmana otrzymaną w ten sposób grupę bitów,
używając oddzielnych tablic dla różnych długości modułów. Jak widać para (B, X) tworzy kod
VLI dla każdego niezerowego współczynnika AC. W strumieniu bitów występują na przemian
kody Huffmana obiektów (Z, B) i modułów elementów niezerowych X.

DC AC

i.t.d.
Rys. 22.37. Skanowanie zygzak współczynników
transformaty 2D DCT każdego bloku 8×8 pikseli

Zbiór dyskowy
Tablice Tablice Nagłówek
Obraz podzielony
kwantyzacji kodowania
na bloki 8×8 Tablice

DCT Kwantyzator Q Koder entropijny Dane

Zbiór dyskowy
Nagłówek Tablice Tablice
Obraz podzielony
kodowania kwantyzacji
Tablice na bloki 8×8

Dane Dekoder entropijny Rekwantyzator Q IDCT

Rys. 22.38. 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
Przykłady zastosowań 709

Schemat blokowy kodera i dekodera standardu JPEG przedstawiono na rysunku 22.38. W de-
koderze wszystkie operacje są przeprowadzane w odwrotnej kolejności, a rekwantyzacja jest
przeprowadzana według wzoru:

YˆDCT ( k , l ) = Q ( k , l ) ⋅ Zˆ ( k , l ), k , l = 0, 1,..., 7 (22.64)

gdzie Zˆ (k , l ) jest wynikiem dekodowania entropijnego. Opisane powyżej postępowanie doty-


czy trybu kompresji, mającego na uwadze zadaną jakość zrekonstruowanego obrazu, a nie za-
daną wielkość wynikowego zbioru.
Dygresja. Oczywiście, dla własnych potrzeb możemy eksperymentować i stosować dowolne
tablice. Przykładowo, bardzo dobre wyniki uzyskuje się także stosując taką samą kwantyzację
wszystkich współczynników, to znaczy dzieląc je przez tę samą liczbę. Im liczba ta jest więk-
sza tym większy jest stopień kompresji, mniejsza zaś jakość zrekonstruowanego obrazu. Po-
dobnie, wartość niezerowego współczynnika DCT podczas kodowania VLI możemy także za-
pisywać w postaci bit znaku-moduł (np. bit znaku równy 1 dla oznaczenia liczby ujemnej).
Z kodera Huffmana podczas testów w ogóle możemy zrezygnować (prostym chwytem jest sto-
sowanie tablic „identycznościowych”, tzn. grupa bitów jest zastępowana przez tę samą grupę
bitów).

Przykład. Przedstawimy teraz przykład kodowania nieko mp atyb ilny ze standardem, ale za
to prosty i poglądowy. Załóżmy, że tablica kwantyzacji Q(k, l) = c (dowolnie wybrana liczba).
Do kodowania różnic współczynników DC nie użyjemy kodowania Huffmana, jak jest w stan-
dardzie (pozostawiamy to jako zadanie domowe dla Czytelnika!) tylko samo kodowanie VLI:
zawsze 4 bity na podanie najmniejszej liczby potrzebnych bitów do zapisania modułu binar-
nej reprezentacji kodowanej liczby, a potem zapis tego modułu. Na przykład liczba 7 w kodzie
dwójkowym ma zapis 0111, a w kodzie VLI: 0011 111. W przypadku liczb ujemnych stosu-
jemy negację bitów modułu, czyli dla liczby −7 mamy 0011 000 (analogicznie −1 → 0001 0,
6 → 0011 110).
Załóżmy, że dwa kolejne bloki 8×8 pikseli po transformacji DCT i kwantyzacji są następujące:
520 50 0 0 0 0 0 0 510 30 0 0 0 0 0 0
 20 0 0 0 0 0 0 0  47 0 0 0 0 0 0 0
   
 0 0 0 0 −12 0 0 0  0 0 0 0 0 0 0 0
   
 0 0 0 0 0 0 0 0  12 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0
   
 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0
   
 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0

Po „zeskanowaniu” wartości elementów zgodnie ze strategią zygzak otrzymujemy:


blok 1: 520, 50 ,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,−12, 0,..., 0
blok 2: 510, 30, 47, 0, 0, 0, 0, 0, 0, 12, 0,..., 0
Tworzymy pary (liczba zer bezpośrednio poprzedzających wartość niezerową, wartość nieze-
rowa). Para (15, 0) oznacza 16 zer, a para (0, 0) − że dalej występują same zera aż do końca
bloku. Otrzymujemy:
blok 1: DC = 520, AC = (0, 50), (0, 20), (15, 0), (6, −12), (0, 0)
blok 2: DC = 510, AC = (0, 30), (0, 47), (6, 12), (0, 0)
710 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Kodujemy blok 1:
DC = 520: 520 − 0 = 520 kodujemy jako ciąg binarny 1010 1000001000
Pierwsze cztery bity informują, że do binarnego zakodowania liczby 520 jest potrzebnych 10
bitów, a potem występuje 10-bitowa reprezentację tej liczby. Ponieważ jest to liczba dodatnia,
nie dokonujemy negacji jej bitów. Przy kodowaniu par AC na pierwszy element pary przezna-
czamy 4 bity (jeśli występuje więcej zer niż 15, np. 22, to kodujemy je jako dwie pary (15, 0)
i (6, X), gdzie X oznacza niezerową liczbę), potem 4 bity na najmniejszą liczbę bitów, potrzeb-
nych do binarnego przedstawienia modułu wartości niezerowej, a na końcu zapisujemy moduł
wartości niezerowej, którego bity negujemy, jeśli liczba jest ujemna. W związku z powyższym
dla współczynników AC bloku 1 otrzymujemy (zzzz (4 bity) − liczba zer poprzedzających nie-
zerowy współczynnik, bbbb (4 bity) − liczba bitów modułu tego współczynnika, xx...x (bbbb
bitów) − jego moduł, zanegowany dla liczb ujemnych):

zzzz bbbb xx......x


AC = (0, 50): 0000 0110 110010
AC = (0, 20): 0000 0101 10100
AC = (15, 0): 1111 0000
AC = (6, −12): 0111 0100 0011
AC = (0, 0): 0000 0000

Kodujemy blok 2:
DC = 510: 510 − 520 = −10 kodujemy jako ciąg binarny 0100 0101
Pierwsze cztery bity informują, że do zakodowania wartości −10 są potrzebne 4 bity, a potem
występują 4 bity będące negacją reprezentacji binarnej liczby 10: 1010 → 0101. Ze względu
na predykcyjne kodowanie współczynników DC jako prognozę bieżącej wartości (510) przyj-
mujemy wartość poprzednią (520) i zapisujemy tylko różnicę.

Przypomnijmy, w rozdziale 22.4 opisano predykcyjną wersję transformacji falkowej, stosowa-


ną do stratnej i bezstratnej kompresji obrazów w standardzie kompresji JPEG2000. Upraszcza-
jąc, rolę DCT ze standardu JPEG przejmuje tam transformacja falkowa w wersji całkowito-
liczbowej (zaokrąglanie do najbliższej liczby całkowitej wartości sygnałów na wyjściu filtrów
predykcji P i uaktualnienia U w sekcji analizy i syntezy − patrz rysunek 22.27) lub zmienno-
przecinkowej (bez zaokrągleń). W pierwszym przypadku współczynniki falkowe detali są od
razu poddawane kodowaniu, w drugim zaś − łącznie kwantowane i kodowane. Jak widać mamy
jakiś pożytek z „symfonii falkowej”.

Naszym zadaniem w tej części jest danie satysfakcji najambitniejszym Czytelnikom i skrótowe
zapoznanie ich z id eą kompresji sygnału wideo, czyli sekwencji obrazów. Ponieważ kolejne
klatki (ramki) takiej sekwencji, mogą się tylko nieznacznie różnić, bezwarunkowe kodowanie
każdej z nich oddzielnie, tak jak w standardzie JPEG, jest mało efektywne. Pomimo tego takie
rozwiązanie, znane jako M-JPEG (Moving-JPEG), jest jednak stosowane z powodu swojej
prostoty, zwłaszcza jeżeli w urządzeniu istnieje algorytm/sprzęt do szybkiej realizacji kom-
presji JPEG. Obecnie bardzo często wykorzystuje się go w aparatach fotograficznych do kom-
presji krótkich filmów − sekwencji zdjęć.
W przypadku sygnału wideo jest zdecydowanie preferowana kompresja MPEG, m.in. stosowa-
na w stosunku do filmów nagrywanych na płytach DVD oraz przy nadawaniu satelitarnej i na-
Przykłady zastosowań 711

ziemnej telewizji cyfrowej. Schemat blokowy kodera i dekodera standardu MPEG jest przed-
stawiony na rysunku 22.39. W standardzie MPEG o wyborze opcji algorytmu kompresji decy-
duje blok sterujący kodera, jedną z możliwości jest jednorazowe kodowanie bloku siedmiu ra-
mek (patrz rysunek 22.39). Pierwsza z nich, nazywana ramką I (Intraframe coded ), jest kodo-
wana niezależnie od innych ramek − przyjmijmy dla up roszczenia, że tak jak w metodzie
JPEG, natomiast pozostałe podobnie, tylko w sposób różnicowy: różnica ramki P1 (Predicted )
względem ramki I, różnica ramki P2 względem P1 oraz różnica ramek B (Bidirectionally pre-
dicted ) względem dwóch ramek odniesienia: I, P1 lub P2. Zastosowanie ramki I ma na celu
uniknięcie akumulacji błędów predykcji oraz umożliwienie synchronizacji („przewijania” fil-
mu). W rzeczywistości nie jest realizowane zwykłe odejmowanie ramek, ale odejmowanie
„inteligentne”: dla każdego makrobloku pikseli (np. 16×16) ramki aktualnie kodowanej różni-
cowo (predykcyjnie) w stosunku do jednej lub dwóch ramek, które już są zakodowane, znajdu-
je się najbardziej do niego podobny makroblok w ramkach odniesienia: tylko jednej z po-
przednich lub jednej z poprzednich i jednej z następnych, i odejmuje się je od kodowanej ram-
ki. Operacja znajdowania podobnych makrobloków (czyli ich wektorów przesunięć − wekto-
rów ruchu − w stosunku do interesującego nas makrobloku ramki kodowanej) jest nazywana
estymacją ruchu, a ich odejmowanie − kompensacją ruchu. Jest ona graficznie zilustrowana na
rysunku 22.40.
W uproszczeniu w koderze MPEG wykonuje się kolejno następujące operacje (patrz rysunki
22.39 i 22.40).
1) Koduje się ramkę I, przykładowo tak jak w standardzie JPEG (DCT + kwantyzator Q),
z wykorzystaniem makrobloków, np. o wymiarach 16×16. Potem się ją rozkodowuje (IDCT +
+ Q−1) w celu kodowania różnicowego względem niej następnych ramek. Oznaczmy rozkodo-
waną ramkę I przez Ir (tę samą konwencję będziemy stosować dalej).
2) Przeprowadza się kompensację ruchu ramki P1 względem ramki Ir (przesuwanie makroblo-
ków z Ir i odejmowanie od P1). Zapamiętuje się znalezione i zastosowane optymalne wektory
ruchu WR. Otrzymany w ten sposób obraz różnicowy koduje się w ten sam sposób jak ramkę I,
a następnie go rozkodowuje. Oznaczmy przez IP1r obraz rozkodowany. Jeśli mamy rozkodo-
waną różnicę IP1r ramki P1 i poprzesuwanych makrobloków ramki odniesienia Ir oraz jeśli
znamy ramkę Ir i wektory ruchu WR zastosowane podczas „jej” przesuwania, to możemy na tej
podstawie odtworzyć ramkę P1. Możemy, więc ją odtwarzamy: P1r = IP1r + WR(Ir), gdzie
WR(Ir) oznacza obraz uzyskany w wyniku przesuwania makrobloków obrazu Ir z użyciem za-
pamiętanych wektorów ruchu WR.
3) Następnie koduje się ramkę P2 na podstawie odtworzonej ramki P1 w taki sam sposób jak
P1 kodowano w stosunku do odtworzonej ramki I.
4) Na końcu ramki B1, B2, B3, B4 są kodowane różnicowo w stosunku do dwóch ramek: roz-
kodowanego I i rozkodowanego P1 lub rozkodowanego P1 i rozkodowanego P2. Kompensacja
ruchu jest teraz wykonywana w stosunku do dwóch ramek odniesienia.
Ze względu na brak miejsca i dostępność literatury, w której szeroko dyskutuje się technikę
kompresji MPEG [Skar98, Doma00, Doma05], nie będziemy tego tematu dalej rozwijać.
Pewnie wielu Czytelników z radością teraz odetchnie i wielu się zasmuci. C’est la vie!
Jako zadanie domowe pozostawiamy Czytelnikowi programową implementację metod kom-
presji, przedstawionych w tym podrozdziale. W przypadku kodowania MPEG można na wstę-
pie zaniedbać kompensację ruchu i zacząć od prostego kodowania różnicowego kilku ramek.
712 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Wejściowe
Rodzaje ramek
bity
Kontrola

Pamięć Bufor
DCT Q VLC I B1 B2 P1 B3 B4 P2
ramek
VLC −1
Wstępne Q−1 Bufor
przetw. Q −1
DCT−1
Wyjściowe DCT −1
bity Kompensacja ruchu
Wejściowe
wideo
Kompensacja Pamięć Ramka poprzednia
1/2
ruchu ramek Multi-
plekser
Ramka następna
Estymacja 0 Wyjściowe
ruchu wideo

Rys. 22.39. 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 ra-
mek: I − ramka kodowana bez kompensacji ruchu tak jak w standardzie JPEG, P1 − ramka kodowana różni-
cowo (predykcyjnie) w stosunku do ramki I z kompensacją ruchu jednostronną („w przód”), P2 − ramka ko-
dowana różnicowo w stosunku do P1 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)

a) b) Ramka
poprzednia Ramka
aktualna Ramka
Ramka
poprzednia następna
WR1
Ramka
Makroblok
aktualna
WR2
WR

Makroblok

Błąd predykcji Błąd predykcji


„w przód” 1/2 „w tył”

Błąd predykcji Multiplekser

DCT DCT

Rys. 22.40. 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”, znaj-
duje 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

Dla dociekliwych. W obecnych rozszerzeniach nowych koderów wideo standardu


H264/MPEG4-AVC (Advanced Video Coding) zamiast transformacji DCT stosuje się ortogo-
nalne transformacje całkowitoliczbowe, które zamieniają całkowitoliczbowy sygnał wejściowy
wideo na całkowitoliczbowe współczynniki transformaty i odwrotnie. Działają one na wier-
Przykłady zastosowań 713

szach i kolumnach bloków pikseli o wymiarach 4×4 lub 8×8 i są zdefiniowane następującymi
macierzami transformacji 1D (bez skalowania; y = B⋅x, x = BT⋅y, x − wektor piony składający
się z czterech lub ośmiu pikseli obrazu):

8 8 8 8 8 8 8 8 
12 10 6 3 −3 −6 −10 −12 
 
1 1 1 1  8 4 −4 − 8 − 8 − 4 4 8 
 2 1 −1 −2   
10 −3 −12 −6 6 12 3 −10
B4 x 4 =  , B8 x 8 = , Binv = BT
 1 −1 − 1 1  8 −8 − 8 8 8 −8 −8 8
   
1 −2 2 −1 6 −12 3 10 −10 −3 12 −6 
4 −8 8 − 4 − 4 8 −8 4
 
3 −6 10 −12 12 −10 6 −3 

W rozszerzeniach tych makrobloki, wykorzystywane do kompensacji ruchu, mają wymiary od


4×2 do 16×16 pikseli i są używane w zależności od kontekstu: mniejsze w pobliżu krawędzi
obiektów poruszających się na nieruchomym tle, a większe dla poruszających się dużych frag-
mentów obrazu. Do kodowania wektora współczynników DC wykorzystuje się transformację
Hadamarda (2.79), także całkowitoliczbową, a zamiast bezstratnego kodowania Huffmana sto-
suje się adaptacyjne kodowanie arytmetyczne. Standard H.264 jest bardzo rozbudowany,
a większość wykorzystywanych w nim algorytmów ma różne wersje: szybsze (mniejsza kom-
presja) i wolniejsze (większa kompresja). Dodatkowo wszystkie jego algorytmy mogą być wy-
konywane nawet przy użyciu prostych, 16-bitowych procesorów stałoprzecinkowych. Zasto-
sowane ulepszenia pozwalają uzyskać 2-krotne zwiększenie stopnia kompresji w stosunku do
standardu MPEG2, ale jest to niestety okupione znacznym wzrostem złożoności obliczenio-
wej.

Podstawy entropijnego kodowania symboli metodą Huffmana wytłumaczono w rozdziale 19.1


(patrz rysunek 19.1). Ponieważ ostatnio coraz popularniejsze staje się jednak kodowanie aryt-
metyczne, poświęcimy mu teraz na koniec dwa słowa. Załóżmy, że tak jak poprzednio nasz al-
fabet, składa się tylko z czterech liter (symboli) „a”, „b”, „c” i „d”, występujących z prawdo-
podobieństwem p, odpowiednio równym 0,6; 0,1; 0,1 i 0,2. Utwórzmy dla nich tablicę zaku-
mulowanego prawdopodobieństwa pa = [0; 0,6; 0,7; 0,8; 1,0]. Umówmy się, że każdemu sym-
bolowi odpowiada ściśle przyporządkowany przedział prawdopodobieństw (liczb rzeczywi-
stych): „a” − [0, 0,6), „b” − [0,6, 0,7), „c” − [0,7, 0,8), „d” − [0,8, 1). Przedziały te dzielą cały
zakres [0, 1) w określonej proporcji. Co z tego wynika? Jeśli wybierzemy dowolną liczbę
z tego zakresu, to znajdzie się ona tylko w jednym z tych przedziałów i jednoznacznie „poka-
że” na symbol, któremu ten przedział jest przyporządkowany. Jeśli ponownie podzielimy „po-
kazany” przedział w identycznych proporcjach tak jak poprzednio i znowu wybierzemy jakąś
liczbę, to ona znowu jednoznacznie „pokaże” na jakiś inny przedział wartości i inny symbol.
Przedział w przedziale, czyli symbol za symbolem. Powtarzając tę operację kilkakrotnie jesteś-
my w stanie za pomocą jednej wartości liczbowej zdefiniować sekwencję kilku symboli
(oczywiście podczas kodowania i dekodowania musi być znana tablica zakumulowanych praw-
dopodobieństw, określająca takie same proporcje każdego kolejnego podziału).
Zatem przyjmijmy, że chcemy zakodować komunikat „aad”. Na początku ustawiamy dolny
i górny wskaźnik do całego zakresu prawdopodobieństw: dół = 0, góra = 1 oraz zakres = 1.
Potem pobieramy pierwszy symbol z komunikatu, w naszym przypadku „a”, odczytujemy
714 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

przyporządkowane mu wartości graniczne prawdopodobieństw [0, 0,6) oraz wykorzystujemy je


do modyfikacji zmiennych dół, góra i zakres:
góra = dół + zakres ⋅ 0,6 dół = dół + zakres⋅ 0, zakres = góra − dół
Otrzymujemy w ten sposób nowe wartości: góra = 0,6, dół = 0, zakres = 0,6. Następnie pobie-
ramy drugi symbol komunikatu, przypadkowo również „a”, i identycznie jak poprzednio wyko-
rzystujemy liczby [0, 0,6) do modyfikacji zmiennych systemowych, otrzymując w ten sposób
wartości: góra = 0,36, dół = 0 i zakres = 0,36. Kończąc pobieramy ostatni symbol „d”, odczy-
tujemy przyporządkowane mu wartości graniczne prawdopodobieństw [0,8, 1) i po raz ostatni
modyfikujemy wartości wskaźników:
góra = dół + zakres ⋅ 1 = 0,36, dół = dół + zakres⋅ 0,8 = 0,288
Wynikowym kodem sekwencji symboli „aad” jest więc dowolna liczba z przedziału
[0,288, 0,36). W praktyce wybiera się liczbę ułamkową (7.4), mieszczącą się w wyznaczonym
przedziale wartości i jej bity zapisuje lub przesyła. W naszym przypadku jest to liczba 1/2−2 +
+ 1/2−4 = 5/16 = 0,3125 czyli 0101. Podczas dekodowania symbole są odtwarzane w podobny
sposób i w takiej samej kolejności jak podczas kodowania.
W odróżnieniu od kodowania Huffmana, w którym każdy symbol otrzymuje oddzielny kod dla
poszczególnych symboli (przypomnijmy: „a” = 0, „b” = 100, „c” = 101, „d” = 11), teraz sym-
bole są kodowane łącznie (w grupach). Podczas kodowania binarnego komunikatu „aad”, skła-
dającego się z trzech symboli, jest potrzebnych 3⋅2 bity = 6 bitów. Natomiast w wyniku kodo-
wania Huffmana otrzymujemy 4 bity (1+1+2), podobnie jak dla kodera arytmetycznego. Jed-
nak dla większych słowników i dłuższych komunikatów koder arytmetyczny jest efektywniej-
szy. W tabeli 22-9 jest przedstawiony przykład kodowania i rozkodowywania arytmetycznego.

Tab. 22-9. Przykład bezstratnego kodowania arytmetycznego danych

% Ćwiczenie: Koder i dekoder arytmetyczny

clear all; close all;


% Inicjalizacja
alfabet = [ 'a' 'b' 'c' 'd' ]; % alfabet symboli
p = [ 0.6 0.1 0.1 0.2]; % prawdopodobieństwo występowania każdego symbolu
pa = [ 0 0.6 0.7 0.8 1.0]; % prawdopodobieństwo zakumulowane do k-tego symbolu włącznie
Ns = length(alfabet); % liczba symboli w alfabecie
% Kodujemy grupę symboli łącznie (tworzymy dla nich jedno słowo kodowe)
nr = [ 1, 1, 4]; % numery symboli w słowie kodowym: 1, 1, 4, czyli "a", "a", "d"
dol = 0; gora = 1; % inicjalizacja parametrów "dół" i "góra"
for k = 1 : length(nr) % początek pętli
zakres = gora-dol; % nowy "zakres"
gora = dol + zakres * pa( nr(k)+1 ); % nowa "góra"
dol = dol + zakres * pa( nr(k) ); % nowy "dół"
end
% Wyjściowy strumień bitów, to zapisana binarnie liczba ułamkowa "kod" z przedziału [dół, góra)
kod = 0; krok = 1/2; bity = [0];
while( ~((kod >= dol) & (kod < gora)) )
if(kod < dol)
krok = krok/2; kod = kod + krok; bity = [ bity 1 ];
else
if(kod < gora)
break;
else
kod = kod - krok; bity( end ) = 0;
krok = krok/2;
kod = kod + krok; bity = [ bity 1 ];
Przykłady zastosowań 715

end
end
end
kod, bity, pause
% Dekodujemy komunikat (sekwencję symboli)
pa_rev = pa(end:-1:1); alfa = [ 0 (Ns:-1:1) ]; nrdekod = []; % inicjalizacja parametrów
dol = 0; gora = 1; zakres = gora-dol; %
for k = length(nr) : -1 : 1 % początek pętli dekodowania
x = (kod-dol)/zakres; % oblicz liczbę x
indx = find( pa_rev <= x ), indx = indx(1); % pierwsza liczba w tablicy pa_reverse <= x
gora = dol + zakres*pa_rev( indx-1 ); % nowa "góra"
dol = dol + zakres*pa_rev( indx ); % nowy "dół"
zakres = gora-dol; % nowy "zakres"
nrdekod = [nrdekod alfa(indx) ]; % numer zdekodowanego symbolu
end
disp('Wysłano symbole'); nr
disp('Odebrano symbole'); nrdekod

22.5.2. Znaki wodne w obrazach

W czasach skrupulatnej ochrony praw autorskich oraz różnych przejawów działalności intelek-
tualnej do produktów „autorskich” dodaje się niewidoczne dla użytkownika znaczniki (odpo-
wiednik znaków wodnych w banknotach), które mają potwierdzać ich autentyczność i źródło
pochodzenia (autor produktu, prawa użytkowania, kontrola rozpowszechniania itp.). Zabezpie-
czenia te muszą być tak skonstruowane, aby były niewid o czne dla odbiorcy oraz o d p o r ne
na brutalny „atak” nieuczciwego użytkownika na taki produkt, tzn. jego modyfikacja (np. de-
cymacja, filtracja, zmiana formatu na stratny) nie może doprowadzić do uszkodzenia znaku
wodnego, będącego świadectwem źródła pochodzenia. Oczywiście, istnieje także potrzeba wy-
krycia edycji zmian oryginału oraz jego ewentualnej rekonstrukcji.
Istnieje wiele technik znakowania obrazów odpornymi znakami wodnymi. My zapoznamy się
z jedną z nich. W centrum naszej uwagi będą stosowane w niej metody przetwarzania sygna-
łów. Na rysunku 22.41 przedstawiono schemat ideowy interesującego nas algorytmu metody
widma rozproszonego w dziedzinie czasu. W celu uzyskania lepszych właściwości wizualnych,
odporności na kompresję JPEG lub na przykład rotację obrazu, analogiczne znakowanie moż-
na przeprowadzić w dziedzinie współczynników transformaty DCT lub w dziedzinie współ-
rzędnych log-polar (rozdz. 22.5.3). Podczas procedury znakowania obrazu na początku two-
rzona jest macierz, która ma jego wymiary i składa się z bloków pikseli o takich samych warto-
ściach: 1 albo −1. Pełnią one rolę znaku wodnego − specjalnie przez nas definiowanego wzor-
ca binarnego. Następnie każdy jej element jest mnożony (modulowany) przez liczbę uzyskaną
z generatora liczb pseudolosowych, np. o rozkładzie normalnym, oraz skalowany przez ten sam
współczynnik wzmocnienia/tłumienia. W ten sposób znak ten jest ukrywany. Ostatnim etapem
jest dodanie zamaskowanego znaku do obrazu. Podczas operacji odczytywania znaku są moż-
liwe dwa scenariusze, detekcja „w jasno” i „w ciemno”. W pierwszym przypadku dysponujemy
oryginalnym obrazem bez znaku wodnego, w związku z czym na początku odejmujemy go od
sprawdzanego obrazu. Natomiast w drugim przypadku, w sytuacji kiedy nie mamy oryginału,
na początku filtrujemy obraz górnoprzepustowo, gdyż chcemy „odzyskać” szum szerokopa-
smowy dodany podczas znakowania. W dalszej części oba algorytmy są identyczne. Przepro-
wadzamy synchroniczną demodulację wzorca znaku, tzn. mnożymy wszystkie piksele obrazu
przez te same, odpowiadające im liczby pseudolosowe, które użyto podczas znakowania.
W sytuacji kiedy w chronionym obrazie znak przyporządkowany danemu pikselowi miał war-
716 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

tość 1, otrzymujemy kwadrat liczby pseudolosowej, natomiast w przeciwnym przypadku


(znak = −1) − negację kwadratu. Następnie jak poprzednio sumujemy wartości pikseli w zna-
nych nam blokach znaku oraz jako wynik przyjmujemy znak sumy. Powinniśmy w ten sposób
otrzymać zadany przez nas wzorzec binarny o wartościach 1 albo −1.
W obu przypadkach do detekcji jest niezbędny sygnał szerokopasmowy (szum), wykorzystany
w koderze. Pełni on rolę klucza, bez znajomości którego nie jesteśmy w stanie odczytać znaku
wodnego.
Na rysunku 22.42 jest przedstawiony przykład znakowania obrazu, a w tabeli 22-10 program,
w którym to znakowanie wykonano. Zainteresowany Czytelnik sam powinien w nim prześle-
dzić w programie kolejne etapy nanoszenia i odczytywania znaku. Program ten można wyko-
rzystać do przebadania: a) zniekształceń obrazu wprowadzonych przez znak w zależności od
jego mocy oraz b) odporności znakowanego obrazu na „ataki” typu filtracja, skalowanie, za-
szumianie (czy znak ulegnie zmianie pod wpływem „ataku”?).
Podobne zabiegi dodawania do obrazu niewidocznego znaku można także wykonywać w dzie-
dzinie współczynników dowolnej jego transformaty, np. DFT, DCT lub falkowej. Przykładowo
jako ćwiczenie można zmienić dziedzinę znakowania na dziedzinę współczynników transfor-
maty DCT i projektować znakowanie odporne na kompresję JPEG.
Podobnymi metodami można także znakować sygnały jednowymiarowe, np. nagrania audio.

suma wartości
pikseli
?
w blokach −1 1 1
Obraz do
znakowania HP f
1 −1 −1
−1 1 1
wzmocnienie

−1 1 1 Macierz Macierz bloki


znak liczb liczb pikseli
1 −1 −1 pseudo- pseudo-
wodny znaku
losowych losowych
−1 1 1

Rys. 22.41. Schemat blokowy algorytmu znakowania obrazu metodą rozpraszania widma oraz dekodowania
ukrytego znaku

a) b) c) d)

Rys. 22.42. Przykład znakowania obrazu: a) obraz oryginalny, b) znak, c) znak zmodulowany szumem,
d) obraz (obraz oryginalny z dodanym znakiem, który jest zmodulowany szumem)
Przykłady zastosowań 717

Tab. 22-10. Przykładowy program do nanoszenia znaków wodnych na obrazach metodą rozpraszania wid-
ma

% Ćwiczenie: Wprowadzanie znaków wodnych do obrazów cyfrowych metodą widma rozproszonego

clear all; close all;

% Parametry
K = 32; % rozmiar bloku dla jednego bitu znaku wodnego (K x K pikseli)
wzm = 1; % wzmocnienie znaku wodnego

% Wczytaj obraz do znakowania


A = imread('lena_bk.bmp');
B = double(A); [M, N] = size(B);

% Dodanie znaku wodnego==================


Mb = (M/K); Nb=(N/K); % liczba bloków w wierszu i kolumnie
plusminus1 = sign( randn(1,Mb*Nb) ); % losowa sekwencja liczb +1/−1
Znak = zeros( size(B) ); % macierz znaku: szachownica z jakimś wzorkiem +1/−1
for i = 1:Mb
for j = 1:Nb
Znak( (i-1)*K+1 : i*K, (j-1)*K+1 : j*K ) = plusminus1(i*j);
end
end
Sz = round( randn(size(B)) ); % szum (nośna modulująca znak)
ZnakSz = wzm * Sz .* Znak; % modulacja znaku wodnego = wzm * szum * znak(+/−1)
B = uint8( B + ZnakSz ); % obraz + znak wodny, konwersja do 8 bitów
% Rysunki
figure, subplot(1,2,1), imshow(Znak,[]); title('Znak wodny')
subplot(1,2,2), imshow(ZnakSz,[]); title('Znak zmodulowany szumem')
figure, subplot(1,2,1); imshow(A,[]); title('Obraz oryginalny')
subplot(1,2,2); imshow(B,[]); title('Obraz z ukrytym znakiem wodnym')

% Detekcja znaku wodnego =================


B = double(B); % powrotna konwersja do podwójnej precyzji

% Filtracja górnoprzepustowa zaznaczonego obrazu


L = 10; L2=2*L+1; % rozmiar filtra 2D (L x L)
w = hamming(L2); w = w * w'; % okno 2D z okna 1D Hamminga

f0=0.5; wc = pi*f0; [m n] = meshgrid(-L:L,-L:L); % filtr LowPass


lp = wc * besselj( 1, wc*sqrt(m.^2 + n.^2) )./(2*pi*sqrt(m.^2 + n.^2) ); %
lp(L+1,L+1)= wc^2/(4*pi); %
hp = - lp; hp(L+1,L+1) = 1 - lp(L+1,L+1); % filtr HighPass z LowPass (bez okna 2D)
h = hp .* w; % z oknem 2D
B = conv2( B, h, 'same'); % filtracja obrazu

% Decyzja o wartości bitu w każdym bloku (+1/−1)


Demod = B .* Sz; % demodulacja
ZnakDetekt = zeros( size(B) ); % sumowanie pikseli w blokach
for i=1:Mb
for j=1:Nb
sum( sum( Demod((i-1)*K+1:i*K, (j-1)*K+1:j*K) ) )
ZnakDetekt((i-1)*K+1:i*K, (j-1)*K+1:j*K) = ...
sign( sum( sum( Demod((i-1)*K+1:i*K, (j-1)*K+1:j*K) ) ) );
end
end
blad_detekcji = sum(sum( abs(Znak-ZnakDetekt) ))

% Rysunki
figure, subplot(1,2,1); imshow(Demod,[]); title('Demodulacja')
subplot(1,2,2); imshow(ZnakDetekt,[]); title('Detekcja znaku')
718 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

22.5.3. Dopasowywanie do siebie obrazów cyfrowych

W zastosowaniach dotyczących przetwarzania obrazów często zachodzi konieczność dopaso-


wania do siebie dwóch obrazów przedstawiających tę samą scenę (lub jej fragment), ale po
transformacji geometrycznej. Oznacza to, że jeden z obrazów może być względem drugiego
przesunięty, o b r ó co ny, p r zeskalo wany itd. Taka sytuacja zachodzi np. przy rekonstru-
owaniu mapy terenu na podstawie zdjęć z samolotu, które mogą być wykonane na różnych wy-
sokościach i pod różnymi kątami, lub w zastosowaniach biomedycznych, gdzie zachodzi ko-
nieczność porównania obrazów uzyskanych różnymi metodami (np. obrazy z tomografii kom-
puterowej i endoskopowe). W dalszej części omówiono dwie metody dopasowywania obrazów
cyfrowych: 1) opartą na dyskretnej transformacji Fouriera DFT [Redd96, Hong03] oraz
2) wykorzystującą informację wzajemną [Plui03].

Zastosowanie DFT i reprezentacji log-polar

Metoda dopasowywania obrazów wykorzystująca transformację Fouriera opiera się na następu-


jącej właściwości przesunięcia tego przekształcenia (całkowego):
− j 2 π( f x x0 + f y y0 )
f 2 ( x, y ) = f1 ( x − x0 , y − y0 ) ⇒ F2 ( f x , f y ) = e F1 ( f x , f y ) (22.65)

gdzie f1(x, y) i f2(x, y) oznaczają ciągłe obrazy, a F1(fx, fy) i F2(fx, fy) ich dwuwymiarowe trans-
formaty Fouriera. Wartość przesunięcia (x0, y0) obrazu 2 w stosunku do obrazu 1 można wy-
znaczyć w prosty sposób:

 F ( f , f )F *( f , f ) 
 2 x y 1 x y
Fourier −1 
*
 F2 ( f x , f y ) F1 ( f x , f y )

 = Fourier e

{
−1 − j 2 π ( f x x0 + f y y0 )
}
= δ( x − x0 , y − y0 ) (22.66)

ponieważ w wyniku odwrotnej transformacji Fouriera unormowanego widma wzajemnego obu


obrazów otrzymujemy impuls Diraca, przesunięty do punktu (x0, y0) w ciągłej przestrzeni ar-
gumentów x-y: wystarczy tylko odczytać współrzędne jego maksimum. Więcej o detekcji sa-
mego przesunięcia tą metodą powiedziano w rozdziale 22.5, przy okazji opisu algorytmu kom-
pensacji ruchu w endoskopowych zapisach strun głosowych.
Dla jednoczesnego przesunięcia (x0, y0) i obrotu (Θ) obrazów (22.65) przyjmuje następującą
postać:
f 2 ( x, y ) = f1 ( x cos Θ + y sin Θ − x0 , − x sin Θ + y cos Θ − y0 ) (22.67)

− j 2 π( f x x0 + f y y0 )
F2 ( f x , f y ) = e F1 ( f x cos Θ + f y sin Θ, − f x sin Θ + f y cos Θ) (22.68)

Po zamianie w równaniu (22.68) współrzędnych kartezjańskich (x, y) na biegunowe (r, ϕ) oraz


po obliczeniu modułu obu stron tego równania, można rotację (22.67) sprowadzić do przesu-
nięcia (wzdłuż osi kątowej), a następnie przeprowadzić jego detekcję z wykorzystaniem rów-
nania (22.66):

F2 ( r, ϕ) = F1 ( r, ϕ − Θ) (22.69)

Z kolei przeskalowanie obrazu f1(x, y) współczynnikiem a w osiach jego argumentów powodu-


je następującą zmianę jego widma:
Przykłady zastosowań 719

f 2 ( x, y ) = f1 ( ax, ay ) (22.70)
1
F2 ( f x , f y ) = F1 ( f x / a , f y / a ) (22.71)
a2

Logarytmowanie osi w (22.71) pozwala sprowadzić skalowanie do przesunięcia, które ponow-


nie można wyznaczyć za pomocą zależności (22.66):

1
F2 (log f x ,log f y ) = F1 (log f x − log a , log f y − log a ) (22.72)
a2

W celu jednoczesnej detekcji rotacji (kąt Θ) i skalowania (współczynnik a) należy moduł wid-
ma Fouriera przenieść z układu kartezjańskiego do układu log-polar w sposób pokazany na ry-
sunku 22.43. Rotacja obrazu w tym układzie jest przesunięciem wzdłuż osi kątów, natomiast
skalowanie jest przesunięciem wzdłuż osi log(r)

y ϕ
r
ϕ
(0, 0) x (0, 0) log(r)

Rys. 22.43. Zamiana współrzędnych kartezjańskich na log-polar

W przypadku obrazów dyskretnych w układzie kartezjańskim współrzędne x i y reprezentują


położenie piksela i są liczbami całkowitymi. Płaszczyzna kartezjańska jest próbkowana w in-
nych miejscach niż płaszczyzna log-polar. Bezpośrednie przeliczenie położenia pikseli z ukła-
du x-y do układu log(r)-ϕ spowodowałoby, że w obrazie pojawiłyby się obszary, dla których
wartości luminancji pozostawałyby nieokreślone. Dlatego obliczenia są wykonywane w sposób
następujący: określa się sposób próbkowania płaszczyzny log(r)-ϕ (tzn. przyrosty kąta i loga-
rytmu promienia), a następnie dla każdego piksela z płaszczyzny log(r)-ϕ szuka się odpowied-
nika w układzie x-y. Oczywiście wyliczone indeksy dla układu x-y są zmiennoprzecinkowe.
Najprostszym rozwiązaniem tego problemu jest ich zaokrąglenie (interpolacja metodą najbliż-
szych sąsiadów) jednak lepsze rezultaty daje interpolacja biliniowa opisana zależnością:

M ( x, y ) = M k , l (1 − t )(1 − u ) + M k +1, l (1 − u )t + M k , l +1 (1 − t )u + M k +1,l +1tu (22.73)

gdzie x, y oznaczają współrzędne przeliczone z układu log-polar do x-y, M(x, y) reprezentuje


obliczaną jasność punktu obrazu o współrzędnych (x, y), Mp, q są intensywnościami czterech
pikseli, najbliższych sąsiadów punktu (x, y), t jest częścią ułamkową x, a u jest częścią ułam-
kową y.
Program implementujący opisane przekształcenie jest przedstawiony w tablicy 22-10. Przyjęto
w nim początek układu współrzędnych w środku geometrycznym obrazu. Do obliczeń wyko-
rzystano logarytm naturalny. Przykładowe reprezentacje obrazów w układzie log-polar są
przedstawione na rysunku 22.44.
720 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Tab. 22-11. Przedstawienie obrazu we współrzędnych log-polar

function B = logpolar(A);
% Zamiana współrzędnych kartezjańskich na log-polar
A = double(A);
[w k] = size(A);

rmax = round(w/2); %rmax = round(sqrt(w^2+k^2)/2); % zakres promienia


r = 1:rmax; r=r/rmax;
r1 = exp(r*log(rmax));
fi = -179:180;
B = zeros(length(fi),length(r));
for n = 1:length(r);
for m = 1:length(fi);
fi_r =( pi*fi(m))/180; % zamiana na radiany
xf = (r1(n)*cos(fi_r))+round(w/2)+1;
yf = (r1(n)*sin(fi_r))+round(k/2)+1;
x = round(xf);
y = round(yf);
tx = xf-x;
ty = yf-y;
if x<=w & y<=k & x>0 & y>0
%interpolacja biliniowa
if x<w & y<k & x>1 & y>1
B(m,n) = A(x,y)*(1-tx)*(1-ty) + A(x+1,y)*(1-ty)*tx+ ...
A(x,y+1)*(1-tx)*ty + A(x+1,y+1)*tx*ty;
else
B(m,n)=A(x,y);
end
end
end
end

a) b)

c) d)

Rys. 22.44. Przykłady zamiany układu współrzędnych z kartezjańskiego na log-polar


Przykłady zastosowań 721

W praktyce dopasowywanie do siebie dwóch obrazów I1 i I2 z wykorzystaniem procedury dys-


kretnej transformacji Fouriera DFT (FFT) przebiega następująco:
1. Obliczenie modułów DFT obu obrazów. Na obrazy należy nałożyć okna 2D (np. Hanninga,
Hamminga lub Gaussa) i dopiero potem obliczyć 2D DFT. Dodatkowo w celu lepszego zo-
brazowania zakresu dużych zmian wartości modułów widm dobrze jest obserwować loga-
rytm wyznaczonych modułów. Obrazy z nałożonym oknem 2D Hanninga są pokazane na ry-
sunkach 22.45a i 22.45b, natomiast moduły ich widm w skali logarytmicznej są przedsta-
wione na rysunkach 22.45c i 22.45d.
2. Obliczenie reprezentacji log-polar modułów widm (rysunki 22.45e i 22.45f).
3. Obliczenie przesunięć wzdłuż osi kątów i log(r) za pomocą zależności (22.66).
Współczynnik skalowania a można odczytać po przeskalowaniu osi log(r) na r. W przypad-
ku wyznaczania kąta rotacji Θ następuje detekcja dwóch kątów, tj. Θ i (180 + Θ) (na rysun-
ku 22.45h: −11 oraz (180 − 11) stopni). W celu doboru prawidłowego kąta należy odwrócić
każdą z tych rotacji i sprawdzić, w którym przypadku przesunięcie wyniesie zero.
4. Po wyznaczeniu współczynnika skalowania a i kąta rotacji Θ wykonuje się przekształcenia
odwrotne do jednego z porównywanych obrazów.
5. Na samym końcu wyznacza się przesunięcie (x0, y0) także z zależności (22.66).
Pierwsze dwa punkty powyższego algorytmu oraz część trzeciego, zostały zaimplementowane
w tabeli 22-12. Dokończenie programu pozostawiamy Czytelnikowi jako ćwiczenie.

Metoda informacji wzajemnej jako miara podobieństwa obrazów

Dopasowywanie obrazów cyfrowych może przebiegać iteracyjnie metodą optymalizacji wy-


branej funkcji kosztu, np. minimalizacji odległości średniokwadratowej. Poniżej przedsta-
wiono jednak inne popularne kryterium, wywodzące się z teorii informacji, a oparte na mak-
symalizacji tzw. informacji wzajemnej (mutual information) [Plui03]. W porównaniu z odle-
głością średniokwadratową informacja wzajemna pozwala porównywać obrazy otrzymane
z różnych źródeł (np. różniące się oświetleniem), gdyż nie opiera się ona wyłącznie na jasności
pikseli.
Przy dopasowywaniu obrazów zakładamy, że drugi obraz jest wynikiem transformacji afinicz-
nej obrazu pierwszego, a celem jest wyznaczenie wartości współczynników tej transformacji.
Z kolej znając te wartości możemy wykonać transformację odwrotną obrazu drugiego i mak-
symalnie upodobnić oba obrazy do siebie. To proste założenie jest wystarczająco ogólne, aby
rozwiązanie postawionego zadania mogło znaleźć wiele praktycznych zastosowań (patrz roz-
dział 22.5.6).
Transformacje afiniczne. W wyniki transformacji afinicznej współrzędne piksela (x, y) są od-
wzorowywane na (x', y') w następujący sposób:
x ' = a11 x + a12 y + a13
(22.74)
y ' = a21 x + a22 y + a23

co w postaci macierzowej zapisuje się jako:

 x '   a11 a12 a13   x   σ xy sin Θ + σ x cos Θ σ xy cos Θ − σ x sin Θ t x   x 


 y ' =  a  
a22 a23   y  =  σ y sin Θ σ y cos Θ ty   y (22.75)
   21    
 1   0 0 1   1   0 0 1   1 
722 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b)

c) d)

e) f)

g) h)

Rys. 22.45. Pośrednie wyniki algorytmu dopasowywania obrazów za pomocą DFT. Obraz z rys. b) jest
przeskalowany 1,3 razy, obrócony wokół środka o 11 stopni i przesunięty w prawo i w dół o odpowiednio
10 i 5 pikseli. Rysunki przedstawiają: a) ,b) dopasowywane obrazy pomnożone przez okno Hanninga, c), d)
moduły widm w skali logarytmicznej, e), f) reprezentację modułów widm w układzie log-polar, g), h) wyniki
detekcji rotacji i skalowania
Przykłady zastosowań 723

Tab. 22-12. Dopasowywanie dwóch obrazów, z których jeden jest obrócony, przeskalowany i przesunięty
(w programie są wykorzystywane funkcje imrotate.m oraz imresize.m z Image Processing Toolbox)

% Ćwiczenie: Dopasowywanie obrazów metodą transformacji log-polar


clear all; close all; subplot(111);

% Obrazy testowe
I1 = imread('lena.bmp'); I1=double(I1);
%I1 = CHECKERBOARD(64,4,4);
[w1 k1]=size(I1);
I2=I1;

% Obrót
ANGLE=11; I2 = imrotate(I1,ANGLE,'bilinear');

% Skalowanie
M=1.3; I2 = imresize(I2,M,'bilinear');
[w2 k2]=size(I2);
I2=I2(round((w2-w1)/2):round((w2+w1)/2), round((k2-k1)/2):round((k2+k1)/2));
I2=I2(1:w1,1:k1);

% Przesunięcie
K=10; L=5;
I2(:,w1-K:w1)=[]; I2=[zeros(size(I2,1),K+1) I2];
I2(w1-L:w1,:)=[]; I2=[zeros(L+1,size(I2,2)); I2];

% Okno czasowe
I1=okno2d(I1);
I2=okno2d(I2);
figure, subplot(1,2,1), imshow(I1,[]), subplot(1,2,2), imshow(I2,[])

% Moduły FFT obrazów I1 i I2 (nie zależą od przesunięcia)


err=1;
W1=log(abs(fft2(I1))+err); W1=fftshift(W1);
W2=log(abs(fft2(I2))+err); W2=fftshift(W2);
figure, subplot(1,2,1), imshow(W1,[]), subplot(1,2,2), imshow(W2,[])

% Zamiana układu kartezjańskiego na log-polar


W1 = logpolar(W1);
W2 = logpolar(W2);
figure, subplot(1,2,1), imshow(W1,[]), subplot(1,2,2), imshow(W2,[])

% Pomiar przesunięcia w układzie log-polar


W1=fft2(W1);
W2=fft2(W2);
CPS=(W1.*conj(W2))./(abs(W1).*abs(W2)+1);
cps=abs(ifft2(CPS));
[Y,Ik] = max(cps);
[Y,Iw] = max(Y); Ik=Ik(Iw);
fi=-179:1:180;
rmax=size(W1,2);
r = 1:rmax; r=r/rmax;
r1= exp(r*log(rmax));
Skalowanie = r1(Iw)
Rotacja = fi(Ik)
figure, surf(cps), xlabel('skalowanie'), ylabel('rotacja')
============================
function I=okno2d(I);
% nałożenia przestrzennego okna 2D
[w k]=size(I);
okno1=hanning(k);
okno2=hanning(w);
I = I .* (okno1*okno2’);
724 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

Ponieważ wpływ współczynników we wzorze (22.74) na geometrię przekształcenia jest trudny


do bezpośredniej interpretacji, więc stosuje się parametryzację podaną w drugiej części wzoru
(22.75). Podane współczynniki mają następujący sens: σx − przeskalowanie wzdłuż osi X, σy −
przeskalowanie wzdłuż osi Y, σxy − skręcenie, Θ − rotacja względem początku układu współ-
rzędnych, tx − przesunięcie wzdłuż osi X, ty − przesunięcie wzdłuż osi Y. Ilustracja graficzna
znaczenia parametrów przekształcenia afinicznego jest zilustrowana na rysunku 22.46. Prze-
kształcenie identycznościowe zachodzi dla σ x = 1, σ y = 1, σ xy = 0, Θ = 0, t x = 0, t y = 0 .

Dla dociekliwych. Przekształcenia afiniczne można wykorzystać do generacji fraktali (co być
może będzie dla Czytelnika interesującym urozmaiceniem) [Kudr93]. Rozważmy cztery prze-
kształcenia afiniczne zadane macierzami:

σ x = 1, σ y = 1, σ xy = 0, σ x = 0,5, σ y = 1, σ xy = 0, σ x = 1,5, σ y = 1, σ xy = 0,
Θ = 0, t x = t y = 0 Θ = 0, t x = t y = 0 Θ = 0, t x = t y = 0

σ x = 1, σ y = 1, σ xy = −0,3, σ x = 1, σ y = 1, σ xy = 0,3, σ x = 1, σ y = 0,5, σ xy = 0,


Θ = 0, t x = t y = 0 Θ = 0, t x = t y = 0 Θ = 0, t x = t y = 0

σ x = 1, σ y = 1,5, σ xy = 0, σ x = 1, σ y = 1, σ xy = 0, σ x = 1, σ y = 1, σ xy = 0,
Θ = 0, t x = t y = 0 Θ = 0.2 [rad ], t x = t y = 0 Θ = 0, t x = t y = 20 [ piksele]

Rys. 22.46. Interpretacja geometryczna współczynników przekształcenia afinicznego (22.75)


Przykłady zastosowań 725

 − 0,67 − 0,02 0   0,4 0, 4 0  − 0,4 − 0, 4 0  − 0,1 0 0


A1 =  − 0,18 0,81 10 , A2 =  − 0,1 0, 4 0 , A3 =  − 0,1 0, 4 0 , A4 =  0, 44 0, 44 − 2  (22.76)
       
 0 0 1   0 0 1  0 0 1  0 0 1 

a następnie ustalmy dowolny punkt startowy i generujemy jego nowe współrzędne w ten spo-
sób, że są one wyliczane ze starych za pomocą losowo wybranego przekształcenia od A1 do A4.
Efektem tych obliczeń jest choinka pokazana na rysunku 22.47. Program implementujący algo-
rytm jej wyznaczania jest przedstawiony w tablicy 22-12.

Rys. 22. 47. Fraktal wyliczony za pomocą losowego iterowania


odwzorowań afinicznych od A1 do A4 (22.76)

Tab. 22-13. Program do wygenerowania rysunku 22.47

% Ćwiczenie: Losowe iterowanie odwzorowań afinicznych


close all; clear all;

N=1024; % rozmiar obrazu


itr=1e5; % liczba iteracji
skala=20;
P(1,:,:) = [ -0.67 -0.02 0; -0.18 0.81 10; 0 0 1];
P(2,:,:) = [ 0.4 0.4 0; -0.1 0.4 0; 0 0 1];
P(3,:,:) = [ -0.4 -0.4 0; -0.1 0.4 0; 0 0 1];
P(4,:,:) = [ -0.1 0 0; 0.44 0.44 -2; 0 0 1];
X=[0 0 1]';
I=zeros(N,N);
for k=1:itr;
m = mod(round(1000*randn(1,1)),4)+1;
X = squeeze(P(m,:,:))*X;
x = round(skala*(X(1))+N/2); y = round(skala*(X(2))+N/6);
if (x>0 & x<=N & y>0 & y<=N) I(x,y)=I(x,y)+1; end
end
I=log(I+1); I=abs(I-max(I(:)));
I = imrotate(I,90,'bilinear');
figure, imshow(I,[]), colormap('gray')

Informacja wzajemna. Wprowadzona przez Shannona miara ilości informacji źródła bez pa-
mięci jest definiowana jako:
N  1  N
H ( p1 ,..., pN ) = H ( S ) = ∑ pi log2   = − ∑ pi log2 ( pi ) (22.77)
i =1  pi  i =1

i jest nazywana entropią stowarzyszoną ze zbiorem n niezależnych zdarzeń S = {x1, ..., xN}
oraz ze zbiorem prawdopodobieństw ich zajścia (rozkładem prawdopodobieństwa) P = {p1,
..., pN}. Ilość informacji zawartej w komunikacie jest odwrotnie proporcjonalna do logarytmu
726 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

prawdopodobieństwa zajścia zdarzenia. Entropię Shannona można policzyć dla obrazów cy-
frowych biorąc pod uwagę rozkład prawdopodobieństwa luminancji. Obraz, w którym wystę-
puje większości pikseli o takiej samej jasności ma małą entropię (jasność każdego piksela jest
znana z dużym prawdopodobieństwem), natomiast obraz, w którym wszystkie poziomy jasnoś-
ci występują równie często ma dużą entropię (każdy piksel to wielka niewiadoma). W takim
rozumieniu entropia jest miarą koncentracji funkcji rozkładu prawdopodobieństwa luminancji
w obrazie (obrazy z rozkładami zbliżonymi do impulsu mają małą entropię, a rozkłady równo-
mierne dużą).
Dygresja. A oto ulubiony przykład jednego z moich kolegów, wykładowców z przedmiotu ana-
lizy i przetwarzania obrazów: nachylona płaszczyzna − entropia maksymalna, a informacja −
taka sama, co w płaszczyźnie poziomej, dla której entropia jest równa zeru. Podchodźmy więc
do pojęcia entropii bez nadmiernych oczekiwań i przesadnych emocji.

Informację wzajemną I pomiędzy obrazami A i B definiuje się w sposób następujący:

I ( A, B ) = H ( A) + H ( B ) − H ( A, B ) , ( )
H ( A, B ) = − ∑ pij log2 pij (22.78)
i, j

gdzie H(A), H(B) oznaczają entropię obrazów A i B, a H(A, B) ich entropię wzajemną, zdefi-
niowaną równaniem (22.77) tylko z użyciem prawdopodobieństwa pij łącznego zajścia dwóch
zdarzeń w obrazach A i B (wówczas suma po dwóch zmiennych: i oraz j). Maksymalizacja
informacji wzajemnej oznacza więc minimalizację entropii wzajemnej.
Informacja wzajemna ma następujące właściwości:
I ( A, B ) = I ( B, A)
I ( A, A) = H ( A)
I ( A, B ) ≤ H ( A), I ( A, B ) ≤ H ( B ) , czyli H ( A, B ) ≥ H ( A) i H ( A, B ) ≥ H ( B )
I ( A, B ) ≥ 0
I ( A, B ) = 0 wtedy i tylko wtedy gdy A i B są niezależne

W trakcie dopasowywania obszar pokrywających się części obrazów zmienia się, co ma wpływ
na wartość informacji wzajemnej. Z tego względu stosuje się następującą normalizację:
H ( A) + H ( B )
NMI = (22.79)
H ( A, B )

Najbardziej popularną metodą estymacj i rozkładów prawdopodobieństwa jest wyznaczenie


histogramu wzajemnego. W macierzy histogramu wzajemnego na pozycji h(a, b) wpisuje się
liczbę wzajemnych wystąpień pikseli o wartościach a i b w obrazach A i B (tzn. przypadki,
w których w obrazie A na pozycji (x, y) jest piksel o wartości a, a na tej samej pozycji w obra-
zie B jest piksel b). Estymatory rozkładu prawdopodobieństwa dla każdego z obrazów, w po-
staci histogramów, oblicza się sumując histogram wzajemny po wierszach i po kolumnach.
Przykłady histogramów wzajemnych są pokazane na rysunkach 22.48 i 22.49. Rysunek 22.48
przedstawia dwa przypadki obrazów dopasowanych. Histogram wzajemny jest bardzo skon-
centrowany (impulsowy), a unormowana informacja wzajemna wynosi 1. Jest to szczególnie
interesujące w przypadku z rysunku 22.48b, na którym jest porównywany obraz i jego nega-
tyw: pomimo różnych wartości luminancji treść (informacja) jest taka sama w obu przypad-
kach. Jest to cenna zaleta informacji wzajemnej jako kryterium dopasowywania obrazów wy-
korzystywana głównie w przetwarzaniu obrazów biomedycznych. Umożliwia ona dopasowy-
Przykłady zastosowań 727

a)

b)

Rys. 22.48. Histogramy wzajemne dla obrazów o tej samej treści (kolor ciemny oznacza dużą wartość):
a) obrazy o tej samej luminacji b) obrazy o przeciwnej luminancji. W obu przypadkach unormowana infor-
macja wzajemna wynosi 1

wanie obrazów diagnostycznych pacjenta otrzymanych różnymi metodami diagnostycznymi,


np.: tomografia komputerowa, radiologia, badania endoskopowe i inne. Rysunek 22.49 przed-
stawia przypadek niedopasowania obrazów. Koncentracja histogramu wspólnego jest bardzo
mała.
Program. W tabeli 22-14 jest przedstawiony kod prostego programu, służącego do dopasowy-
wania wzajemnego obrazów. Wykorzystuje on równanie transformacji afinicznej (22.75) oraz
maksymalizację unormowanej informacji wzajemnej pomiędzy obrazami: tak zmienia wartości
parametrów transformacji, aby osiągnąć maksymalną koncentrację histogramu wzajemnego ob-
razów. W celu redukcji ewentualnego wpływu lokalnych maksimów przed dopasowywaniem
obrazy są filtrowane dolnoprzepustowo. Program dla każdej iteracji wylicza 12 możliwych
przekształceń afinicznych z zadanymi przyrostami parametrów oraz wybiera ten kierunek, któ-
ry owocuje największym przyrostem kryterium.
Na rysunku 22.49a są przedstawione obrazy przed dopasowaniem oraz ich histogram wzajem-
ny, natomiast na rysunku 22.49b − obrazy po zakończeniu dopasowywania. Widoczna jest zde-
cydowana poprawa koncentracji histogramu wzajemnego. Wynik dopasowania jest przedsta-
wiony również na rysunku 22.49d w postaci modułu różnic obrazów przed i po dopasowaniu.

Tab. 22-14. Dopasowywanie obrazów cyfrowych metodą maksymalizacji informacji wzajemnej (z wyko-
rzystaniem funkcji z Image Processing Toolbox)

% Ćwiczenie: Dopasowywanie obrazów metodą maksymalizacji informacji wzajemnej


close all; clear all;
I1 = imread('lena.bmp'); I1=s256(double(I1));
Iter=50; % liczba iteracji
728 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a)

b)

c) d)

Rys. 22.49. Przykład dopasowania dwóch obrazów cyfrowych: a) obrazy przed dopasowaniem oraz ich
histogram wzajemny, b) obrazy po zakończeniu dopasowywania oraz ich histogram wzajemny, c) moduł
różnicy obrazów przed dopasowaniem, d) moduł różnicy obrazów po dopasowaniu. Obrazy są rozmyte po-
nieważ przefiltrowano je dolnoprzepustowo w celu eliminacji maksimów lokalnych

% Wartości parametrów przekształcenia afinicznego (2), % wykorzystane do wstępnej „deformacji” obrazu


bx=1.3; % przeskalowanie w osi x
by=1.1; % przeskalowanie w osi y
bxy=0.1; % skręcenie
th=0.5; % obrót [radiany]
tx=5; % przesunięcie w osi x
ty=0; % przesunięcie w osi y

I2 = affine_tz(I1,[bx, by, bxy, th, tx, ty]); % początkowa deformacja obrazu

H = fspecial('average',[15 15]); % projekt filtra LP (ZRÓB SAM)


I1 = imfilter(I1, H, 'symmetric','same'); % wstępna filtracja dolnoprzepustowa
I2 = imfilter(I2, H, 'symmetric','same'); % obu obrazów (ZRÓB SAM: conv2())
Przykłady zastosowań 729

[NMp, PP] = MI2(I1,I2); Nmp % estymacja entropii wzajemnej


Pplog = log(PP+1); Pplog = abs(PPlog-max(PPlog(:))); % skalowanie histogramu
figure, subplot(1,3,1), imshow(I1,[]), title(’Obraz odniesienia I1’)
subplot(1,3,2), imshow(I2,[]), title(’Obraz I2 przed dopasowaniem do I1’)
subplot(1,3,3), imshow(PPlog,[]), title(’Histogram wzajemny przed dopasowaniu’)

bx=1; by=1; bxy=0; th=0; tx=0; ty=0; % startowe wartości parametrów


dbx=0.1; dby=0.1; dbxy=0.05; dth=0.3; dtx=1; dty=1; % transformacji afinicznej
par = [bx by bxy th tx ty]; % wartości
dpar = [dbx dby dbxy dth dtx dty]; % przyrosty

% Główna pętla − dopasowywanie wartości parametrów transformacji afinicznej


MM = MI2(I1,I2); % informacja wzajemna
poprawa = 0;
for k = 1:Iter; % kolejna iteracja
poprawa = poprawa+1;
for m = 1:6;
% wartości parametrów rosną
par1 = par;
par1(m) = par(m)+dpar(m); % przyrost wartości parametrów
Itemp = affine_tz(I2,par1); % kolejna transformacja afiniczna
Mmt = MI2(I1,Itemp); % kolejna wartość informacji wzajemnej
if(MMt>MM)
MM = Mmt;
par = par1; % zapamiętaj jeśli lepiej
poprawa = 0;
end
% wartości parametrów maleją
par1 = par;
par1(m) = par(m)-dpar(m); % zmniejszenie wartości parametrów
Itemp = affine_tz(I2,par1); % kolejna transformacja afiniczna
Mmt = MI2(I1,Itemp); % kolejna wartość informacji wzajemnej
if(MMt>MM)
MM = MMt;
par = par1; % zapamiętaj jeśli lepiej
poprawa = 0;
end
end
if poprawa>1, dpar=dpar/2; dpar(5)=1; dpar(6)=1; poprawa=0; end
if dpar(1)<1e-5, disp('Koniec'), break, end % czy koniec?
[k, MM, poprawa]
end
par' % pokaz „dopasowane” parametry

I20 = affine_tz(I2,par); % dopasuj obraz I2 do obrazu I1

[NMp, PP] = MI2(I1,I20); NMp % informacja wzajemna pomiędzy I1, I20


Pplog = log(PP+1); Pplog = abs(PPlog-max(PPlog(:))); % histogram wzajemny w skali log
% Rysunki
figure, subplot(1,3,1), imshow(I1,[]), title(’Obraz odniesienia I1’)
subplot(1,3,2), imshow(I20,[]), title(’Obraz I2 po dopasowaniu do I1’)
subplot(1,3,3), imshow(PPlog,[]), title(’Histogram wzajemny po dopasowaniu’)
figure, subplot(1,2,1), imshow(abs(I1-I2),[]), title(’Różnica I1-I2 początkowa’)
subplot(1,2,2), imshow(abs(I1-I20),[]), title(’Różnica I1-I20 końcowa’)

%===================================
function I2 = affine_tz(I1, parametry);
% obraz I2 = wynik transformacji afinicznej obrazu 1

bx = parametry(1); by = parametry(2); bxy = parametry(3);


th = parametry(4); tx = parametry(5); ty = parametry(6);

a11 = bxy*sin(th)+bx*cos(th);
a12 = bxy*cos(th)-bx*sin(th);
730 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a21 = by*sin(th);
a22 = by*cos(th);

A = [a11 a12 0; a21 a22 0; tx ty 1];


tform = maketform('affine',A);

s = 255; [vv uu] = size(I1);


vmax = round(vv/2); vmin=vmax-vv;
umax = round(uu/2); umin=umax-uu;

[I2,xdata, ydata] = imtransform(I1,tform,'bilinear','UData',[umin umax],'VData',...


[vmin vmax],'XData',[umin umax],'YData',[vmin vmax],'FillValues',s);

%========================
function [NMI,a] = MI2(I1,I2)
% Informacja wzajemna pomiędzy dwoma obrazami

a = jointhist(I1,I2); % oblicz histogram wzajemny między obrazami


[w,k] = size(a);

b= a./(w*k); % normalizacja histogramu wzajemnego


y_marg = sum(b); % histogram 1 (obrazu pierwszego)
x_marg = sum(b'); % histogram 2 (obrazu drugiego)

ids = find(y_marg~=0); Hy = -sum(y_marg(ids).*log2(y_marg(ids))); % entropia histogramu 1


ids = find(x_marg~=0); Hx = -sum(x_marg(ids).*log2(x_marg(ids))); % entropia histogramu 2
Hxy = -sum(sum(b.*log2(b+(b==0)))); % entropia histogramu wzajemnego
NMI = (Hx + Hy)/Hxy-1; % unormowana informacja wzajemna

%==========================
function h = jointhist(I1,I2)
% Histogram wzajemny obrazów dla 256 poziomów jasności o dynamice 0 − 255

I1 = double(uint8(I1)); % przejście na reprezentację double


I2 = double(uint8(I2)); %

N=256; h=zeros(N,N); [w k]=size(I1);


for i=1:w;
for j=1:k;
h(I1(i,j)+1,I2(i,j)+1) = h(I1(i,j)+1,I2(i,j)+1) + 1;
end
end

22.5.4. Detekcja linii w inżynierii materiałowej − transformacja Hougha

Automatyczna detekcja linii prostych stanowi jedno z typowych zadań analizy obrazów. Przy-
kładowo wykorzystuje się ją w inżynierii materiałowej podczas badań materiałów krystalicz-
nych metodą mikroskopii elektronowej. W tym podrozdziale przedstawiono jeden z algo-
rytmów do tego służących, który posłuży nam jako reprezentatywny przykład stosowanych
rozwiązań [Frąc05].
Jednym z ważniejszych problemów inżynierii materiałowej jest możliwość powtarzalnej pro-
dukcji materiałów krystalicznych o określonych właściwościach. Właściwości materiału krysta-
licznego są zdeterminowane przede wszystkim przez rozmiar oraz przestrzenną orientację do-
men krystalicznych, z których jest zbudowany dany materiał. O wielkości i położeniu tych do-
men wnioskuje się na podstawie detekcji par dyfrakcyjnych linii Kikuchiego, występujących na
obrazach uzyskiwanych ze skaningowej mikroskopii elektronowej. Ponieważ konieczna jest
analiza tysięcy obrazów, musi się ją przeprowadzać w sposób automatyczny.
Przykłady zastosowań 731

Na rysunku 22.50a jest przedstawione przykładowe zdjęcie poddawane analizie. W pierwszej


kolejności jest ono poddawane filtracji medianowej oraz operacji wyrównywania nierówno-
miernego oświetlenia (należy zwrócić uwagę, że środek obrazu jest jaśniejszy). Następnie jest
wykonywana filtracja splotowa obrazu z czterema filtrami kierunkowymi (gradientowymi) pod
kątami 45, 135, 225 oraz 315 stopni, mająca na celu wzmocnienie słabo widocznych linii. O-
trzymywane są w ten sposób cztery oddzielne obrazy, poddawane dalszemu przetwarzaniu. Je-
den z nich jest przedstawiony na rysunku 22.50b. W celu oddzielenia linii od tła każdy z czte-
rech obrazów kierunkowych jest na początku b inar yzo wany (przyporządkowanie pikselom
tylko wartości 0 albo 1) z wykorzystaniem automatycznego doboru wartości progowej oblicza-
nej na podstawie minimalizacji entropii. Potem jest na nim wykonywana seria operacji morfo-
logicznych: a) dylatacja, mająca na celu usunięcie przerw w liniach, które mogą powstać na
etapie binaryzacji, b) ścienianie, powodujące, że wszystkie linie uzyskują grubość 1 piksela,
oraz c) usunięcie izolowanych pikseli. Dla przykładu na rysunku 22.50c jest pokazany obraz
uzyskiwany w wyniku operacji ścieniania. Na końcu toru przetwarzania na każdym z czterech
przetworzonych obrazów kierunkowych wykonuje się transformację Hougha, sprowadzającą
się w uproszczeniu do sumowania wartości pikseli 0/1 wzdłuż interesujących nas linii prostych.
Jeśli wartość sumy jest większa od wartości progowej, przyjmuje się, że na obrazie znajduje
się linia. Na rysunku 22.50d pokazano przykładową transformatę Hougha, w której parametry
linii są wyrażone we współrzędnych biegunowych (r, θ). Piksele o dużej intensywności infor-
mują nas o występowaniu określonych linii w obrazie.
Dla dociekliwych. Wyprowadzenie algorytmu transformacji Hougha jest następujące [Pita93].
Każda linia obrazu:
y = ax + b (22.80)
(y w funkcji x dla parametrów a i b) jest jednoznacznie określona przez parę liczb (a, b), nato-
miast wszystkie linie przechodzące przez punkt obrazu (xk, yk) są dane równaniem yk = axk +
+ b lub b = −axk + yk. W tym drugim przypadku, w płaszczyźnie parametrów linii, b jest
w funkcji a dla zadanego xk i yk. Dlatego jeśli jakaś linia y = a0x + b0 przechodzi przez dwa
punkty (x1, y1) i (x2, y2), to w przestrzeni parametrów linie: b = −ax1 + y1 (linia 1) oraz b =
= −ax2 + y2 (linia 2) przecinają się w punkcie (a0, b0). Właściwość ta jest wykorzystana w algo-
rytmie obliczeniowym transformacji Hougha. Na początku są w nim dyskretyzowane wartości
parametrów a i b oraz jest tworzona macierz H(ai, bj), mającą zerowe wartości elementów.
Następnie dla każdego niezerowego piksela (xk, yk) obrazu po binaryzacji oraz dla ka żd e j
dyskretnej wartości ai jest obliczana związana z nią dyskretna wartość bi oraz jest zwiększana
o 1 wartość odpowiedniego elementu macierzy H(ai, bi):

bi = round(−ai⋅xk + yk) , H ( ai , bi ) = H (ai , bi ) + 1 (22.81)

Po zakończeniu obliczeń macierz H(ai, bj) przyjmuje duże wartości w punktach (ai, bj), w któ-
rych przecina się wiele prostych b = −axk + yk (w przestrzeni parametrów). W przypadku małej
liczby jasnych pikseli można zastosować następującą modyfikację powyższego algorytmu,
w której kolejno (po dyskretyzacji parametrów a i b oraz utworzeniu macierzy H(ai, bj) jak
poprzednio):
• pobiera się każdy niezerowy piksel o współrzędnych (xk, yk);
• prowadzi się wszystkie proste przechodzące przez ten punkt oraz wszystkie inne, niezerowe
punkty obrazu;
• oblicza się wartości współczynników (a, b) tych prostych i zaokrągla się je do (ai, bj);
• zwiększa się o 1 wartości elementów macierzy H na pozycjach (ai, bj), obliczonych w po-
przednim punkcie.
732 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b)

c) d)

− 300

− 200

− 100

r 0

100

200

300

0 50 100 150
θ

Rys. 22.50. Przykład analizy i przetwarzania obrazów w mikroskopii elektronowej: a) obraz analizowany,
b) wynik filtracji kierunkowej, c) wynik binaryzacji oraz operacji morfologicznych, d) wynik transformacji
Hougha (sumowanie wartości pikseli wzdłuż linii prostych, jednoznacznie zdefiniowanych przez wartości
parametrów (r, θ)). Jasne piksele transformaty Hougha oznaczają duże wartości zakumulowane, czyli obec-
ność linii w obrazie

Ponieważ przy wykorzystaniu zapisu (22.80) mamy problemy z reprezentacją linii pionowych,
częściej równanie linii przedstawia się we współrzędnych biegunowych:

r = x cos θ + y sin θ, − M 2 + N 2 ≤ r ≤ M 2 + N 2 , 0 ≤ θ ≤ π (22.82)

i wówczas parametry linii (r, θ) zastępują (a, b) (M, N − liczba pikseli obrazu w osiach x i y).
Dodatkową zaletą takiego postępowania jest fakt, że po odpowiedniej dyskretyzacji i prze-
kształceniach, można wykorzystać do obliczeń algorytm szybkiej transformacji Fouriera FFT.
Wykonanie tego pozostawiamy jednak jako „zadanie domowe” dla najambitniejszych Czytel-
ników. Polecamy także zapoznanie się z funkcją radon.m programu Matlab. Na rysunku
22.50d pokazano przykładową transformatę Hougha wyrażoną właśnie we współrzędnych bie-
gunowych. Współrzędne jasnych pikseli określają nam parametry linii wykrytych na obrazie.
Przykłady zastosowań 733

22.5.5. Algorytmiczna stabilizacja obrazu w zastosowaniach medycznych

W wielu zastosowaniach jest potrzebna algorytmiczna stabilizacja obrazu, czyli kompensacja


jego przesunięcia spowodowanego przez ruch kamery (drżenie ręki operatora) lub ruch obser-
wowanego (śledzonego) obiektu. Nowoczesne kamery i aparaty cyfrowe są już wyposażone
w takie udogodnienia. Stosuje się w nich dwa rodzaje stabilizacji: optyczną i cyfrową. Stabili-
zacja optyczna jest realizowana poprzez odpowiednie, kompensujące przesuwanie jednej
z soczewek w obiektywie lub przesuwanie matrycy CCD/CMOS w przypadku wykrycia ruchu
kamery, a tak właściwie jej przeciążenia detektowanego przez czujnik bezwładnościowy. Taka
kompensacja może być stosowana w obrębie pojedynczej ekspozycji i pozwala na wydłużenie
jej czasu. Drugi, cyfrowy rodzaj kompensacji stosuje się wyłącznie pomiędzy kolejnymi eks-
pozycjami (ramkami filmu) i tego problemu dotyczy ten podrozdział.
Wyobraźmy sobie lekarza oglądającego i zapisującego obraz strun głosowych pacjenta za po-
mocą kamery endoskopowej HSV (High-Speed Videoendoscopy) skanującej obraz kilka tysię-
cy razy na sekundę. Tak duża częstotliwość akwizycji obrazu jest konieczna ze względu na to,
że maksymalna częstotliwość otwierania tych strun wynosi kilkaset herców, a my z powodów
diagnostycznych chcielibyśmy dysponować kilkunastoma klatkami obrazu na jeden okres syg-
nału 2D. Na rysunku 22.51a jest przedstawiony przykładowy obraz strun głosowych w dwóch
fazach: otwarcia i zamknięcia. Obserwujemy zmianę położenia strun na obrazie, spowodowaną
ruchem samej kamery (ruch ręki lekarza) oraz ruchem pacjenta. Z badań wynika, że typowa
maksymalna częstotliwość przesuwania się obrazu podczas badania wynosi 15 herców, pod-
czas gdy minimalna interesująca nas częstotliwość tonu podstawowego jest równa około 70
a maksymalna około 400 herców (odpowiednio: 130, 29 klatek i 5 klatek filmu na okres zja-
wiska). Podczas zapisu lekarz wstępnie ogląda co dwudziestą klatkę filmu, a potem szczegó-
łowo analizuje nagranie w zwolnionym tempie, np. 10 − 20 klatek na sekundę. Umieszczanie
kamery na statywie jest niedopuszczalne ze względów bezpieczeństwa.
Aby automatycznie wyznaczyć wartości parametrów diagnostycznych charakteryzujących dy-
namikę otwierania i zamykania strun w d łuższym czasie, należy na samym początku skom-
pensować przesuwanie się położenia strun głosowych na obrazie. W tym celu dodatkowo, na
bieżąco wyznacza się różnicę pomiędzy każdymi dwoma kolejnymi obrazami oraz uśrednia ją
za okres cyklu otwarte-zamknięte-otwarte (okres ten można wyznaczyć na podstawie maksi-
mum funkcji autokorelacji sygnału zmienności średniej jasności wszystkich pikseli
w kolejnych ramkach). Uzyskuje się w ten sposób obraz przedstawiony na rysunku 22.51b, na
którym struny mają postać białych „obłoków” występujących w różnych miejscach. Teraz trze-
ba tylko wyznaczyć ich wzajemne przesunięcie, na przykład za pomocą poszukiwania maksi-
mum dwuwymiarowej, dyskretnej funkcji korelacji wzajemnej (22.30), (22.35). Niestety,
w przypadku obrazów obliczanie funkcji korelacji jest czasochłonne z powodu dużej liczby
mnożonych i sumowanych wartości. Dodatkowo, zakładając gwałtowne ruchy tak lekarza jak
i pacjenta, funkcję tę należałoby wyznaczyć dla wielu przesunięć. Poniżej przedstawiono roz-
wiązanie tego problemu, zaproponowane w [Cięc05], stanowiące rozwinięcie metody opisanej
w [Deli05].
Załóżmy, że f1(x, y) i f2(x, y) oznaczają dwie ciągłe funkcje, w naszym przypadku obrazy,
z których druga jest przesuniętą wersją pierwszej: f2(x, y) = f1(x + ∆x, y + ∆y). Bardzo optymis-
tycznie zakładamy więc takie samo przesunięcie każdego piksela, co nie jest prawdą w przy-
padku zniekształceń geometrycznych, wprowadzanych przez obiektywy szerokokątne stosowa-
ne w endoskopach. Przypomnijmy jednak, że działamy na uśrednionych obrazach różnico-
wych, mało różniących się w przypadku dwóch kolejnych „ekspozycji”, w których dodatkowo
obiekt znajduje się w przybliżeniu w punkcie centralnym obrazu. Naszym zadaniem jest zna-
734 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b)

Rys. 22.51. Oryginalny i przetworzony obraz endoskopowy strun głosowych: a) otwarte i zamknięte struny
głosowe w dwóch różnych położeniach x-y, b) uśrednione za okres tonu podstawowego obrazy różnicowe
strun głosowych w dwóch różnych położeniach x-y

a) b)

Rys. 22.52. Funkcja korelacji wzajemnej R(m, n) dwóch przetworzonych obrazów strun głosowych (różni-
cowych, uśrednionych), przesuniętych względem siebie: a) przesunięcie dx = dy = − 5 piksela, b) przesunię-
cie dx = dy = − 5,5 piksela

a) b)

Rys. 22.53. Funkcja kąta fazowego widma wzajemnego Ψ(k, l ) dwóch przetworzonych obrazów strun gło-
sowych, dla przesunięcia obrazów względem siebie o: a) ∆x = ∆y = − 5,5 piksela, b) ∆x = ∆y = − 0,5 piksela

lezienie tego przesunięcia {∆x, ∆y}. Jak wiadomo, w takim przypadku dwuwymiarowe trans-
formaty Fouriera F1(ωx, ωy) i F2(ωx, ωy) (22.7) obrazów f1(x, y) i f2(x, y) są ze sobą związane
następującą zależnością (analogicznie do (4.10) tylko 2D):
Przykłady zastosowań 735

j ( ωx ⋅∆x +ω y ⋅∆y )
F2 (ωx , ω y ) = F1 (ωx , ω y ) ⋅ e (22.83)

Dlatego jeśli wymnożymy F2(ωx, ωy) przez sprzężenie zespolone widma F1(ωx, ωy) i unormu-
jemy wynik, to po uwzględnieniu (22.83) otrzymamy:

F2 ( ωx , ω y ) F2 ( ωx , ω y ) ⋅ F1* ( ωx , ω y ) j ( ωx ⋅∆x +ω y ⋅∆y )


G12 ( ωx , ω y ) = = =e (22.84)
F1 ( ωx , ω y ) F2 ( ωx , ω y ) ⋅ F1 ( ωx , ω y )

Odwrotna transformata Fouriera (22.8) z G12 (ωx, ωy) jest równa (konsekwencja (4.10) i (4.28)
w świecie 2D):

( ) j ( ω ⋅∆x +ω y ⋅∆y ) 
g12 ( x, y ) = Fourier −1 G12 ωx , ω y  = Fourier −1  e x
 
= δ ( x + ∆x, y + ∆y )
(22.85)
czyli jest dwuwymiarowym impulsem Diraca, występującym na płaszczyźnie w punkcie
(− ∆x, − ∆y). Ta właściwość odgrywa podstawową rolę podczas detekcji przesunięcia obrazów.
W przypadku obrazów o skończonych wymiarach impuls Diraca przyjmuje postać dwuwymia-
rowej, przestrzennej funkcji typu sinc (4.27):

sin  π ( x + ∆x ) sin  π ( y + ∆y )


g12 ( x, y ) = ⋅ (22.86)
π ( x + ∆x ) π ( y + ∆y )

Dla obrazów dyskretnych (spróbkowanych) w równaniach (22.84) i (22.85) stosuje się, odpo-
wiednio, odwrotną i prostą dyskretną (szybką) transformację Fouriera DFT (FFT), w związku
z czym wynikiem naszej analizy jest spróbkowana funkcja (22.86). Jeśli obraz f2(x, y) jest
przesunięty w stosunku do f1(x, y) o całkowitą liczbę pikseli to otrzymujemy rysunek 22.52a,
w przeciwnym przypadku − rysunek 22.52b. Dlaczego na rysunku pierwszym jest „tak do-
brze”, kiedy na drugim jest „tak źle”? W tym miejscu nowicjusz w tematyce przetwarzania
sygnałów jest narażony na duże niebezpieczeństwo wyciągnięcia niepoprawnych wniosków,
znane już ze świata 1D (rysunek 8.4). Poprawna odpowiedź jest następująca: ponieważ
w pierwszym przypadku funkcja (22.86) jest próbkowana w miejscach przejść przez zero,
a drugim przypadku nie.
W języku Matlab implementacja algorytmu opisanego powyżej algorytmu nie nastręcza żad-
nych problemów (eps − stała dokładności obliczeń numerycznych):

F1 = fft2(f1); F2 = fft2(f2);
temp = F2.*conj(F1); G12 = temp./(abs(temp)+eps);
g12 = real(ifft2( G12 ));
[dy,dx] = find( g12 == max(max(g12)) );

Interpolując obraz z rysunku 22.52b można próbować wyznaczyć wartość przesunięcia pod-
pikselowego, jeśli takowe występuje. Ale jest też możliwe alternatywne rozwiązanie [Cięc05],
przedstawione poniżej. Dla obrazów dyskretnych zależność (22.83) przyjmuje następującą po-
stać:

F2 (k , l ) = F1 ( k , l ) ⋅ e j 2 π( k ⋅∆m / N k + l⋅∆n / N l ) (22.87)


736 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

gdzie k, l oznaczają odpowiednio indeksy wierszy i kolumn macierzy DFT obu obrazów, Nk
i Nl − liczbę wierszy i kolumn tych macierzy, a ∆m i ∆n − wielkość przestrzennego przesunię-
cia obrazów względem siebie. W związku z tym kąty fazowe widm Fouriera obrazów są zwią-
zane następującą zależnością:

 k l 
Φ [ F2 ( k , l ) ] = Φ [ F1 ( k , l ) ] + 2π  ∆m + ∆n  (22.88)
 Nk Nl 

lub alternatywnie:

( )
Ψ ( k , l ) = Φ [ F2 ( k , l ) ] − Φ [ F1 ( k , l ) ] = ) F2 ( k , l ) ⋅ F1* ( k , l ) = α ⋅ k + β ⋅ l (22.89)

gdzie

α = 2π ⋅ ∆m / N k , β = 2π∆l / N l (22.90)

Jak widać funkcja 2D Ψ(k, l ) jest płaszczyzną w przestrzeni 3D, tzn. jej punkty Ψ(ki, li) leżą na
płaszczyźnie. Jeśli wyznaczymy współczynniki α i β nachylenia tej płaszczyzny, to potem
z (22.90) możemy obliczyć estymatę wartości ∆m oraz ∆n podpikselowego przesunięcia obra-
zu f2(x, y) w stosunku do f1(x, y). Z kolei obliczenie wartości współczynników α i β sprowadza
się do rozwiązania w sensie średniokwadratowym równania postaci:

 k1 l1   Ψ ( k1 , l1 ) 
k 
l2  α   Ψ (k 2 , l2 ) 
 2  =  , Ax = b (22.91)
 # #   β   # 
   
kK lK   Ψ (k K , lK ) 

które jest dane wzorem:

x = ( AT A ) −1 AT ⋅ b (22.92)

W języku Matlab sprowadza się to do wykonania krótkiej instrukcji x = A\b. Im na większej


liczbie punktów (wartość K ) oprzemy naszą estymatę, tym będzie ona bardziej wiarygodna.
Niezbędne są dwa punkty. Ponieważ wartość kąta Ψ(k, l ) (22.89) monotonicznie rośnie (lub
maleje, decyduje znak ∆m i ∆n) wraz ze wzrostem wartości k i l, a oblicza się go za pomocą
funkcji arcus tangens (z iloczynu F2(k, l )F1*(k, l )), należy wybierać wartości kąta dla małych
wartości k i l. Na rysunku 22.53 pokazano przykładowy kształt płaszczyzn Ψ(k, l ). Po-
wierzchnię kąta fazowego Ψ(k, l ) z rysunku 22.53a otrzymano dla przesunięcia obrazów
∆x = ∆y = − 5,5 piksela i odpowiada ona funkcji g12(m, n) z rysunku 22.52b. Jak widać funkcja
kąta zmienia się w zakresie od − π do + π. Natomiast jeśli wykorzystamy informację zawartą we
współrzędnych maksimum funkcji g12(m, n) (22.85), (22.86) z rysunku 22.52b, częściowo
skompensujemy obraz f2(m, n) o wyznaczone w ten sposób przesunięcie całkowitoliczbowe
(u nas − 5 pikseli w osiach x i y) i dopiero potem zastosujemy metodę średniokwadratową
(22.89) − (22.92), to otrzymamy wynik przedstawiony na rysunku 22.53b, odpowiadający
przesunięciu częściowo skompensowanego obrazu f2(x, y) w stosunku do f1(x, y) − u nas − 0,5
piksela w obu osiach. Jak widać różnica jest zasadnicza.
Przykłady zastosowań 737

22.5.6. Systemy nawigacji wspomagające zabiegi medyczne

„Koniec wieńczy dzieło”, dlatego w ostatnim akapicie tego rozdziału powinna nastąpić seria
bajecznie kolorowych fajerwerków. Jestem szczęściarzem, ponieważ pracuję w zespole, który
po latach ciężkiej pracy uczestniczy obecnie we wspaniałym i ambitnym projekcie, będącym
właśnie takim reprezentatywnym przykładem złożoności systemów analizy, przetwarzania
i wizualizacji danych 2D i 3D.
Usiądźmy wygodnie w fotelu. Film, przecież mówimy o obrazach, zaczyna się dramatycznie:
u bohatera naszej opowieści pojawia się podejrzenie zmian rakowych w węzłach chłonnych le-
żących w okolicach drzewa oskrzelowego. Cały świat w jednej chwili usuwa mu się spod nóg.
Wkrótce jest skierowany na tomografię komputerową (CT) górnego odcinka dróg oddecho-
wych. Następnego dnia prowadzący go lekarz otrzymuje czarno-białe klisze oraz płytę CD
z jego danymi, stanowiącymi zeskanowany z zadaną rozdzielczością rozkład gęstości tkanek
w przestrzeni 3D. Zasiada wieczorem przed swoim komputerem, wczytuje zbiór zapisany
w formacie DICOM (Matlab go czyta!) oraz wirtualnie bada pacjenta oglądając różne przekro-
je jego danych. Nagle w okolicy głównego rozgałęzienia, tzw. kariny, dostrzega zastanawiają-
cą zmianę gęstości tkanek węzła chłonnego oraz jego powiększenie. Ponieważ zmiana ta znaj-
duje się za ścianą drzewa oskrzelowego, znaczy najlepsze miejsce nakłócia czerwonym marke-
rem. Już wie: jutro musi to miejsce odnaleźć. Zmęczony gasi światło. Następnego dnia nasz
bohater przychodzi do szpitala na zabieg transbronchialnej, cienkoigłowej biopsji aspiracyj-
nej. Miejscowe znieczulenie. Lekarz przez usta (lub nos) wprowadza mu bronchofiberoskop,
wyposażony w kamerę endoskopową, manipulator oraz kanał roboczy z igłą, służącą do po-
brania próbek tkanek do analizy laboratoryjnej. Porusza się w tunelu dróg oddechowych. Wi-
dzi jego ścianki. Wybiera miejsce nakłócia. Jednak waha się. Tutaj czy tam? Ponieważ ma tyl-
ko jeden kanał roboczy, decyduje się wyjąć igłę i włożyć specjalny ultrasonograf. Na końcu
bronchofiberoskopu pęcznieje balonik z płynem, który przylega do ścianek tchawicy. Lekarz
teraz nic nie widzi przez kamerę endoskopową, jednak dzięki ultrasonografowi patrzy „w głąb”
tkanek, widzi węzeł chłonny i podejrzane miejsce. Starając się nie zmieniać położenia bron-
chofiberoskopu wyjmuje ultrasonograf i ponownie wkłada igłę endoskopową. Jednak mu się to
nie udaje! Końcówka endoskopu przesuwa się. Pomimo tego podejmuje decyzję o wykonaniu
nakłócia. Cięcie!
Od początku. Akcja! Pacjent już jest znieczulony. Lekarz, nasz nowy bohater, włącza kompu-
ter wyposażony w interfejs wideo (framegrabber), wkłada płytę CD i uruchamia program
wspomagający zabieg. Dopiero teraz wkłada bronchofiberoskop przez usta pacjenta. Na ekra-
nie monitora widzi kilka obrazów: pierwszy z rzeczywistej kamery endoskopowej, drugi z wir-
tualnej kamery, zsyntezowany na podstawie danych tomograficznych pacjenta, trzeci − to
drzewo oskrzelowe z markerem, który został wprowadzony wczoraj wieczorem. Wprowadza
endoskop głębiej. Program pobiera kolejne obrazy z rzeczywistej kamery, porównuje je
i wstępnie estymuje jej przesunięcie (metoda log-polar lub optical flow, nie omawiana przez
nas). Następnie traktuje to położenie jako zgrubny punkt startowy do dokładniejszej estymacji:
na podstawie danych tomograficznych syntezuje wirtualny obraz drzewa oskrzelowego (obraz
z wirualnej kamery), który jest podobny do rzeczywistego obrazu endoskopowego. Porównuje
obraz rzeczywisty z endoskopu oraz wirtualny (image registration). Niestety, obrazy znacznie
się różnią! Trzeba zmienić położenie wirtualnej kamery. Program wykonuje to automatycznie.
Po kilku iteracjach obrazy różnią się już bardzo mało. Lekarz wie, że końcówka bronchofibe-
roskopu znajduje się w miejscu położenia wirtualnej kamery. Program przesuwa kursor na ry-
sunku drzewa oskrzelowego.
738 Projekt OBRAZ: podstawy analizy i przetwarzania sygnałów dwuwymiarowych

a) b)

c) d)

e) f)

Rys. 22.54. Przykład obrazów syntetycznych (a, b, c, d, e) oraz rzeczywistych (f) uzyskiwanych podczas
zabiegu transbronchialnej cienkoigłowej biopsji aspiracyjnej wspomaganej algorytmem wirtualnej broncho-
skopii: a) skanowanie pacjenta podczas tomografii komputerowej − zbieranie informacji o gęstości tkanek
w punktach leżących na równoległych płaszczyznach i jej zapisywanie do zbioru w formacie DICOM,
b) odtwarzanie i wizualizacja dowolnego przekroju danych pacjenta na podstawie zapisanego zbioru danych,
c) obraz drzewa oskrzelowego, odtworzony na podstawie danych tomograficznych pacjenta (drzewo oskrze-
lowe to zbiór punktów o podobnej gęstości − izopowierzchnia), d) siatka trójkątów tworzących wirtualną
powierzchnię drzewa oskrzelowego, wynik działania algorytmu marching cubes, e) oświetlona siatka trójką-
tów tworząca przestrzenny model drzewa oskrzelowego, f) rzeczywisty obraz z kamery endoskopowej,
przedstawiający kulminacyjny moment pobierania wycinka tkanek przez lekarza
Przykłady zastosowań 739

a) b)

Rys. 22.55. Dwa różne obrazy endoskopowe. Na ich podstawie trzeba wnioskować o wielkości przesunięcia
bronchofiberoskopu z kamerą. Do dyspozycji mamy, na przykład, metody log-polar, informacji wzajemnej
(obie w opisano w rozdz. 22.5.3) oraz optical flow Ponieważ metoda log-polar pracuje na niskoczęsto-
tliwościowej informacji zawartej w obrazach, dlatego oba obrazy są przefiltrowane dolnoprzepustowo

a) b)

Rys. 22.56. Przykład rzeczywistego obrazu endoskopowego (a) oraz odpowiadającego mu obrazu wirtualne-
go (b), odtworzonego z danych tomograficznych. Obrazy te są dopasowywane do siebie (image registration)
za pomocą metody informacji wzajemnej, opisanej w rozdz. 22.5.3, i w ten sposób dokładniej estymuje się
miejsce położenia kamery w drzewie oskrzelowym

Krok po kroku, lekarz powoli zmierza do celu. Na rysunku drzewa oskrzelowego kursor poło-
żenia endoskopu jest już coraz bliżej markera węzła chłonnego. W tym momencie po ostatnim
dopasowaniu obrazów jest zmieniany tryb wyświetlania: na obraz z rzeczywistej kamery nie
jest nałożony wirtualny obraz ścianek tunelu oskrzelowego tylko półprzeźroczysty obraz tka-
nek, które znajdują się za ścianą drzewa oskrzelowego. Lekarz widzi węzeł chłonny. Wykonuje
nakłócie, pobiera tkanki i trafia. Cięcie!
Tak już w niektórych szpitalach na świecie to wygląda. My powoli i systematycznie do tego
zmierzamy.
A teraz obejrzyjmy kilka kadrów z naszego filmu, zaczerpniętych z [Soch05a, Turc05]. Są one
przedstawione na rysunkach 22.54, 22.55 i 22.56. Proszę uważnie przeczytać podpisy pod ry-
sunkami. Ponieważ kamera endoskopowa ma obiektyw szerokokątny, otrzymany z niej obraz
jest zdeformowany. Dlatego przed dopasowaniem obrazu rzeczywistego z kamery i wirtualne-
go, otrzymanego na podstawie danych tomograficznych, trzeba także zdeformować obraz wir-
tualny, wykorzystując do tego znany model zniekształceń i wartości jego parametrów, wyzna-
czonych wcześniej dla używanej kamery (patrz rozdział 22.1).
Cięcie! Koniec. Napisy.
23
Projekt MODEM ADSL:
szybki dostęp do Internetu
po linii telefonicznej

Telefon, telewizja, teleinformatyka. Żyjemy w czasach burzliwego rozwoju cyfrowego zapisu


i transmisji danych. Sprzęt analogowy, bezcenny dla koneserów, szybko ustępuje miejsca roz-
wiązaniom cyfrowym. Cyfrowa muzyka i radio, cyfrowa telefonia i telewizja, cyfrowe sieci tra-
nsmisyjne. Oplata nas pajęczyna sieci teleinformatycznych, w tym komputerowych, z tysiącami
interaktywnych usług. W miedzianych przewodach telefonicznych, koncentrycznych kablach
telewizyjnych, światłowodach i powietrzu mkną strumienie bitów. Ale w jaki sposób jest
zorganizowana ta transmisja danych? Jakiego typu sygnały są wykorzystywane do przeno-
szenia informacji? W jaki sposób koduje się łańcuchy bitów?
Celem niniejszego rozdziału jest zapoznanie Czytelnika z metodami analizy, przetwarzania
i transmisji sygnałów cyfrowych, stosowanymi w szerokopasmowych, wielotonowych m o d e -
m a c h telefonicznych ADSL (Asymmetric Digital Subscriber Line) [ITU99], służących do
szybkiego dostępu do Internetu. W m o d e m a c h , to znaczy układach realizujących fizyczną
stronę transmisji danych cyfrowych, czyli operację MO-dulacji i DEM-odulacji (MO-DEM)
sygnałów, zależnej od wartości przesyłanych bitów. Modulacji innej , chociaż koncepcyjnie
podobnej, do tej, która jest powszechnie stosowana podczas transmisji analogowych sygnałów
radiowych typu AM (modulacja amplitudy). W Polsce modemy ADSL są wykorzystywane
między innymi w Neostradzie, usłudze Telekomunikacji Polskiej S.A. Dzięki rozszerzeniu pas-
ma częstotliwościowego modemy te mogą ponad 100-krotnie zwiększyć dostępną dla abonenta
przepływność bitową, wynoszącą tylko 56 kilobitów na sekundę dla tradycyjnych modemów
telefonicznych.
Szerokie omówienie technologii ADSL można znaleźć, między innymi, w pracach [Star99],
[Bing99], [Star02], krótkie zaś w [Weso03]. Jej następcą jest technika VDSL (Very high speed
Digital Subscriber Line), podnosząca oferowaną przez ADSL przepływność bitową dla krót-
kich linii telefonicznych z około 10 megabitów na sekundę (9 do abonenta i 1 od abonenta) do
ponad 50 megabitów na sekundę.
Należy pokreślić, że opisana w niniejszym rozdziale metoda równoległego przesyłania danych
na wielu równocześnie modulowanych, ortogonalnych sygnałach nośnych (OFDM − Orthogo-
nal Frequency Division Multiplexing) jest stosowana nie tylko w szerokopasmowych mode-
mach telefonicznych, ale także w komputerowych, lokalnych sieciach bezprzewodowych typu
Wi-Fi (Wireless Fidelity) i WiMAX (World Interoperability for Microwave Access), wykorzy-
stujących wybrane standardy rodziny IEEE 802.11 (a/g) i IEEE 802.16 oraz w cyfrowej
transmisji radiowej i telewizyjnej (T-DAB i T-DVB − Terrestrial Digital Audio/Video Broad-
casting).
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 741

23.1. Podstawy modulacji


Wszyscy wiemy, że w komputerze króluje bit, czyli najmniejsza jednostka informacji, przyj-
mująca jeden z dwóch stanów: „0” lub „1”. Bity są przechowywane w komórkach pamięci
elektrycznej komputera i przesyłane jego magistralami. Stan „0” to napięcie niskie, a „1” −
wysokie. Sekwencjami bitów, np. 10011011, są zapisywane instrukcje dla procesora oraz dane
potrzebne do wykonania programu. Bity są zapisywane na dyskietkach, dyskach, płytach CD
i DVD.
Ponieważ w pamięci komputera dane są przechowywane w postaci pojedynczych bitów, natu-
ralnym się wydaje, że pomiędzy różnymi urządzeniami (użytkownikami) także powinny być
transmitowane pojedyncze bity. Na rysunku 23.1 przedstawiono kilka z istniejących i stoso-
wanych obecnie metod takiej transmisji. Warunkiem jej sukcesu jest taktowanie nadajnika
i odbiornika zsynchronizowanymi sygnałami zegarowymi o identycznej częstotliwości, gene-
rowanymi przez przestrajane układy kwarcowe (rys. 23.1a). Na kolejnych rysunkach przedsta-
wiono wysyłany sygnał w przypadku transmisji sekwencji bitów 0100111 i zastosowania
następującej metody ich kodowania/modulacji (pierwsza litera odnosi się do oznaczenia na
rysunku 23.1):
b) klasyczna modulacja poziomu bez powrotu do zera (NRZ − Non-Return to Zero): „0” to na-
pięcie niskie, a „1” − wysokie, przełączane ujemnym zboczem zegara (rys. 23.1b);
c) modulacja poziomu z powrotem do zera typu przełączana jedynka (RZ − Return to Zero,
AMI − Alternate Mark Inversion): „0” to napięcie zerowe, a każde następne „1” to bipolarny
impuls przeciwnie skierowany o napięciu ujemnym lub dodatnim, przełączany ujemnym zbo-
czem zegara (rys. 23.1c);
d) modulacja zbocza, czyli kod Manchester: „0” − zbocze do góry sygnału przesyłanego, „1”
− zbocze do dołu tego sygnału, w obu przypadkach sprawdzanie kierunku przejścia odbywa się
podczas dodatniego zbocza sygnału zegarowego (rys. 23.1d);
e) modulacja (kluczowanie) amplitudy: wartość bitu decyduje o wysyłaniu („1”) lub też nie
(„0”) sygnału sinusoidalnego o zadanej częstotliwości (rys. 23.1e);
f) modulacja (kluczowanie) częstotliwości: wartość bitu decyduje o wysyłaniu fragmentu syg-
nału sinusoidalnego o wysokiej („1”) lub niskiej („0”) częstotliwości (rys. 23.1f);
g) modulacja (kluczowanie) fazy: wartość bitu decyduje o kącie fazowym wysyłanego frag-
mentu sygnału: „1” − jeden okres sygnału kosinusoidalnego, „0” − jego przesunięcie o 180
stopni (rys. 23.1g),
h) czterostanowa (dwubitowa) modulacja fazy, opisana poniżej.
W każdym przypadku interpretację stanów „0” i „1” można zamienić miejscami. W sieciach
komputerowych, np. typu Ethernet, stosuje się modulację poziomu lub zbocza, natomiast
w klasycznych modemach podłączanych bezpośrednio do linii telefonicznej − modulację am-
plitudy, częstotliwości i fazy. W warunkach rzeczywistych transmitowane sygnały są tłumione
przez medium, w którym „podróżują”: tym silniej im dłuższą drogę mają do pokonania oraz
w różny sposób dla różnych zakresów częstotliwości (silniej wyższe). W wiązkach telefonicz-
nych wzajemnie się także zakłócają oraz podlegają działaniu szumu. Odbiornik jest urządze-
niem pomiarowym, które ma dokonać analizy fragmentów sygnału oraz podjąć decyzję o tym,
jakie bity zostały nadane w kolejnych chwilach czasowych. Wysyłane sekwencje bitów można
zabezpieczyć dodatkowo przed losowymi błędami stosując tzw. korekcyjne kodowanie kana-
łowe (np. kody Hamminga lub splotowe), które umożliwia odtworzenie w odbiorniku popraw-
nych wartości bitów w przypadku wystąpienia nieznacznych błędów transmisji.
742 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

a)

b) 0 1 0 0 1 1 1

c) 0 1 0 0 1 1 1

0 1 0 0 1 1 1
d)

0 1 0 0 1 1 1
e)

0 1 0 0 1 1 1
f)

0 1 0 0 1 1 1
g)

01 00 11
h)

Rys. 23.1. Wybrane przykłady modulacji cyfrowych: a) sygnał zegara, b) unipolarna modulacja poziomu bez
powrotu do zera, c) bipolarna modulacja poziomu z przełączaną jedynką i powrotem do zera, d) modulacja
zbocza (kod Manchester), e) modulacja amplitudy, f) modulacja częstotliwości, g) dwustanowa (jednobito-
wa) modulacja fazy jednego okresu funkcji kosinus , h) czterostanowa (dwubitowa) modulacja fazy jednego
okresu funkcji kosinus
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 743

Oczywiście, w przedstawionych wyżej metodach dwustanowych z każdym stanem transmito-


wanego sygnału jest związany tylko jeden bit: 0 lub 1. Ale stan ten można zmieniać z bardzo
dużą częstotliwością (zegara taktującego) i osiągać w ten sposób dużą przepływność bitową
transmisji. Można jednak w prosty sposób rozwinąć przedstawione wyżej schematy do modu-
lacji (transmisji) wielobitowej: wystarczy tylko dopuścić możliwość przyjmowania przez syg-
nał nośny większej niż dwa liczby stanów amplitudy, częstotliwości i/lub fazy, np. czterech,
ośmiu lub szesnastu itd., a następnie umieć rozróżnić (wykryć, zdetektować) w odbiorniku ten
„stan”, przyjmujący jedną z czterech, ośmiu lub szesnastu wartości. Wówczas jednorazowo
nadaje się i odbiera się 2, 3 lub 4 bity. Odebrane bity są równe zapisanemu binarnie numerowi
odebranego stanu sygnału nośnego. Przykładowo, dla czterech stanów nośnej odbieramy sek-
wencje bitów 00, 01, 10 i 11, natomiast dla ośmiu stanów − 000, 001, 010, 011, 100, 101, 110,
111. Na rysunku 23.1h przedstawiono przykład czterostano wej (dwubitowej) modulacji
(kluczowania) fazy sygnału znanej jako 4-QAM (ang. Quadrature Amplitude Modulation).
Kombinacjom bitów:
00, 10, 11, 01
odpowiadają w niej następujące wartości kątów przesunięcia fazowego − φm kosinusoidy:
−45, −135, −225, −315
stopni (odpowiednio: − π/4, − 3π/4, − 5π/4, − 7π/4 radianów). Korzystając z wyrażenia na fun-
kcję kosinus sumy kątów (cos(α − β) = cosα⋅cosβ + sinα⋅sinβ), otrzymujemy:
xm ( t ) = cos ( 2πft − φm ) = am cos ( 2 πft ) + bm sin ( 2πft ) (23.1a)
gdzie
am = cos(φm ), bm = sin(φm ), φm = π / 4, 3π / 4, 5π / 4, 7π / 4 (23.1b)

Sygnał postaci (23.1a) składa się z dwóch składowych: synfazowej cos(2πft) i kwadraturowej
sin(2πft) (kosinus przesunięty o minus 90 stopni: cos(2πft − π/2) = sin(2πft)). Jeśli przedstawi-
my amplitudę sinusa bm w funkcji amplitudy kosinusa am dla różnych wartości kąta φm, to otrzy-
mamy okrąg o promieniu jednostkowym (cos2φm+ sin2φm = R = 1).
Na rysunku 23.2a przedstawiono ilustrację graficzną sygnału (23.1a) przyjmującego opisane
powyżej cztery stany. Przez analogię do zespolonego sygnału harmonicznego postaci:

e j 2 πft = cos ( 2πft ) + j sin(2πft ) (23.2)

współczynnik am sygnału kosinusoidalnego cos(2πft) w (23.1a) oznacza się także jako część
„rzeczywistą” (Realis) sygnału xm(t), a współczynnik bm sygnału sinusoidalnego sin(2πft) − ja-
ko jego część „urojoną” (Imaginaris). W przypadku występowania zakłóceń sygnał odebrany
ma inny promień i kąt niż sygnał nadany (rysunek 23.2b).
Idąc krok dalej, zwiększa się liczbę stanów nośnej i jednorazowo przesyłanych bitów przez
wprowadzenie dodatkowej zmienności amplitudy sygnału xm(t) (23.1), czyli promienia okręgu,
na którym występuje zmienność fazy:

xm,n (t ) = Rn cos ( 2πft − φm ) = am,n cos ( 2πft ) + bm,n sin ( 2πft ) (23.3)

Na rysunku 23.3a przedstawiono przypadek konstelacji stanów przyjmowanych przez nadawa-


ny sygnał dla modulacji 16-QAM: przesyłanych i rozróżnianych jest 16 różnych jego stanów,
charakteryzujących się trzema różnymi wartościami amplitudy oraz dwunastoma różnymi
wartościami kątów fazowych. Płaszczyzna wszystkich stanów jest dzielona tak, jak na rysunku
744 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

23.3b (linie przerywane). W środku każdego pola „szachownicy” znajduje się stan nadawany,
oznaczony przez „•”. Z powodu zakłóceń odbierany sygnał, oznaczony analogicznie jak na
rysunku 23.2b przez „{”, ma inną amplitudę i fazę. Transmisja bitów jest bezbłędna, jeśli syg-
nał będący wynikiem detekcji mieści się w przyporządkowanym mu polu. Liczba stanów −
pól szachownicy − powinna być dobrana z uwzględnieniem stosunku mocy sygnału do mocy
szumu SNR (Signal-to-Noise Ratio): duża w przypadku wysokiego SNR (słabe zakłócenia)
i mała dla niskiego SNR (silne zakłócenia). Dla tej samej wartości mocy szumu można po-
większyć rozmiar QAM poprzez zwiększenie mocy nadawanego sygnału. Rozmiar konstelacji
zależy również od docelowej stopy błędu oraz sposobu kodowania (QAM, PCM itd.).

a) b)
Imag (sin)
Imag (sin)
10 1 00
nadane
(a, b)
1 błąd
R

φ Real
odebrane
-1 0 1 (cos)

Real (cos)
11 -1 01
0 1

Rys. 23.2. Konstelacja stanów modulacji 4-QAM: a) cztery stany sygnału xm(t) = amcos(2πft) + bmsin(2πft),
am = cosφm i bm = sinφm, dla kątów φm = 45, 135, 225, 315 stopni, odpowiadające kombinacjom bitów: 00,
10, 11 i 01: b) błąd pomiędzy sygnałem nadanym „•” i odebranym „{”: inny promień R i kąt φ

a) Imag (sin) b) Imag (sin)

1011 1001 1110 1111

1010 1000 1100 1101


Real Real

0001 0000 0100 0110


(cos) (cos)

0011 0010 0101 0111

Rys. 23.3. Konstelacja stanów sygnału typu 16-QAM: „•” − możliwe stany sygnału nadawanego (współ-
czynniki cosinusa i sinusa), „{” − wartości sygnału odebranego w odbiorniku (są one inne niż wartość nada-
na z powodu zakłóceń transmisji, ale mieszczą się w polu przyporządkowanemu nadawanemu symbolowi
dla poprawnie dobranej konstelacji − szachownicy)

Podczas inicjalizacji modemy adaptacyjnie dobierają wielkość konstelacji, od 2-QAM (2 sta-


ny) do nawet 128-QAM (128 stanów), drogą negocjacji. Przykładowo, nadajnik zaczyna od
wysyłania sygnału testowego 128-QAM, znanego odbiornikowi, i w przypadku zwrotnego sy-
gnalizowania błędów przez odbiornik zmienia konstelację na mniejszą. Powyższe kroki są po-
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 745

wtarzane dopóki odbiornik nie zgłosi poprawnej detekcji. Szybszy sposób inicjalizacji mode-
mu polega na zmierzeniu SNR w dekoderze dla sygnału testowego, wyznaczeniu optymalnej
konstelacji i przesłaniu tej informacji do kodera (wymaga to tylko jednokrotnej komunikacji).
W przypadku wystąpienia chwilowych, silniejszych zakłóceń, wartości amplitudy i fazy syg-
nału odebranego mogą znacznie różnić się w stosunku do sygnału nadanego. Wówczas naj-
częściej jest niepoprawnie dekodowany na szachownicy konstelacji nie stan nadany tylko jeden
ze jego sąsiadów („{” z rysunku 23.3b wychodzą wówczas poza granice kwadratowego pola,
przyporządkowanego stanowi nadanemu). Wówczas jest odczytywany inny numer stanu i inna
związana z nim sekwencja bitowa. Aby zminimalizować liczbę przekłamanych bitów, numery
sąsiednich stanów p o wi n n y się różnić tylko jednym bitem. Niestety spełnienie tego wymaga-
nia nie jest możliwe dla wszystkich stanów. Jak widać na rysunku 23.3a sytuacja taka występu-
je tylko dla stanów leżących w tych samych ćwiartkach płaszczyzny, po jej podzieleniu przez
osie układu współrzędnych.
Opisany powyżej sposób modulacji jest stosowany w klasycznych rozwiązaniach modemów
telefonicznych. W przypadku modulacji M-QAM jest w nich używany jeden sygnał nośny
o częstotliwości mieszczącej się w paśmie akustycznym sygnału mowy ludzkiej, czyli do 3400
herców. Na przykład w protokole V.32 sygnał nośny, przełączany w fazie, ma częstotliwość
1800 herców. W protokołach transmisji V.32, V.34 i V.92 maksymalne prędkości odpowied-
nio wynoszą 9600, 28800 i 56 000 bitów na sekundę.

23.2. Cyfrowe modulacje wielotonowe


W sytuacji, kiedy sieci komputerowe stawały się coraz szybsze, a oferowane przez nie szyb-
kości transmisji danych − coraz większe, pojawił się problem tzw. „ostatniej mili”, czyli pro-
stego podłączenia końcowego użytkownika do sieci i zaoferowania mu dużych szybkości
transmisji danych, zwłaszcza w kierunku do niego („w dół”) a nie od niego („w górę”). Asy-
metrię łącza sugerowano wychodząc ze słusznego założenia, że w większości przypadków
statystyczny „Kowalski” jest odbiorcą, a nie nadawcą danych w sieci. Ponieważ do większości
mieszkań (domów) są doprowadzone przewody telefoniczne, postanowiono je wykorzystać.
W centralach usunięto dławiki ograniczające pasmo częstotliwościowe przesyłanego sygnału
do 3400 herców oraz zaczęto równocześnie, przesyłać dane na wielu sygnałach nośnych
(„szerokopasmowo”), w rzeczywistości na setkach (standard ADSL), a nawet tysiącach (stan-
dard VDSL) takich sygnałów. W ten prosty sposób, tylko poprzez zwiększenie pasma często-
tliwościowego transmisji, zaadaptowano stare rozwiązania, dobrze sprawdzone w prostych
modemach telefonicznych, wykorzystujących tylko jedną nośną („wąskopasmową”), i zwięk-
szono przepływność bitową z 56 kilobitów na sekundę do kilku, kilkunastu lub kilkudziesięciu
megabitów na sekundę, w zależności od konkretnego rozwiązania. Podstawowym zadaniem
przyszłych standardów będzie podniesienie samej efektywności (gęstości) transmisji, tzn.
zwiększenie liczby przesyłanych bitów przypadających na 1 Hz jej pasma.
Na rysunku 23.4 pokazano ogólną koncepcję szerokopasmowych modemów telefonicznych.
Dane cyfrowe, czyli bity, są w nich przesyłane na wielu nośnych równocześnie (rys. 23.4a). Na
każdej nośnej transmisja może odbywać się albo tylko w jedną stronę (do lub od użytkownika)
albo równocześnie w obie strony. W tym drugim przypadku konieczne jest stosowanie proce-
dur usuwania echa, czyli kopii sygnału wysłanego na danej nośnej, która prawie z pełną mocą
wraca z powrotem do nadawcy (patrz rozdział 14.7, przykład 3), w wyniku odbijania się syg-
nału wysyłanego w części analogowej nadajnika (zaniedbujemy w tym miejscu dyskusję
innych, stłumionych i opóźnionych odbić od końca/końców/rozgałęzień/rozsprzęgaczy
linii).
746 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

a)
Modem - wiele sygnałów nośnych

częstotliwość
fmin .................... ....fk−1..fk..fk+1...........fm−1..fm..fm+1............ .......... fmax f [kHz]

Nośna fk+1
b) Bity:
b3b2b1b0 (ak+1, bk+1)
ak+1cos(Ωk+1n) + bk+1sin(Ωk+1n)
(cos, sin)

Nośna fk
Bity: Wysyłany
b5b4 (ak, bk) sygnał x(n)
akcos(Ωkn) + bksin(Ωkn)
(cos, sin)

Nośna fk−1
Bity:
b9b8b7b6 (ak−1, bk−1)
ak−1cos(Ωk−1n) + bk−1sin(Ωk−1n)
(cos, sin)

Rys. 23.4. Ilustracja zasady pracy modemu szerokopasmowego z wieloma nośnymi: a) podział pasma czę-
stotliwościowego dla wielu sygnałów nośnych, równocześnie przesyłających dane, b) generacja transmi-
towanego sygnału jako sumy równocześnie modulowanych wielu nośnych,Ωk = 2πfk/fpróbkowania

Ponieważ każda nośna ma inną częstotliwość i w związku z tym, w ogólności, inny poziom
zakłóceń transmisji, dla każdej z nich są dobierane tym mniejsze rozmiary konstelacji M-QAM
(23.3) im zakłócenia są silniejsze (patrz pkt. 23.6.5 − wzór (23.28)). W konsekwencji na każ-
dej nośnej w jednostce czasu jest przesyłana różna liczba bitów. Na rysunku 23.4b przedsta-
wiono generację trzech przykładowych nośnych (sygnałów synfazowo-kwadraturowych) o pul-
sacjach Ωk−1, Ωk i Ωk+1, z których pierwsza i ostatnia pracują na konstelacji 16-QAM (małe
zakłócenia), środkowa zaś na konstelacji 4-QAM (duże zakłócenia). Nośne te są następnie
sumowane i łącznie przesyłane przez kanał jako jeden sygnał x(n). W odbiorniku należy zde-
kodować przesyłane stany poszczególnych nośnych, czyli odczytać binarnie numery w zwią-
zanych z nimi konstelacjach. Sprowadza się to do pomiaru amplitudy i fazy każdej z nośnych
i znalezienia reprezentanta „pomiaru” na jej szachownicy konstelacji (rys. 23.3a).
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 747

S(k) s(n) x(n) x(t) ξ(t) y(t) y(n) ye(n) Ye(k) Se(k)
szum
..010.. TEQ ..010..
QAM IDFT P C/A linia A/C e(n) DFT FEQ QAM-1
h(t) P-1

Rys. 23.5. Uproszczony schemat praktycznej realizacji układu transmisji z wieloma nośnymi. Oznaczenia:
QAM i QAM−1 − koder i dekoder konstelacji, IDFT i DFT − odwrotna i prosta dyskretna transformacja Fou-
riera, P i P−1 − dodanie i usunięcie tzw. cyklicznego prefiksu, czyli powtórzenie wysyłanego sygnału lub jego
fragmentu, C/A i A/C − przetwornik cyfrowo-analogowy i analogowo-cyfrowy, TEQ − korektor czasowy,
skracający odpowiedź impulsową kanału, FEQ − korektor częstotliwościowy, usuwający amplitudowe
i fazowe zniekształcenia wprowadzone przez kanał oraz korektor TEQ

W praktyce transmisja wielotonowa jest realizowana według schematu przedstawionego na ry-


sunku 23.5. Wejściowy strumień bitów (np. ...110101110...) jest dzielony na fragmenty. Otrzy-
mane w ten sposób grupy bitów (np. ..., 1101, 01, 1100, ...) są interpretowane jako numery
stanów konstelacji poszczególnych nośnych, w wyniku czego wpływają na ich amplitudę i fa-
zę. Każda nośna otrzymuje tym więcej bitów im mniej jest zakłócana. Wysyłany sygnał czaso-
wy otrzymuje się w wyniku: odwrotnej dyskretnej transformacji Fouriera zadanych stanów noś-
nych (modulacja w amplitudzie sygnałów sinus i kosinus o różnych częstotliwościach i ich su-
mowanie), odpowiedniej modyfikacji uzyskanego wyniku (dodanie cyklicznego prefiksu, omó-
wione dalej) oraz przetworzenia sygnału cyfrowego na analogowy przez przetwornik C/A. Na-
stępnie sygnał wędruje przez kanał transmisyjny. Linia telefoniczna może być traktowana jako
układ liniowy niezmienny w czasie. W związku z czym transmitowany sygnał zostaje spleciony
z odpowiedzią impulsową linii. Dodatkowo dodają się do niego różne zakłócenia. W odbior-
niku sygnał jest z powrotem przetwarzany z postaci analogowej do postaci cyfrowej przez
przetwornik A/C. Następnie jest odwrotnie modyfikowany w stosunku do nadajnika (usunięcie
prefiksu dodanego w nadajniku) oraz poddany dyskretnej transformacji Fouriera (demodulacja
amplitud nośnych sinusoidalnych i kosinusoidalnych). Otrzymane w ten sposób wartości amp-
litudy i fazy poszczególnych nośnych muszą zostać podzielone przez odpowiednie współ-
czynniki wypadkowej charakterystyki częstotliwościowej wszystkich elementów kanału trans-
misyjnego, ponieważ widmo sygnału zostało zmienione w wyniku przejścia przez te elementy.
Ostatnim krokiem jest znalezienie najbliższego reprezentanta na płaszczyźnie konstelacji
każdej z nośnych (zaokrąglenie do najbliższego stanu) oraz binarne odczytanie jego numeru,
czyli przesłanych bitów.

Transmisja jest zorganizowana w sposób blokowy: za każdym razem jest syntezowana jedna
ramka danych, czyli sygnał będący sumą wszystkich, „przeskalowanych” nośnych. Dodana
modyfikacja sygnału przed przetwornikiem C/A w nadajniku (polegająca na powtórzenia całe-
go sygnału zsyntezowanego w wyniku IDFT lub jego fragmentu) oraz po przetworniku A/C
w odbiorniku (czyli usunięcie części dodanej) ma na celu wymuszenie realizacji sp lo tu ko -
ło wego odpowiedzi impulsowej linii transmisyjnej z poszczególnymi, o d d z i e l n y m i p a -
k i e t a m i (blokami, ramkami) danych w trakcie fizycznie zachodzącego s p l o t u l i n i o we g o
z c a ł y m s y g n a ł e m . Zaletą zachodzenia splotu kołowego w odniesieniu do fragmentów syg-
nału jest występowanie iloczynu widm DFT: kanału oraz pojedynczych fragmentów, czyli wy-
syłanych konstelacji. W odbiorniku korekcja zniekształceń amplitudowych i fazowych wpro-
wadzanych przez kanał jest wówczas bardzo prosta, wystarczy tylko podzielić DFT otrzyma-
nego sygnału przez DFT odpowiedzi impulsowej kanału. Oczywiście, odpowiedź tę trzeba
znać albo umieć zmierzyć (oszacować). Podczas fazy inicjalizacji modemu jest dokonywana
estymacja odpowiedzi impulsowej kanału oraz synchronizacja nadajnika i odbiornika, umoż-
liwiająca skorzystanie z walorów splotu kołowego sygnałów.
748 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

23.3. Standard ADSL


Metoda wielotonowej, szerokopasmowej transmisji danych, przedstawiona na rysunku 23.5,
została zaimplementowana w standardzie ADSL (Asymmetric Digital Subscriber Line), doty-
czącym szerokopasmowych modemów dla sieci telefonicznych jak i kablowych (telewizja ka-
blowa). Standard ten zatwierdziła Międzynarodowa Unia Telekomunikacyjna ITU (Internatio-
nal Telecommunication Union) w grudniu 1998 roku jako rekomendację G.922.1 [ITU99].
Zawiera on pełną specyfikację modemu wraz z opisem warstwy fizycznej i restrykcjami doty-
czącymi sposobu działania.
Modemy ADSL należą do szerokiej rodziny modemów oznaczanych jako xDSL, do której za-
licza się: ISDN (Integrated Services Digital Network), HDSL (High bit rate Digital Subscriber
Line), ADSL (Asymmetric Digital Subscriber Line), VDSL (Very high speed Digital Subscri-
ber Line), SDSL (Single line Digital Subscriber Line), SHDSL (Symmetric high bit rate Digi-
tal Subscriber Line). Są to rozwiązania (technologie) starsze i nowsze od ADSL. Używany
obecnie termin ADSL to system ADSL-3, umożliwiający transmisję sygnałów z przepusto-
wością do około 9 megabitów na sekundę „w dół” do abonenta oraz do około 1 mega-
bita na sekundę „w górę”, czyli od abonenta.

Tab. 23-1. Podstawowe parametry modemów rodziny DSL

System Przepustowość Tryb Zastosowanie


transmisji
ISDN 160 kbit/s Duplex usługi głosowe, transmisja danych

HDSL 2,048 Mbit/s Duplex dostęp do sieci Internet, zwielokratnianie


kanałów głosowych
ADSL 1,5 ÷ 9 Mbit/s do abonenta wideo na żądanie, zdalny dostęp do sieci
do 1 Mbit/s od abonenta Internet, interaktywne usługi multimedialne
VDSL 13 ÷ 52 Mbit/s do abonenta jw. + HDTV (High Definition TeleVision)
do 2,3 Mbit/s od abonenta

Scenariusz transmisji z rysunku 23.5 jest realizowany w standardzie ADSL w układzie przed-
stawionym na rysunku 23.6. Zasadniczą cechą technologii ADSL jest dostawa cyfrowych usług
szerokopasmowych przez istniejącą abonencką linię telefoniczną (skrętkę miedzianą), z za-
chowaniem dotychczasowych, analogowych usług telefonicznych klasy POTS (Plain Old Tele-
phone Service). Ta popularna i najstarsza usługa zajmuje pasmo przenoszenia w kanale do
częstotliwości około 4 kiloherców (dokładniej pasmo w zakresie częstotliwości 300 ÷ 3400
herca). Pasmo, z jakiego korzysta ADSL, mieści się w granicach od 0 do 1,104 megaherca.
Z widma tego wydzielono zakres od 0 do 4 kHz w celu umożliwienia zwykłej transmisji gło-
sowej podczas korzystania z modemu. Prowadzenie rozmowy telefonicznej nie ma żadnego
wpływu na szybkość jak i jakość transferu danych. Rozdzielanie i łączenie sygnałów analogo-
wych części „telefonicznej” i „modemowej” dokonuje się w (roz)sprzęgaczach (splitter), u-
mieszczanych po obydwu stronach łącza ADSL i wyposażonych w aktywne filtry pasmowe
o odpowiednich charakterystykach przenoszenia: dolnoprzepustowej (poniżej 3,4 kHz) dla
telefonu i górnoprzepustowej (powyżej 4,8 kHz) dla modemu. Widmo częstotliwości od 26
kHz do 1,104 MHz podzielono na podpasma o szerokości 4312,5 Hz. Część z nich jest uży-
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 749

Komputer Centrala - dane Internet

Modem Modem
ADSL ADSL

Filtr Filtr
górnoprzepustowy górnoprzepustowy

linia telefoniczna

Filtr Filtr
dolnoprzepustowy dolnoprzepustowy

sieć
Telefon analogowy Centrala - rozmowa
telefoniczna
Rys. 23.6. Sprzętowa realizacja układu transmisji danych z modemami wielotonowymi ADSL

wana do transmisji od abonenta w kierunku sieci („upstream”), a część do transmisji do abo-


nenta („downstream”).
Pierwszym sposobem podziału dostępnego pasma częstotliwościowego jest jego rozdzielenie
na dwie niezachodzące na siebie części z uwzględnieniem pasma ochronnego pomiędzy nimi,
czyli multipleksowanie danych wychodzących i przychodzących poprzez podział częstotli-
wości (FDM – Frequency Division Multiplexing). Pasmo od 26 do 120 kHz (6 ÷ 28 nośna) jest
wówczas wykorzystywane do nadawania, natomiast częstotliwości od 155 do 1104 kHz (36 ÷
÷ 256 nośna) − do odbioru (dodatkowo stosuje się wówczas filtry do odseparowania strumienia
„w górę” i „w dół”). Sytuacja taka jest przedstawiona na rysunku 23.7a.
Drugim sposobem jest częściowe nakładanie się pasm częstotliwościowych danych wysyłanych
i odbieranych: 26 do 138 kHz dla nadawania (6 ÷ 32 nośna) oraz 26 do 1104 kHz dla odbioru
(6 ÷ 256 nośna), co jest pokazane na rysunku 23.7b. Z tego powodu w kanałach wspólnych od
6 do 32 konieczne jest zastosowanie metod kompensacji echa (EC − Echo Canceling), a do-
kładniej ich pochodnej nazywanej EC/FDM. Zwykłe metody usuwania echa EC stosuje się
w przypadku transmisji danych w obydwu kierunkach w całym paśmie użytecznym, natomiast
metody EC/FDM – są dedykowane dla transmisji dwukierunkowej przeprowadzanej tylko
w pewnej, wybranej części widma częstotliwościowego. Usuwanie echa wymaga zastosowania
dodatkowego bloku logicznego w modemie, który byłby odpowiedzialny za separację syg-
nałów we wspólnym zakresie pasma. Podstawy adaptacyjnego usuwania echa przedstawiono
w rozdziale 14.7. Jego istota polega na odejmowaniu echa sygnału wysyłanego od sygnału,
który jest w tym samym czasie odbierany. Pomimo większego skomplikowania budowy mode-
mu z nakładaniem się widm, to właśnie on jest częściej stosowany ze względu na większą
wydajność. Dlaczego tak się dzieje? Ponieważ tłumienie kanału rośnie wraz z częstotliwością,
to wykorzystanie do odbioru niżej położonych pasm częstotliwościowych (o większym
współczynniku SNR i większej przepustowości bitowej) znacząco zwiększa ilość danych
odbieranych.
750 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

a) Dane wysyłane Strefa Dane odbierane


Telefon 64 − 640 kb/s ochronna 0,5 – 8 Mb/s

6 ....................... 28 36 ........................................... 256 nr nośnej


0 ... 4 26 ..................... 120 155 ......................................... 1104 f [kHz]

b)
Dane wysyłane
Telefon Dane odbierane

6 ................................ 32 ........................................................... 256 nr nośnej


0 ... 4 26 ............................. 138 ......................................................... 1104 f [kHz]
Rys. 23.7. Metody podziału pasma w modemach ADSL: a) rozdzielenie pasma nadawczego i odbiorczego ze
strefą ochronną, b) częściowe pokrywanie się pasma nadawczego i odbiorczego − konieczność zastosowania
układów kasowania echa

W procesie aktywacji modemy na obydwu końcach linii informują się wzajemnie o potrzebie
zaistnienia połączenia. Modem próbujący nawiązać połączenie wysyła sygnał trwający 32 mili-
sekundy na jednej z czterech możliwych częstotliwości: 189,75 kHz; 207 kHz; 224,25 kHz lub
258,75 kHz. Sygnał ten jest nadawany z mocą – 4 dBm przez pierwsze 16 ms, a przez na-
stępne 16 ms z mocą równą – 28 dBm. Modem po odebraniu sygnału wysyła potwierdzenie na
jednej z trzech możliwych częstotliwości: 34,5; 43,125 lub 60,375 kHz.

Dygresja. W telekomunikacji poziom mocy sygnału zwyczajowo wyraża się w jednostkach


oznaczanych jako dBm, czyli decybelach odniesionych do 1 miliwata (1/1000 wata). Jeśli
przez P oznaczymy moc sygnału wyrażoną w watach, to poziom mocy sygnału SdBm wyrażony
w dBm jest z nim związany w sposób następujący:
1
SdBm = 10log10 (1000 ⋅ P ) , P = ⋅ 10SdBm /10 (23.4)
1000
Sygnał 1 mW ma poziom mocy 0 dBm. Sygnały słabsze niż 1 mW mają ujemne wartości dBm,
a sygnały silniejsze niż 1 mW − wartości dodatnie. Z kolei dBm/Hz jest to poziom mocy od-
niesiony do 1 miliwata przypadającego na 1 herc pasma częstotliwościowego sygnału.
W związku z tym mamy:
1000 ⋅ P ∆f
SdBm / Hz = 10log10 , P= ⋅ 10SdBm/Hz /10 (23.5)
∆f 1000
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 751

23.4. Modulator-demodulator DMT


Załóżmy, że kanał transmisyjny jest układem liniowym. Wówczas, zgodnie z rozdziałem 5, na
jego wyjściu otrzymamy wynik splotu sygnału wejściowego x(t) i odpowiedzi impulsowej ka-
nału h(t):
+∞
y (t ) = ∫ x ( τ)h(t − τ)d τ (23.6)
-∞

co w dziedzinie częstotliwościowej będzie odpowiadało iloczynowi widm Fouriera:


Y ( f ) = X ( f )H ( f ) (23.7)

Oczywistym więc jest, że kanał będzie wpływał na widmo sygnału odebranego, jego amplitudę
i fazę, w różny sposób dla różnych częstotliwości, i powodował detekcję innych stanów na
diagramie konstelacji niż te, które zostały nadane. Dodatkowy problem stwarza fakt, że sygnał
nadawany ma strukturę blokową, gdyż składa się z fragmentów, będących wynikiem odwrotnej
transformacji Fouriera IDFT, ułożonych jeden za drugim. W takiej sytuacji odpowiedź impul-
sowa kanału podczas splotu może „widzieć” (obejmować) kilka bloków i wówczas jego wynik
może zależeć od danych przesyłanych w sąsiednich blokach, a tak być nie powinno. Opisana
powyżej sytuacja jest przedstawiona na rysunku 23.8a. Najprostszym rozwiązaniem odseparo-
wania od siebie kolejnych bloków danych na wyjściu jest ich powtórzenie podczas nadawania,
co jest pokazane na rysunku 23.8b. Oznacza to, że sygnał po operacji IDFT a przed
przetwornikiem C/A jest w bloku P powielany (patrz rysunek 23.5). Jeśli odpowiedź impulso-
wa kanału nie jest dłuższa od czasu trwania pojedynczego bloku danych, to wówczas jej splot
z drugim blokiem danych zależy też od bloku pierwszego, czyli od tego samego sygnału.
Wówczas zaczynając od początku drugiego bloku splot liniowy staje się splotem kołowym,
opisanym dokładnie w rozdziale 13.4 dla sygnałów dyskretnych. W związku z tym po sprób-
kowaniu sygnału w odbiorniku jest prawdziwa zależność (13.12) dla drugiego bloku, czyli
przejście sygnału przez kanał opisuje sp lo t ko ło wy dyskretnych wersji obu sygnałów.
Z właściwości splotu dyskretnej transformacji Fouriera (rozdz. 8.1.4) wynika, że takiemu splo-
towi odpowiada iloczyn widm DFT sygnałów splatanych! A więc jesteśmy już w domu. Należy
w odbiorniku z s y n c h r o n i z o wa ć się z początkiem drugiego bloku, pobrać wszystkie nale-
żące do niego próbki, a następnie wyznaczyć jego dyskretną transformatę Fouriera. Ponieważ
jest ona wówczas równa iloczynowi DFT odpowiedzi impulsowej kanału i DFT transmitowa-
nego sygnału, należy ją podzielić przez DFT odpowiedzi impulsowej kanału i otrzymać w ten
sposób transmitowane dane:
DFT [ y (k )]
DFT [ y (k )] =DFT [ x (k )] ⋅ DFT [ h( k )] ⇒ DFT [ x( k )] = (23.8)
DFT [ h (k )]

Przedstawiona powyżej operacja jest realizowana w bloku korektora częstotliwościowego FEQ


(Frequency EQualizer) z rysunku 23.5, odtwarzającym wysłane numery stanów poszcze-
gólnych nośnych, czyli po ich zapisie binarnym − transmitowane bity.
Oczywiście, jeśli odpowiedź impulsowa kanału jest krótsza niż długość przesyłanego bloku
danych i po spróbkowaniu ma M próbek, to cykliczny prefiks dodawany w bloku P nadajnika
(patrz rysunek 23.5) może być krótszy i równy P = M − 1 próbek. Wówczas wystarczy tylko
skopiować P ostatnich próbek transmitowanego sygnału na jego początek. Sytuacja taka jest
przedstawiona na rysunkach 23.8c i 23.8d. Przypomnijmy, w odbiorniku należy się zsynchro-
nizować nie z początkiem prefiksu tylko z początkiem właściwego bloku danych, składającego
się z N próbek.
752 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

a) odp. impulsowa linii h(t)

czas t

dane x(t)

czas t

ramka k−1 ramka k ramka k+1 ramka k+2

b) h(t)

czas t

x(t)

czas t

kopia oryginał kopia oryginał

c) dane x(t)

czas t

P=32 N=512 P=32 N=512


prefiks dane prefiks dane

d) he(t)
czas t

dane x(t)

czas t

k-ta ramka (k+1)-sza ramka

Rys. 23.8. Objaśnienie celowości dodawania tzw. cyklicznego prefiksu do każdego transmitowanego bloku
danych (oznaczenia sygnałów z rys. 23.5): a) brak prefiksu, b) maksymalny prefiks − cykliczne podwojenie
transmitowanych danych dla długiej odpowiedzi impulsowej kanału, c) krótki prefiks − kopiowanie frag-
mentu danych z końca bloku na jego początek, d) krótki prefiks − cykliczny splot transmitowanych danych
z krótką (skróconą) odpowiedzią impulsową kanału he(t), która jest wynikiem splotu odpowiedzi impulso-
wych: linii h(t) i korektora czasowego e(t) (w postaci cyfrowej: he(n) = h(n) ⊗ e(n))
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 753

Konieczność dodawania cyklicznego prefiksu „boli”, gdyż powoduje zmniejszenie przepływ-


ności bitowej modemu w stosunku N/(P + N). Im krótsza jest odpowiedź impulsowa kanału tym
prefiks może być krótszy. Z tego powodu projektuje się specjalne nierekursywne filtry cyfrowe
i umieszcza się je w odbiorniku po przetworniku A/C. Ponieważ wówczas w torze transmisji
i przetwarzania występują kaskadowo dwie operacje splotu, jedna za drugą (kanał, dodany filtr
cyfrowy), wypadkowa odpowiedź impulsowa całego toru jest równa splotowi odpowiedzi im-
pulsowej kanału z odpowiedzią impulsową dodanego filtra (patrz rysunek 5.8b). Tę drugą pro-
jektuje się tak, aby odpowiedź wypadkowa była jak najkrótsza. Pełni ona rolę korektora czaso-
wego TEQ (Time EQualizer) toru transmisji, zaznaczonego na rysunku 23.5. Jeden z następ-
nych podrozdziałów w całości poświęcono jego projektowaniu.
W standardzie ADSL przetworniki C/A i A/C pracują z częstotliwością próbkowania sygnału
2,208 megaherca. Ponieważ stosuje się transformację (I)DFT o długości 512 próbek, właściwa
transmitowana ramka danych składa się także z 512 próbek, a prefiks ma 32 próbki. Sygnał po
IDFT będzie rzeczywisty, a nie zespolony, tylko wówczas, gdy zapewni się (a)symetrię trans-
formowanego widma: S(N/2 + k) = S*(N/2 − k), k = 1, 2, 3, ..., N/2 − 1. Oznacza to, że do dyspo-
zycji są tylko kanały o numerach od 1 do N/2 − 1 = 255 (odpada kanał zerowy jako składowa
stała, a na częstotliwość Nyquista o indeksie N/2 przypada tylko składowa kosinusowa). Część
z nich jest wykorzystywana w celach synchronizacyjno-kontrolnych.
W tym miejscy należy wyraźnie podkreślić, że dalsze rozważania n i e b ę d ą d o t y c z y ł y
d o k ł a d n e j i m p l e m e n t a c j i modemu ADSL, gdyż, dla uproszczenia, podczas analizy
transmisji z centrali do użytkownika (downstream) ze zbioru wszystkich dostępnych kanałów
nie zostaną wydzielone kanały cyfrowe skierowane przeciwnie (upstream − od użytkownika do
centrali) oraz kanały nieużywane, pokrywające się w dziedzinie częstotliwości z tradycyjną
telefonią analogową.
Na rysunku 23.9 przedstawiono pełny schemat blokowy modemu ADSL. Wykorzystuje on opi-
sany powyżej dyskretny modulator wielotonowy DMT (Discrete MutiTone), oparty na dys-
kretnej transformacji Fouriera (I)DFT, a właściwe na jej szybkim algorytmie (I)FFT. Z kolei na
rysunkach 23.10 i 23.11 przedstawiono dodatkowe szczegóły umożliwiające szybką progra-
mową implementację nadajnika i odbiornika modemu ADSL.
Ponieważ modulator i demodulator DMT, stosowany w modemie ADSL, wykorzystuje od-
wrotną i prostą transformację Fouriera, wszystkie nośne są do siebie ortogonalne. W związku
z tym, w przypadku: 1) poprawnego odtworzenia częstotliwości próbkowania, 2) poprawnej
synchronizacji blokowej oraz 3) skrócenia w odbiorniku odpowiedzi impulsowej kanału do
długości cyklicznego prefiksu, nie występują interferencje pomiędzy sąsiednimi blokami da-
nych, nazywanymi symbolami (ISI − InterSymbol Interference), oraz interferencje pomiędzy
poszczególnymi nośnymi (ICI − InterChannel Interference). Nie znaczy to jednak, że trans-
misja jest wolna od zakłóceń. Przykładowo, w linii telefonicznej występują zakłócenia radiowe
typu AM, a w samej transmisji − szum kwantowania od przetworników A/C i C/A.
Ponieważ podczas analizy sygnałów w odbiorniku metodą FFT jest stosowane okno prosto-
kątne, realizowany tą metodą analizator widmowy jest co prawda zupełnie niewrażliwy na inne
nośne z powodu okresowości miejsc zerowych charakterystyki częstotliwościowej okna pro-
stokątnego, ale za to bardzo czuły na wszelkiego typu zakłócenia z powodu bardzo wysokiego
poziomu listków bocznych jego widma (patrz rozdział 8.5). Rysunek 23.12 stanowi ilustrację
graficzną powyższych stwierdzeń. Są na nim przedstawione dwie charakterystyki amplitudo-
wo-częstotliwościowe okna prostokątnego, związane z detekcją stanu nośnej m-tej i n-tej. Jak
754 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

S(k) s(n) x(n)

..01011.. Koder Dodaj R/S Przetw.


S/R QAM IFFT prefiks szere- C/A
P gowo

x(t)
Kanał
h(t)

y(t)

..01011.. Dekoder Korektor Odejmij S/R Korektor Przetw.


R/S QAM FEQ FFT prefiks równo- TEQ A/C
P-1 legle e(n)

Se(k) Ye(k) ye(n) y(n)

Rys. 23.9. Pełny schemat blokowy modemu ADSL z modulatorem IFFT i demodulatorem FFT

widać inne nośne (przekreślone strzałki narysowane liniami przerywanymi) nie mają wpływu
na wynik ich detekcji, ponieważ znajdują się w miejscach, w których zeruje się widmo okna
prostokątnego. Natomiast wszystkie zakłócenia występujące poza ww. miejscami zerowymi
(nieprzekreślone strzałki narysowane liniami ciągłymi) w istotny sposób wpływają na wynik
detekcji, tym bardziej im ich częstotliwości leżą bliżej analizowanych nośnych.

23.5. Źródła zniekształceń i zakłóceń


Na zniekształcenia sygnału transmitowanego w parze przewodów telefonicznych mają wpływ
[Kisz03]: tłumienie linii, zmiany grubości pary, odgałęzienia „mostkowe”, addytywny szum
szerokopasmowy, szum impulsowy, przeniki od innych par. Czytelnika nie zainteresowanego
pochodzeniem wymienionych wyżej zakłóceń, kierujemy na „obwodnicę”, czyli prosto do na-
stępnego, barwniejszego rozdziału. Przeczytanie jednak tych kilku stron pozwoli sobie uzmy-
słowić, że zazwyczaj analiza i przetwarzanie sygnałów rzeczywistych odbywa się w warunkach
„bojowych”, gdyż dotyczy gęstej dżungli zjawisk i wzajemnych, często szkodliwych zależnoś-
ci, na które najczęściej nie mamy wpływu lub tylko wpływ ograniczony. W świecie rzeczywis-
tym nie ma prostych odpowiedzi i jednoznacznych rozwiązań.

Tłumienie. Największy wpływ na wielkość tłumienia transmitowanego sygnału ma jego czę-


stotliwość oraz parametry samego kabla, w szczególności średnica żył, co jest związane z ich
rezystancją. Wielkość tłumienia wyrażona w decybelach jest liniowo zależna od długości kab-
la, a wyższe częstotliwości są silniej tłumione.
Długość kabla jest bardzo zróżnicowana i może sięgać nawet do 10 kilometrów. Duża część
abonentów znajduje się w dużej odległości od centrali. Transmisja za pomocą modemu ADSL
dla dużych odległości charakteryzuje się bardzo dużym tłumieniem i może nawet okazać się
niemożliwa. Dla wyższych częstotliwości standardowa pętla zachowuje się jak obwód RC,
czyli silnie tłumi sygnał. Z tego powodu niektóre pętle abonenckie mają w torze transmisyjnym
włączone w równych odstępach dławiki (cewki indukcyjne), które pełnią rolę korektora wy-
równującego charakterystykę przenoszenia toru do 3000 kHz (poprzez „podbicie” jej opa-
dania). Konsekwencją tego zabiegu jest jednak silne tłumienie powyżej tej częstotliwości.
Przykładowo w Stanach Zjednoczonych jest przyjęte włączanie do linii co 1800 metrów cewek
o indukcyjności 88 milihenrów. Obecność cewek w pętli abonenckiej uniemożliwia jednak
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 755

Strumień bitów:
11 00 10 01 .....11 01

Szeregowo → Równolegle

11 00 10 01

QAM: nr stanu → wartość


Sprzężenie zespolone

0 0 S(k)

0 1 2 3 .................. 255 256 257 ......... 509 510 511


IFFT
1 2 3 4 ............. 479 480 481 482 ............. 511 512

s(n)

1 2 .......... 31 32 33 ...................................................................................................... 544


Równolegle → Szeregowo

x(n)

Przetwornik C/A

x(t)

Splot z odpowiedzią impulsową kanału h(t)

Przejście danych
przez kanał
zakłócenia transmisyjny
y(t)

Rys. 23.10. Schemat blokowy nadajnika modemu ADSL oraz przejścia danych przez kanał transmisyjny

stosowanie technologii ADSL, która wykorzystuje pasmo powyżej 4 kiloherców, aż do ponad


1 megaherca.
Z powodu dużego wzrostu tłumienia przesyłanego sygnału wraz z odległością, modemy ADSL
często bywają nazywane rozwiązaniem „ostatniej mili”, gdyż wymagają podciągnięcia sygnału
cyfrowego metodą światłowodową w okolice abonenta (1 mila to w przybliżeniu 2 kilometry).
Obsługują one tylko ostatni odcinek połączenia od centrali cyfrowej do domu klienta.

Zmiany grubości pary. Najczęściej spotykane łącze telefoniczne składa się z kilku sekcji, czę-
sto wykonanych z przewodów o różnej grubości. Zwykle cieńsze przewody występują bliżej
centrali, co wynika z faktu, iż kable składają się wówczas z większej liczby par przewodów.
Z grubością żył jest ściśle związana impedancja falowa przewodu. W miejscu połączenia żył
o różnych grubościach może wystąpić niedopasowanie falowe impedancji, powodujące po-
wstawanie echa na skutek odbicia sygnału w miejscu połączenia.
756 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

y(t)

Przetwornik A/C

y(n)

Splot z filtrem e(n) korektora czasowego TEQ

ye(n)

Synchronizacja ramkowa (np. metoda Schmidla-Coxa)

Szeregowo → Równolegle
1 2 .......... 31 32 33 34 35 36 ..................................................................... 544

0 1 2 3 ................. 255 256 257 .......... 509 510 511


FFT

Korektor FEQ
0 1 2 3 ................. 255

QAM: wartość → nr stanu

11 00 10 01

Równolegle → Szeregowo

Strumień bitów:
11 00 10 01 .....11 01

Rys. 23.11. Schemat blokowy odbiornika modemu ADSL

nośna m-ta nośna n-ta

inne nośne inne nośne radio AM szum

Rys. 23.12. Ilustracja wpływu innych nośnych i zakłóceń na wynik detekcji numeru stanu konstelacji po-
szczególnej nośnej
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 757

Odgałęzienia. Niezakończone rozgałęzienia pętli abonenckiej spotyka się na całym świecie. Są


one wynikiem: 1) współdzielenia jednej linii przez kilku abonentów w przeszłości, 2) nie-
odłączenia linii po stronie centrali od abonenta, który zrezygnował z usługi, 3) naprawy przer-
wanej linii, polegającej na prostym zamknięciu obwodu i pozostawieniu dwóch „ślepych”
odgałęzień. Niekorzystnym skutkiem występowania odgałęzień są odbicia: cześć energii syg-
nału transmitowanego przedostaje się do odgałęzienia i po odbiciu od rozwartego końca pętli
wraca z powrotem do punktu odgałęzienia. Sygnał ten jest opóźniony i zniekształcony. W pun-
kcie odgałęzienia rozchodzi się na dwie strony: część dodaje się do sygnału użytecznego i jako
zakłócenie dociera do odbiornika, a część powraca jako echo do nadajnika.
Istnieje możliwość wystąpienia zaników składowych sygnału, gdy fala odbita od końca odga-
łęzienia wraca z opóźnieniem fazowym równym 180 stopni. Po dodaniu się do sygnału właści-
wego może nastąpić wówczas całkowity zanik określonej częstotliwości. Jest to prawdopo-
dobne, kiedy długość odgałęzienia jest równa nieparzystej wielokrotności ćwiartki długości
fali. Gdy mamy do czynienia z wieloma odgałęzieniami, zanikać może kilka różnych składo-
wych sygnału.

Szum biały. Rozkład funkcji gęstości prawdopodobieństwa addytywnego szumu, jaki obser-
wuje się w odbiorniku modemu ADSL, jest bardzo podobny do białego szumu gaussowskiego
(AWGN – Additive White Gaussian Noise). Rozkład ten jednak zanika do zera dla mniejszych
wartości amplitudy szumu. Jednak różnica ta jest na tyle mała, że uznaje się ją za nieistotną.
Szum biały jest szumem, który dodaje się równomiernie do transmitowanego sygnału w całym
paśmie częstotliwości. Źródłem jego pochodzenia jest szum kwantowania, zjawiska termiczne
zachodzące w torze analogowym oraz zakłócenia elektromagnetyczne pochodzące z otoczenia.
Jego moc przyjmuje się jako stałą i równą –140 dBm/Hz, choć w rzeczywistości nieznacznie
zależy ona od częstotliwości.

Szum impulsowy. W przeciwieństwie do innych zakłóceń źródło szumu impulsowego jest trud-
ne do określenia. Może być on generowany przez różnego rodzaju urządzenia komutacyjne,
obwody sygnalizacyjne czy nawet ładunki elektrostatyczne. Charakteryzuje się zmiennym
kształtem sygnału oraz znaczną amplitudą. Badania nad szumem impulsowym wykazują, iż
jego amplituda mieści się zwykle w przedziale od 5 do 20 miliwoltów przy czasie trwania od
30 do 150 mikrosekund. Impulsy występują średnio od 1 do 5 razy na minutę. Ze względu na
stosunkowo wysoką amplitudę szum impulsowy może poważnie wpływać na poziom błędów
podczas transmisji danych przez modem ADSL.

Przeniki stanowią najgroźniejsze zakłócenie, występujące podczas transmisji xDSL. Mogą wy-
stąpić nie tylko pomiędzy modemami DSL jednego typu, a również pomiędzy różnymi typami
modemów, jeśli tylko ich pasma częstotliwości częściowo się pokrywają. Przeniki występują,
kiedy transmisja w j e d n e j z par kabla wieloparowego zakłóca sygnał w i n n e j parze tego
samego kabla. Najczęściej ma to miejsce w części rozdzielczej instalacji, z której poszczególne
pary są rozprowadzane do abonentów. Ze względu na to, gdzie znajduje się nadajnik zakłóca-
jący, a gdzie odbiornik, dzielimy przeniki na zdalne (FEXT) i zbliżne (NEXT).
Przenik zdalny (FEXT – Far End Crosstalk) występuje, kiedy nadajnik i odbiornik, między
którymi dochodzi do zakłócenia, znajdują się na dwóch różnych końcach tego samego kabla.
Częściej występuje on podczas transmisji przez urządzenia xDSL tego samego typu, np. dwa
modemy ADSL. Stopień zakłócenia FEXT jest zależny od długości pętli abonenckiej i rośnie
758 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

wraz z jej wzrostem. Ma to związek z tłumieniem linii, które jest większe dla dłuższych pętli.
Takiemu samemu tłumieniu ulega sygnał przenikowy, który musi przejść przez całą długość
pętli od nadajnika do odbiorcy zakłócenia. Dlatego też przenik zdalny j est mniej szko -
d liwy niż zbliżny. Opierając się na wynikach pomiarów kabla o długości około 5,5 kilome-
tra (18 kilostóp), zawierającego 50 par przewodów, opracowano model symulujący uproszczo-
ną zależność na wielkość przeników FEXT [Bing99]:
0.6
N 2
FEXTN =   k ⋅d ⋅ f 2 ⋅ H ( f ) (23.9)
 49 
gdzie: k = 8 ⋅ 10 −20 – stała wyznaczona empirycznie, d – długość pętli wyrażona w stopach
(1 stopa = 0,305 metra), f – częstotliwość w hercach, H ( f ) – transmitancja pętli. Wartość
przeników wyliczana z (23.9) jest wielkością bezwymiarową. Jej zlogarytmowanie pozwala na
wyrażenie przeników w decybelach.
Przenik zbliżny (NEXT – Near End Crosstalk), bardziej szkodliwy niż zdalny FEXT, wystę-
puje, kiedy nadajnik sygnału transmitowanego przez jedną parę przewodów znajdzie się na tym
samym, „bliskim” końcu kabla co odbiornik dołączony do innej pary. Wówczas nadajnik za-
kłóca odbiornik „po sąsiedzku”, jak w życiu, w sposób „zbliżny”. Przenik zbliżny nie wystąpi
w sytuacji, kiedy na jednym końcu kabla wieloparowego są tylko nadajniki, a na drugim – tyl-
ko odbiorniki. Może wtedy wystąpić jedynie przenik zdalny. Ponieważ przenik NEXT nie
przechodzi przez całą długość pętli abonenckiej, jego wartość nie jest tłumiona tak znacznie
jak przeniku FEXT. Jest on wobec tego o wiele bardziej szkodliwy. Zależność wartości prze-
ników zbliżnych od częstotliwości zakłócanej oraz od liczby pętli zakłócających opisuje wzór
[Bing99]:
0.6 3
N 1
NEXTN =   ⋅f 2
(23.10)
 49  1.134 ⋅ 1013
w którym N oznacza liczbę par zakłócających (maksymalnie 49) a f jest częstotliwością syg-
nału zakłócającego, wyrażoną w hercach. Podobnie jak dla (23.9), wartość przeników NEXT
(23.10) jest wielkością bezwymiarową.
Wartość przeników rośnie wraz ze zmniejszaniem się odległości między parami oraz zwięk-
szaniem długości odcinka, na którym dochodzi do zakłóceń. Szkodliwe oddziaływanie między
parami 1 i 2 jest wzajemne, ale zależy od poziomu mocy ich sygnałów. Jeśli transmisja odbywa
się w kablu wieloparowym, to wszystkie pary tego kabla mogą oddziaływać na siebie, a prze-
nik wypadkowy będzie większy. Znaczenie ma także wielkość skrętu pary. Z badań wynika, że
para skręcona z mniejszym skokiem jest mniej podatna na przeniki niż para o większym skoku
skrętu.
Rozpatrzmy teraz przeniki w odniesieniu do systemu ADSL. Jeżeli pracuje on w trybie FDM
(podziału częstotliwości), to przeniki zbliżne od innych systemów ADSL nie występują, po-
nieważ nadajnik transmituje dane w innym paśmie niż odbiornik. Równocześnie nadajniki
obydwu abonentów nadają sygnały w tym samym paśmie częstotliwości, więc występują prze-
niki zdalne, które mogą być szkodliwe. W systemie ADSL pracującym z kompensacją echa
(EC) na skutek częściowego pokrywania się pasma transmisji występują zarówno przeniki
zdalne jak i zbliżne. Sytuacja się komplikuje, gdy poprzez pary tego samego kabla transmitują
urządzenia należące do różnych systemów rodziny DSL, przykładowo ISDN lub HDSL.
W takim wypadku wielkość przeników zależy od liczby i widma poszczególnych sygnałów.
Uff ...
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 759

23.6. Wybrane zagadnienia implementacyjne


Kluczową rolę w prawidłowym (bezbłędnym) i efektywnym (szybkim) funkcjonowaniu mo-
demu ADSL odgrywa znajomość odpowiedzi impulsowej linii transmisyjnej. Na jej podstawie
można wyznaczyć charakterystyki: amplitudowo-częstotliwościową i fazowo-częstotliwościo-
wą linii, które informują nas o zniekształceniach amplitudowych i fazowych przez nią wpro-
wadzanych. Od kształtu odpowiedzi impulsowej zależy dobór współczynników filtra TEQ ko-
rekcji czasowej, służących do jej skrócenia, oraz współczynników korektora FEQ, mającego na
celu wyeliminowanie łącznych zniekształceń amplitudowych i fazowych pochodzących od linii
oraz korektora TEQ.
Odpowiedź impulsowa linii zależy przede wszystkim od jej długości oraz budowy, tzn. archi-
tektury odgałęzień oraz występującej zmiany grubości przewodów. Można ją oszacować na
podstawie ogólnego modelu matematycznego toru transmisji, przyjmując konkretne wartości
jego parametrów w każdym analizowanym przypadku [Weso03], lub estymować przy zadanym
sygnale transmitowanym.
Podczas inicjalizacji modemy dokonują pomiaru odpowiedzi impulsowej linii w obecności
szumu i zakłóceń. Następnie jest projektowany filtr TEQ korektora czasowego, a po jego za-
stosowaniu dokonywana w odbiorniku synchronizacja blokowa (ramkowa), czyli detekcja koń-
ca prefiksu i początku pełnego bloku danych (patrz rysunek 23.8d). W tym momencie są
wyliczane współczynniki korektora częstotliwościowego FEQ, równe odwrotności skorygowa-
nego w fazie (synchronizacja) DFT splotu wyestymowanej odpowiedzi impulsowej linii i filtra
TEQ. Na koniec jest wyznaczana charakterystyka SNR stosunku sygnału do szumu w poszcze-
gólnych podpasmach częstotliwościowych i są dla nich dobierane rozmiary konstelacji QAM.
Przyjrzyjmy się obecnie kolejnym etapom inicjalizacji modemu.

23.6.1. Identyfikacja odpowiedzi impulsowej kanału

Ponieważ znajomość właściwości linii transmisyjnej jest tak ważna dla poprawnej pracy mo-
demu, zapoznajmy się z nimi na samym początku. Na rysunku 23.13 przedstawiono przykła-
dowe odpowiedzi impulsowe linii transmisyjnej bez [Arslan] i z górnoprzepustowym filtrem
rozsprzęgającym telefon analogowy (patrz rysunek 23.6) oraz ich charakterystyki częstotliwo-
ściowe: amplitudową, fazową oraz opóźnienie grupowe. Oryginalna odpowiedź impulsowa li-
nii [Arslan] jest pokazana na rysunku 23.13a, moduł jej widma Fouriera − na rysunku 23.13b,
faza widma − na rysunku 23.13c, a jej pochodna (odpowiedź grupowa) − na rys. 23.13d. Jak
widać linia transmisyjna bardzo silnie tłumi wyższe częstotliwości oraz ma w przybliżeniu li-
niową charakterystykę fazowo-częstotliwościową. Co prawda tylko w przybliżeniu, gdyż jej
pochodna względem częstotliwości podzielona przez 2π, czyli funkcja opóźnienia grupowego,
nie jest wartością stałą tylko zmieniającą o około 4 mikrosekundy wokół wartości 11 mikro-
sekund (co przy próbkowaniu 2,208 megaherca daje średnie opóźnienie równe około 24-em
próbkom sygnału ze zmianami plus minus 4 próbki). W bardzo dużym przybliżeniu można
jednak przyjąć, że linia jednakowo opóźnia wszystkie składowe częstotliwościowe, czyli że
kształtu przebiegu czasowego nie jest zmieniony na jej wyjściu (w przybliżeniu występuje tyl-
ko jego opóźnienie). Natomiast filtr (roz)sprzęgacza powoduje znaczne wydłużenie czasu trwa-
nia łącznej odpowiedzi impulsowej linii z powodu wrowadzenia szkodliwych, wolno gasną-
cych, niskoczęstotliwościowych oscylacji, widocznych na rysunku 23.13e. W dziedzinie czę-
stotliwościowej jego wpływ jest tylko nieznacznie widoczny na rysunku 23.13f w zakresie
bardzo niskich częstotliwości, właściwie nieistotnych dla poprawnej pracy modemu, gdyż
przypadających na pasmo telefonu analogowego i tzw. strefę buforową (patrz rys. 23.7).
760 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

a) 0.006 b) -20
0.005
-30
0.004

|H(f)| [dB]
-40

h(t)
0.003
0.002 -50
0.001
-60
0
0 50 100 150 200 250 0 0.2 0.4 0.6 0.8 1 1.2
t [µs] f [MHz]
c) 0 d) 22
20
-20 18
kąt H(f) [rd]

tgrp [µsek]
16
-40
14
-60 12
10
-80 8
0 0.2 0.4 0.6 0.8 1 1.2 0 0.2 0.4 0.6 0.8 1 1.2
f [MHz] f [MHz]

e) 0.005 f) -20
0.004
-30
0.003
|H(f)| [dB]

-40
h(t)

0.002
0.001 -50
0
-60
-0.001
0 50 100 150 200 250 0 0.2 0.4 0.6 0.8 1 1.2
t [µs] f [MHz]
Rys. 23.13. Przykłady odpowiedzi impulsowych kanału i ich charakterystyk amplitudowo- i fazowo-czę-
stotliwościowych. a), b), c), d) odpowiedź oryginalna oraz jej widmo amplitudowe, fazowe i opóźnienie gru-
powe tgrp, e), f) odpowiedź linii z górnoprzepustowym rozsprzęgaczem telefonicznym i jej widmo am-
plitudowe

Rozsprzęgacz należy projektować tak, aby wypadkowa długość odpowiedzi impulsowej linii
z rozsprzęgaczem nie była dłuższa od czasu trwania pojedynczego transmitowanego bloku da-
nych (512 próbek sygnału). Zazwyczaj stosuje się górnoprzepustowe filtry Czebyszewa I ro-
dzaju, rzędu co najmniej piątego. Z powodu braku miejsca projektowanie filtra rozsprzęgacza
nie jest przedmiotem naszego zainteresowanie.
Podczas przeprowadzonych symulacji, których wyniki opisano w dalszej części tego rozdziału,
wykorzystywano odpowiedź impulsową linii bez (roz)sprzęgacza [Arslan] z rysunku 23.13a
oraz odpowiedź linii z (roz)sprzęgaczem, pokazaną na rysunku 23.13e. Jak widać charakte-
rystyki amplitudowo-częstotliwościowe obu odpowiedzi, przedstawione na rysunkach 23.13b
i 23.13f, prawie się nie różnią, a jednak badania symulacyjne przeprowadzono dla obu ukła-
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 761

dów. Dlaczego tak uczyniono? Ponieważ w przygotowaniu są nowsze standardy ADSL, w któ-
rych filtr (roz)sprzegacza nie jest wymagany. Przykładem może być standard G922.2 G.Lite,
zubożona, ale za to tańsza implementacyjnie wersja G9221.1, mająca o połowę mniejszą czę-
stotliwość próbkowania (1,104 zamiast 2,208 MHz), dwa razy mniej kanałów częstotliwoś-
ciowych (256-punktowe a nie 512-punktowe FFT) oraz oferująca przepływność bitową do
użytkownika równą 1,5 megabita na sekundę (zamiast 9 Mbs).

Problem estymacji (oszacowania, pomiaru) odpowiedzi impulsowej układu liniowego nie-


zmiennego w czasie (patrz rozdz. 5) stanowi jedno z głównych zadań teorii identyfikacji
[Sode97, Gajd02]. Z definicji, odpowiedź impulsowa układu analogowego jest jego odpowie-
dzią na pobudzenie impulsem Diraca (rys. 5.1b), czyli sygnałem, którego widmo jest nieskoń-
czone (4.28) i zawiera wszystkie częstotliwości. Na wyjściu układu pojawiają się natomiast
tylko te częstotliwości, które układ jest w stanie przenieść. W ten sposób własności dynamicz-
ne (częstotliwościowe) układu zostają „zdekonspirowane”.
Niestety, w świecie analogowym trudno jest wygenerować sygnał dobrze imitujący impuls Di-
raca, charakteryzujący się bardzo dużą koncentracją energii w czasie. W pomiarach akustycz-
nych źródłem takiego impulsu może być materiał wybuchowy. Z tego powodu do identyfikacji
odpowiedzi impulsowej stosuje się jako pobudzenie inne sygnały, mające szerokie widmo
częstotliwościowe, w szczególności szum, a dokładniej przebiegi pseudolosowe, np. sekwencje
MLS (Maximum Length Sequences).
Oznaczmy przez x(t) pobudzenie, a przez y(t) odpowiedź analogowego układu LTI. Przypo-
mnijmy, że prawdziwa jest następująca zależność (1.54a), wyprowadzona w rozdziale 1:
+∞
R yx ( τ) = ∫ h (t ) Rxx (t − τ)dt = h( τ) ⊗ Rxx ( τ) (23.11)
-∞
wiążąca funkcję korelacji wzajemnej Ryx(τ) sygnału wyjściowego i wejściowego oraz funkcję
korelacji własnej Rxx(τ) sygnału wejściowego, gdzie „⊗” oznacza operację splotu. Ponieważ
funkcja autokorelacji każdego sygnału jest symetryczna względem przesunięcia zerowego
τ = 0 (Rxx(τ) = Rxx(−τ)) w (23.11) zmieniono znak argumentu funkcji Rxx(τ) w porównaniu
z (1.54a). Po wykonaniu transformacji Fouriera obu stron równania (23.11), uwzględnieniu
definicji funkcji gęstości widmowej mocy sygnałów P(f ) (1.45a) jako wyniku transformacji
Fouriera ich funkcji korelacji własnej Rxx(τ) lub wzajemnej Ryx(τ) oraz skorzystaniu z właś-
ciwości splotu (4.13) tej transformacji, otrzymujemy z (23.11):
Pyx ( f )
Pyx ( f ) = H ( f ) Pxx ( f ) ⇒ H( f ) = ⇒ h(t ) = Fourier −1 ( H ( f ) ) (23.12)
Pxx ( f )

Należy zatem pobudzić układ sygnałem, który ma Pxx(f ) różne od zera (najlepiej stałe w czę-
stotliwości), wyznaczyć Pyx(f ), obliczyć H(f ) jako wynik dzielenia Pyx(f ) przez Pxx(f ) oraz zna-
leźć h(t) metodą odwrotnej transformacji Fouriera z H(f ). Pxx(f ) = const, jeśli Rxx(τ) = δ(τ), co
jest prawdziwe dla szumu (rozdz. 1.4.3).
Powyższe rozumowanie jest teoretycznie poprawne ale trudno realizowalne w praktyce, ponie-
waż jest w nim wymagana znajomość sygnałów w czasie od −∞ do +∞ oraz całkowanie
w takich granicach. Sygnały x(t) i y(t) należałoby zatem spróbkować, wyznaczyć estymaty
funkcji korelacji Rxx(k) i Ryx(k) na podstawie skończonego zbioru próbek {x(n)} i {y(n)}, obli-
762 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

czyć Pxx(k) i Pyx(k) za pomocą dyskretnej transformacji Fouriera DFT, następnie je podzielić
H(k) = Pyx(k)/ Pxx(k) i wykonać odwrotne DFT: h(n) = IDFT( H(k) ).
W normie ADSL jest proponowane nieco inne rozwiązanie, oparte bezpośrednio na równa-
niu (23.7):
Y( f )
Y ( f ) = H( f )X ( f ) ⇒ H( f ) = (23.13)
X( f )

Nadajnik i odbiornik modemu ADSL pracują z zasady na sygnałach zdyskretyzowanych


w czasie i w częstotliwości. Nadajnik dysponuje N-punktowym widmem FFT XN(k) wysyłane-
go sygnału x(n). W odbiorniku należy wyznaczyć YN(k), czyli N-punktowe FFT z sygnału ot-
rzymanego y(n). Następnie należy obliczyć IFFT z HN(k), będącego ilorazem YN(k) i XN(k).
Ponieważ w linii transmisyjnej występuje szum addytywny, który dodaje się do wyniku splotu
sygnału nadanego z odpowiedzią impulsową linii, widmo YN(k) jest zaszumione: YN(k) =
= HN(k)XN(k) + Szum(k). Wpływ szumu na wynik estymacji jest minimalizowany metodą wie-
lokrotnego transmitowania zadanego pobudzenia, znanego odbiornikowi, i realizowania w nim
operacji uśredniania:

1 K 
hˆ( n ) = FFTN−1  ∑ FFTN ( yk ( n )) X N ( k )  (23.14)
K
 k =1 

Jako pobudzenie stosuje się pseudolosowe sekwencje rewerbacyjne. Przykładowo na wszyst-


kich nośnych wysyła się losowo wybraną konstelację 4-QAM. Jej numer przyjmuje wartości 0,
1, 2 lub 3 (bitowo: 00, 01, 10 lub 11) z takim samym prawdopodobieństwem (rozkład rów-
nomierny), co odpowiada modulującym wartościom zespolonym ±1±j. Oczywiście, moduł
widma |XN(f)| = |±1±j| = 2 , czyli j est taki sam d la każdej często tliwo ści. Na ry-
sunku 23.14 przedstawiono przebieg czasowy j ed nego o kr esu takiej sekwencji testowej
oraz jego funkcję autokorelacji, która ma charakter impulsowy (moduł jej transformaty Fou-
riera jest wartością stałą).
Ciągle jest generowana jedna i ta sama sekwencja. Ponieważ nie ma zmian wartości modulu-
jących w podkanałach, jest transmitowany sygnał okresowy, w którym wszystkie sinusoidy są
ciągłe. Nie ma w związku z tym potrzeby synchronizacji, a odpowiedź częstotliwościowa linii
jest wyznaczana z dokładnością do opóźnienia, które zmienia tylko jej fazę. To z kolei prze-
kłada się na opóźnienie estymaty hˆ(n ).

a) 3 b) 1
2 0.8
1
0.6
Rs (k)
s(n)

0
0.4
-1
-2 0.2
-3 0
0 100 200 300 400 500 -500 -250 0 250 500
nr próbki przesunięcie k
Rys. 23.14. Przykładowa postać czasowa sekwencji treningowej (a) oraz jej funkcji autokorelacji (b)
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 763

przypadek 1 przypadek 2
h(n)

y(n)

czas

FFT FFT
Rys. 23.15. Ilustracja zjawiska kołowego przesunięcia obliczanego h(n) (23.14) (w ramce na szarym tle)
w zależności od chwili pobierania fragmentu sygnału y(n) do analizatora FFT (w drugim przypadku prze-
sunięcie nie występuje)

a) 0.006 b) 0.006
0.005
0.004
0.004
h(n) hest(n) h(n) hest(n)
0.003 0.002
0.002
0
0.001
0 -0.002
0 100 200 300 400 500 0 100 200 300 400 500
numer próbki n numer próbki n
Rys. 23.16. Przykład wyznaczania odpowiedzi impulsowej linii transmisyjnej na podstawie (23.14) w ukła-
dzie: a) bez górnoprzepustowego filtra (roz)sprzęgacza telefonicznego, b) z tym filtrem. Oznaczenia: h(n)
− odpowiedź oryginalna, hest ( n ) = hˆ( n ) − odpowiedź obliczona (estymowana). Pochodzenie czklicynego
przesunięcia hest(n) w stosunku do h(n) jest związane z wyborem fragmentu sygnału y(n) do obliczeń (patrz
rys. 23.15)

Dzięki wielokrotnemu nadawaniu tej samej sekwencji treningowej o długości N próbek, wy-
musza się wystąpienie splotu kołowego transmitowanych danych i odpowiedzi impulsowej
linii, co ilustruje rysunek 23.15. W odbiorniku wystarczy wówczas w sposób cykliczny pobrać
K kolejnych bloków po N próbek z przetwornika A/C i obliczyć h(n) z (23.14). Wyznaczona
w ten sposób estymata odpowiedzi impulsowej linii hˆ(n ) jest przesunięta w sposób kołowy
(cykliczny). O wielkości tego przesunięcia decyduje wybór początku pobierania bloku próbek
z bufora sygnału y(n): przesunięcie nie występuje kiedy pierwsza pobrana próbka odpowiada
początkowi sekwencji treningowej. Na rysunku 23.15 pokazano przypadki dwóch różnych
przesunięć cyklicznych obliczonego hˆ(n ) w zależności od chwili pobierania danych. Wyni-
kiem estymacji są odpowiedzi impulsowe przedstawione w ramkach na szarym tle (należy je
odwrócić w osi czasu). Jak widać w drugim przypadku nie występuje przesunięcie ponieważ do
analizatora FFT pobrano blok danych bez rotacji kołowej. Z kolei na rysunku 23.16 przed-
stawiono przykładowe wyniki estymacji h(n), uzyskane w wyniku komputerowej symulacji
764 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

inicjalizacji modemu z wykorzystaniem programu, przedstawionego na końcu tego rozdziału


w tabeli 23-3.

23.6.2. Korekcja czasowa kanału − skracanie czasu trwania odpowiedzi


impulsowej

Zastosowanie krótkiego prefiksu i uzyskanie w ten sposób większych przepływności bitowych


jest możliwe tylko w przypadku skrócenia czasu trwania wypadkowej odpowiedzi impulsowej
całego toru transmisji danych. Jak już było powiedziane realizuje się to w odbiorniku modemu
poprzez zastosowanie dodatkowego, nierekursywnego filtra cyfrowego typu FIR, nazywanego
korektorem czasowym. Łączna odpowiedź impulsowa toru jest wówczas równa splotowi od-
powiedzi impulsowych: linii i dodanego filtra. Zadaniem tego ostatniego jest spowodowanie,
aby była ona jak najkrótsza. W standardzie ADSL prefiks składa się z P = 32 próbek. Z koło-
wości splotu skróconej odpowiedzi impulsowej z przesyłanymi danymi wynika, że może ona
maksymalnie mieć tylko P + 1 = 33 próbki, na które składa się pierwsza próbka z bloku 512
próbek ramki danych oraz 32 próbki poprzedzające tę ramkę. Gwarantuje to brak występowa-
nia interferencji międzyblokowych (międzysymbolowych). Równocześnie należy zadbać o to,
aby charakterystyka częstotliwościowa korektora TEQ nie wprowadzała dodatkowych miejsc
zerowych do wypadkowej charakterystyki całego toru transmisji, gdyż w sposób znaczący
ograniczają one jego przepływność bitową.
Na rysunku 23.17 przedstawiono odpowiedź impulsową linii transmisyjnej po operacji skróce-
nia dla dwóch układów: bez (roz)sprzęgacza telefonicznego (po lewej) oraz z nim (po prawej).
Filtr TEQ zaprojektowano wykorzystując estymatę odpowiedzi impulsowej linii transmisyjnej
hˆ(n ) (24.14), wyznaczoną w rozdziale 23.6.1. Jak widać po skróceniu hˆe ( n ) nie jest dłuższe od
prefiksu i mieści się w zadanym, 33-elementowym oknie czasowym, zaznaczonym na rysunku
linią przerywaną. Położenie tego okna w stosunku do hˆ(n ) powinno być tak dobrane, aby sto-
sunek energii próbek skróconej odpowiedzi hˆe ( n ) leżących wewnątrz okna do energii próbek
zewnętrznych był jak największy.

Dla dociekliwych. Istnieje bardzo wiele metod projektowania filtrów skracających odpowiedź
impulsową linii transmisyjnej. My zapoznamy się jedynie z prostym algorytmicznie, poglądo-
wym podejściem, zaproponowanym w pracy [Tkac03], które zostanie teraz skrótowo zapre-
zentowane. Na początku zróbmy następujące założenia:
h(n) − oznacza oryginalną odpowiedź impulsową linii mającą Lh próbek (n = 0, 1, ..., Lh − 1),
e(n) − to filtr korektora TEQ o długości Le (n = 0, 1, 2, ..., Le − 1),
he(n) = h(n)⊗e(n) − czyli skrócona odpowiedź impulsowa linii, jest wynikiem splotu h(n) i e(n)
oraz ma Lh + Le − 1 próbek.
Niech h, e i he oznaczają wektory poziome zbudowane z próbek h(n), e(n) i he(n). Chcemy,
aby energia he(n) koncentrowała się w Lp = P + 1 = 33 próbkach, zaczynając od ∆ + 1 próbki.
Mając na uwadze zdefiniowanie matematycznej postaci minimalizowanej funkcji kosztu (celu),
wprowadźmy następujące oznaczenia:
− macierzy H, o wymiarach Le × (Lh + Le − 1), splotu odpowiedzi impulsowej linii h(n) z poszu-
kiwanym filtrem korektora e(n):
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 765

 h(0) h(1) " h( Lh − 1) 0 " 0 


 0 h(0) h (1) " h ( Lh − 1) " # 
H=  (23.15)
 # % % % % % 0 
 
 0 " 0 h (0) h(1) " h ( Lh − 1) 

− macierzy W∆ o wymiarach (Lh + Le − 1) × (Lh + Le − 1), mającej na głównej przekątnej okno


prostokątne przesunięte o ∆ próbek, które wycina fragment skróconej odpowiedzi impulsowej
he(n) − energia tego fragmentu ma być maksymalizowana (0∆ − macierz zerowa o wymiarach
∆ × ∆, ILp − macierz wymiarach Lp × Lp, mająca jedynki na głównej przekątnej itd.):

0∆ 0 0 
 
W∆ =  0 I Lp 0  (23.16)
0 0 0 Lh + Le −1−∆− Lp 

− macierzy W∆ , stanowiącej „negację” W∆, wycinającej z kolei fragment skróconej odpowie-


dzi he(n), którego energia ma być minimalizowana:

W ∆ = I Lh + Le −1 − W∆ , gdzie I – macierz diagonalna (23.17)

Optymalna wartość opóźnienia ∆ skróconej odpowiedzi he(n) w stosunku do początku h(n),


zapewniająca najlepszą koncentrację energii he(n), także jest przedmiotem naszego zainte-
resowania. Obecnie zdefiniujemy funkcję kosztu, która ma być minimalizowana, jako stosunek
energii próbek he(n) leżących na zewnątrz okna prostokątnego do energii próbek leżących
w jego wnętrzu:

E
∑ he2 (n )
( h e W∆ )( h e W∆ )
T
h e W∆ W∆T hTe h e W∆ hTe
J= W = n∈W = = = (23.18)
EW ∑ he2 (n ) ( he W∆ )( he W∆ )T h e W∆ W∆T hTe h e W∆ hTe
n∈W

Po podstawieniu h e = eH otrzymujemy z (23.18):

eHW∆ HT eT
J= (23.19)
eHW∆ HT eT

Załóżmy obecnie, że macierz A ∆ = HW∆ HT jest pełnego rzędu, dodatnio określona i syme-
tryczna. Wówczas można w stosunku do niej zastosować dekompozycję Choleskiego, tzn.
przedstawić ją jako iloczyn

A ∆ = HW∆ HT = GT∆ G ∆ (23.20)

gdzie G∆ jest macierzą trójkątną górną. Wówczas funkcję kosztu (23.19) można przekształcić
do następującej postaci

vT∆  G −1 ( ) ( HW∆HT ) G−1  v ∆


T
T T
eHW∆ H e  vT∆ X ∆ v ∆
J= = = (23.21)
eGT∆GeT vT∆ v ∆ vT∆ v ∆
766 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

po zastosowaniu dodatkowych podstawień (pierwszego w mianowniku, a drugiego w liczniku):

v ∆ = GeT ⇒ e T = G − 1v ∆ (23.22a, b)

Ostatecznie problem projektowania wag filtra korektora TEQ e(n) (wektora e) został sprowa-
dzony do minimalizacji funkcji J (23.21). Ponieważ X∆ jest macierzą hermitowską, to funkcja
ta przyjmuje wartość minimalną (równą λ∆, min) dla wektora v∆ równego wektorowi własnemu
v∆, min macierzy X∆, związanemu z jej najmniejszą wartością własną λ∆, min. Uwzględniając ten
fakt oraz (23.22b), otrzymujemy wyrażenie na poszukiwane wagi korektora TEQ:

( )
T
e opt = vT∆, min G −1 (23.23)

gdzie macierz G∆ jest zdefiniowana przez (23.20), a wektor v∆, min otrzymuje się w wyniku de-
kompozycji macierzy X∆ (23.21) względem jej wartości własnych EVD (Eigen-Value Decom-
position) [Bjor87]. Z (23.23) należy wyznaczyć wagi korektora TEQ dla różnych wartości
opóźnienia ∆ początku skróconej odpowiedzi impulsowej i jako wynik końcowy przyjąć to
opóźnienie, dla którego kryterium (23.21) przyjmuje wartość najmniejszą.
Program napisany w języku Matlab, służący do wyznaczania wag filtra TEQ według powyższej
metody, jest przedstawiony w tabeli 23-2. Na rysunku 23.17 zaprezentowano wyniki jego za-
stosowania.

Tab. 23-2. Program w języku Matlab do wyznaczania wag filtra korektora czasowego TEQ

% Ćwiczenie: Projektowanie filtra korektora TEQ

function [e] = AdslTEQ(h, Lp, Le, D)


% h – odpowiedź impulsowa linii transmisyjnej do skrócenia
% Lp – zadana długość odpowiedzi impulsowej po skróceniu
% Le – zadana długość filtra skracającego − korektora TEQ
% D – zadane opóźnienie skróconej odpowiedzi impulsowej, wyrażone w próbkach
% e – wyznaczone wagi filtra TEQ

Lh = length(h); Lz = Lh+Le-1-D-Lp;
H = zeros(Le, Lh+Le-1);
for i=1:Le
H(i,i:i+Lh-1) = h;
end
W1 = zeros(Lh+Le-1, Lh+Le-1);
W0 = zeros(Lh+Le-1, Lh+Le-1);
rect=[zeros(1,D),ones(1,Lp),zeros(1,Lz)];
W1 = diag(rect);
W0 = diag(1-rect);
X1=H*W1*H';
G = chol(X1);
X0=H*W0*H';
T = inv(G)'*X0*inv(G);
[V,D] = eig(T);
LambdaMin = min(diag(D)); % # lub skrótowo
LambdaMinIdx = find(diag(D)==LambdaMin); % # [LambdaMin, LambdaMinIdx] = min(diag(D));
e = V(:,LambdaMinIdx)' * inv(G)';
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 767

1 1

0.5 0.5
^
h(n)
0 0
^h(n)
-0.5 -0.5
h^e(n) h^e(n)
-1 -1
10 20 30 40 50 60 70 80 10 20 30 40 50 60 70 80
numer próbki n numer próbki n

Rys. 23.17. Ilustracja graficzna operacji skrócenia czasu trwania wypadkowej odpowiedzi impulsowej linii
transmisyjnej w wyniku zastosowania filtra korektora TEQ. Oznaczenia: hˆ( n ) − odpowiedź przed skróce-
niem, obliczona z (23.14), hˆ ( n ) − odpowiedź po skróceniu. Po lewej − bez rozsprzęgacza telefonicznego,
e
po prawej − z (roz)sprzęgaczem. Linią przerywaną narysowano okno prostokątne, w którym była maksy-
malizowana energia odpowiedzi skróconej hˆe ( n ) . Optymalne opóźnienie tego okna jest parametrem metody

23.6.3. Synchronizacja blokowa

Po estymacji odpowiedzi impulsowej linii transmisyjnej oraz zaprojektowaniu wag korektora


czasowego, skracającego tę odpowiedź do długości prefiksu, przychodzi moment na zsynchro-
nizowanie się odbiornika z początkiem bloków danych − przesyłanych symboli. Odniesieniem
dla naszych rozważań w tym miejscu będzie rysunek 23.8d. Wynika z niego, że z powodu
dodawania cyklicznego prefiksu do każdej ramki danych, w transmitowanych strumieniu wy-
stępują próbki powtarzające się (P = 32 próbki w każdym bloku składającym się z N + P =
= 544 próbek). Można z tego faktu skorzystać: korelować w odbiorniku każdych P próbek sy-
gnału odebranego z P próbkami przesuniętymi o N = 512 próbek oraz poszukiwać maksimum
tej funkcji. Argument maksimum da nam informację o ile próbek należy się przesunąć w sto-
sunku do początku bufora, aby „znaleźć” się w środku prefiksu. Po dodatkowym dodaniu do
tej wartości połowy długości prefiksu znajdziemy się na początku właściwego bloku danych.
Jak widać w celu zsynchronizowania się w odbiorniku z początkiem właściwych bloków da-
nych (bez prefiksu) nie ma potrzeby stosowania specjalnego sygnału treningowego. Funkcja
„korelacji” wykorzystywana w tym przypadku ma następującą postać (d = 1, 2, 3, ..., N + P):
Q(d )
f (d ) = (23.24)
R( d )
gdzie:
P −1
Q (d ) = ∑ ye ( d + m ) y e ( d + m + N ) (23.24a)
m=0

P −1 2 P −1 2
R( d ) = ∑ ye ( d + m ) + ∑ ye ( d + m + N ) (23.24b)
m=0 m=0

a dzielenie przez R(d ) służy jedynie normowaniu uzyskiwanych wartości. Wielkości Q(d )
i R(d ) mogą być wyznaczane iteracyjnie. Przykładowo dla Q(d ) mamy:
Q (d + 1) = Q (d ) − ye (d ) ye (d + N ) + ye ( d + P ) ye ( d + P + N )
768 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

0.5
0.4
0.3

fADSL (n)
0.2
0.1
0
-0.1
0 50 100 150 200 250 300 350 400 450 500 550
numer próbki n
Rys. 23.18. Przykładowy kształt uśrednione (100 realizacji) funkcji synchronizacyjnej fADSL(d ) (23.24)
w przypadku niewystępowania oraz występowania addytywnego szumu o mocy −110 dBm/Hz (obie funkcje
pokrywają się)

Z powodu występowania szumu w kanale, funkcję synchronizacji wyznacza się dla kilku (kil-
kunastu, kilkudziesięciu) bloków danych i uśrednia (dodaje i dzieli przez liczbę składników).
Na rysunku 23.18 przedstawiono przykładowy kształt uśrednionej funkcji synchronizacji
fADSL(d ) w przypadku niewystępowania oraz występowania addytywnego szumu o mocy −110
dBm/Hz dla tego samego tr ansmito wanego sygnału. Jak widać obie funkcje pokrywają
się i mają ostre maksimum.

Dla dociekliwych. Ponieważ w systemach b e z p r z e wo d o wych odpowiedź impulsowa jest


różna od zera dla bardzo małej liczby próbek, nie ma potrzeby stosowania w nich korektora
TEQ, gdyż i tak wystarcza krótki prefiks (zazwyczaj P = 4 próbki dla ramki danych N = 64).
Jednak w przypadku krótkiego prefiksu opisana powyżej metoda synchronizacji nie zdaje
egzaminu z powodu słabego skorelowania małej liczby próbek i niskiego maksimum funkcji
detekcyjnej. Z tego powodu w [Schm97] zaproponowano inną metodę synchronizacji, która
znalazła zastosowanie w bezprzewodowej transmisji wielotonowej OFDM. Przesyła się w niej
taki sam sygnał czasowy w pierwszej i drugiej połowie każdej ramki danych, na przykład „po-
dwojone” dane transmitowane (z założenia jest to sygnał losowy o rozkładzie równomiernym,
różny dla każdej ramki), do których dodaje się prefiks. Sytuację taką przedstawiono na rysunku
23.19. W odbiorniku dla sygnału wyjściowego z korektora TEQ ye(n) wyznacza się funkcję
synchronizacji f(d ) postaci (23.24), dla Q(d ) i R(d ) zdefiniowanych następująco (d = 1 ...N ):
N / 2 −1
Q (d ) = ∑ ye ( d + m ) y e ( d + m + N / 2 ) (23.25a)
m =0
N / 2 −1 2
R( d ) = ∑ ye ( d + m + N / 2 ) (23.25b)
m =0

Koreluje się w niej blok N/2 próbek sygnału ye(n), zaczynających się od dowolnej próbki
d, z blokiem próbek przesuniętych o N/2 oraz normuje wynik tej korelacji. Maksimum funkcji
fOFDM(d ) występuje kiedy numer d pierwszej próbki korelowanego bloku jest równy numerowi
pierwszej próbki przesyłanego bloku danych (nie prefiksu). Podobnie jak poprzednio, w obec-
ności szumu funkcję synchronizacyjną można wyznaczać dla kilku bloków danych i uśredniać.
Na rysunku 23.20 pokazano przykładowy kształt uśrednionej funkcji fOFDM(d ) (100 realizacji)
w przypadku niewystępowania oraz występowania addytywnego szumu o mocy −110 dBm/Hz
(podobnie jak poprzednio obie funkcje pokrywają się). Wynika z niego, że w rozpapatr ywa-
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 769

he(n)
czas

dane

czas

k-ta ramka P N/2 N/2

Rys. 23.19. Ilustracja koncepcji synchronizacji blokowej: w pierwszej i drugiej połowie każdego bloku da-
nych jest transmitowany ten sam sygnał, do całości jest dodawany prefiks

0.6
0.5
0.4
fOFDM(n)

0.3
0.2
0.1
0
0 50 100 150 200 250 300 350 400 450 500 550
numer próbki n
Rys. 23.20. Przykładowy kształt uśrednionej funkcji synchronizacyjnej fOFDM(d ) (23.25) w przypadku nie-
występowania oraz występowania addytywnego szumu o mocy −110 dBm/Hz (obie funkcje pokrywają się)

nym przypadku początek bloku danych zaczyna się w okolicy 50. próbki. Jednak teraz funkcja
decyzyjna charakteryzuje się maksimum o szerokości równej długości cyklicznego prefiksu.
Ponieważ w modemach ADSL prefiks składa się aż z P = 32 próbek, na rysunku 23.20 obser-
wujemy stosunkowo płaskie i szerokie maksimum, który może stwarzać problemy detekcyjne.
Dodatkowo (23.25) jest bardziej złożone obliczeniowo niż (23.24) i wymaga wysyłania dwa
razy tych samych danych.

23.6.4. Korekcja częstotliwościowa kanału

W sytuacji kiedy cała „brudna” robota została już zrobiona, częstotliwościowa korekcja znie-
kształceń amplitudowo-fazowych wprowadzanych przez linię (łącznie z filtrem TEQ) jest
czystą przyjemnością. Ponieważ wszystko w systemie jest już znane, wystarczy tylko obliczyć
estymatę „wejścia” Sˆ ( k ) na podstawie zmierzonego „wyjścia” Ye(s)(k) i wyestymowanej wiedzy
o zniekształceniach wprowadzanych przez skrócony kanał Hˆ e (k ) (analogicznie jak w (23.12)):
1
Ye(s) ( k ) ≈ Hˆ e (k ) ⋅ SN
(k ) + Ξ
N ( k ) ⇒ Sˆ (k ) = Ye(s) ( k ) = FEQ(k ) ⋅ Ye(s) (k ) (23.26)
  ˆ
H ( k )
wyjscie linia wejscie szum e

gdzie:
1 1
Ye( s ) ( k ) = FFT  ye( s ) ( n )  , FEQ(k ) = = (23.27)
  ˆ
H e ( k ) FFT  hˆe ( n ) 
 
770 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

W podanych równaniach hˆe ( n ) = hˆ(n ) ⊗ e(n) oznacza wyestymowaną, skróconą odpowiedź


impulsową linii transmisyjnej, a ye(s)(n) = y(n) ⊗ e(n) − zsynchronizowany blok danych w od-
biorniku po filtrze TEQ. Na rysunku 23.21 przedstawiono kolejne kroki obliczeń prowadzą-
cych do wyznaczenia korektora częstotliwościowego FEQ (Frequency Equalizer). Na rysunku
23.21a pokazano moduły charakterystyk amplitudowo-częstotliwościowych: samej linii Hˆ ( k ),
korektora TEQ E(k) oraz linii łącznie z korektorem Hˆ e ( k ). Z kolei na rysunku 23.21b zapre-
zentowano charakterystykę FEQ(k) korektora FEQ, będącą odwrotnością Hˆ e (k ) . Jak widać
FEQ(k)⋅ Hˆ e (k ) = 1, czyli „co robi FEQ?”: tylko „sprząta”. Jeśli skrócony kanał zniekształca
w amplitudzie i fazie przesyłany sygnał, to FEQ dodatkowo go modyfikuje w „przeciwną”
stronę i w ten sposób eliminuje wpływ kanału (gdyż np. 2*(1/2) = 1, a 45 o − 45o = 0o).
O celowości stosowania korektora FEQ mogą nas przekonać rysunki 23.22 i 23.23. Zrezygno-
wanie z korektora FEQ od razu prowadzi do tragedii: z powodu zniekształceń amplitudowo-
-fazowych wprowadzonych w konkretnym kanale częstotliwościowym przez linię z korektorem
TEQ, odebrana konstelacja 4-QAM w amplitudzie „kurczy się” lub „rozszerza”, w fazie zaś −
obraca. Widać to na rysunku 23.22, gdzie krzyżykami zaznaczono wyniki wielokrotnego po-
miaru jednego z czterech stanów nośnej. Natomiast w przypadku użycia korektora FEQ ode-
brana konstelacja 4-QAM na jednej z nośnych wygląda tak jak na rysunku 23.23: bez szumu
jest prawie idealna, z szumem zaś − tym gorsza im większy jest szum, ale z grubsza poprawna
w amplitudzie i fazie.

23.6.5. Estymacja przepływności bitowej

Ponieważ mamy już działający model obliczeniowy wielotomowej transmisji ADSL spróbujmy
teraz oszacować oferowane przez nią przepływności bitowe. Rozmiar konstelacji i liczby bitów
przesyłanych na każdej z nośnych zależą od stosunku sygnału do szumu, występującego
w każdym kanale częstotliwościowym. Sumaryczna przepływność bitowa modemu b jest dana
wzorem:
 SNRk  Px ,k
b = ∑ bk = ∑ log 2 1 + , SNRk = (23.28)
k k  Γ  Pn ,k + PIF ,k

gdzie k oznacza numer kanału, bk − przepływność w k-tym kanale (ograniczona do przedziału


od 2 do 15 bitów), SNRk − stosunek mocy sygnału Px,k do zakłóceń (Pn,k − szumu, PIF,k − inter-
ferencji międzyblokowych/międzysymbolowych oraz międzykanałowych) w k-tym kanale czę-
stotliwościowym. Współczynnik skalujący Γ zależy od wzmocnienia G zastosowanego kodo-
wania kanałowego (w przypadku ADSL kodowania/dekodowania splotowego Viterbiego), od-
stępu (marginesu, zapasu) bezpieczeństwa M oraz przyjętego poziomu stopy błędu BER (Bit
Error Rate). W przypadku ADSL mamy G = 4,2 dB, M = 6 dB i BER = 10−7, skąd:

Γ = 10(9,8+ M −G ) /10 = 14,4544 (23.29)

Ponieważ podczas testowania transmisji sekwencją pseudolosową wiemy co nadajemy ( S ( k ) )


i odbieramy ( Sˆ ( k ) ), współczynnik SNRk możemy wyznaczyć jako (m − numer bloku danych):

2
SNRk = ∑ [ Sm ( k )]
2
∑  Sm ( k ) − Sˆm (k )  (23.30)
m m
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 771

60 60
|E(k)| |FEQ(k)|
40 40
20 20
0
[dB]

[dB]
^ (k)|
|H 0 ^ (k)|
e |H
-20 e
-20
-40 ^
|H(k)| -40
-60
-60
0 50 100 150 200 250 0 50 100 150 200 250
numer kanału numer kanału

Rys. 23.21. Kolejne kroki obliczeń prowadzących do wyznaczenia korektora FEQ. Hˆ ( k ) , E(k), Hˆ e ( k )
i FEQ(k) to charakterystyki amplitudowo-częstotliwościowe: linii telefonicznej, korektora TEQ, linii z ko-
rektorem TEQ oraz korektora FEQ

4 1.5
10 00
3 1
2 10 00
Imag (sinus)

Imag (sinus)
1 0.5
0 11 01 0
-1 -0.5
-2 11 01
-3 -1
-4 -1.5
-4 -3 -2 -1 0 1 2 3 4 -1.5 -1 -0.5 0 0.5 1 1.5
Real (cosinus) Real (cosinus)

Rys. 23.22. Przykład deformacji konstelacji 4-QAM w przypadku nie zastosowania korektora FEQ (dwa
różne kanały częstotliwościowe, dwa różne poziomy mocy szumu addytywnego)

1.5 1.5
1 1
Imag (sinus)

Imag (sinus)

0.5 0.5
0 0
-0.5 -0.5
-1 -1
-1.5 -1.5
-1.5 -1 -0.5 0 0.5 1 1.5 -1.5 -1 -0.5 0 0.5 1 1.5
Real (cosinus) Real (cosinus)
1.5 1.5
1 1
Imag (sinus)
Imag (sinus)

0.5 0.5
0 0
-0.5 -0.5
-1 -1
-1.5 -1.5
-1.5 -1 -0.5 0 0.5 1 1.5 -1.5 -1 -0.5 0 0.5 1 1.5
Real (cosinus) Real (cosinus)

Rys. 23.23. Przykład detekcji konstelacji 4-QAM w jednym z kanałów częstotliwościowych w przypad-
ku zastosowania korektora FEQ i występowania addytywnego szumu białego o mocy: −120, −110, −100,
− 90 dBm/Hz (kolejno poziomo)
772 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

Na rysunku 23.24 przedstawiono wyznaczone symulacyjnie zależności SNR (23.30) dla dwóch
linii transmisyjnych: bez układu (roz)sprzęgacza telefonicznego (h(t) − rys. 23.13a) oraz z nim
(h(t) − rys. 23.13e), w przypadku występowania addytywnego szumu białego o mocy: − 300,
−140, −120, −100 dBm/Hz. Z kolei na rysunku 23.25 pokazano odpowiadające im alokacje bitów
bk (23.28) w poszczególnych kanałach częstotliwościowych. Można zaobserwować wyraźną
różnicę dla obu linii tylko dla niskich częstotliwości. W przypadku niewystępowania szumu
oraz wykorzystania wszystkich kanałów osiąga się szybkość transmisji około 15 megabitów na
sekundę, limitowaną interferencjami międzysymbolowymi oraz sposobem alokowania bitów
w standardzie ADSL, który dopuszcza przesyłanie w jednym kanale częstotliwościowym od
2 do 15 bitów.
Ponieważ za każdym razem była przeprowadzana od początku cała procedura inicjalizacyjna
(identyfikacja odpowiedzi impulsowej linii, projektowanie korektora TEQ, synchronizacja)
a dopiero potem następowała transmisja danych testowych, dla różnego poziomu szumu uzys-
kiwano różniące się estymaty odpowiedzi impulsowej i w konsekwencji r ó żne korektory
TEQ. Z tego powodu rodziny charakterystyk SNR przedstawionych na rysunku 23.24 nie tylko
się obniżają wraz ze wzrostem poziomu zakłóceń, ale także mają załamania w różnych miej-
scach (zera transmitancji korektora są rozłożone za każdym razem inaczej). W przypadku za-
stosowania jednego korektora powinny się tylko obniżać.

80 80
70 70
60 60
50 50
SNR [dB]

SNR [dB]

40 40
30 30
20 20
10 10
0 0
-10 -10
0 50 100 150 200 250 0 50 100 150 200 250
numer kanału numer kanału
Rys. 23.24. Przykładowe zależności SNR dla dwóch linii transmisyjnych: bez układu (roz)sprzęgacza tele-
fonicznego (po lewej) oraz z nim (po prawej), podczas występowania addytywnego szumu białego o mocy:
−300, −140, −120, −100 dBm/Hz

16 16
liczba bitów / nr konstelacji

liczba bitów / nr konstelacji

14 14
12 12
10 10
8 8
6 6
4 4
2 2
0 0
0 50 100 150 200 250 0 50 100 150 200 250
numer kanału numer kanału
Rys. 23.25. Alokacja bitów w poszczególnych kanałach częstotliwościowych dla funkcji SNR z rysunku
23.24: po lewej układ bez (roz)sprzęgacza telefonicznego, a po prawej − z nim; szum −300, −140, −120,
−100 dBm/Hz (linii przerywanej użyto tylko w celu poprawy czytelności rysunku, odpowiada ona pozio-
mowi szumu −140 dBm/Hz)
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 773

23.6.6. Właściwy dobór korektora czasowego

Na koniec wypada jeszcze zwrócić uwagę na znaczenie właściwego projektowania filtra kore-
ktora czasowego TEQ. Jego charakterystyka amplitudowo-częstotliwościowa jest również bar-
dzo istotna. W przypadku kiedy występują w niej ostre minima, spowodowane przez zera
transmitancji leżące blisko okręgu jednostkowego, wypadkowa charakterystyka linii z kore-
ktorem także je ma, a to powoduje, że ulokowane w nich kanały stają się częściowo lub całko-
wicie bezużyteczne. Co prawda korektor FEQ koryguje wypadkową charakterystykę całego
układu silnie wzmacniając pewne jej części, ale prowadzi to także do identycznego wzmoc-
nienia szumu, braku poprawy współczynnika SNR i małej liczby przydzielonych bitów. Rów-
nocześnie z powodu nieidealnych filtrów demodulacji (rys. 23.12) dla silnie tłumionych kana-
łów o wiele bardziej szkodliwe jest przenikanie zakłóceń od kanałów sąsiednich, pogarszające
ich SNR.
Najprostszym sposobem unikania zer w charakterystyce częstotliwościowej filtra TEQ jest sto-
sowanie małej liczby wag, na przykład dwóch lub czterech zamiast szesnastu. Ale powoduje to
złe skrócenie odpowiedzi impulsowej kanału (rys. 23.26a) i bardzo duże interferencje
międzyblokowe i międzykanałowe. W konsekwencji cała charakterystyka SNR układu bardzo
się obniża i szybkość transmisji znacznie spada (rys. 23.26b). W przypadku występowania
szumu sytuacja zmienia się, ponieważ charakterystyka SNR ulega przede wszystkim obniżeniu
z jego powodu, a nie z powodu interferencji (rys. 23.27b). Wówczas zastosowanie krótszych
filtrów TEQ mniej „boli”, a dodatkowo unika się zer w charakterystykach częstotliwościowych
korektora TEQ (rys. 23.27a) i całego układu (rys. 23.27b).

23.7. Przykład ćwiczenia komputerowego


W tabeli 23-3 jest przedstawiony przykładowy program napisany w języku Matlab, który po-
służył do wygenerowania wszystkich rysunków zaprezentowanych w tym rozdziale. Zdaniem
autora zainteresowany Czytelnik może go z powodzeniem wykorzystać do dalszych, samo-
dzielnych eksperymentów. Program ten w sposób poglądowy przedstawia metodologię roz-
wiązywania podstawowych problemów, występujących podczas transmisji danych na wielu
nośnych równocześnie. Właśnie taki rodzaj transmisji jest stosowany w szybkich modemach
telefonicznych ADSL oraz w niektórych bezprzewodowych sieciach komputerowych Wi-Fi
(IEEE 802.11 a/g). W programie dla przykładu zasymulowano modem ADSL. W standardzie
stosuje się bardziej złożone rozwiązania, np. korektor częstotliwościowy FEQ jest realizowany
w sposób adaptacyjny (rozdz. 14) i przestrajany błędem pomiędzy sygnałem odebranym Ye(s)(k)
(23.26) a wzorcowym dla danego numeru przesyłanego symbolu. Na rysunku 23.3b błąd ten
jest równy odległości pomiędzy środkiem pola przyporządkowanego danemu symbolowi
(czarna kropka), a odebranym sygnałem (czarny krzyżyk).
Należy także zwrócić uwagę, że w modemie nie jest ważna identyfikacja samego kanału, ale
kanału łącznie z korektorem TEQ. Dlatego można zastosować od razu korektor TEQ wstępnie
dopasowany do linii, której parametry można określić w przybliżeniu na podstawie jej długoś-
ci, rodzaju kabla, odgałęzień, ... Wówczas zaczynamy od razu od procedury synchronizacyjnej,
opisanej w rozdziale 23.6.3.
774 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

0.012 70
0.008 60
50

SNR [dB]
0.004
herr(n) 40
0
30
-0.004 20
-0.008 10
0 20 40 60 80 100 0 50 100 150 200 250
numer próbki n numer kanału
Rys. 23.26. Wpływ stosowania filtrów TEQ o różnej długości dla układu z (roz)sprzęgaczem telefonicznym
w sytuacji niewystępowania szumu. Po lewej: sygnał resztkowy pozostały po operacji skrócenia odpowiedzi
impulsowej, po prawej: odpowiadająca mu charakterystyka SNR. Długość korektora TEQ Le = 2 (linia ciągła
cienka), 8 (linia przerywana), 16 (linia ciągła gruba)

60 40
40
30
|E(f)| [dB]

SNR [dB]
20
20
0
-20 10

-40 0
0 50 100 150 200 250 0 50 100 150 200 250
numer kanału numer kanału
Rys. 23.27. Wpływ stosowania filtrów TEQ o różnej długości dla układu z (roz)sprzęgaczem telefonicznym
w sytuacji występowania szumu −110 dBm/Hz. Po lewej: charakterystyka amplitudowo-częstotliwościowa
samego korektora, po prawej: charakterystyka SNR całego układu. Długość korektora TEQ Le = 2 (linia
ciągła), 8 (linia przerywana)

Tab. 23-3. Przykładowe ćwiczenie komputerowe

% Ćwiczenie: Symulacja pracy modemu ADSL (Neostrady) − szybki dostęp do Internetu po linii
% telefonicznej

clear all; subplot(111);

% PARAMETRY
% KOREKTOR CZASOWY TEQ
Le = 16; % długość filtra korektora czasowego, skracającego odpowiedź impulsową kanału
Lp = 32; % długość prefiksu
% KANAŁ
N = 512; % długość transmitowanej ramki danych bez prefiksu
Np = N + Lp; % długość ramki wraz z prefiksem
Niter = 400; % liczba transmitowanych ramek (iteracji pętli nadawania)
% Z NORMY
fpr = 2.208e6; % częstotliwość próbkowania [Hz]
SzumDbmHz = -100; % moc szumu w linii telefonicznej [dBm/Hz]
SygnalDbm = 23; % moc wejściowa sygnału w odbiorniku [dBm]
WzmKod = 4.2; % wzmocnienie kodowania [dB]; np. bez kodera/dekodera Viterbiego = 0, z nim = 4.2
OdstepKod = 6; % margines (zapas) działania modemu dla SNR [dB]
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 775

FiltrTel = 1; % 1/0 włączanie/wyłączanie filtra usuwającego sygnał telefonu


% OGÓLNE
LiczKanal = 50; % liczba obiegów pętli poświęconych estymacji odpowiedzi impulsowej kanału
LiczSynchro = 50; % liczba obiegów pętli poświęconych synchronizacji ramkowej skróconego kanału
OpzNadania = 200; % zadane opóźnienie nadania danych w celach testowych (liczba próbek)
NR = 100; % numer zapamiętywanego podpasma częstotliwościowego

rand('state',0); randn('state',0); % inicjalizacja generatorów liczb pseudolosowych


MocSygnalu = 0.001 * 10^( SygnalDbm/10 ); % przelicz do skali liniowej
MocSzumu = 0.001 * fpr/2 * 10^( SzumDbmHz/10 ); % przelicz do skali liniowej

% Inicjalizacja odpowiedzi impulsowej linii transmisyjnej − wybierz jedną z możliwości


if(FiltrTel == 0) h = load('LiniaTelefon.dat')'; % odpowiedź csaloop2 z [Arslan]
else h = load('LiniaTelefonHP.dat')'; % csaloop2 z rozsprzęgaczem HP (high-pass)
end

% Generacja sygnału treningowego do estymacji odpowiedzi impulsowej kanału


QAM4 = [ 1+j, -1+j, 1-j, -1-j ]; % konstelacja 4-QAM o czterech elementach: 00, 01, 10, 11
numer = floor((4-eps)*rand(1,N/2))+1; % losowa sekwencja liczb z zakresu od 1 do 4
X = QAM4( numer ); % generacja połowy widma
X( 1 ) = sqrt(2); X( 257 ) = sqrt(2); % ustaw
X( 258:512 ) = conj( fliplr( X(2:256) ) ); X = X.'; % "sprzężona" symetria widma, do pionu
x = real( sqrt(N/2)* ifft(X) ); st = x/std(x); % nadawany sygnał czasowy
Swe = X; % widmo cyklicznie nadawane
Swy = zeros(N,1); % akumulator widm odbieranych

% ###########################################################################################
% PĘTLA GŁÓWNA - POCZĄTEK ###############################################################
% ###########################################################################################

nr = 2 : N/2-1; % numery kanałów, w których przesyłamy dane


Nb = N; % długość ramki transmisji danych, zmienna w trakcie pracy modemu
bx = zeros(3*Nb,1); by = bx; % bufor na nadawany i odbierany sygnał czasowy
bye = zeros(2*Nb,1); % bufor na odebrany sygnał czasowy po przejściu przez korektor TEQ
S = zeros(N,1); S1 = S; % ostatnia i przedostatnia ramka danych (już wysłane)
sig = zeros(N/2-1,1); err = sig; % akumulatory energii sygnału odebranego i błędu w podpasmach
scSUM = zeros(1,N+Lp); % akumulator wartości funkcji synchronizacyjnej dla ADSL
QamHistoria = []; % wektor odebranych stanów w kanale NR

KopiaLiczKanal = LiczKanal; OpzOdbioru = 0; % zapamiętaj, ustaw


EstymacjaKanalu = 1; Synchronizacja = 0; TransmisjaDanych = 0; % parametry sterujące
for iter = 1:Niter % ----------------------------------------------------------------

iter

% Generacja danych do transmisji


if( EstymacjaKanalu == 1 ) s = st; end % ESTYMACJA KANAŁU: sekwencja treningowa
if( Synchronizacja == 1 ) % SYNCHRONIZACJA PO SKRÓCENIU KANAŁU
s = sqrt(3)*(2*rand(N, 1)-1); % sekwencja testowa - szum o rozkładzie [−1, 1]
end
if( TransmisjaDanych ==1 ) % TRANSMISJA
S0 = S1; S1 = S; % pamiętaj dwa poprzednio wysłane widma
numer = floor((4-eps)*rand(1,N/2-1))+1; % losowa sekwencja liczb od 1 do 4: 00, 01, 10, 11
S = QAM4( numer ); % generacja połowy widma
S = [0 S 0 conj(fliplr(S))]; S =S.'; % wymuszenie "symetrii" widma , ifft(S) rzeczyw.
s = real( sqrt(N/2)* ifft(S) ); % odwrotne FFT, skalowanie
end
s = s * sqrt( MocSygnalu ) * sqrt( 10^( WzmKod/10 ) );

% Dodanie cyklicznego prefiksu


if( EstymacjaKanalu == 1 ) x = s; % ESTYMACJA KANAŁU: bez prefiksu, krótsza ramka
else x = [ (s(N-Lp+1:N)); s ]; % SYNCHRONIZACJA I TRANSMISJA: dodanie prefiksu
776 Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej

end

% Splot wysłanego sygnału z nieskróconą odpowiedzią impulsową kanału


bx = [ bx(Nb+1 : 3*Nb); x ]; % pobranie danych na koniec bufora
y = conv( bx(Nb+1-OpzNadania : 3*Nb-OpzNadania),h ); % splot
y = y(Nb+1 : Nb+Nb); % pobranie wyniku splotu

% Dodawanie zakłóceń, np. szumu (znormalizowany w dBm/Hz)


szum = sqrt( MocSzumu ) * randn(Nb,1);
y = y + szum;

% Odbiornik: skalowanie, pobranie kolejnej porcji danych na koniec bufora


y = y / ( sqrt( MocSygnalu ) * sqrt( 10^( WzmKod/10 ) ) );
by = [ by(Nb+1 : 3*Nb); y ];

% Korektor czasowy, skrócenie odpowiedzi impulsowej kanału


if( EstymacjaKanalu == 0 ) % PO ESTYMACJI KANAŁU
ye = conv( by(1+OpzOdbioru : 2*Nb+OpzOdbioru),e); % splot danych z korektorem TEQ
ye = ye(Nb+1 : Nb+Nb); % pobranie wyniku splotu
bye = [ bye(Nb+1 : 2*Nb); ye ]; % zapamiętanie go w buforze
end

% ESTYMACJA KANAŁU I OPÓŹNIENIA #####################################################


if( (EstymacjaKanalu == 1) & (iter > 4) ) % warunek
LiczKanal = LiczKanal-1 % zmniejsz licznik
Swy = Swy + fft( by(1:N) ) /sqrt(N/2); % akumuluj widma odebrane
if(LiczKanal==0) % KONIEC ESTYMACJI
hest = real( ifft( Swy ./ Swe ) )/KopiaLiczKanal; hest=hest'; % estymata h
[ hmax, nrmax] = max(abs(hest)); % znajdź indeks maksimum
K = 15; n1st = nrmax-K; OpzOdbioru = n1st-1; %
if(n1st<=0) n1st = n1st + N; end %
hest = [ hest(n1st:end) hest(1:n1st-1)]; % przesuń rotacyjnie
[e, Dx] = AdslTEQ(hest, Le, Lp, 0); % zaprojektowanie korektora TEQ
he = conv(e, hest); % skrócenie odpowiedzi hest
he = he(1:N); % obcięcie do N próbek
HE = fft(he).'; % FFT skróconej odpowiedzi
Nb = Np; bx=zeros(3*Nb,1); by=zeros(3*Nb,1); bye=zeros(2*Nb,1); % ustaw
EstymacjaKanalu = 0; Synchronizacja = 1; iterEstymacjaKanalu = iter;
end % end LiczKanal = = 0
end % EstymacjaKanalu = = 1

% SYNCHRONIZACJA #####################################################################
if( (Synchronizacja == 1) & (iter > iterEstymacjaKanalu + 4) ) % warunek
LiczSynchro = LiczSynchro-1 % zmniejsz licznik pętli synchronizacji
r = bye(1:2*N+Lp); % pobierz dane z bufora
for n = 0 : N+Lp-1 % funkcja synchronizacyjna (23.24)
q = sum(bye(n+1:n+Lp).*bye(n+N+1:n+N+Lp));
r = sum(bye(n+1:n+Lp).^2) + sum(bye(n+1+N:n+Lp+N).^2);
sc(n+1)=q/r;
end
scSUM = scSUM + sc; % akumuluj funkcję SYNCHRO
% plot(sc); title('funkcja SYNCHRO'); pause % opcjonalny rysunek

if (LiczSynchro == 0) % KONIEC SYNCHRONIZACJI


OpzSynch = find(scSUM == max(scSUM)); % znajdź argument max
OpzSynch = OpzSynch + Lp/2; % uwzględnij prefiks
HEC = HE .* exp(j*2*pi/N *(0:N-1)'*(OpzSynch-Lp)); % oblicz korekcję
FEQ = 1./HEC; % oblicz mnożnik FEQ
Nb = Np; bx=zeros(3*Nb,1); by=zeros(3*Nb,1); bye=zeros(2*Nb,1); % ustaw
Synchronizacja = 0; TransmisjaDanych = 1; iterSynchronizacja = iter;
end % LiczSynchro = = 0
end % Synchronizacja = = 1
Projekt MODEM ADSL: szybki dostęp do Internetu po linii telefonicznej 777

% TRANSMISJA DANYCH: DEMODULACJA ################################################


if( (TransmisjaDanych == 1) & (iter > iterSynchronizacja + 4) ) % warunek
r = bye(1+OpzSynch : N+OpzSynch); % synchronizacja, odcięcie prefiksu, sygnał odebrany
R = sqrt(2/N) * fft(r); % FFT ramki danych
R = R .* FEQ; % korekta FEQ
SRerr = S0 - R; % błąd rekonstrukcji
sig = sig + S0(nr).*conj(S0(nr)); % akumuluj energię sygnałów w podpasmach
err = err + SRerr(nr).*conj(SRerr(nr));% akumuluj energię błędów w podpasmach
QamHistoria = [ QamHistoria R(NR) ]; % odebrana wartość w kanale nr 100
end % TransmisjaDanych = = 1

end % KONIEC PĘTLI GŁÓWNEJ -----------------------------------------------------------

% ###########################################################################################
% PĘTLA GŁÓWNA - KONIEC ##################################################################
% ###########################################################################################

% Rysunki: SNR w podpasmach, odebrane wartości w kanale NR (nadawana konstelacja 4-QAM)


SNR = (sig + eps) ./ (err + eps); SNRdB = 10*log10( SNR );
subplot(111); plot(nr, SNRdB,'b'); title('SNR [dB]'); xlabel('Nr kanału'); pause
plot( real( QamHistoria ), imag( QamHistoria ), 'bx'); title('QAM4'); pause

% Zrób sam detekcję konstelacji, czyli de-QAM


% ........................................................................

% Rysunek: alokacja bitów w podpasmach częstotliwościowych


gamma = 10 ^ ( (9.8 + OdstepKod - WzmKod)/10 );
ab = log2( SNR/gamma+1 ); ab = floor( ab ); % log2( snr/gamma +1 )
idx = find( ab > 15 ); ab( idx ) = 15; % nie więcej niż 15 bitów na kanał
idx = find( ab < 2 ); ab( idx ) = 0; % nie ma mniej niż 2 bity na kanał
subplot(111); plot(nr, ab,'b'); xlabel('nr kanału'); ylabel('liczba bitów'); pause
BityNaSymbol = sum( ab ), BityNaSekunde = BityNaSymbol * fpr/Np, pause
24
Projekt FAZA: estymacja chwilowego
przesunięcia fazowego

Celem ostatniego projektu jest sprawdzenie czy Czytelnik umie poradzić sobie z nowym „pro-
blemem” bez pomocy „Mamusi i Tatusia”. W żargonie młodzieżowym sytuacja taka bywa
nazywana „jazdą bez trzymanki”. Postawionym zadaniem jest praktyczna weryfikacja użytecz-
ności wielu algorytmów omawianych w poprzednich rozdziałach książki, tym razem w zastoso-
waniu do estymacji chwilowego przesunięcia fazowego:
∆φ(n ) = φ2 (n ) − φ1 (n ) (24.1)

występującego pomiędzy dwoma dyskretnymi sygnałami o wartościach rzeczywistych, postaci:


x1 (n ) = a1 (n )cos(2πf c n + φ1 (n )) (24.2a)
x 2 ( n ) = a 2 (n )cos(2 πf c n + φ2 (n )) (24.2b)

W projekcie zostaną wykorzystane następujące metody: sygnału analitycznego z transformacją


Hilberta, krótkoczasowej transformacji Fouriera, krótkoczasowej transformacji Wignera oraz
korelatora adaptacyjnego, natomiast do odszumiania wyznaczonych z nich estymat przesunię-
cia fazowego będą zastosowane standardowe filtry dolnoprzepustowe o skończonej odpowie-
dzi impulsowej, klasyczne adaptacyjne liniowe filtry predykcyjne oraz filtr Kalmana. Celem
projektu będzie porównanie właściwości tych metod obliczeniowych ze względu na ich błędy
dynamiczne, wrażliwość szumową, złożoność obliczeniową oraz możliwości praktycznej im-
plementacji.
Niniejszy projekt jest ćwiczeniem z metodologii rozwiązywania zadań. Na początku bardzo
dokładnie formułuje się problem, potem proponuje się algorytm, który go rozwiązuje, a dopie-
ro na końcu pisze się program, będący zapisem kolejnych kroków algorytmu w wybranym
języku komputerowym. Oczywiście program się uruchamia, a następnie testuje poprawność
zakodowanego w nim algorytmu rozwiązania problemu.

24.1. Estymatory proste


Poniżej skrótowo przedstawiono podstawowe metody wyznaczania dyskretnego przesunięcia
fazowego (24.1) między sygnałami (24.2). Szczegółowe procedury numeryczne są zebrane
w tabelach 24-1 − 24-3.
Projekt FAZA: estymacja chwilowego przesunięcia fazowego 779

Metoda sygnału analitycznego. W metodzie sygnału analitycznego wyznacza się za pomocą


transformacji Hilberta (HT) zespolone odpowiedniki y1(n) i y2(n) (tzw. sygnały analityczne)
rzeczywistych sygnałów x1(n) i x2(n) (24.2):
j ( 2 π f c n +φ1 ( n ) )
y1 ( n ) = HT ( x1 ( n ) ) = a1 ( n ) e (24.3a)

j ( 2 π f c n +φ2 ( n ) )
y2 ( n ) = HT ( x2 ( n ) ) = a2 ( n ) e (24.3b)

a następnie oblicza się estymatę chwilowego przesunięcia fazowego z następującej zależności:

{
∆φˆ 1 ( n ) = arg y1* ( n ) y2 ( n ) } (24.4)

wykorzystując fakt, że
j ( φ2 ( n ) −φ1 ( n ) )
y1* ( n ) y2 ( n ) = a1 ( n ) a2 ( n ) e

W przypadku występowania addytywnego szumu pomiarowego dodającego się do sygnałów


x1(n) i x2(n) (24.2), estymator (24.4) charakteryzuje się dużą wariancją i powinien być zmody-
fikowany. Teoretycznie są możliwe trzy scenariusze: „odszumianie” sygnałów wejściowych,
„odszumianie” iloczynu y1*(n)y2(n) i (lub) „odszumianie” sygnału wyjściowego z samego esty-
matora. My będziemy stosować wyłącznie trzecią metodę. Wykorzystamy do tego celu stan-
dardowe, dolnoprzepustowe filtry nierekursywne typu FIR, adaptacyjne filtry predykcyjne typu
LMS i znormalizowany LMS (NLMS) oraz filtr Kalmana.
Parametrami metody sygnału analitycznego jest długość odpowiedzi impulsowej filtra Hilberta
(N = 2M+1) oraz rodzaj użytego okna czasowego (patrz tabela 24-1).

Metoda krótkoczasowej transformacji Fouriera. W metodzie tej wyznacza się dyskretną


transformatę Fouriera (DFT) fragmentów sygnałów x1(n) i x2(n) „wyciętych” przez symetry-
czne okno obserwacji w(m) wokół wybranej chwili czasowej n, lecz tylko dla częstotliwości
nośnej fc. Wynikową estymatę ∆φ(n) uzyskuje się z jednego z dwóch wyrażeń alternatywnych
(m = − M,..., 0,..., M):

 ( m)   (m) 
∆φˆ 2 ( n ) = φˆ 2 ( n ) − φˆ 1 ( n ) = arg  DFT ( w ( m ) x2 ( n + m ) )  − arg DFT ( w ( m ) x1 ( n + m ) )  (24.5a)
 c
( f )   c
( f ) 
 ( m )  ( m) 
* 
∆φˆ 2 ( n ) = arg  DFT ( w ( m ) x2 ( n + m ) )  DFT ( w ( m ) x1 ( n + m ) )   (24.5b)
 ( fc )  ( fc )  

W równaniu (24.5a) użyto znaku estymatora „^” w stosunku do faz poszczególnych sygnałów,
aby określić możliwość analizy sygnałów zaszumionych. Estymator (24.5b) jest korzystniejszy
do praktycznej implementacji w czasie rzeczywistym ze względu na mniejszą złożoność obli-
czeniową.
Parametrami metody krótkoczasowej transformacji Fouriera jest długość DFT (N = 2M+1)
oraz rodzaj użytego okna czasowego w(m) (patrz tabela 24-1).

Metoda krótkoczasowej transformacji Wignera. Podobnie jak wyżej stosuje się dyskretną
transformację Fouriera tylko w odniesieniu nie do samych sygnałów x1(n) i x2(n), lecz frag-
mentu ich jądra Wignera x2(n + m) x1*(n − m) (m = − M,..., 0,..., M):
780 Projekt FAZA: estymacja chwilowego przesunięcia fazowego

 ( m ) 
(
∆φˆ 3 ( n ) = arg  DFT w ( m ) x2 ( n + m ) x1* ( n − m ) )  (24.6)
 ( 2 fc ) 

Na uwagę zasługuje fakt, że teraz funkcja analizująca ma częstotliwość 2fc zamiast fc. Metoda
krótkoczasowej transformacji Wignera jest mniej złożona obliczeniowo i charakteryzuje się
podobnymi właściwościami dynamicznymi jak metoda krótkoczasowej transformacji Fouriera,
ale jest mniej odporna na zakłócenia losowe.
Parametrami metody krótkoczasowej transformacji Wignera jest długość DFT (N = 2M+1)
oraz rodzaj użytego okna czasowego w(m) (patrz tabela 24-1).

Metoda korelatora adaptacyjnego. Metoda ta wykorzystuje znany z literatury schemat filtra


adaptacyjnego pracującego jako korelator (dekorelator) dwóch sygnałów. W sposób adapta-
cyjny zmienia się w niej transmitancję filtra cyfrowego Hn(z), tak aby w każdej chwili czaso-
wej n spełniona była zależność

X 2 ( z ) ≈ Hn ( z ) X1 ( z ) (24.7)

gdzie X1(z) i X2(z) oznaczają transformaty Z dyskretnych sygnałów x1(n) i x2(n). Chwilowe
przesunięcie fazowe między tymi sygnałami oblicza się wówczas z następującego wzoru:

 
∆φˆ 4 ( n ) = arg  H n ( z ) j 2 π fc f pr  (24.8)
 z=e 

Do adaptacji współczynników transmitancji Hn(z) są stosowane klasyczne algorytmy filtrów


adaptacyjnych, np. LMS i znormalizowany LMS (patrz tabele 24-1 i 24-3). Parametrami meto-
dy jest w tym przypadku długość filtra M i wybór sposobu adaptacji wraz z ewentualnymi pa-
rametrami specyficznymi (LMS − µ, NLMS-1 − µ, eng i γ, NLMS-2 i NLMS-3 − µ, eng, γ i β).

Metoda filtra Kalmana. Metodę filtracji Kalmana można zastosować do estymacji parametrów
zespolonego (analitycznego), zmiennego w czasie sygnału sinusoidalnego. Przyjmuje się wtedy
następującą postać sygnału:
jΦ ( n )
y (n ) = a (n ) e (24.9)

oraz zakłada jego liniową modulację częstotliwościową:

Φ (n ) = Φ (0) + nΩ(0) + n 2 α(0) / 2 (24.10a)


Ω(n ) = Ω(0) + nα(0) (24.10b)
α(n ) = α(0 ) (24.10c)

Następnie definiuje się wektor stanu procesu jako (kąt całkowity, pulsacja unormowana, zmia-
na tej pulsacji z próbki na próbkę sygnału):
T
x ( n ) =  Φ ( n ) , Ω ( n ) , α ( n )  (24.11)

i zapisuje równania (24.9) dla dwóch kolejnych chwil czasowych n i n+1. Na tej podstawie
znajduje się zależność x(n+1) od x(n) i otrzymuje macierz modelu procesu F (patrz równania
(15.79) i (15.81)):
Projekt FAZA: estymacja chwilowego przesunięcia fazowego 781

1 1 0, 5
F = 0 1 1  (24.12a)
0 0 1 

Ponieważ jest możliwy tylko pomiar kąta Φ(n) na podstawie równania:

 Im( y (n )) 
Φ (n ) = arctg 
 Re( y ( n )) 

Wynika stąd, że macierz pomiaru jest równa:

H = [1 0 0] (24.12b)

W przypadku estymaty przesunięcia fazowego dwóch sygnałów bezpośrednie zastosowanie


opisanej metody filtra Kalmana jest złożone obliczeniowo. Sprowadza się ono bowiem do rów-
noczesnego wyznaczania:
1) dwóch kolejnych próbek zespolonych sygnałów analitycznych y1(n) i y2(n) (24.9) na pod-
stawie sygnałów rzeczywistych x1(n) i x2(n) (24.2) z (24.3) (dwa filtry Hilberta typu FIR;
tabela 24-1);
2) dwóch estymat Φ̂1 (n ) i Φ̂ 2 (n ) (dwa synchroniczne filtry Kalmana; algorytmy KALMAN
z tabeli 24-2 ze zmienioną inicjalizacją: F i H jak w (24.12), wymiary pozostałych
macierzy zwiększone do 3×3 lub 3×1);
3) względnego przesunięcia fazowego ∆φˆ KAL (n ) = ∆φˆ 5 (n ) = Φˆ 2 (n ) − Φˆ 1 (n ) , z rozwiązaniem pro-
blemu numerycznego związanego z narastaniem wartości kątów Φ̂1 (n ) i Φ̂ 2 (n ) .

24.2. Estymatory złożone

Zaprezentowane powyżej metody estymacji ∆φ(n ) (estymatory ∆φˆ i (n ) , i = 1, 2, 3, 4, 5) mogą


być traktowane jako metody „pierwszego przybliżenia”. Szczególnie jest to prawdziwe w przy-
padku metody sygnału analitycznego (realizowanej za pomocą transformacji Hilberta) oraz
metody korelatora adaptacyjnego. Ich dalsza modyfikacja ma na celu zmniejszenie wariancji
wyniku estymacji w obecności szumu. Do odszumienia estymatorów „prostych” są stosowane
klasyczne metody filtracji sygnałów. Podczas realizacji projektu (badań symulacyjnych) należy
sprawdzić efektywność zastosowania: klasycznych dolnoprzepustowych filtrów cyfrowych,
adaptacyjnych filtrów liniowej predykcji oraz filtra Kalmana. Procedury numeryczne tych
metod są zebrane w tabelach 24-2 i 24-3.

Klasyczne filtry cyfrowe. Zdemodulowany sygnał chwilowego przesunięcia fazowego ∆φˆ i (n )


jest z założenia sygnałem dolnopasmowym, najprostsza jest więc jego filtracja filtrem dolno-
przepustowym o odpowiedniej częstotliwości granicznej odcięcia. W procesie jego projekto-
wania należy zwrócić uwagę na liniowość jego charakterystyki fazowo-częstotliwościowej
(wybór filtra o skończonej odpowiedzi impulsowej typu FIR) oraz stałość charakterystyki
amplitudowo-częstotliwościowej (np. odpowiedni dobór okna czasowego w metodzie okien).
Stromość charakterystyki amplitudowej jest funkcją długości filtra.
782 Projekt FAZA: estymacja chwilowego przesunięcia fazowego

Adaptacyjne predyktory liniowe. W metodzie tej stosuje się jeden ze standardowych układów
pracy filtra adaptacyjnego. W każdej chwili czasowej n liniowy predyktor stara się przewidzieć
wartość ∆φˆ i (n ) na podstawie M estymat ją poprzedzających:
M
∆φˆ iLP ( n ) = ∑ hn ( m ) ∆φˆ i ( n − m ) (24.13)
m =1

gdzie hn(m) oznaczają wartości adaptacyjnie przestrajanych wag filtra, wyznaczone w po-
przedniej iteracji. Zmiana wag jest w każdym kroku algorytmu proporcjonalna do aktualnego
błędu predykcji

err = ∆φˆ i (n ) − ∆φˆ iLP (n )

Ponieważ nieskorelowane wartości szumu są nieprzewidywalne, estymator (24.13) powinien


śledzić zmienność ∆φi (n). W zastosowanych w badaniach algorytmach stochastycznego gra-
dientu (tabela 24-2 i 24-3) w zależności od parametru µ predyktor może być w konkretnej sytu-
acji albo za wolny (nie nadąża za sygnałem, ale dobrze odszumia, gdyż nie nadąża także za
szumem) albo za szybki (nadąża za sygnałem i za szumem, czyli nie odszumia sygnału). Opty-
malna wartość tego parametru zależy także od rodzaju zastosowanego algorytmu (LMS,
NLMS-1, NLMS-2 lub NLMS-3). Algorytmy NLMS (znormalizowany LMS) są szybsze i sta-
bilniejsze.

Filtr Kalmana. Zakładając liniowy model zmienności różnicowego przesunięcia fazowego


(24.1):
∆φˆ i (n ) = ∆φˆ i (0 ) + n ⋅ θ(0 ), θ(n ) = θ(0) (24.14)

otrzymuje się następujące macierze modelu i pomiaru filtra Kalmana:

1 1
F= , H = [ 1 0] (24.15)
0 1

Dwa adaptacyjne algorytmy estymacji ∆φˆ i (n ) są przedstawione w tabeli 24-2, przy czym algo-
rytm drugi jest nieco mniej złożony obliczeniowo. Parametry „zapominania” λ i µ są odpo-
wiedzialne za szybkość przestrajania się filtra i decydują o tym, czy filtr jest wolny (filtr „dłu-
go” pamięta, nie nadąża za szumem, więc dobrze odszumia sygnał, lecz może nie nadążać za
zmianą samego sygnału) czy szybki (pamięta „krótko”, nadąża za zmiennością sygnału, ale źle
odszumia, gdyż częściowo nadąża także za szumem).

24.3. Przykłady algorytmów


Teraz szczegółowo będą zaprezentowane przykłady algorytmów, służących do estymacji chwi-
lowego przesunięcia fazowego między dwoma sygnałami i „działających” według przedsta-
wionych powyżej scenariuszy. Starano się w nich uwzględnić wszystkie szczegóły imple-
mentacyjne. Pseudokod źródłowy procedur numerycznych estymatorów prostych znajduje się
w tabeli 24-1, natomiast kod „programów” estymatorów złożonych („odszumiających” te pier-
wsze) − w tabeli 24-2. Tabela 24-3 zawiera procedury wyznaczania lub modyfikacji współ-
czynnika wzmocnienia, stosowane w przypadku użycia do odszumiania filtrów adaptacyjnych
gradientu stochastycznego: LMS i NLMS (różne wersje).
Projekt FAZA: estymacja chwilowego przesunięcia fazowego 783

Tab. 24-1. Algorytmy procedur numerycznych służących do estymacji chwilowego przesunięcia fazowego
∆φ(n ) = φ2 (n ) − φ1 (n ) pomiędzy sygnałami x1(n) i x2(n) (24.1)

HILBERT. Metoda sygnału analitycznego prosta. N = 2M+1


• Wyznaczenie zespolonych sygnałów analitycznych metodą filtracji (xk(n) → yk(n); h(m) − odpo-
wiedź impulsowa filtra Hilberta):
 M 
yk ( n ) = xk ( n ) + j ⋅  ∑ w ( m ) h ( m ) xk ( n − m )  , k = 1, 2
 m=− M 
 2 sin 2 (πm / 2 )
 m≠0,
h(m ) =  π m
, w(m) − okno czasowe o długości 2M + 1
 0, m=0
• Wyznaczenie estymaty chwilowego przesunięcia fazowego sygnałów:

(
 Im y1* ( n ) y2 ( n )
∆φˆ 1 ( n ) = arctg 
) 
 1 (
 Re y * ( n ) y ( n )
2 ) 
FOURIER. Metoda krótkoczasowej transformacji Fouriera. N = 2M + 1
• Wyznaczenie „falki” sinusowej i kosinusowej ws(m) and wc(m) (w(m) − funkcja okna):
( ) ( )
ws (m ) = w(m )sin 2 πm f c / f pr , wc (m ) = w(m )cos 2 πm f c / f pr , m = − M ,..., 0,...., M

• Splot „falek” ws(m) and wc(m) z analizowanymi sygnałami x1(n) i x2(n):


M M
x1s ( n ) = ∑ x1 ( n + m ) ws ( m ), x1c ( n ) = ∑ x1 ( n + m ) wc ( m )
m =− M m =− M
M M
x2s ( n ) = ∑ x2 ( n + m ) ws ( m ), x2c ( n ) = ∑ x2 ( n + m ) wc ( m )
m =− M m =− M
• Wyznaczenie estymaty chwilowego przesunięcia fazowego sygnałów:
 x c ( n ) x1c ( n ) + x2c ( n ) x1c ( n ) 
∆φˆ 2 ( n ) = φ2 ( n ) − φ1 ( n ) = arctg  2s 
 x (n ) xc (n ) − xc ( n ) xs ( n ) 
 2 1 2 1 

WIGNER. Metoda krótkoczasowej transformacji Wignera. N =2M + 1


• Wyznaczenie „falki” sinusowej i kosinusowej ws(m) and wc(m) (w(m) − funkcja okna):
(
ws (m ) = w(m )sin 2 πm ⋅ 2 f c / f pr , ) (
wc (m ) = w(m )cos 2 πm ⋅ 2 f c / f pr , ) m = − M ,..., 0,..., M

• Splot „falek” ws(m) i wc(m) z jądrem Wignera x12(n,m) analizowanych sygnałów x1(n) i x2(n):
x21 ( n, m ) = x2 ( n + m ) x1 ( n − m ) , m = − M ,..., 0,..., M
M M
s
x21 (n ) = ∑ x21 ( n, m ) ws ( m ), c
x21 (n) = ∑ x21 ( n, m ) wc ( m )
m =− M m =− M
• Wyznaczenie estymaty chwilowego przesunięcia fazowego sygnałów:
 xs (n) 
∆φˆ 3 ( n ) = arctg  21 
 xc ( n ) 
 21 
784 Projekt FAZA: estymacja chwilowego przesunięcia fazowego

Tab. 24-1. cd.

KORELATOR. Metoda korelatora adaptacyjnego. N = M


Inicjalizacja:
( ) ( )
s(m ) = sin 2 π(m − 1) ⋅ f c / f pr , c(m ) = cos 2 π(m − 1) ⋅ f c / f pr , m = 1, 2, 3, ..., M

hn =0 (m) = 0, b ( m ) = 0, m = 1, 2, 3,..., M
Algorytm:
while (dostępne nowe próbki sygnałów x1(n) i x2(n) o indeksie n)
b (1) = x1 ( n ) (pobierz nową próbkę sygnału x1(n) do bufora)
M
err = x2 ( n ) − ∑ h n −1 ( m ) ⋅ b ( m ) (oblicz błąd „skorelowania” sygnałów x1(n) i x2(n))
m =1

h n ( m ) = h n −1 ( m ) + wzm( n ) ⋅ err ⋅ b ( m ) , m = 1, 2, 3,..., M (adaptuj wagi filtra)

 M M 
∆φˆ 4 ( n ) = arctg  ∑ s ( m ) hn ( m ) ∑ c ( m ) hn ( m )  (oblicz przesunięcie fazowe)
 m =1 m =1 
b ( m ) = b ( m − 1) , m = M , M − 1, M − 2,..., 2 (przesuń próbki w buforze)
n = n +1 (zwiększ indeks n)
end while
UWAGA: wzm ( n ) − patrz tabela 24-3, algorytmy: LMS, NLMS-1, NLMS-2, NLMS-3.

Tab. 24-2. Algorytmy pomocniczych procedur odszumiania estymaty fazy

FILTR FIR. Nierekursywna filtracja dolnopasmowa typu FIR. N = 2M + 1


M
∆φˆ iFIR ( n ) = ∑ w ( m ) h ( m ) ∆φˆ i ( n − m ) , i = 1, 2, 3, 4
m =− M

h(m) − idealna odpowiedź impulsowa filtra, w(m) − okno czasowe o długości 2M + 1

FILTR LP. Adaptacyjny filtr liniowej predykcji LP. N = M


Inicjalizacja:
hn=0 (m) = 0, m = 1, 2, 3, ..., M (wyzeruj wagi filtra)
b ( m ) = 0, m = 1, 2, 3, ..., M (wyzeruj próbki w buforze)
Algorytm:
while (dostępna nowa estymata przesunięcia fazowego o indeksie n: ∆φˆ i ( n ) )
M
∆φˆ iLP ( n ) = ∑ hn −1 ( m ) b ( m ) (predykcja)
m =1
err = ∆φˆ i (n ) − ∆φˆ iLP (n ); (błąd predykcji)
hn (m ) = hn −1 (m ) + wzm( n ) ⋅ err ⋅ b(m ), m = 1, 2, 3, ..., M ; (adaptacja wag filtra)
b(m ) = b(m − 1), m = M , M − 1, M − 2, ..., 2; (przesuń próbki w buforze)
b(1) = ∆φˆ i (n ); n = n + 1; (podstaw, zwiększ indeks n)
end while
UWAGA: wzm ( n ) − patrz tabela 24-3, algorytmy: LMS, NLMS-1, NLMS-2, NLMS-3
Projekt FAZA: estymacja chwilowego przesunięcia fazowego 785

Tab. 24-2. cd.

KALMAN. Filtr Kalmana

Inicjalizacja:

F − macierz modelu procesu (24.15), H − macierz modelu pomiaru (24.15), se − wektor począt-
kowych estymat zmiennych procesu [ ∆φˆ i (0 ) θˆ (0 ) ]T (24.14), P − macierz wariancji ww. estymat,
R = r − wariancja szumu pomiaru, λ, µ − parametry adaptacji ( zapominania)
1 1  0  p11 0   1 0
F =  , H = [1 0] , se = 0 , P =  0 p22 
, R = [r11 ] = r , I =  
0 1    0 1 

Algorytm 1 (λ, µ < 1):


while (dostępna nowa estymata przesunięcia fazowego o indeksien)
z = ∆φˆ i ( n ) , s1 = F ⋅ se, z1 = H ⋅ s1, err = z − z1, r = r + µ ⋅ (err 2 − r ), P1 = F ⋅ P ⋅ F T

( )
wzm = P1 ⋅ H T ⋅ H ⋅ P1 ⋅ H T + λ ⋅ r ⋅ r , se = s1 + wzm ⋅ err , P = I − wzm ⋅ H ⋅ P1/λ ( )
∆φˆ iKAL ( n ) = se(1)
end while

Algorytm 2 (λ > 1):


while (dostępna nowa estymata przesunięcia fazowego o indeksien)
z = ∆φˆ ( n ) , s1 = F ⋅ se,
i z1 = H ⋅ s1, err = z − z1, P1 = λ ⋅ F ⋅ P ⋅ F T

( )
wzm = P1 ⋅ H T ⋅ H ⋅ P1 ⋅ H T + r , se = s1 + wzm ⋅ err, P = I − wzm ⋅ H ⋅ P1 ( )
∆φˆ iKAL ( n ) = se(1)
end while

Tab. 24-3. Adaptacja współczynnika wzmocnienia wzm(n) w algorytmach KORELATOR i FILTR LP


(0 < µ < 1 − szybkość adaptacji, 0 < β < 1 − współczynnik zapominania energii, γ − współczynnik bezpie-
czeństwa mianownika; eng(0) = 0). Nazwy LMS (ang. Least Mean Squares) i NLMS (ang. Normalized
Least Mean Squares) oznaczają odpowiednio nieunormowany i unormowany adaptacyjny algorytm gra-
dientu stochastycznego

Nazwa algorytmu Wyznaczanie współczynnika wzmocnienia

LMS wzm(n ) = 2 ⋅ µ

M
NLMS-1 eng (n ) = ∑ b(m ) ⋅ b(m ), wzm (n ) = 2 ⋅ µ (γ + eng (n ))
m =1

NLMS-2 eng (n ) = M ⋅ β ⋅ b(1) ⋅ b(1) + (1 − β ) ⋅ eng ( n − 1), wzm(n ) = 2 ⋅ µ (γ + eng (n ))

NLMS-3 eng (n ) = β ⋅ b(1) ⋅ b(1) + (1 − β ) ⋅ eng ( n − 1), wzm(n ) = 2 ⋅ µ (M ⋅ eng (n ))


786 Projekt FAZA: estymacja chwilowego przesunięcia fazowego

24.4. Przykładowy program komputerowy


Autorowi niniejszej książki bardzo podobała się parodia „Wiadomości” telewizyjnych, którą
„dawno, dawno temu ...” miał przyjemność oglądać w jednym z programów rozrywkowych.
Speaker wchodził w niej do studia i bardzo zadowolony oznajmiał widzom, że dzisiaj nie ma
dla nich żadnych nowych „wiadomości”, po czym szybko wychodził.
Tak, tak, drogi Czytelniku. Kończy się już nasza wspólna podróż poprzez dziesiątki wzorów,
rysunków, tabel i programów. Miała ona sens tylko wtedy kiedy, nasze wspólne „wspinaczki”
matematyczne i programowe pozwoliły Ci rozwinąć skrzydła i przeistoczyć się z nieporadnego
Jasia Małgosi w zaradnego Jana Małgorzaty, który „z niejednego − cyfrowego − pieca już
chleb jadł”.
W związku z tym nie mam już dla Ciebie Czytelniku „żadnych nowych wiadomości” („pod-
powiedzi”). Nie chcę odebrać Ci szansy sprawdzenia własnych sił i wielkiej satysfakcji z od-
niesienia prawdziwego zwycięstwa. Ostatni program napiszesz zupełnie sam.
Powinieneś osobiście zaimplementować algorytmy z tabel 24-1 − 24-3 w języku Matlab i zwe-
ryfikować ich użyteczność metodą symulacji komputerowych. Opisaliśmy już problem, zapro-
ponowaliśmy algorytm, teraz najwyższy czas, aby napisać odpowiedni program i zweryfi-
kować poprawność algorytmu.
Po „uruchomieniu” programów wszystkich algorytmów należy porównać właściwości wszy-
stkich metod obliczeniowych ze względu na ich błędy dynamiczne, wrażliwość szumową, zło-
żoność obliczeniową oraz możliwości praktycznej implementacji.

Powodzenia!

Tab. 24-4. Kod programu napisanego przez Czytelnika w języku Matlab, implementujący i testujący opisa-
ne w tym rozdziale metody estymacji chwilowego przesunięcia fazowego

% Ćwiczenie: Happy End


25
EPILOG:
implementacja algorytmów DSP na
procesorach sygnałowych

Nie, to jeszcze nie koniec! Niniejszy rozdział stanowi swoisty EPILOG naszej opowieści. Jak
w teatrze kurtyna pójdzie w nim w górę odsłaniając to, co tak właściwie jest sercem cyfrowego
przetwarzania sygnałów: d e d y k o wa n y s p r z ę t , czyli różne, elektroniczne, mniej lub bar-
dziej skomplikowane „liczydełka” oraz zintegr o wane, „sygnałowe” śr o d o wiska p r o -
gr amo we, z pomocą których można ten sprzęt w prosty sposób ożywiać. Ponieważ sygnały
cyfrowe są zbiorami (wektorami, macierzami, ...) liczb, to do ich przetwarzania można użyć
dowolnego rodzaju układu, który może te liczby dodawać, odejmować, mnożyć i dzielić. Są
nim klasyczne procesory komputerowe, a także tzw. procesory sygnałowe i mikrokontrolery
oraz układy logiki programowalnej, które obecnie już mają wewnątrz zaimplementowane
jednostki arytmetyczno-logiczne lub umożliwiają prostą implementację takich jednostek. Przy-
miotnik „sygnałowy” oznacza najczęściej, że układ ma możliwość szybkiego wykonywania
(najczęściej w jednym cyklu zegarowym) operacji mnożenia zawartości dwóch rejestrów oraz
dodawania wyniku do trzeciego rejestru, nazywanego akumulatorem. Aby było to możliwe,
w układzie muszą być wówczas rozwiązane także w efektywny sposób problemy pobierania
danych z pamięci, poprzez np. zwielokrotnianie równocześnie dostępnych przestrzeni i szyn
adresowych, danych oraz sygnałów sterujących. Szybkość tej operacji daje możliwość prze-
twarzania próbek danych „w locie”, w trakcie ich napływania, w tak zwanym czasie rzeczy-
wistym (na bieżąco). Przykładowo:
− procesory sygnałowe występują w telefonach komórkowych, w których jest dokonywana
w czasie rzeczywistym kompresja i dekompresja sygnału mowy,
− mikrokontrolery sygnałowe w tanich sterownikach urządzeń,
− układy logiki programowalnej, np. FPGA (Field Programmable Gate Array), w kartach
graficznych, wymagających równoległego przetwarzania na bieżąco wielu potoków liczb
w różnych arytmometrach,
− a układy ASIC (Application-Specific Integrated Circuits) w odbiornikach telewizji cyfrowej,
dekodujące skomplikowany strumień bitów i zamieniające go w płynny ciąg perfekcyjnej
jakości obrazów.
Ponieważ liczby mogą być reprezentowane w różny sposób (patrz rozdział 7), procesory
sygnałowe dzieli się na stałoprzecinkowe i zmiennoprzecinkowe. Pierwsze z nich są zdecydo-
788 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

wanie tańsze, ale też trudniejsze w użyciu dla nowicjusza, ponieważ konieczna w nich jest stała
kontrola nad możliwościami wystąpienia przepełnień rejestrów. My tym zagadnieniem w ogóle
się do tej pory nie zajmowaliśmy, gdyż z zasady w języku Matlab wszystkie obliczenia są prze-
prowadzane na liczbach zmiennoprzecinkowych podwójnej precyzji (64 bity).
Oczywiście, możliwości elektronicznych zabawek bardzo szybką się starzeją, dlatego postara-
my się przedstawić w tym rozdziale tylko najistotniejsze aspekty poruszanych zagadnień.
Drugim bohaterem tego rozdziału są zaawansowane środowiska programowe, mające umożli-
wiać bardzo szybką implementację sprzętową algorytmów. Naszym celem do tej pory było
zrozumienie samego algorytmu oraz jego zakodowanie w języku Matlab i przetestowanie. Im
większy problem, tym bardziej skomplikowany algorytm i dłuższy program. Ponieważ Matlab
ma bardzo bogatą bibliotekę funkcji cyfrowego przetwarzania sygnałów, gotowych cegiełek
z których można zbudować olbrzymie domy, jesteśmy bezpieczni − przygotowani na różne
okoliczności. Ale, niestety, są dwa mankamenty tego rozwiązania. Po pierwsze, trzeba pisać
programy, co zabiera trochę czasu, a po drugie, i co gorsze, programy te są ... zupełnie bez-
użyteczne, ponieważ procesory sygnałowe ich ... nie zrozumieją. Jak można wyjść z tej ślepej
uliczki? Istnieją zintegrowane środowiska, także w samej rodzinie Matlaba (jest to Simulink),
w których algorytm buduje się nie w sposób tekstowy tylko w graficzny, łącząc ze sobą jego
poszczególne bloczki. Dodatkowo można wymuszać całkowitoliczbowość prowadzonych ob-
liczeń i w ten sposób sprawdzać jego stabilność numeryczną (tym razem to DSP Blockset). Jest
to bardzo ważne w sytuacji, kiedy adresatem algorytmu jest procesor stałoprzecinkowy, operu-
jący przykładowo na liczbach 16-, 24- lub 32-bitowych. Następnie można kod Matlaba prze-
kształcić za pomocą odpowiednich narzędzi do kodu napisanego w języku C, a kompilatory
tego języka są już dostępne dla większości procesorów sygnałowych. Co ciekawe producent
Matlaba dostarcza już także gotowe narzędzia, umożliwiające przejście bezpośrednio z kodu
Matlaba do kodu asemblerowego, napisanego w języku maszynowym konkretnego procesora.
Teraz jest to możliwe dla procesorów firm Analog Devices, Motorola i Texas Instruments,
które wymieniono alfabetycznie, aby nie być posądzonym o kryptoreklamę („Nie ze mną te
numery ...”).
Podsumowując, w tym rozdziale przedstawiono zagadnienie implementacji algorytmów cyfro-
wego przetwarzania sygnałów w specjalnie do tego celu przeznaczonych układach elektronicz-
nych.

25.1. Wprowadzenie do budowy i programowania procesorów


DSP
Na rysunku 25.1 jest przedstawiona typowy system przetwarzania sygnałów cyfrowych. Jak już
„dobrze” wiemy w klasycznej cyfrowej analizie i przetwarzaniu sygnałów najczęściej używa
się następujących funkcji:

Wejście Filtr Filtr Wyjście


analogowe antyaliasingowy Operacje DSP rekonstruujący analogowe
x(n) y(n)
x(t) A/C Platforma C/A y(t)
sprzętowa

Rys. 25.1. System przetwarzania sygnałów w sposób cyfrowy


EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 789

M M
1) filtracji FIR (bm − współczynniki filtra): y(n) = ∑ bm x(n − m ) = ∑ h(m) x(n − m )
m =0 m=0
M N
2) filtracji IIR (bm, ak − współczynniki filtra): y(n) = ∑ bm x(n − m)+ ∑ a k y(n − k )
m=0 k =1
N
1
3) funkcji korelacji wzajemnej: R x, y (m ) =
N
∑ x (n) y (n + m )
n =0
N −1
4) transformacji Fouriera: X (k ) = ∑ x ( n ) e − j 2 πn k / N
n =0
N −1
5) transformacji DCT: X (k ) = α(k ) ∑ x ( n )cos ( πk ( n + 1/ 2) / N )
n =0

Każda z nich ma identyczną strukturę obliczeniową − jest sumą iloczynów:


a = x0 y0 + x1 y1 + x2 y2 + x3 y3 + ... + xM y M (25.1)

Kluczem do sukcesu jest więc szybkie mnożenie dwóch liczb i dodawanie wyniku do zawartoś-
ci akumulatora a (MAC − Multiply and Accumulate):
a = x0 y0
a = a + x1 y1
(25.2)
a = a + x2 y2
iii
W układach z procesorami sygnałowymi liczby są pobierane z przetworników analogowo-cy-
frowych (patrz rozdział 7), zapisywane w pamięci, następnie pobierane z niej do procesora
(jednostki arytmetyczno-logicznej ALU) i przechowywane w jego rejestrach. Procesor mnoży
i dodaje zawartości swoich rejestrów oraz stale pobiera do nich nowe liczby. Partytura operacji
(25.2) dla procesora sygnałowego wygląda w przybliżeniu tak (anowe = astare + x ⋅ y):
a = 0 ( x0 → x, y0 → y )
powtórz ( M + 1) razy : (25.3)
{ a = a + x ⋅ y ( x0 → x, y0 → y ) }
gdzie a oznacza rejestr akumulator, a x oraz y − rejestry pomocnicze, przeznaczone do prze-
chowywania argumentów operacji arytmetycznych. Operacje w nawiasach okrągłych są wyko-
nywane równocześnie z operacjami arytmetycznymi i dotyczą pobierania liczb z pamięci do
rejestrów x i y procesora. Na początku akumulator jest zerowany, a z pamięci jest pobierana
pierwsza para liczb. Następnie w pętli wielokrotnie jest wykonywane równoczesne mnożenie
aktualnej zawartości rejestrów x i y oraz pobieranie do nich nowych argumentów. Po M + 1
obiegach pętli w akumulatorze znajduje się wartość będąca sumą iloczynów par liczb xk oraz
yk (25.1).
Ponieważ kolejne pary liczb (x0, y0), (x1, y1), (x2, y2), ... są potrzebne w tym samym czasie, naj-
częściej procesor sygnałowy ma trzy pamięci: jedną na program (P) oraz dwie na dane − argu-
menty operacji arytmetycznych (nazwijmy je X i Y), a także trzy niezależne magistrale,
składające się z szyn: adresowej, danych i sygnałów sterujących (do obliczeń są nam potrzebne
w istocie dane, nie adresy). Dane xk i yk są więc pobierane równocześnie do rejestrów proce-
790 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

sora. Ponieważ po wejściu w pętlę powtórz i zdekodowaniu instrukcji MAC a = a + xy


procesor wie co ma wielokrotnie zrobić, nie pobiera on w kolejnych cyklach zegara nowych
instrukcji programu tylko cały czas nowe dane. W związku z tym w niektórych procesorach
sygnałowych są tylko dwie pamięci, np. P/X i Y, i podczas pętli dane x, np. stałe współczynniki
filtra, są pobierane z pamięci programu P.
Problem adresowania pamięci jest rozwiązany w ten sposób, że procesor ma dla każdej magi-
strali dodatkowe (dedykowane) jednostki arytmetyczne do wyliczania adresów wraz z przypi-
sanymi im zestawami rejestrów adresowych rn, których zawartość jest traktowana jako adres
pamięci. Zwiększanie (r) + lub zmniejszanie (r) − o 1 zawartości tego rejestru powoduje, że
dany rejestr będzie po tej operacji pokazywał następną lub poprzednią komórkę pamięci niż na
początku. Zapis (r) + lub (r) − oznacza, że najpierw należy wykorzystać aktualny adres prze-
chowywany w rejestrze, a dopiero potem go zwiększyć lub zmniejszyć o 1, natomiast − (r)
odwrotnie: najpierw zmniejszyć, a dopiero potem użyć.
Podsumowując powyższe uwagi, jeśli przez:
[X:(r)] → x (25.4)
oznaczymy operację pobierania danej z pamięci X spod adresu przechowywanego w rejestrze
r, a przez
[X:(r)+] → x (25.5)
tę samą operację z uwzględnieniem postinkrementacji zawartości rejestru r po jego użyciu, to
algorytm (25.3) przyjmuje następującą postać:
rx = adres ( x0 ) , ry = adres (y0 ) , (opcjonalnie m y = M − 1)
a = 0 ( [X : (rx )+ ] → x, [Y : (ry )+ ] → y )
powtórz ( M ) razy : (25.6)
{ a = a + x ⋅y ( [X : (rx )+ ] → x, [Y : (ry )+ ] → y ) }
Dodatkowo z bazowymi rejestrami adresowymi r są skojarzone odpowiednie rejestry adresowe
mn (modulo), które są wykorzystywane do ograniczenia zmienności zawartości rejestru r tylko
do zadanej grupy kolejnych adresów w określony sposób (cyklicznie lub reverse carry). Do
jednorazowego wyliczenia splotu adresowanie cyklicznie nie jest potrzebne, a konieczność
jego użycia wynika ze struktury bufora danych dla próbek sygnału podczas filtracji na bieżąco,
w tzw. czasie rzeczywistym (real-time) ). Jeśli (25.1) opisuje nierekursywną filtrację cyfrową,
to liczby {y0, y1, y2, ..., yM} są skończonym zbiorem współczynników odpowiedzi impulsowej
filtra:
zn = xn −0 y0 + xn −1 y1 + xn − 2 y2 + xn −3 y3 + ... + xn − M y M (25.7)

na które musi cyklicznie „pokazywać” rejestr ry:


y0 .... y M , y0 .... y M , y0 .... y M ,...... (25.8)
n =0 n =1 n =2

ponieważ podczas filtracji są one cyklicznie wykorzystywane dla kolejnych chwil czasowych
n. Aby tak było, to wystarczy przed pierwszym użyciem rejestru ry powiadomić procesor, że
zwiększanie zawartości tego rejestru ma być realizowane w trybie modulo M. Robi się to
ustawiając zawartość rejestru modulo my, związanego z ry, na M−1, co już zapobiegliwie
zrobiono w pierwszej linii równania (25.6).
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 791

Przejdziemy teraz do bardziej konkretnego omówienia przykładu implementacji operacji


filtracji nierekursywnej na procesorze sygnałowym DSP56xxx firmy Motorola.

25.2. Splot sygnałów na procesorze DSP


Przypomnijmy, w przypadku splotu sygnału x(n) z odpowiedzią impulsową filtra h(n) mamy:
M
y(n) = ∑ h( k ) x (n − k ) = h(0) x( n) + h(1) x( n − 1) + h(2) x( n − 2) + ... + h( M ) x( n − M ) (25.9)
k =0

czyli próbka wyjściowa y(n) jest sumą ważoną aktualnej oraz M ostatnich próbek sygnału wej-
ściowego {x(n), x(n − 1), x(n − 2),...,x(n − M)}. W związku z tym próbki te muszą być pamię-
tane. Są one przechowywane w buforze roboczym, który jest aktualizowany po nadejściu
z przetwornika analogowo-cyfrowego kolejnej danej wejściowej. Aby zapisać nową daną, „sta-
re” próbki mogą być przesunięte o jedną pozycję. W jego wyniku najstarsza próbka jest usu-
wana z bufora, na zwolnione miejsce jest zaś zapisywana nowa dana. Bufor o takiej organizacji
próbek nazywa się buforem przesuwnym. Zasada jego pracy jest przedstawiona na rysunku
25.2a. Ponieważ jednak przemieszczanie próbek w pamięci niepotrzebnie zajmuje czas proce-
sora, częściej stosuje się bufory kołowe, w których taka konieczność nie występuje. W tym
przypadku „przychodząca” próbka „nadpisuje” w pamięci próbkę najstarszą, po czym następu-
je przesunięcie wskaźnika zapisu („kasowania”) na następną pozycję w buforze (w sposób
kołowy). Zasada pracy bufora kołowego jest zilustrowana na rysunku 25.2b. Po „załadowaniu”
nowej próbki, próbki znajdujące się w buforze powinny być odczytywane w kierunku przeciw-
nym do ruchu wskaźnika „wpisującego”, od ostatnio wpisanej do najstarszej. Na rysunku kie-
runek odczytu danych jest zaznaczony linią przerywaną. Bufory przesuwne i kołowe były już
opisane w rozdziale 10.2 (w tabeli 10-2 znajdują się programy napisane w języku Matlab, które
je implementują).

a) bufor przesuwny
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3

b) bufor kołowy 1 1 1 1 5 5
2 2 2 2 6
3 3 3 3
4 4 4

Rys. 25.2. Ilustracja graficzna zasady działania bufora przesuwnego i kołowego o długości M = 4. Wartości
kolejnych próbek sygnału x(n) są równe: 1, 2, 3, .... Strzałka oraz przyciemnione pole pokazują miejsce,
w którym jest umieszczana w buforze kolejna próbka

W związku ze wszechobecną w cyfrowym przetwarzaniu sygnałów postacią równania (25.1)


w procesorach sygnałowych serii DSP56xxx firmy Motorola zastosowano następujące rozwią-
zanie układowe (patrz rysunki 25.3 i 25.4):
792 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

• trzy pamięci wewnętrzne (programu P, danych X i danych Y) wraz z magistralami łączącymi


je z jednostką arytmetyczno-logiczną ALU (trzy szyny: adresowe, danych i sterujące);
• równoczesne pobieranie dwóch mnożników z niezależnych pamięci X i Y do dwóch
rejestrów ALU procesora, np. x0 i y0, oraz równoczesne inkrementowanie lub dekremento-
wanie (zwiększanie lub zmniejszanie) wskaźników AdrX i AdrY do obu pamięci w trybie
liniowym lub modulo,
• mnożenie zawartości rejestrów x0 i y0 oraz dodanie wyniku tej operacji do aktualnej war-
tości znajdującej się w akumulatorze a (akumulowanie sumy iloczynów).
Ukoronowaniem możliwości procesora sygnałowego jako akceleratora funkcji cyfrowego prze-
twarzania sygnałów jest w tym przypadku wieloskładnikowa instrukcja MAC (ang. Multiply
and Accumulate), która w jednym cyklu zegarowym równocześnie wykonuje aż sześć różnych
operacji (dokładnie – siedem, bo jeszcze ta instrukcja może być wykonywana warunkowo
z aktualizacją bitów warunkowych [zero, carry, ...]). Są one zebrane w tabeli 25-1. Na szcze-
gólną uwagę zasługuje tutaj modyfikacja adresów w trybie modulo, która umożliwia bardzo
prostą obsługę buforów kołowych, omawianych w podrozdziale 10.2 i zaimplementowanych
programowo w języku Matlab w tabeli 10-2. Każdy rejestr adresowy Adr ma skojarzony z nim
rejestr przesunięcia (offsetowy) Off oraz rejestr modulo Mod. Po zainicjalizowaniu rejestru
Adr wartością początkową adresu (powinna to być zawsze wielokrotność pierwszej potęgi
liczby 2 większej od zadanego Mod), odejmowanie/dodawanie do Adr przesunięcia Off jest
wykonywane w trybie modulo Mod.

Tab. 25-1. Operacje wykonywane przez procesor sygnałowy podczas instrukcji MAC
Lp. Nazwa operacji Kod operacji
1 Wymnożenie aktualnej zawartości rejestrów x i y (x ⋅ y)
2 Dodanie wyniku tej operacji do zawartości akumulatora a: a = a + (x ⋅ y)
3 Pobranie nowej wartości xn z pamięci X-RAM spod adresu [ X-RAM:(AdrX) ]→ rejestr x
znajdującego się w rejestrze wskaźnikowym AdrX
4 Pobranie nowej wartości yn z pamięci Y-RAM spod adresu
[ Y-RAM: (AdrY) ] → rejestr y
znajdującego się w rejestrze wskaźnikowym AdrY
5 Zwiększenie adresu przechowywanego w rejestrze AdrX AdrX = (AdrX + OffX)mod(ModX)
6 Zwiększenie adresu przechowywanego w rejestrze AdrY AdrY = (AdrY + OffY)mod(ModY)

Procesory sygnałowe innych firm, np. Texas Instruments i Analog Devices, mają tylko dwie
pamięci wewnętrzne: programu P (PM) i danych D (DM). W ich przypadku współczynniki filtra
zwyczajowo są przechowywane w pamięci programu.
W procesorach sygnałowych „równoczesność” wykonywania wielu operacji w jednym cyklu
zegarowym jest osiągana dzięki potokowej architekturze procesora, odpowiedniemu wyborowi
instrukcji oraz umiejętnemu napisaniu programu przez użytkownika.

Przedstawimy teraz więcej szczegółów programowych dla filtracji nierekursywnej, realizowa-


nej z wykorzystanie jednego z wielu procesorów sygnałowych rodziny DSP56xxx firmy Moto-
rola. Zbiór rejestrów wewnętrznych każdego z tych procesorów jest przedstawiony na rysunku
25.5. Rejestry a = a2+a1+a0 i b = b2+b1+b0 są akumulatorami, rejestry x0, x1, y0, y1 to
pomocnicze rejestry arytmetyczne, natomiast rejestry adresowe (wskaźnikowe, przesunięcia
i modulo) są skojarzone w triady: {rk, nk, mk}, k = 0, 1, 2, ..., 7. Z kolei na rysunku 25.3
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 793

zilustrowano zasady współpracy rejestrów z generatorami adresów AGU (Address Generation


Unit) oraz jednostką arytmetyczno-logiczną ALU (Arithmetic & Logic Unit). W przypadku
procesorów sygnałowych firmy Motorola operacja filtracji nierekursywnej (splotu sygnałów)
jest wykonywana za pomocą tylko dwóch prostych instrukcji:
rep #ilerazy
mac x0, y0, a x:(r0)−,x0 y:(r4)+, y0

Oczywiście przedtem trzeba zainicjalizować w odpowiedni sposób wartości wszystkich reje-


strów adresowych oraz zapewnić „dopływ” nowych danych do bufora próbek filtrowanego
sygnału (np. za pomocą obsługi przerwań od przetworników analog-cyfra). Instrukcja rep
(repeat) powoduje, że występująca za nią instrukcja złożona mac jest powtarzana #ilerazy
(wartość stała równa liczbie współczynników filtra). Dane znajdujące się aktualnie w rejestrach
procesora x0 i y0 są mnożone, wynik zaś tej operacji jest dodawany do aktualnej zawartości
akumulatora a. Równocześnie z pamięci X (x:) spod adresu przechowywanego w rejestrze r0
jest pobierana nowa mnożna do rejestru x0, z pamięci zaś Y (y:) spod adresu przechowywa-
nego w rejestrze r4 jest pobierany nowy mnożnik do rejestru y0. Następnie rejestry wskaźni-
kowe są modyfikowane w taki sposób, aby pokazywały na dane, które będą załadowane w na-
stępnej kolejności do rejestrów procesora: rejestr r0 jest dekrementowany (r0 = r0 − 1), r4
jest zaś inkrementowany (r4 = r4 + 1). Obie operacje „adresowe” są wykonywane w trybie
modulo. Idea filtracji z organizacją buforów kołowych jest przedstawiona poglądowo na ry-
sunku 25.4. Wpisywanie kolejnej danej wejściowej do bufora próbek filtrowanych odbywa się
„w przód”, tzn. nowa dana jest umieszczana na miejscu najstarszej danej, czyli „usuwa” ją
z bufora. Natomiast pobieranie próbek z bufora podczas filtracji odbywa się „wstecz”, tzn.
zaczynając od próbek „najmłodszych” do najstarszych. Po obliczeniu kolejnej próbki wyjścio-
wej rejestr wskazujący na współczynniki wagowe filtra zawsze powinien pokazywać na współ-
czynnik h(0).
W procesorach Motoroli równoczesne adresowanie pamięci X i Y jest możliwe, kiedy jeden re-
jestr wskazujący jest równy r0, r1, r2 lub r3, drugi należy zaś do zbioru: r4, r5, r6 lub r7.

M
y(n) = ∑ h( m) x( n − m)
m =0

AGU Y ADRES Y pamięć Y pamięć X ADRES X AGU X


r4 n4 m4 r0 n0 m0
r5 n5 m5 r1 n1 m1
r6 n6 m6 r2 n2 m2
r7 n7 m7 r3 n3 m3

pamięć P ROZKAZ
a = a + x⋅y
Licznik rozkazów

Rys. 25.3. Ilustracja budowy i zasady pracy procesora sygnałowego podczas wykonywania instrukcji MAC
(Multiply and Accumulate)
794 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

pamięć X pamięć Y
AdrX− − AdrY++
x(n-5) h(0) x(n−M) x(n)
x(n-4) h(1)
x(n-3) h(2)
x(n-2) h(3) ... x(n−1)
x(n-1) h(4)
x(n) h(5)
x(n-7) h(6) x(n−5) x(n−2)
x(n-6) h(7)

x(n−4) x(n−3)
a = a + x⋅y

Rys. 25.4. Ilustracja równoległości pracy procesora sygnałowego podczas wykonywania instrukcji MAC
(Multiply and Accumulate) z podkreśleniem wykorzystania buforów kołowych

Rejestry Rejestry Rejestry


wskaźników przesunięć modulo

r0 n0 m0
r1 n1 m1
r2 n2 m2
r3 n3 m3
r4 n4 m4
r5 n5 m5
r6 n6 m6
r7 n7 m7

Rejestry arytmetyczne

a2 a1 a0
Akumulatory
b2 b1 b0
x1 x0
Rejestry danych
y1 y0

Rys. 25.5. Rejestry wewnętrzne procesora sygnałowego firmy Motorola DSP56xxx. a2 i b2 to 8-bitowe
rejestry przepełnień

W tabeli 25-2 przedstawiono przykładowy, bardziej szczegółowy program filtracji, uwzglę-


dniający inicjalizację rejestrów wskaźnikowych procesora DSP56xxx i pamięci danych. W tym
przypadku filtr ma 3 współczynniki (ntaps), wektor danych wejściowych liczy zaś 21 próbek
(ndata). Na początku programu są deklarowane wartości stałych parametrów programu (ko-
menda asemblera equ). Następnie specyfikuje się, gdzie ma być umieszczony program
(w pamięci programu P pod adresem 40, zapisanym heksadecymalnie). Potem są inicjalizowa-
ne wartości rejestrów adresowych, tak aby „pokazywały” one na określone bufory w pamięci
oraz umożliwiały adresowanie kołowe (modulo). W końcu w pętli do jest wykonywana se-
kwencja instrukcji kończących się etykietą endfilter. W odróżnieniu od instrukcji rep
umożliwia ona powtórzenie więcej niż jednej instrukcji i może być przerwana przez program
obsługi przerwania. Każdorazowo na początku pętli jest pobierana do rejestru x0 kolejna
próbka sygnału wejściowego. Dana ta (typu ułamkowego (7.5) − radix float) jest czytana ze
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 795

zbioru dyskowego o nazwie xsig.dat, ponieważ adres xin = x:$E000 został z nim
skojarzony w zbiorze komend (typu batch) dla symulatora. Następnie jest zapisywana do
bufora próbek wejściowych wskazywanego przez rejestr r1. Potem następuje „taniec z piłką”,
czyli filtracja danych, które aktualnie znajdują się w buforze (rejestr r1 pokazujący na próbki
sygnału jest dekrementowany, a rejestr r4 wskazujący na próbki odpowiedzi impulsowej jest
inkrementowany). Po obejściu „dookoła” buforów oba rejestry wskaźnikowe znajdują się w
miejscu wyjścia: r1 pokazuje na ostatnio wczytaną próbkę, r4 − na wagę h(0) filtra. W
związku z powyższym r1 musi być przesunięty o jedną pozycję do przodu, czyli na
„najstarszą” próbkę sygnału, która ma zostać usunięta z bufora przez następną daną wejściową.
Wynik filtracji zostaje zapisany do zbioru dyskowego ysig.dat, skojarzonego z adresem
y:$E000 w zbiorze komend dla symulatora.

Tab. 25-2. Przykładowy program filtracji sygnałów z wykorzystaniem procesora sygnałowego DSP56xxx
firmy Motorola (przeznaczony dla symulatora tego procesora)

Ćwiczenie: y = h⊗x ; iloczyn skalarny czyli filtr nierekursywny (dane czytane z dysku i zapisywane na dysk)

page 255,255 ; szeroki wydruk tekstu programu do zbioru (tzw. listing)


; znak średnika; oznacza, że za nim do końca linii jest tylko komentarz
xin equ $E000 ; inicjalizacja xin: wirtualny „adres” sygnału wejściowego z dysku (w pamięci X)
yout equ $E000 ; inicjalizacja yout: wirtualny „adres” sygnału po filtracji, zapisywanego na dysk (p. Y)
xdata equ $0 ; adres bufora danych wejściowych (w pamięci X), zapisany heksadecymalnie ($)
ydata equ $0 ; adres bufora danych wyjściowych (w pamięci Y), zapisany heksadecymalnie ($)
hfiltr equ $100 ; adres pierwszej próbki odpowiedzi impulsowej filtra (w pamięci Y), $100 = 256
ntaps equ 3 ; długość odpowiedzi impulsowej filtra równa 3 (współczynniki)
npoints equ 21 ; długość sygnału wejściowego (równa 21 próbek); próbki są czytane ze zbioru dyskowego
org p:$40 ; $40 = 64 początek programu w pamięci programu P zapisany heksadecymalnie
init ; etykieta, można do niej skoczyć instrukcją jmp (jump)
move #xdata,r1 ; załaduj do rejestru adresowego r1 adres początku bufora danych wejściowych
move #ntaps−1,m1 ; ustaw tryb modulo ntaps zmiany wartości rejestru r1: m1 = ntaps−1
move #ydata,r2 ; załaduj do rejestru adresowego r2 adres początku bufora danych wyjściowych
move #ntaps−1,m2 ; ustaw tryb modulo ntaps zmiany wartości rejestru r2: m2 = ntaps−1
move #hfiltr,r4 ; załaduj do rejestru adresowego r4 adres początku bloku pamięci ze wsp. filtra
move #ntaps−1,m4 ; ustaw tryb modulo ntaps zmiany wartości rejestru r4: m2 = ntaps−1
; pobieraj kolejne próbki sygnału z dysku do bufora w pamięci i je filtruj
do #npoints,endfiltr ; początek pętli: #npoints razy do etykiety endfiltr
move x:(xin),x0 ; pobierz pierwszą próbkę ze zbioru dyskowego do x0
clr a x0,x:(r1)− y:(r4)+,y0 ; zeruj a, zapisz x0 do bufora, pobierz wagę filtra h(0)
rep #ntaps−1 ; początek wewnętrznej pętli − właściwa filtracja
mac x0,y0,a x:(r1)−,x0 y:(r4)+,y0 ; a = a+x0*y0; x0 = x(n−k), y0 = h(k), k = var, (25.9)
macr x0,y0,a (r1)+ ; ostatnie a = a+x0*y0 z zaokrągleniem, inkrementacja r1=r1+1
move a, y:(yout) ; zapisz wynik filtracji, czyli próbkę y(n), do zbioru dyskowego
move a, y:(r2)+ ; zapisz wynik filtracji, czyli próbkę y(n), do bufora wyjściowego
endfilter ; etykieta końca pętli do, koniec pobierania próbek i filtracji
wynik nop ; etykieta dla symulatora dla komendy break
jmp * ; nic nie rób − skacz do siebie
;-----------------------------------------------------------------------------------------------------------------------------------------------
org x:xdata ; bufora danych wejściowych w pamięci X pod adresem xdata
ds ntaps ; tylko rezerwacja ntaps komórek pamięci
;-----------------------------------------------------------------------------------------------------------------------------------------------
org y:ydata ; bufor danych wyjściowych w pamięci Y pod adresem ydata
ds ntaps ; tylko rezerwacja ntaps komórek pamięci
;-----------------------------------------------------------------------------------------------------------------------------------------------
796 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

org y:hfiltr ; odpowiedź impulsowa filtra w pamięci Y pod adresem hfiltr


dc 0.25 ; próbka h(0) odpowiedzi impulsowej filtra
dc 0.5 ; próbka h(1) odpowiedzi impulsowej filtra
dc 0.25 ; próbka h(2) odpowiedzi impulsowej filtra
;-----------------------------------------------------------------------------------------------------------------------------------------------
ZBIÓR KOMEND DO ASEMPLACJI I LINOWANIA (komentarze należy usunąć):
asm56000 -b -g -ic:\DSP56xxx\include -l splot.asm % asemblacja: splot.asm → splot.obj
dsplnk -g splot % linkowanie: splot.obj → splot.cld
cldlod splot.cld >splot.lod % dla procesora: splot.cld → splot.lod
;-----------------------------------------------------------------------------------------------------------------------------------------------
ZBIÓR KOMEND TYPU BATCH DLA SYMULATORA (komentarze należy usunąć):
;-----------------------------------------------------------------------------------------------------------------------------------------------
load splot.cld ; załaduj zbiór splot.cld (wynik końcowy asemblacji i linkowania)
input x:$E000 xsig.dat -rf ; czytanie spod x:$E000, to kolejna dana ze zbioru xsig.dat (ułamkowo)
output y:$E000 ysig.dat -rf -o ; zapis pod y:$E000, to kolejna dana do zbioru ysig.dat (ułamkowo)
r f x:$0..$f ; w pamięci pod adresem x:$0..$f są liczby ułamkowe, tak je wyświetlaj
r f y:$0..$f ; w pamięci pod adresem y:$0..$f są liczby ułamkowe, tak je wyświetlaj
r f y:$100..$f ; w pamięci pod adresem y:$100..$f są liczby ułamkowe, tak wyświetlaj
break #1 wynik ; breakpoint pierwszy ustaw na etykietę wynik w programie

25.3. Wybrane zagadnienia implementacyjne

25.3.1. Specyfika budowy i zastosowań procesorów sygnałowych

Budowa procesora. Mikroprocesory (mikro – gdyż wykonane z użyciem technologii pozwala-


jącej na miniaturyzację elementów, z których jest zbudowany do skali mikrometrów, co jest już
cokolwiek nieaktualne i pewnie wkrótce usłyszymy o nanoprocesorach) sygnałowe zostały wy-
myślone jako systemy cyfrowe mające bardzo wydajnie przetwarzać sygnały cyfrowe będące
dyskretną formą sygnałów analogowych realnego świata. Osiągniecie tego celu wymaga nie
tylko maksymalnie szybkiego wykonywania typowych obliczeń (instrukcja MAC – mnożenia
i akumulacji wyników mnożeń), ale, co jest aktualne we wszelkich systemach przetwarzania
cyfrowego, dostarczania odpowiedniego strumienia danych do obliczeń, a następnie wysyłania
wyników wyliczeń.
Pisząc bardziej wprost, strumienie próbek pochodzących z jednego, a tym bardziej z wielu rze-
czywistych, analogowych źródeł sygnałów, poddanych rytmicznym pomiarom przez przetwor-
niki analogowo/cyfrowe, muszą być we właściwym tempie dostarczone do układów arytme-
tycznych, które przeprowadzą na nich obliczenia, a wyniki obliczeń (np. przefiltrowane próbki
sygnału) muszą być równie sprawnie wysłane z rejestrów wynikowych (z reguły są nimi aku-
mulatory – rejestry o największej liczbie bitów) do przetworników cyfrowo/analogowych, re-
jestrów nadawczych urządzeń transmisyjnych, bądź nieulotnych pamięci masowych. Sam szyb-
ki układ arytmetyczny bez sprawnego systemu transmisji danych jest jak potężny silnik spali-
nowy, któremu brakuje sprawnego podsystemu zasilania paliwowego oraz odbiornika wytwo-
rzonej energii mechanicznej (np. wału napędowego i kół).
Z tych założeń dość jasno wynika architektura nowoczesnego mikroprocesora sygnałowego.
Musi on zawierać jednostkę arytmetyczno-logiczną ALU (Arithmetic&Logic Unit) zdolną wy-
liczyć w jednym kroku zegara iloczyn dwu liczb oraz dodać do rejestru akumulatora wynik
mnożenia z poprzedniego cyklu. Jeszcze lepiej, jeśli par takich operacji może wykonać więcej,
co prowadzi do dwu lub więcej jednostek ALU pracujących równolegle. Do przeprowadzania
wyliczeń z użyciem ALU potrzebujemy w każdym cyklu zegara trzech danych: 1) rozkazu,
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 797

który wybierze rodzaj operacji (arytmetycznej, logicznej, przesłania itd.), oraz 2) pary liczb
(np. próbki sygnału i współczynnika filtra) do mnożenia. Najłatwiej zrealizować to za pomocą
trzech magistral, jednej dla przesyłania rozkazów realizowanego algorytmu (wykonywanego
programu) i dwu magistral dla danych. Warto pomyśleć o jeszcze jednej magistrali dla wysła-
nia wyników na zewnątrz jednostki arytmetyczno-logicznej ALU, choć nie jest to konieczne,
bo możemy do tego wykorzystać jedną z magistral danych. Zdarzają się też rozwiązania, dzie-
lące na dwie fazy przesłania po magistralach danych, trwające cykl zegara: pierwszą − odczytu
(przesłanie z pamięci do rejestru ALU) i drugą – zapisu ( w przeciwnym kierunku).
Przesłania danych realizowane za pomocą rozkazów są stratą cykli zegara i dlatego lepiej jest
mieć mechanizm transmisji niezależny od ALU i jednostki nią sterującej. Takim mechanizmem
obecnym we wszystkich nowoczesnych procesorach jest sterownik DMA (Direct Memory
Access).
Na rysunku 25.6 jest przedstawiona architektura typowego mikroprocesora sygnałowego, prze-
znaczonego do przetwarzania sygnału mowy oraz sygnału audio. Aby nie zagmatwać szcze-
gółami istoty architektury bazowej pominęliśmy na tym rysunku pewne dodatkowe, bardzo
przydatne, a nawet niezbędne, elementy takie jak: wspomniany sterownik DMA, kontroler
przerwań przychodzących z zewnątrz oraz port JTAG – niezbędny podczas uruchamiania
aplikacji na nowej karcie z procesorem sygnałowym. Architektura ta zawiera wszystkie wymie-
nione uprzednio elementy, konieczne do wydajnego przetwarzania sygnału cyfrowego. Próbki
sygnału są najczęściej rytmicznie dostarczane oraz wysyłane na zewnątrz tą samą drogą po-
przez synchroniczny interfejs szeregowy. Sygnały wielokanałowe mogą być transportowane
tym samym kanałem wejścia/wejścia w formacie z podziałem czasu TDM (Time Division
Multipexing).

Pamięć Pamięć Pamięć


Liczniki/ Host Szer. Interfejs
programu danych X danych Y
/Czasomierze Port Synchroniczny

Peryferia

Szyna adresowa X
Jednostka
Generacji Szyna adresowa Y
Adresu

Szyna adresowa programu

Szyna danych X

Szyna danych Y

Szyna danych programu

Dekoder Jednostka ALU: mnożenie


instrukcji 24×24 bity, sumator,
akumulator 56 bitów

Rys. 25.6. Architektura typowego procesora sygnałowego


798 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

Typowa aplikacja. Schemat typowej, ale niezbyt skomplikowanej aplikacji związanej z prze-
twarzaniem sygnału i realizowanej na platformie mikroprocesorowej (procesor sygnałowy, mi-
krokontroler, komputer osobisty, palmtop itp.) jest przedstawiony na rysunku 25.7. Dotyczy on
implementacji algorytmów operujących na blokach próbek, takich jak analiza widmowa lub
kompresja sygnałów. W przypadku filtracji, przetwarzanie odbywa się najczęściej w procesie
obsługi przerwania od nowej, przychodzącej próbki, gdyż takie rozwiązanie minimalizuje opó-
źnienie sygnału. Wówczas odstęp czasowy między kolejnymi próbkami narzuca twardy limit
na czas obliczeń: przetwarzanie pobranej próbki musi się zakończyć przed nadejściem próbki
następnej. Dzieląc ten czas przez czas wykonania pojedynczej instrukcji otrzymujemy (w przy-
bliżeniu – niektóre instrukcje będą wykonywane dłużej) maksymalną liczbę instrukcji proceso-
ra, jakie możemy wykonać. Przykładowo, większość instrukcji procesorów rodziny Motorola
DSP56300 jest wykonywana w jednym cyklu zegara, co przy częstotliwości 100 MHz i czę-
stotliwości próbkowania sygnału 96 kHz (dźwięk stereo 48000 próbek na sekundę) daje około
1000 instrukcji. To i dużo i mało – zależy od aplikacji.

Wybór procesora. Od dłuższego czasu istnieje podział procesorów sygnałowych ze względu


na podstawowe obszary zastosowań na specyficzne rodziny (oznaczenia wytwórców: AD −
Analog Devices, F/M − Freescale/Motorola, TI − Texas Instruments):
• automatyka i mowa (rodziny: TI C2000, F/M DSP56F800, AD ADSP2800);

Start Przerwanie lub żądanie DMA


(włączenie zasilania, reset) (nowa próbka x(n))

Inicjuj procesor, jego rejestry Pobierz x(n) z rejestru układu


(np. bufory cykliczne), komunikacyjnego/bufora
interfejsy, kanały DMA, pamięć przetwornika A/C

Inicjuj układy peryferyjne Zapisz x(n)


(przetworniki A/C, peryferia do w buforze kołowym
komunikacji z nimi)

Ustaw flagę sygnalizującą


Inicjuj system przerwań, pętli głównej
uruchom transmisje DMA

Powrót z przerwania
(RTI − Return from interrupt)

Nie
Próbka(i)
gotowa(e) ?
Pętla
główna
Tak

Przetwarzanie bloku próbek


np. filtracja

Rys. 25.7. Schemat algorytmiczny typowej aplikacji programowej, wykorzystującej procesor sygnałowy
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 799

• multimedia − dźwięk i obrazy (TI C5000, F/M DSP56300, AD BlackFin i AD SHARC);


• wideo i telekomunikacja wielokanałowa (TI C6000, F/M MSC8100, AD TIGER SHARC),
o stale rosnącej mocy przetwarzania, bogatych zestawach specjalizowanych, ukierunkowanych
układów peryferyjnych oraz różnym rodzaju i różnej objętości pamięci (np. z uwzględnieniem
pamięci FLASH dla zastosowań w automatyce).
W ostatnich latach pojawiły się wąsko specjalizowane podrodziny mikroprocesorów sygnało-
wych do zastosowań audio (np. Freescale/Motorola Symphony DSP5636x oraz Analog De-
vices SHARC MELODY) i video (np. DM64X Texas Instruments). Ich specyfika polega prze-
de wszystkim na rozbudowanych układach interfejsów, perfekcyjnie dobranych do źródeł i od-
biorników multimedialnych sygnałów cyfrowych, pozwalających niemal bezpośrednio podłą-
czać standardowe urządzenia takie jak odtwarzacze cyfrowych sygnałów akustycznych z wej-
ściami/wyjściami cyfrowymi S/PDIF i AES/EBU, cyfrowe kamery oraz monitory. Na rysunku
25.8 jest zaprezentowany jeden z takich procesorów.
Z kolei w tabeli 25-3 dla przykładu przedstawiono typowe parametry architektur różnych ro-
dzin procesorów sygnałowych produkowanych przez firmę Texas Instruments. Analizując tę
tabelę można łatwo zauważyć, że najmniejsze i najtańsze procesory, przeznaczone do wbudo-
wania w przeróżnego rodzaju urządzenia, są samowystarczalne, gdyż mają wszystkie zasoby
sprzętowe potrzebne do ich sprawnego funkcjonowania. Przede wszystkim należy zwrócić
uwagę na dużą pamięć nieulotną FLASH programu, która może być w prosty sposób wielo-
krotnie przeprogramowywana i umożliwia częste unowocześnianie oprogramowania. Bardziej
zaawansowane rodziny C5000 i C6000 wyróżnia brak wewnętrznej pamięci FLASH, ale za to
mogą być one wyposażone w wewnętrzną pamięć ROM z „firmowymi” bibliotekami algoryt-
mów. W ich przypadku pamięć ROM musi być uzupełniona na zewnątrz: jednak nie musi to
być pamięć z równoległą np. 8-bitową szyną danych, ale np. pojemna, szeregowa pamięć
EEPROM lub FLASH wykonana w standardzie I2C lub SPI. Procesory te mają ponadto znacz-
nie większą pamięć RAM, kluczową do osiągnięcia wysokiej wydajności, oraz wielokanałowe
sterowniki DMA, szybkie interfejsy równoległe (PCI, porty pamięci SDRAM, MMC/SD)
i szeregowe (wideo, sieciowe, USB). Łatwo również wykorzystać je do pracy w konfiguracjach
wieloprocesorowych oraz do współpracy z układami FPGA.

Rys. 25.8. Przykład mikroprocesora sygnałowego Freescale/Motorola, przeznaczonego do przetwarzania sy-


gnału audio
800 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

Tab. 25-3. Typowe parametry architektury procesorów sygnałowych na podstawie rodzin mikroprocesorów
(µP) firmy Texas Instruments. Oznaczenia: MIPS – miliony instrukcji na sekundę, MFLOPs – miliony ope-
racji zmiennoprzecinkowych na sekundę, SP – stałoprzecinkowy, ZP – zmiennoprzecinkowy

Zasoby procesora µP C2000 µP C5000 µP C6000


Pamięć RAM (wewnętrzna) 1 do 40 KB 32 do 320KB 2MB
FLASH do 256KB brak brak
Interfejs synchroniczny McBSP 1 lub brak 3 1 do 3
(wbudowane A/C)
DMA brak 6 kanałów 64 kanały
Wydajność 30 – 150 MIPS 30 – 900 MIPS do 8000 MIPS
do 1350 MFLOPs
Format słowa 16 lub 32 bity SP 16 bitów SP 16/32 bitów SP
32/40 bitów ZP

25.3.2. Podstawy pisania i uruchamiania programów

Pierwsze kroki. Programy dla procesorów sygnałowych są pisane z użyciem najprostszych


tekstowych edytorów alfanumerycznych według określonych zasad (patrz tabela 25-2). Na-
stępnie są one przekształcane do zbioru także alfanumerycznego, w którym heksad ecymal-
nie są zapisane mnemoniki kodu programu (instrukcje dla procesora) oraz dane, które mają
być umieszczone w określonych miejscach pamięci P, X i Y (patrz dyrektywy org p:adres,
org x:adres, org y:adres w programie z tabeli 25-2). Każdy procesor sygnałowy ma
w swojej pamięci nieulotnej ROM zapisany króciutki program, tzw. bootstrap, który jest uru-
chamiany po jego podłączeniu do zasilania. Program ten jest sterowany z zewnątrz stanem kil-
ku nóżek procesora, określających w jaki sposób i skąd ma zostać pobrany nasz program.
Kanałem komunikacyjnym może być przykładowo Host Port podłączony do równoległej szyny
danych komputera osobistego (magistrala PCI, ISA, równoległy port drukarki czy magistrale
znanych mikroprocesorów), i w ten sposób bootstrap nawiązuje kontakt z programem boot-
loader, na naszym komputerze osobistym. Program bootloader wysyła, a bootstrap odbiera po
kolej wszystkie słowa (16-, 24- lub 32-bitowe) i zapisuje je do pamięci procesora (według
przykładowego schematu: typ pamięci, adres, liczba słów, kolejne słowa). Po odebraniu całej
przesyłki, bootstrap zeruje układ ... i procesor budzi się już w innym świecie: z tablicy
przerwań spod adresu reset pobiera instrukcję skoku do początku naszego programu, którą
sami tam umieściliśmy. I już go mamy! Program bootstrap jest więc jakby „koniem trojań-
skim”, który pozwala naszemu programowi zapanować nad procesorem. Ten sposób urucha-
miania systemu DSP wykorzystujemy w docelowej, samodzielnie pracującej konfiguracji.
Drugim sposobem ładowania programów DSP jest wykorzystanie interfejsu emulatora
JTAG, z którym zapoznamy się nieco później. Jest on jednak najczęściej wykorzystywany
w fazie tworzenia aplikacji i testowania oprogramowania, gdyż przede wszystkim oferuje
bardzo zaawansowane operacje debuggowania (odpluskwiania − usuwania błędów w progra-
mie), które są zupełnie zbędne w docelowej aplikacji.
Napisany program dla procesora DSP pisze się w języku zwanym asemblerem. Następnie pro-
gram ten jest kompilowany (sprawdzanie poprawności składni, generowanie kodu przejścio-
wego), potem linkowany (dołączenie kodów funkcji bibliotecznych) oraz przekształcany do
postaci wysyłanej do procesora. Najprostsze narzędzia do tworzenia programów dla proceso-
rów DSP są bezpłatnie udostępniane przez ich producentów (bootloader, asembler, linker,
biblioteki funkcji). Oferowane są przez nich także proste i tanie karty edukacyjne z proceso-
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 801

rami DSP (Starter Kit, Evaluation Module itp.), które podłącza się do komputerów osobistych
za pomocą interfejsu RS lub USB, komunikującego się z portem emulacji JTAG procesora
sygnałowego, poprzez wbudowany na takiej karcie konwerter. Po załadowaniu programu na
procesor DSP można sterować jego wykonaniem z komputera PC. Ponieważ oferowane karty
są wyposażone w przetworniki A/C i C/A, możliwa jest przykładowo analiza częstotliwościo-
wa lub filtracja sygnałów audio w czasie rzeczywistym.

Zestaw instrukcji mikroprocesora sygnałowego oraz ich postać odpowiada zadaniom, do ja-
kich został stworzony oraz architekturze, w której wiele operacji jest wykonywanych równo-
cześnie (równolegle). Do zadań należy wykonywanie typowych działań arytmetycznych na wy-
branym formacie danych: stało- lub zmiennoprzecinkowym. Oprócz standardowych operacji
dodawania (add), odejmowania (sub), mnożenia (mpy) i dzielenia (div) (z tym ostatnim jest
nieco kłopotu, ale też rzadziej mamy z nim do czynienia w algorytmach DSP), występuje
sztandarowe mnożenie z sumowaniem MAC oraz cały zestaw operacji logicznych (and, or,
not, przesunięcia i rotacje bitów). Bogate instrukcje przesłań służą dostarczaniu danych do
obliczeń i wysyłaniu wyników, a rozkazy rozgałęzień pomagają w tworzeniu części logiczno-
-decyzyjnej algorytmu. Na szczególną uwagę zasługują instrukcje oraz pewne rejestry służące
sprzętowej realizacji pętli, oszczędzające bezcenne cykle zegara z limitu wynikającego z okre-
su próbkowania lub gromadzenia bloku próbek. Sprzętowa realizacja pętli eliminuje do zera
straty czasu wynikające z cyklicznego wykonywania powtarzającej się sekwencji instrukcji, na
przykład kolejnych składników splotu. Instrukcje te istnieją zwykle w dwu wersjach, w pierw-
szej jest powtarzana tylko jedna instrukcja (np. rep), a w drugiej − ich cała grupa (np. do).

Przerwania. Pierwsze mikroprocesory sygnałowe nie miały w swej architekturze sterowników


DMA, chociaż wymóg szybkiego transportu danych „w tle” pracy jednostki centralnej zawsze
istniał. Z tego powodu współczesne procesory DSP wyposażono w mechanizm tak zwanych
szybkich przerwań. Polega on w skrócie na tym, że w tabeli przerwań zamiast tradycyjnego ad-
resu procedury obsługi przerwania jest umieszczony od razu kod programu. Miejsca jest nie-
wiele, tylko dwa słowa, ale dzięki specjalnemu, zwartemu formatowi rozkazów przesyłania da-
nych pomiędzy rejestrami układów wejścia/wyjścia a buforem kołowym w pamięci, wystarcza
go na dwa rozkazy, np. przesłań. Przestrzeń adresowa przydzielona urządzeniom peryferyjnych
znajduje się w górnej części pamięci X i zawiera tylko 128 adresów. Straty jednostki centralnej
na tak zorganizowaną, obsługę przerwań są równe czasowi realizacji jednej albo dwóch in-
strukcji, z których każda jest najczęściej wykonywana tylko w jednym cyklu zegara. O wiele
bardziej uciążliwa może się okazać strata jednego rejestru adresowego, który musimy poświę-
cić na wskaźnik do bufora kołowego akwizycji danych, ale ponieważ mamy ich „aż” osiem
(r0 − r7), daje się to zwykle jakoś przeżyć. Zazwyczaj mamy do czynienia z dwoma równo-
ległymi transmisjami danych: ze źródła próbek (np. przetwornika A/C podłączonego do od-
biornika synchronicznego interfejsu szeregowego) oraz do odbiornika próbek (np. przetworni-
ka C/A podłączonego do nadajnika tegoż modułu). Dzięki bardzo szybkiej obsłudze przerwań,
uzyskano mechanizm transportu danych prawie tak wydajny jak DMA (o którym poniżej).

DMA (Direct Memory Access). Sterownik DMA ma jednak oczywistą przewagę nad opisanym
mechanizmem przerwań, polegającą na pełnym odciążeniu jądra obliczeniowego procesora,
gdyż nie wymaga on rezerwacji rejestrów adresowych oraz nie traci cennych cykli zegara jed-
nostki centralnej na realizację przesłań. To drugie jest możliwe dzięki oddzielnej magistrali
sterownika DMA oraz specjalnej konstrukcji wewnętrznych pamięci, polegającej na ich po-
dziale na bloki o wielkości 256 lub 1024 słów, które mogą być równocześnie i bezkonfliktowo
802 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

dostępne, tak dla jednostki centralnej jak i dla opisywanego sterownika. Jest to pamięć dwu-
portowa, której zalety mogą być w pełni wykorzystane jeśli przyjmiemy:
1) wielkość bufora kołowego równą podwójnej długości przetwarzanego bloku próbek;
2) długość bloku próbek, a więc połowy bufora, równą potędze liczby dwa, tak aby granica
niezależnych bloków pamięci była granicą połówek bufora.
Przy takiej organizacji, z jednej połówki korzysta jądro obliczeniowe procesora, a w drugiej
jest równocześnie gromadzony kolejny, nowy blok próbek, dostarczanych przez kanał DMA.

Synchroniczna transmisja szeregowa. Synchroniczne porty szeregowe są specyficznym inter-


fejsem dla wszystkich procesorów sygnałowych, często także wykorzystywanym na innych
platformach sprzętowych, służącym komunikacji z nadajnikami i odbiornikami strumieni pró-
bek sygnałów cyfrowych, np. wielokanałowych sygnałów akustycznych. Każdy producent mi-
kroprocesorów sygnałowych stosuje dla nich własną nazwę (Motorola – Synchronous Serial
Interface, Texas Instrument – Multichannel Buffered Serial Port, Analog Devices − po prostu
Serial Port), ale podstawowe właściwości każdego z tych interfejsów są takie same. Składają
się one z czterech linii sygnałowych: linii danych odbieranych i nadawanych, zegara bitowego
oraz sygnału synchronizacji ramki. Dane są przesyłane w formie ramek, składających się z ma-
ksymalnie 32 słów o różnej długości: od 8 do 32 bitów (standard TDM − Time Division Multi-
plexing). Warto pamiętać, że w praktyce grupa przesyłanych bitów rzeczywistego słowa, z któ-
rego korzystamy w obliczeniach ( np. 24 bity), jest dosunięta do lewego lub prawego brzegu
słowa „transmitowanego” (np. 32-bitowego). Dotyczy to szczególnie standardów audio takich
jak I2S, AC’97, AES/EBU, TDM, ST-BUS itp. Szybkość szeregowej transmisji synchronicznej
jest na tyle wysoka (dziesiątki Mbitów/s), że wystarcza do pełnego wykorzystania mocy obli-
czeniowej procesora. Zdarzenia związane z transmisją są obsługiwane przez kilka rodzajów
przerwań lub przez sterownik DMA.

Narzędzia uruchomieniowe (emulator, symulator, debugger). Narzędzia uruchomieniowe


Współczesny inżynier DSP pracuje pod silną presją działu marketingowego firmy, dla którego
najczęściej najważniejszym parametrem jest tzw. time-to-market, czyli czas opracowania no-
wego urządzenia, liczony od chwili rozpoczęcia projektu do momentu ukazania produktu się
na rynku. Czas ten zależy przede wszystkim od jakości uruchomieniowych narzędzi sprzęto-
wych i programowych, z których inżynier korzysta.

Emulator to urządzenie, kiedyś duże i kosztowne, służące zastąpieniu układu scalonego proce-
sora w docelowym obwodzie elektronicznym identyczną co do kształtu i parametrów wtyczką
sondy. Emulator może zastąpić (emulować) działanie fizycznego układu, dając możliwość peł-
nej, sprzętowej kontroli działania uruchamianego sprzętu i programów. Umożliwia on zakłada-
nie pułapek sprzętowych (zatrzymywanie programu po wystąpieniu zadanej przez użytkownika
kombinacji sygnałów w układzie lub ich określonej sekwencji) oraz oferuje pamięć „śladu”,
w której jest przechowywany stan wybranych sygnałów (sterujących, szyn) na wiele cykli zega-
rowych wstecz. Jest to bardzo pomocne podczas analizy przyczyn występowania błędów
algorytmów i sprzętu.
Współczesne emulatory korzystają z wbudowanych w układ mikroprocesora („on-chip”) mo-
dułów emulatora i faktycznie są niewielkimi konwerterami jednego ze standardowych interfej-
sów komunikacyjnych (RS-232, LPT, USB, Ethernet itd.) do standardu JTAG. Najbardziej
popularne są obecnie emulatory dla portu USB 2.0, ze względu na dużą szybkość transmisji
danych (szybka aktualizacja okienek zasobów procesora w programie obsługującym emulator)
oraz rozwiązanie, przy okazji, problemu zasilania emulatora.
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 803

Uruchamiana płyta

JTAG DSP
EMULATOR
USB

Rys. 25.9. Emulacja tworzonej aplikacji DSP

Symulator to program uruchamiany na dowolnym komputerze, który symuluje działanie pro-


cesora DSP i wykonuje (dużo wolniej!) napisane dla niego programy. Użytkownik ma nim
możliwość wykonywania programu instrukcja po instrukcji (krokowanie programu) oraz oglą-
dania zawartości rejestrów procesora DSP oraz komórek pamięci. Może także zakładać pułap-
ki programowe. Symulator nie jest jednak tak dobrym narzędziem jak emulator, gdyż nie daje
wglądu w zdarzenia zachodzące w rzeczywistym układzie (procesorze). Ponadto każda in-
strukcja symulowanego procesora sygnałowego wymaga wielu instrukcji procesora wykonują-
cego symulację, co powoduje wolne wykonywanie programu, nawet na współczesnych szyb-
kich komputerach osobistych. Symulatory są jednak pomocne przy sprawdzaniu logicznej
i algorytmicznej poprawności programów, napisanych dla procesora sygnałowego oraz bardzo
przydatne w dydaktyce, ponieważ są tanie i wygodne w obsłudze.

Debugger to program służący do wyszukiwania i usuwania błędów nowej aplikacji DSP, czyli
jej debuggowania (odpluskwiania). Funkcję debbugera pełnią obecnie zintegrowane, okienko-
we środowiska programowo-uruchomieniowe, realizujące jednocześnie symulację i emulację.
Wykorzystują one identyczny interfejs graficzny użytkownika, co bardzo ułatwia inżynierowi
posługiwanie się nimi w procesie uruchamiania (testowania) programów. Zdarzają się jeszcze
starsze debuggerów w postaci programu wykonywanego przez uruchamiany procesor sygna-
łowy, sterowany poprzez interfejs szeregowy (np. UART, SPI). Jest to rozwiązanie z pewno-
ścią tańsze, ale raczej należące do przeszłości, gdyż oferujące ograniczone możliwości imple-
mentacji pułapek i śledzenia historii programu.

Podsumowując, decydując się na wybór procesora sygnałowego musimy uwzględniać koszty


narzędzi uruchomieniowych, które bardzo się różnią u wiodących firm: praktycznie od zera do
wielu tysięcy dolarów, co niejednokrotnie mocno komplikuje decyzje.

25.3.3. Zaawansowane narzędzia programowe

Język C/C++ − starszy brat asemblera. Pisanie programów w językach wysokiego poziomu
ma wiele zalet, w tym jedną podstawową: szybkość tworzenia nowych aplikacji. Z tego po-
wodu wybór języka C/C++ jako języka programowania procesora DSP jest ze wszech miar
godny pochwały. Jednak pamiętajmy także o wadach tego rozwiązania. Mimo upływu wielu lat
i znacznego postępu w dziedzinie poprawiania efektywności kompilatorów języków wysokiego
poziomu, dalej generowany przez nie kod maszynowy jest znacznie wolniejszy od kodu napi-
sanego w asemblerze! Ciągle więc istnieje konieczność pisania w języku maszynowym frag-
mentów programu, krytycznych dla jego wydajności. Oczywiście, w sytuacji dużego nadmiaru
mocy obliczeniowej procesora DSP można się bez tego obejść, można także starać się korzy-
stać wyłącznie z gotowych, dostarczanych przez producentów, zoptymalizowanych bibliotek
typowych funkcji DSP, ale w przypadkach tworzenia własnego, dedykowanego, specjalistycz-
nego rozwiązania sprzętowego właściwie nie jest możliwe zrezygnowanie z zalet asemblera.
804 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

Z tego powodu niezbędnymi narzędziami służącymi do efektywnej generacji binarnego kodu


maszynowego programów dla procesorów sygnałowych jest nie tylko kompilator języka C lub
C++ (szybko pisana lecz długo wykonywana główna część programu, przede wszystkim steru-
jąca) ale także asembler (długo pisane lecz szybko wykonywane, krytyczne pod względem ob.-
liczeniowym fragmenty programu).

Matlab, język C/C++, asembler. Bardzo ciekawą możliwością szyb kiej implementacji apli-
kacji DSP jest skorzystanie z gotowych modułów startowych (ewaluacyjnych) z procesorami
sygnałowymi, oferowanych przez firmy Analog Devices, Motorola i Texas Instruments, dla
których istnieje szybka ścieżka przejścia od kodu Matlaba do kodu C i jego kompilacja do po-
staci binarnej z wykorzystaniem kompilatora języka C wybranego procesora sygnałowego.
W przypadku prostych bądź standardowych algorytmów związanych z filtracją, analizą wid-
mową, a nawet kompresją sygnałów, efekty mogą być natychmiastowe. Metoda ta, z oczywi-
stych powodów, nadaje się wyłącznie do urządzeń i aplikacji wykonywanych w pojedynczych
lub kilku egzemplarzach, ale nawet w przypadku przygotowywania urządzenia mającego być
produkowanym masowo, może pomóc przyśpieszyć implementacje algorytmów, gdyż dostar-
cza startowego szkieletu oprogramowania, który następnie uzupełnia się ręcznie. Taka kombi-
nacja środowiska obliczeniowego Matlaba z prostymi narzędziami i modułami sprzętowymi
jest także najbardziej atrakcyjną i pożądaną platformą dydaktyczną.

Zintegrowane środowiska programowe. Liczący się producenci mikroprocesorów sygnało-


wych świadomi wymagań, jakie są stawiane projektantom aplikacji DSP, od wielu lat tworzą
i ulepszają zintegrowane narzędzia, pozwalające możliwie maksymalnie uprościć i przyśpie-
szyć cykl projektowy. Dobre narzędzia są jednym z podstawowych czynników decydujących
o sukcesie rynkowym samego układu, czego dobrym przykładem może być historia osiągnięcia
statusu lidera rynku przez firmę Texas Instruments. Dzisiejsze standardy w tym zakresie to
zintegrowane środowisko programowe, wzorujące się na sztandarowych narzędziach firm
Microsoft i Borland. Firma Texas Instrument oferuje zatem program Code Composer Studio,
Analog Devices − VisualDSP++, a Freescale (Motorola) − program Code Warrior, opracowa-
ny przez firmę Metrowerks. Dostępne są również zintegrowane środowiska innych producen-
tów oprogramowania. Zestaw narzędzi uzupełniają biblioteki gotowych funkcji, dostarczane ze
środowiskiem oraz bardzo duża baza gotowych aplikacji, dostępnych odpłatnie od niedużych,
niezależnych producentów oprogramowania. Tak jest na przykład w przypadku firmy Texas
Instruments, w której opracowano zbiór zasad jak należy napisać program algorytmu, który ma
być dołączony do biblioteki funkcji standardowych.
Bardzo pomocne w sprawdzaniu poprawności działania algorytmów, uruchamianych w zinte-
growanych środowiskach, są tryby wizualizacji zawartości pamięci danych. Oprócz numerycz-
nego wyświetlania zawartości komórek pamięci z wykorzystaniem różnych formatów liczb
(binarnego, heksadecymalnego, dziesiętnego, ułamkowego itd.), nieprzydatnego do analizy
długich bloków danych, mamy także do dyspozycji możliwość traktowania zawartości kolej-
nych komórek pamięci jako ciągu próbek sygnału jedno-, dwu- lub trójwymiarowego i wyświe-
tlania ich w dowolnej formie, np. jako punktów (pikseli) obrazu lub dwuwymiarowych macie-
rzy widm czasowo-częstotliwościowych, czyli spektrogramów (patrz wykres waterfall na ry-
sunku 25.10).
Wizualizacja na bieżąco procentowego wykorzystania mocy procesora pozwala z kolei kontro-
lować i umiejętnie modyfikować algorytmicznie szybkość wykonywania poszczególnych funk-
cji i podprogramów tworzących aplikację, tak aby spełnione zostały kryteria czasu rzeczywi-
stego (profiling).
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 805

Program
źródłowy
Eye-diagram

Menedżer
projektu
Pamięć
danych

Pamięć
programu
FFT-
waterfall

Rejestry Okno
procesora podglądu

Rys. 25.10. Przykład zintegrowanego środowiska uruchomieniowego Code Composer Studio dla proceso-
rów sygnałowych firmy Texas Instruments

Systemy operacyjne czasu rzeczywistego. Ostatnim, najbardziej wyrafinowanym elementem


całej układanki są systemy operacyjne czasu rzeczywistego dla każdej z rodzin procesorów
sygnałowych, umożliwiające tworzenie najbardziej wymagających, skomplikowanych aplika-
cji. Oczywiście, najprostsze programy ich nie potrzebują i mogą być tworzone na podstawie
tzw. pętli głównej, w której obliczenia są wyzwalane przerwaniami od zdarzeń, związanymi
z transmisjami danych od/do układów peryferyjnych.

25.3.4. Przykład projektowania filtra IIR

Projektując aplikacje czasu rzeczywistego, przykładowo dla układu DSP przetwarzającego


równocześnie wiele kanałów sygnałów akustycznych, rzadko mamy komfort użycia do tego ce-
lu filtrów nierekursywnych FIR, gwarantujących stabilność, liniowość fazy i dobre parametry
częstotliwościowe, ponieważ konieczne staje się wówczas zastosowanie filtrów o wielu współ-
czynnikach, które wymagają potężnych mocy obliczeniowych oraz wysokiej precyzji nume-
rycznej. Oba te wymagania natrafiają na poważne bariery implementacyjne w postaci określo-
nej wydajności procesora wynikającej z technologii użytej do jego budowy oraz skończonej
precyzji bitowej liczb przechowywanych w jego rejestrach i pamięci. W przypadku małej licz-
by kanałów (np. sygnał mono lub stereofoniczny) i dysponowania dużym nadmiarem mocy,
możemy zwiększyć precyzję dwukrotnie (kosztem więcej niż dwukrotnego spadku mocy obli-
czeniowej), ponieważ w architekturze procesorów sygnałowych są przewidziane specjalne in-
strukcje oraz tryby adresowania, w których dwie szyny danych zamieniają się w jedną o po-
dwójnej precyzji.
806 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

W większości przypadków, zmuszeni jesteśmy jednak do użycia znacznie efektywniejszych


filtrów rekursywnych IIR, które już dla niewielkiej liczby współczynników zapewniają dobre
parametry częstotliwościowe. Wiemy, że ceną jaką za to płacimy jest nieliniowa charakterysty-
ka fazowo-częstotliwościowa (wówczas sygnały składowe o różnych częstotliwościach poja-
wiają się na wyjściu filtra z różnym opóźnieniem) oraz poważne problemy implementacyjne,
związane nie tylko z ich stabilnością. Najtrudniej jest te filtry implementować w architekturach
stałoprzecinkowych, gdzie skończona precyzja słowa binarnego zmienia nie tylko położenie
biegunów filtra na płaszczyźnie zespolonej, ale również ogranicza zakres liczbowy pośrednich
wyników obliczeń, zmuszając nas do ich przeskalowywania, które jest źródłem kolejnych pro-
blemów. Może się to wydawać dziwne, że po tylu latach rozwoju metod i wielu publikacjach
na ten temat, implementacja filtrów IIR ciągle nie jest sprawą banalną i wymaga spokojnego
zastanowienia oraz dobrego przygotowania.

Bardzo dobrym środowiskiem, które pozwoli nam uniknąć wielu kłopotów jest pakiet Matlab,
zawierający świetne narzędzie projektowe i symulacyjne jakim jest program o nazwie FDA-
tool. Za pomocą tego programu możemy zaprojektować filtr podając jego charakterystykę
częstotliwościową, wybierając strukturę i rząd, następnie możemy obejrzeć jego parametry
częstotliwościowe i fazowe, położenie zer i biegunów dla obliczeń w domyślnej dla Matlaba
podwójnej, zmiennoprzecinkowej precyzji. W kolejnym kroku możemy dobrać strukturę filtra
(postać I lub II, transponowana, motylkowa itd.) kontrolując stabilność, aby następnie przejść
do implementacji stałoprzecinkowej poprzez kwantyzację współczynników filtra zgodnie
z parametrami wybranej platformy sprzętowej. Poprawność działania uzyskanej struktury mo-
żemy sprawdzić w kolejnym kroku, czyli podczas implementacji filtra w formie schematu
blokowego programu Simulink i symulacji jego działania. To bardzo cenne narzędzie, ponie-
waż możemy na wejście filtra podłączyć wybrane źródło sygnału (np. generator białego szumu,
jeśli chcemy otrzymać obraz charakterystyki częstotliwościowej), a sygnał wyjściowy możemy
obejrzeć w postaci czasowej lub częstotliwościowej. Co więcej, możemy obejrzeć sygnały
w węzłach pośrednich filtra, co pozwala na lokalizowanie przyczyn jego ewentualnego złego
funkcjonowania. Łatwo się tutaj przekonać, jak różne wyniki (np. powstawanie przepełnień
zakresu liczbowego reprezentacji stałoprzecinkowej) dają różne struktury filtrów i wybrać
optymalną dla naszej aplikacji. Projektowanie filtrów IIR o skrajnych częstotliwościach odcię-
cia (np. filtra górnoprzepustowego o bardzo niskiej częstotliwości granicznej) prowadzi do
biegunów położonych bardzo blisko koła jednostkowego, a więc blisko granicy stabilności.
Wystarczy niewielka zmiana wartości współczynników w wyniku kwantyzacji i przejścia do
reprezentacji stałoprzecinkowej, aby taki filtr przestał być stabilny. Filtr może działać nie-
stabilnie nie tylko w wyniku przekroczenia granicy wnętrza koła jednostkowego przez biegun
jego transmitancji, ale również z powodu zaokrągleń liczb powstających w wyniku obliczeń.

Opisane powyżej składniki pakietu Matlab pozwalają na znalezienie stabilnej, działającej wer-
sji wybranego filtra. FDAtool nie jest programem uniwersalnym, obejmującym wszystkie moż-
liwe struktury i parametry filtrów cyfrowych, ale ten jego brak możemy uzupełnić sami dopisu-
jąc odpowiednie procedury nowych filtrów oraz własnoręcznie wykonując ich implementację
w programie Simulink (biorąc za wzór kod Matlaba, którego wygenerowania możemy zażądać
od Simulinka dla standardowych struktur filtrów).
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 807

Przyciski kolejnych
etapów projektowania

Rys. 25.11. Okno programu FDAtool − narzędzia środowiska Matlab do projektowania filtrów cyfrowych

Rys. 25.12. Przykład testowania zaprojektowanego filtra cyfrowego za pomocą programu Simulink

25.4. Przykładowa aplikacja procesora DSP


Procesory DSP znajdują obecnie bardzo wiele zastosowań. Dla przykładu, na rysunku 25.13
jest przedstawiony schemat blokowy kompletnego rejestratora/odtwarzacza plików cyfrowych
z nagraniami muzycznymi w formacie MP3, wykorzystującego procesor DSP. Funkcje tego
urządzenia wykraczają znacznie poza standardowe, ponieważ oprócz rejestracji (wejście Ste-
reo Audio i Audio Line In) i odtwarzania (wyjścia Stereo Headphones i Mono Speaker) dźwię-
ku stereofonicznego o paśmie częstotliwościowym 20 kiloherców, służy on także do nagrywa-
nia głosu (dyktafon – wejście mikrofonowe) oraz przechowywania i transmisji do komputera
808 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

plików, zapisanych w pamięci nieulotnej (wewnętrzna pamięć FLASH lub karty MMC SD), co
odpowiada funkcji tzw. pen-drive’ów. Najnowsze generacje tych urządzeń zawierają również
tuner radiowy FM i umożliwiają nagrywanie programów radiowych.
W przedstawionym układzie poszczególne elementy spełniają następujące funkcje:
• procesor DSP wykonuje kompresję/dekompresję oraz korekcję częstotliwościową (equa-
lizer) sygnału audio, np. regulację basów; odpowiada także za zadania systemowe takie jak ob-
sługa komunikacji z użytkownikiem oraz zapis/odczyt/zarządzanie plikami z nagraniami;
• pamięć służy do przechowywania programu i jego parametrów,
• urządzenia peryferyjne pozwalają użytkownikowi sterować układami wejścia/wyjścia oraz
wyświetlaczem,
• kodeki sygnału audio i mowy (przetworniki A/C i C/A) służą pobieraniu z urządzeń wej-
ściowych sygnałów analogowych i ich konwersji na postać dyskretną (podczas nagrywania)
oraz odwrotnie, z postaci dyskretnej na analogową (podczas odtwarzania);
• konwertery napięcia przekształcają napięcie baterii do postaci wymaganej do zasilania wszy-
stkich bloków funkcjonalnych układu.
Centralną rolę układu odtwarzacza/rejestratora MP3 może pełnić 16-bitowy, stałoprzecinkowy
procesor sygnałowy z odpowiednimi peryferiami, na przykład TMS320VC55xx firmy Texas
Instruments lub BlackFin firmy Analog Devices. Procesory te mają wbudowany interfejs USB,
a ich wysoka energooszczędność pozwala na zasilanie z pojedynczej baterii R6 (popularne
„paluszki” AA lub AAA). Takie rozwiązanie wymaga jednak użycia aż czterech wysoko
sprawnych układów: 1) konwertera DC/DC „w dół” do zasilania jądra procesora sygnałowego,
2) stabilizatora linowego w zasilaniu kodeka audio (para przetworników A/C i para C/A) w ce-
lu uniknięcia szumów przetwarzania, 3) konwertera DC/DC „w górę” do zasilania wyświe-
tlacza LCD i diod LED, 4) jeszcze jednego konwertera DC/DC „w górę” zasilającego wejścia
i wyjścia procesora sygnałowego i wszystkie układy otoczenia napięciem 3,3V.
Przykładowo, bloki funkcjonalne urządzenia, zaznaczone na rysunku 25.13 ciemniejszym ko-
lorem, mogą być zrealizowane z wykorzystaniem układów produkowanych przez firmę Texas
Instruments − na stronie WWW znajdują się odnośniki do odpowiednich tabel. Pozostałych
elementów trzeba szukać u innych producentów.

25.5. Procesory DSP a układy programowalne FPGA


Programowalne układy logiczne FPGA (Field Programmable Gate Array) stanowią wyjątko-
wą platformą sprzętową, wykorzystywaną w aplikacjach DSP. Zasadniczy powód tego jest je-
den: gigantyczna moc przetwarzania jaką daje równoległa realizacja algorytmów. Co ciekawe,
przetwarzanie sygnałów cyfrowych stało się w ostatnich latach potężnym impulsem do rozwoju
tych układów, wymuszającym ich szybki postęp technologiczny (coraz większą liczbę bramek
logicznych w układzie i coraz wyższą częstotliwość ich pracy).
Przypomnijmy sobie rysunki z rozdziału 13.1, przedstawiające różne struktury filtrów cyfro-
wych. Każdy bloczek na tych schematach, tzn. rejestry przechowujące kolejne próbki (co w za-
pisie symbolicznym oznacza opóźnienie z−1), układy mnożące ww. próbki przez współczynniki
h filtra oraz sumator na wyjściu, jest w strukturze programowalnej FPGA osobnym układem,
zbudowanym z bramek lub innych uniwersalnych bloków logiki, które można w różny sposób
konfigurować i łączyć. Układy FPGA w zastosowaniach DSP zazwyczaj pracują w trybie
synchronicznym. Cykl zegara taktującego jest w nich na tyle długi, aby każdy z bloków zdążył
„zrobić swoje” i ustawić wynik na swoim wyjściu (stabilny i gotowy do przekazania dalej)
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 809

Rys. 25.13. Schemat blokowy przykładowej aplikacji DSP – rejestrator/odtwarzacz formatu MP3
(zaczerpnięte ze strony WWW firmy Texas Instruments: http://dspvillage.ti.com/dsp/docs/)

Rys. 25.14. Przykład realizacji filtra


FIR w układzie FPGA Stratix® II

przed nadejściem kolejnego zbocza zegarowego. Jak widać na schemacie z rysunku 25.14
wszystkie mnożenia składające się na czteroskładnikowy splot wraz z ich sumą są wyliczane
naraz, czyli w tym samym cyklu zegara. Ponieważ mnożenie i sumowanie są implementowane
jako skomplikowane, bitowe działania logicznie, droga przejścia reprezentacji bitowej danych
przez wiele bramek jest długa, a to implikuje długi cykl zegara jaki możemy zastosować. Z ko-
lei długi cykl zegara to mała wydajność, dlatego lepiej jest rozbić te operacje na dwa kolejne,
krótsze cykle, za pomocą rozdzielających je rejestrów pomocniczych, tak jak to pokazano na
rysunku 25.14. Różnicę w szybkości pomiędzy układem FPGA a procesorem DSP widać od
razu, gdyż w FPGA w rozpatrywanym przypadku pełny splot jest wyliczany w jednym cyklu
zegara, natomiast procesor sygnałowy potrzebuje na to co najmniej czterech cykli. Układów
mnożących we współczesnych strukturach FPGA nie musimy sami budować z pojedynczych
810 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

bramek, ponieważ są już one wbudowane w układy dedykowane do zastosowań DSP, szybkie
i gotowe do użycia. Ich liczba jest obecnie liczona w setkach, a całkowita wydajność takich
układów FPGA sięga setek miliardów mnożeń z akumulacją na sekundę. Bloki mnożące i su-
mujące można również łączyć w celu dopasowania precyzji bitowej przetwarzanych danych
(przykładowo, układy Stratix® II pozwalają na obliczenia z precyzją 9, 18 lub 36 bitów). Wy-
brane aplikacje DSP, takie jak np. programowe radio (software radio), mają ogromne wymaga-
nia obliczeniowe, które mogą być zaspokojone tylko przez układy FPGA lub ASIC.
Kończąc, powiedzmy kilka słów na temat wad i zalet układów FPGA w stosunku do proce-
sorów DSP. Przygotowanie i wdrożenie aplikacji DSP w układach FPGA jest trudnym i skom-
plikowanym zadaniem i jest to ich podstawową wadą. Co prawda, producenci tych układów,
świadomi jak jest to krytyczne dla popularności rynkowej, od wielu lat intensywnie rozwijają
odpowiednie narzędzia, jednak nadal wdrażanie nowych algorytmów w układach FPGA jest
zadaniem o wiele trudniejszym niż programowanie procesorów DSP. Testy poprawności lo-
gicznej i analizy czasowej zajmują dużo, bo blisko 80% czasu projektanta. Samo testowanie
z uwagi na szybko rosnącą złożoność układów nie pozwala na pełne testy w krótkim czasie
i wymaga trudnych kompromisów oraz specjalnych metod.
Na układ FPGA decydujemy się zazwyczaj kiedy mamy sprawdzony algorytm, który raczej nie
będzie modyfikowany, kiedy aplikacja wymaga ekstremalnej wydajności lub kiedy dysponuje-
my zestawem gotowych aplikacji FPGA algorytmów (IPcore).
Szybkie i w miarę bezpieczne jest obecnie projektowanie opierające się na sprawdzonych bi-
bliotekach funkcji i algorytmów DSP dostarczanych przez producentów narzędzi i wiele ma-
łych firm projektowych. Mając nowy algorytm przygotowany i sprawdzony na przykład pakie-
tem Matlab, możemy pokusić się o jego implementację w układzie FPGA, natomiast ekspery-
menty, modyfikacje i testowanie samego algorytmu w czasie rzeczywistym jest zadaniem ucią-
żliwym i ryzykownym.
Przeprowadzane dotychczas porównania wydajnych procesorów DSP (np. rodziny C6000 fir-
my Texas Instruments) z układami FPGA, wykazały przewagę tych pierwszych w skompliko-
wanych algorytmach, z dużą liczbą pętli i rozgałęzień oraz różnorodnymi operacjami arytme-
tyczno-logicznymi. Układy FPGA wykazują natomiast miażdżącą przewagę w wydajności dla
zadań polegających na „prostym” przetwarzaniu (typu filtracja lub transformacja: DFT (FFT),
DCT, falkowa) dużych strumieni sygnałów 1D, 2D i 3D.

25.6. Przyszłość DSP − czy jesteśmy trendy?


Superprocesory DSP. Obecny, zaawansowany stan rozwoju platform sprzętowych dla cyfro-
wego przetwarzaniu sygnałów jest reprezentowany przez bogaty wybór mikroprocesorów sy-
gnałowych o bardzo niskim poborze mocy i kilku zakresach wydajności (do 100, do 1000
i powyżej 1000 milionów instrukcji MAC). Wzrost wydajności jest w nich realizowany, po-
dobnie jak ma to miejsce w procesorach dla komputerów osobistych, metodą zwielokrotniania
ilości jednostek obliczeniowych w układzie lub kompletnych procesorów. Ekstremalnym przy-
kładem tego jest procesor Cell, opracowany przez firmę IBM we współpracy z firmami Toshi-
ba i Sony, zawierający osiem 128-bitowych procesorów wektorowych, z których każdy zawiera
4 zmienno- i 4 stałoprzecinkowe jednostki ALU, osiągający sumaryczną wydajność 250 giga
operacji (250 ⋅ 109) zmiennoprzecinkowych na sekundę. Deklarowany przez producentów ob-
szar jego zastosowań obejmuje wiele dziedzin, w których są wykorzystywane procesory sygna-
łowe, jednak duża moc potrzebna do jego zasilania wyklucza jego zastosowania mobilne. Cie-
kawym pomysłem są także dostarczane przez producentów układów FPGA (w formie modu-
łów bibliotecznych bądź w formie układu ASIC wbudowanego w układ FPGA) wydajne mi-
EPILOG: implementacja algorytmów DSP na procesorach sygnałowych 811

kroprocesory typu RISC, łączące łatwość programowania z równoległością. W jednym ukła-


dzie FPGA może się zmieścić od kilku do kilkudziesięciu takich procesorów.
Mały pobór mocy. Wymieniając i porównując platformy sprzętowe wykorzystywane współ-
cześnie do aplikacji DSP nie wymieniliśmy jednego z najważniejszych kryteriów, jakim jest
pobór mocy. O skali jego ważności świadczy na przykład fakt, że stosunek wydajności do roz-
praszanej mocy elektrycznej jest bardzo często stosowanym kryterium porównawczym. Jest to
szczególnie ważne dzisiaj, kiedy eksplodował rynek niedużych, przenośnych urządzeń zasila-
nych z baterii. Rekordzistami pod tym względem są aplikacje wykonywane w formie układów
ASIC, z uwagi na najmniejszą liczbę elementów aktywnych potrzebnych do ich realizacji, ale
na szczęście dla innych platform, inne kryteria takie jak czas opracowania i planowana wiel-
kość produkcji eliminują je z wielu zastosowań. Pobór mocy jest motywem przewodnim re-
klam pojawiających się nowych mikroprocesorów sygnałowych. Warunki zasilania w dziesiąt-
kach różnych urządzeń przenośnych (telefonach komórkowych, odtwarzaczach mp3, a ostatnio
również odtwarzaczach video) eliminują prądożerne mikroprocesory stosowane w kompute-
rach osobistych, dając pole do popisu oszczędnym procesorom sygnałowym czy układom
FPGA.
Klasyczne, więc wiecznie żywe. Najbardziej przyjaznymi platformami dla zastosowań, w któ-
rych rozwijamy i modyfikujemy algorytmy, są i b ęd ą wszelkie mikroprocesory, także sygna-
łowe, ponieważ zmiana programu w zintegrowanym środowisku rozwojowym jest stosunkowo
łatwa i szybka. Dla tych platform istnieją najbogatsze biblioteki funkcji DSP oraz gotowych
aplikacji.
Małe jest piękne. Podczas kiedy jedni, jak przykładowo firma Analog Devices w rodzinie
BlackFin, dążą do coraz większej wydajności rozmnażając jednostki obliczeniowe, inni, jak
firma Microchip, dostrzegają rynek aplikacji wymagających minimalnych mocy przetwarzania
(do 30 milionów operacji MAC na sekundę), ale mieszczących się w całości w jednym ukła-
dzie, łatwym do programowania i emulacji. To drugie podejście zaowocowało pojawieniem się
słynnej już rodziny układów dsPIC.

Wydajność

stacje bazowe sieci


bezprzewodowych,
xDSL,
cyfrowe radio,
osobiste multimedia, video-serwery
VoIP,
pamięci dyskowe, terminale radiowe,
sterowanie silnikami cyfrowa fotografia i
elektrycznymi, video
układy zasilania,
sterowanie laserami
Rodzina procesorów

Texas Instruments C2000 C5000 C6000


Analog Devices ADSP2199x Blackfin,SHARC TIGER-SHARC
Freescale DSP56F800 DSP563xx MSC81xx

Rys. 25.15. Obszary zastosowań procesorów sygnałowych najbardziej wpływające na ich rozwój − obecnie
i w przyszłości
812 EPILOG: implementacja algorytmów DSP na procesorach sygnałowych

Prognozy rozwoju mikroprocesorów sygnałowych są obecnie chyba najlepsze w całym sekto-


rze półprzewodnikowym, przede wszystkim za sprawą eksplozji multimedialnych urządzeń
osobistych zasilanych z baterii, od telefonów komórkowych poczynając, a na kombajnach reje-
strujących, przechowujących i odtwarzających mowę, muzykę, zdjęcia i filmy kończąc. Rów-
nież urządzenia zasilane z sieci takie jak teatry domowe, węzły szybkich sieci telekomunika-
cyjnych, serwery wideo, modemy xDSL budowane są z energooszczędnych i tanich elementów
jakimi niewątpliwie są procesory sygnałowe. Na rysunku 25.15 przedstawiono obszary zasto-
sowań procesorów sygnałowych najmocniej wpływające na ich rozwój − teraz i w przyszłości.

No cóż, drogi Czytelniku. Czy jesteśmy „trendy”? Jedno jest pewne, wielu producentów sprzę-
tu i oprogramowania DSP czeka tylko na to, abyśmy mieli jakieś potrzeby związane z przetwa-
rzaniem sygnałów cyfrowych i udali się do najbliższego sprzedawcy akcesoriów DSP. Może
pójdziemy razem?
Literatura

Acke99 Ackenhusen J.G.: Real-Time Signal Processing: Design and Implementation of Signal Pro-
cessing Systems. Upper Saddle River, PTR Prentice Hall 1999.
Agai95 Agaian S.S., Astola J., Egiazarian K.: Binary Polynomial Transforms and Nonlinear Digital Fil-
ters. New York, Marcel Dekker 1995.
Akan92 Akansu A.N., Haddad R.A.: Multiresolution Signal Decomposition: Transforms, Subbands and
Wavelets. San Diego, Academic Press 2000.
Amba95 Ambardar A.: Analog and Digital Signal Processing. Boston, PWS Publishing 1995.
Amba98 Ambardar A., Borghesani C.: Mastering DSP Concepts Using Matlab, Upper Saddle River,
Prentice Hall 1998.
Ande84 Anderson B.D.O., Moore J.B.: Filtracja optymalna. Warszawa, WNT 1984.
Anto93 Antoniou A.: Digital Filters. Analysis, Design, Applications. New York, McGraw-Hill 1993.
Arslan Arslan G., Ding M., Lu B., Milosevic M., Shen Z., Evans B.L.: Matlab DMTTEQ Toolbox.
www.ece.utexas.edu/~bevans/ projects/adsl/dmtteq/dmtteq.html
Arsl01 Arslan G., Evans B.L, Kiaei S.: Equalization For Discrete Multitone Transceivers To Maximize
Bit Rate. IEEE Transactions on Signal Processing, vol. 49, no. 12, 3123-3135, Dec. 2001.
Bagc99 Bagchi S., Mitra S.K.: The Nonuniform Discrete Fourier Transform and Its Applications in Sig-
nal Processing. Boston, Kluwer 1999.
Barn96 Barnwell T.P., Nayebi K., Richardson C.H.: Speech Coding: A Computer Laboratory Textbook.
New York, Wiley 1996.
Bayo91 Bayoumi M. (red.): Parallel Algorithms and Architectures for DSP Applications. Boston, Kluwer
Academic Publisher 1991.
Beau78 Beauchamp K.: Przetwarzanie sygnałów metodami analogowymi i cyfrowymi. Warszawa, PWN
1978.
Bell89 Bellanger M.: Digital Processing of Signals. Theory and Practice. Chichester, Wiley 1989.
Bend76 Bendat J., Piersol A.: Metody analizy i pomiaru sygnałów losowych. Warszawa, PWN 1976.
Bend93 Bendat J., Piersol A.: Engineering Applications of Correlation and Spectral Analysis. New York,
John Wiley & Sons 1993.
Bert91 Bertrand J., Bertrand P.: Affine Time-Frequency Distributions. W „Time-Frequency Signal Ana-
lysis − Methods and Applications”, B. Boashash (red.), Melbourne, Longman Cheshire, 1991.
Bhas97 Bhaskaran V., Konstantinides K.: Image and Video Compression Standards. Algorithms and
Architectures. Boston, Kluwer Academic Publishers 1997.
Biał00 Białasiewicz J.T.: Falki i aproksymacje. Warszawa, WNT 2000.
814 Literatura

Bień05 Bień A., Duda K., Szyper M., Wetula A., Zieliński T.P., Rozkrut A.: The new measure of low-
-frequency disturbances in power system. Metrology and Measurement Systems, vol. XII, no. 2,
121-130, 2005.
Bier03 Biernacki R., Butkiewicz B., Szabatin J. (red.), Świdzińska B.: Zbiór zadań z teorii sygnałów
i teorii informacji. Warszawa, Oficyna Wydawnicza Politechniki Warszawskiej 2003.
Bili92 Bilinskis I., Mikelsons A.: Randomized Signal Processing. New York, Prentice Hall 1992.
Bjor87 Bjorck A., Dahlquist G.: Metody numeryczne. Warszawa, PWN 1987.
Bing99 Bingham J.A.C.: ADSL, VDSL, and Multicarrier Modulation. New York, John Wiley&Sons
1999.
Blah85 Blahut R.E.: Fast Algorithms for Digital Signal Processing. Reading, Addison-Wesley 1985.
Blah92 Blahut R.E.: Algebraic Methods for Signal Processing and Communications Coding. Berlin,
Springer 1992.
Boas94 Boashash B., O’Shea P.: Polynomial Wigner-Ville Distributions and Their Relationship to Time-
-Varying Higher Order Spectra. IEEE Trans. Signal Processing. vol. 42, no. 1, 216-220, 1994.
Boas03 Boashash B. (red.): Time-Frequency Signal Analysis and Processing. A Comprehensive Refe-
rence. Oxford, Elsevier 2003.
Bogu99 Bogucka H., Dziech A., Sawicki J.: Elementy cyfrowego przetwarzania sygnałów z przykładami
zastosowań i wykorzystaniem środowiska Matlab. Kraków, Wydawnictwo Fundacji Postępu Te-
lekomunikacji 1999.
Boro87 Borodziewicz W., Jaszczak K.: Cyfrowe przetwarzanie sygnałów. Warszawa, WNT 1987.
Box83 Box G.E.P., Jenkins G.M.: Analiza szeregów czasowych: prognozowanie i sterowanie. Warsza-
wa, PWN 1983.
Bozi94 Bozic S.M.: Digital and Kalman Filtering: An Introduction to Discrete-Time Filtering and Opti-
mum Linear Estimation. London, Edward Arnold 1994.
Brac65 Bracewell R.N.: The Fourier Transform and Its Applications. New York, McGraw-Hill 1965.
Brac68 Bracewell R.: Przekształcenie Fouriera i jego zastosowania. Warszawa, WNT 1968.
Bran97 Brandt S.: Analiza danych: metody statystyczne i obliczeniowe. Warszawa, PWN 1998.
Bruc01 Bruce E.N.: Biomedical Signal Processing and Signal Modeling. New York, Wiley 2001.
Buła02 Bułat J., Duda K., Rumian R., Stępień J., Turcza P., Zieliński T.: Bezstratna kompresja sygnałów
biomedycznych. Pomiary, Automatyka, Kontrola, nr 5/6, 37-40, 2002.
Buła03 Bułat J., Turcza P., Zieliński T.P.: Performance Evaluation of xDSL Channel Equalizer for Sin-
gle and Multitone Interference. Proc. European Conference on Circuits Theory and Design, vol.
II, 349-352, Kraków 2003.
Buła04 Bułat J., Twardowski T., Zieliński T.: Some New Results from TEQ Design for Maximum Bit
Rate ADSL Modem. IEEE Int. Conf. on Communications ICC’04, vo1. 1, 21-25, Paris 2004.
Burd84 Burdic W.S.: Underwater Acoustic Signal Analysis. Prentice Hall 1984.
Burr85 Burrus C.S., Parks T.W.: DFT/FFT and Convolution Algorithms. Theory and Implementation.
New York, Wiley 1985.
Burr94 Burrus C.S., McCellan J.H., Oppenheim A.V., Parks T.W., Schafer R.W., Schuessler H.W.:
Computer-Based Exercises for Signal Processing Using MATLAB. Englewood Cliffs, Prentice
Hall 1994.
Burr98 Burrus C.S., Gopinath R.A., Guo H.: Introduction to Wavelets and Wavelet Transforms. A Pri-
mer. Upper Saddle River, Prentice Hall 1998.
Cand86 Candy J.V.: Signal Processing: The Model-Based Approach. New York, Mc-Graw Hill 1986.
Cand88 Candy J.V.: Signal Processing. The Modern Approach. New York, McGraw-Hill 1988.
Carp94 Carpentier E., Vincent I., Auger F., Doncarli C.: Classification of non-stationary sinusoidal sig-
nals. European Signal Processing Conference EUSIPCO-94, 1429−1432, Edinburgh 1994.
Cart00 Cartinhour J.: Digital Signal Processing: An Overview of Basic Principles. Upper Saddle River,
Prentice Hall 2000.
Chas92 Chassaing R.: Digital Signal Processing with C and the TMS320C30. New York, Wiley 1992.
Chen01 Chen C.-T.: Digital Signal Processing: Spectral Computation and Filter Design. New York,
Oxford University Press 2001.
Chen77 Chen W.H, Smith C.H., Fralick S.: A fast computational algorithm for the discrete cosine
transform. IEEE Trans. on Communications, vol. 25, 1004-1009, September 1977.
Chen95 Chen W.-K. (red.): The Circuits and Filters Handbook. Boca Raton, CRC Press 1995.
Literatura 815

Chug98 Chugani M.L., Samant A.R., Cerna M.: LabVIEW Signal Processing. Upper Saddle River, Pren-
tice Hall 1998.
Chui92 Chui C.K.: An Introduction to Wavelets. Boston, Academic Press 1992.
Cięc05 Cięciwa S., Deliyski D., Zieliński T.P.: Fast FFT-based motion compensation for laryngeal
high-speed videoendoscopy. 4-th International Workshop on Models and Analysis of Vocal Emi-
ssions for Medical Applications, Florence 2005.
Clar95 Clarke R.J.: Digital Compression of Still Images and Video. London, Academic Press 1995.
Clay98 Claypoole R. L., Baraniuk R. G., Nowak R.D.: Adaptive wavelet transforms via lifting. IEEE Int.
Conference on Acoustics, Speech and Signal Processing, 1513-1516, 1998.
Clay03 Claypoole R. L., Davis G. M., Sweldens W., Baraniuk R. G.: Nonlinear wavelet transforms for
image coding via lifting. IEEE Trans. on Image Processing, vol. 12, no. 12, 1449-1459, 2003.
Cohe95 Cohen L.: Time-Frequency Analysis. Englewood Cliffs, Prentice Hall 1995.
Cohe98 Cohen L., Loughlin P. (red.): Recent Developments in Time-Frequency Analysis. Boston, Kluwer
1998.
Cowa85 Cowan C.F.N., Grant P.M.: Adaptive Filters. Englewood Cliffs, Prentice Hall 1985.
Croc83 Crochiere R.E., Rabinear L.R.: Multirate Digital Signal Processing. Englewood Cliffs, Prentice
Hall 1983.
Czyż98 Czyżewski A.: Dźwięk cyfrowy: Wybrane zagadnienia teoretyczne, technologia, zastosowania.
Warszawa, Akademicka Oficyna Wydawnicza EXIT 1998.
Daub92 Daubechies I.: Ten Lectures on Wavelets. Philadelphia, SIAM 1992.
Daub98 Daubechies I., Sweldens W.: Factoring wavelet transforms into lifting steps. J. Fourier Anal.
Appl., vol. 4, no. 3, 245-267, 1998.
Dąbr00 Dąbrowski A. (red.): Przetwarzanie sygnałów przy użyciu procesorów sygnałowych. Poznań,
Wydawnictwa Politechniki Poznańskiej 1997.
Deli89 Deliyski D., Zieliński T.P.: Objective diagnosis of laryngeal pathology using the Wigner-Ville
distribution. XII GRETSI Symp. on Signal and Image Processing, 973−976, Juan Les Pins 1989.
Deli05 Deliyski D.: Endoscope motion compensation for laryngeal high-speed videoendoscopy. Journal
of Voice, vol. 19, no. 3, 485-496, 2005.
Dell93 Deller J., Proakis J.G., Hansen J.H.L.: Discrete-Time Processing of Speech Signals. New York,
Macmillan 1993.
Doma00 Domański M.: Zaawansowane techniki kompresji obrazów i sekwencji wizyjnych. Poznań, Wy-
dawnictwa Politechniki Poznańskiej 2000.
Dore90 Dorenzo S.E.: Interfacing: A Laboratory Approach Using the Microcomputer for Instrumen-
tation, Data Analysis and Control. Englewood Cliffs, Prentice Hall 1990.
Dote90 Dote Y.: Servo Motor and Motion Control Using Digital Signal Processors. Englewood Cliffs,
Prentice Hall 1990.
Duda01 Duda K., Turcza P., Zieliński T.P.: Lossless ECG compression with lifting wavelet transform.
IEEE Instrumentation and Measurement Technology Conference, 640−644, Budapest 2001.
Duda02 Duda K.: Bezstratna kompresja sygnału EKG za pomocą całkowitoliczbowych transformacji
falkowych. Rozprawa doktorska, Kraków, AGH 2002.
Duda04 Duda K., Bien A., Szyper M., Zielinski T.P.: Analysis of Voltage disturbances caused by simul-
taneous amplitude and phase modulation in electric power network. The 2004 IEEE Int. Confe-
rence on Harmonics and Quality of Power ICHQP-2004, Lake Placid, New York 2004 (CD-
-ROM, paper #hqp048).
Dzie93 Dziech A.: Random Pulse Streams and their Applications. Amsterdam, Elsevier 1993.
Elli82 Elliott D.F., Rao K.R.: Fast Transforms. Algorithms, Analyses, Applications. Academic Press
1982.
Elli87 Elliott D.F. (red.): Handbook of Digital Signal Processing. Engineering Applications. San Diego,
Academic Press 1987.
Elli01 Elliott S.J.: Signal Processing for Active Control. San Diego, Academic Press 2001.
ElSh90 El-Sharkawy M.: Real Time Digital Signal Processing Applications with Motorola’s DSP56000
Family. Englewood Cliffs, Prentice Hall 1990.
ElSh96 El-Sharkawy M.: Digital Signal Processing Applications with Motorola’s DSP56002 Processor.
Upper Saddle River, Prentice Hall PTR 1996.
816 Literatura

Embr91 Embree P.M.: C Language Algorithms for Digital Signal Processing. Upper Saddle River, Pren-
tice Hall 1991.
Embr95 Embree P.M.: C Algorithms for Real-Time DSP. Upper Saddle River, Prentice Hall 1995.
Fern96 Fernández G., Periaswamy S., Sweldens W.: Liftpack: A software Package for Wavelet Trans-
forms using Lifting. Proc. SPIE, vol. 2825, 396-408, 1996 (http://cm.bell-labs.com/who/wim/
papers/papers.html).
Fili95 Filipkowski A.: Układy elektroniczne analogowe i cyfrowe. Warszawa, WNT 1995.
Flie94 Fliege N.J.: Multirate Digital Signal Processing. Multirate Systems, Filter Banks, Wavelets.
Chichester, Wiley 1994.
Fran75 Franks L.E.: Teoria sygnałów. Warszawa, PWN 1975.
Frąc05 Frączek R., Zieliński T.P.: New algorithm for Kikuchi lines detection in electron microscopy
images. European Signal Processing Conference EUSIPCO, Antalya 2005.
Furu01 Furui S.: Digital Speech Processing, Synthesis, and Recognition. New York, M. Dekker 2001.
Gajd98 Gajda J., Szyper M.: Modelowanie i badania symulacyjne systemów pomiarowych. Kraków,
Wydział EAIiE-AGH 1998.
Gajd00 Gajda J., Sroka R.: Pomiary kąta fazowego. Kraków, Wydział EAIiE-AGH 2000.
Gajd02 Gajda J.: Statystyczna analiza danych pomiarowych, Kraków , Wydział EAIiE-AGH 2002.
Garg98 Garg H.K.: Digital Signal Processing Algorithms: Number Theory, Convolution, Fast Fourier
Transforms, and Applications. Boca Raton, CRC Press 1998.
Glen99 Glentis G.-O., Berberidis K., Theodoridis S.: Efficient least squares adaptive algorithms for FIR
transversal filtering. IEEE Signal Processing Magazine, vol. 16, no. 4, 12−41, July 1999.
Gold00 Gold B., Morgan N.: Speech and Audio Signal Processing. New York, Wiley 2000.
Gonz04 Gonzales R.C., Woods R.E., Eddins S.L.: Digital Image Processing Using Matlab. Upper Saddle
River, Pearson Prentice Hall 2004.
Grov99 Grover D., Deller J.R.: Digital Signal Processing and the Microcontroller. Upper Saddle River,
Prentice Hall PTR 1999.
Guzi93 Guziński A.: Liniowe elektroniczne układy analogowe. Warszawa, WNT 1993.
Hang95 Hang H.-M., Woods J.W.: Handbook of Visual Communications. San Diego, Academic Press
1995.
Hanz01 Hanzo L., Somerville F.C.A., Woodard J.P.: Voice Compression and Communications. Prin-
ciples and Applications for Fixed and Wireless Channels. New York, Wiley Interscience 2001.
Harr78 Harris F.J.: On the use of windows for harmonic analysis with the discrete Fourier transform.
Proc. IEEE, vol. 66, no. 1, 51−83, January 1978.
Harr87 Harris F.J.: Multirate filters for interpolating and desampling. [W] „Handbook of Digital Signal
Processing”, ed. F.D. Elliott, 173−287, San Diego, Academic Press 1987.
Hask97 Haskell B.G., Puri A., Netravali A.N.: Digital Video: An Introduction to MPEG-2. New York,
Chapman & Hall 1997.
Haye96 Hayes M.H.: Statistical Digital Signal Processing and Modeling. New York, Wiley 1996.
Hayk90 Haykin S.: Modern Filters. New York, Macmillan 1990.
Hayk96 Haykin S.: Adaptive Filter Theory. Upper Saddle River, Prentice Hall 1996.
Hayk98 Haykin S.: Systemy telekomunikacyjne. Warszawa, WKŁ 1998.
Hobs81 Hobson G.S.: Przyrządy z przenoszeniem ładunku. Warszawa, WNT 1981.
Host87 Hostetter G.H.: Recursive estimation. [W] „Handbook of Digital Signal Processing”, ed. F.D.
Elliott, 899−940, San Diego, Academic Press 1987.
IEEE79 Programs for Digital Signal Processing. New York, IEEE Press 1979.
Ifea93 Ifeachor E.C., Jervis B.W.: Digital Signal Processing. A Practical Approach. Wokingham,
Addison-Wesley 1993.
ISO91 ISO/IEC-11172: Coding of Moving Pictures and Associated Audio for Digital Storage Media at
up to about 1.5 Mbit/s. MPEG-1 International Standard, 1991.
ISO95 ISO/IEC-13818: Information technology - Generic Coding of Moving Pictures and Associated
Audio Informations. MPEG-2 International Standard, 1995.
ISO98 ISO/IEC-14496: Information technology - Very Low Bitrate Audio-Visual Coding. MPEG-4
International Standard, 1998.
ISO02 ISO/IEC-15938: Multimedia Content Description Interface. MPEG-7 International Standard,
2002.
Literatura 817

ITU99 ITU−T Recommendation G.992.1: Transmissions Systems and Media, Digital Systems and Net-
works – Asymmetric Digital Subscriber Line (ADSL) Transceivers, June 1999.
Izyd99 Izydorczyk J., Płonka G., Tymma G.: Teoria sygnałów. Wstęp. Gliwice, Helion 1999.
Jack96 Jackson L.B.: Digital Filters and Signal Processing with Matlab Exercises. Boston, Kluwer
Academic Publishers 1996.
Jain89 Jain A.K.: Fundamentals of Digital Image Processing. Englewood Cliffs, Prentice Hall 1989.
Jaya84 Jayant N.S., Noll P.: Digital Coding of Waveforms. Englewood Cliffs, Prentice Hall 1984.
Jora98 Jorasz U.: Wykłady z psychoakustyki. Poznań, Wydawnictwa Naukowe Uniwersytetu AM 1998.
Kahr98 Kahrs M., Bandenburg K. (red.): Applications of Digital Signal Processing to Audio and Acou-
stics. Boston, Kluwer 1998.
Kalo93 Kalouptsidis N., Theodoridis S.: Adaptive System Identification and Signal Processing Algo-
rithms. New York, Prentice Hall 1993.
Kalo97 Kalouptsidis N.: Signal Processing Systems: Theory and Design. New York, Wiley 1997.
Kama89 Kamas A., Lee E.A.: Digital Signal Processing Experiments. Eng. Cliffs, Prentice Hall 1989.
Kame87 Kamen E.: Introduction to Signal and Systems. New York, Macmillan Publishing 1987.
Kay88 Kay S.M.: Modern Spectral Estimation: Theory and Application. Englewood Cliffs, Prentice
Hall 1988.
Kay93 Kay S.M.: Fundamentals of Statistical Signal Processing: Estimation Theory. Englewood Cliffs,
PTR Prentice Hall 1993.
Kisz03 Kiszka P.: Modulacje cyfrowe: przykłady i zastosowania. Praca magisterska, Akademia Górni-
czo-Hutnicza, Kraków 2003.
Kond94 Kondoz A.M.: Digital speech: Coding for Low Bit Rate Communication Systems. Chichester,
Wiley 1994.
Kono99 Konopacki J., Izydorczyk (red.): Teoria sygnałów i cyfrowe przetwarzanie sygnałów: labora-
torium. Gliwice, Wydawnictwa Politechniki Śląskiej 1999.
Kuc88 Kuc R.: Introduction to Digital Signal Processing. McGraw-Hill 1988.
Kudr76 Kudrewicz J.: Analiza funkcjonalna dla automatyków i elektroników. Warszawa, PWN 1976.
Kudr93 Kudrewicz J.: Fraktale i chaos. Warszawa, WNT 1993.
Kuhn83 Kuhn M.H., Tomaszewski H.H.: Improvements in Isolated Word Recognition, IEEE Trans.
Acoust., Speech, Signal Processing, vol. 31, no. 1, 157-167, Feb. 1983.
Kule84 Kulesza W.: Systemy widmowej analizy danych cyfrowych. Warszawa, WKŁ 1984.
Kuo96 Kuo S.M., Morgan D.R.: Active Noise Control Systems: Algorithms and DSP Implementations.
New York, Wiley 1996.
Kuo01 Kuo S.M., Lee B.H.: Real-Time Digital Signal Processing. Implementations, Applications, and
Experiments with the TMS320C55X. Chichester, Wiley 2001.
Lim90 Lim J.S.: Two-Dimensional Signal and Image Processing. Prentice Hall 1990.
Lu92 Lu W.-S., Antoniou A.: Two-Dimensional Digital Filters. New York, Marcel Dekker 1992.
Lynn94 Lynn P.A.: Introductory Digital Signal Processing with Computer Applications. Chichester,
Wiley 1994.
Lyon99 Lyons R.G.: Wprowadzenie do cyfrowego przetwarzania sygnałów. Warszawa, WKŁ 1999.
Łopa94 Łopacz H., Zieliński T.P.: Analiza czasowo-częstotliwościowa odpowiedzi impulsowych pomiesz-
czeń z wykorzystaniem STFT oraz transformaty wavelet. Ogólnopolskie Seminarium Akustyki
OSA-94, 259−262, Wrocław 1994.
Madi98 Madisetti V.K., Williams D.B.: The Digital Signal Processing Handbook. Boca Raton, CRC
Press − IEEE Press 1998.
Maje89 Majewska H., Nagłowski P.: Filtry z akustyczną falą powierzchniową. Audio-hifi-Video, nr 4,
23−28, 1989.
Mall98 Mallat S.: A Wavelet Tour of Signal Processing. San Diego, Academic Press 1998.
Malv91 Malvar H. S.: Signal Processing with Lapped Transforms. London, Artech House 1991.
Mano00 Manolakis D.G., Ingle V.K., Kogon S.M.: Statistical and Adaptive Signal Processing: Spectral
Estimation, Signal Modeling, Adaptive Filtering and Array Processing. Boston, McGraw-Hill
2000.
Marp87 Marple S.L.: Digital Spectral Analysis with Applications. Englewood Cliffs, Prentice Hall 1987.
Marp95 Marple S.L.: Digital Spectral Analysis with Applications in C Fortran and MATLAB. Prentice
Hall 1995.
818 Literatura

Marv99 Marven C., Ewers G.: Zarys cyfrowego przetwarzania sygnałów. Warszawa, WKŁ 1999.
Mast94 Masters T.: Signal and Image Processing with Neural Networks: A C++ Sourcebook. New York,
Wiley 1994.
Mend86 Mendel J.M.: Lessons in Digital Estimation Theory. Englewood Cliffs, Prentice Hall, 1986.
Mert99 Mertins A.: Signal Analysis: Wavelets, Filter Banks, Time-Frequency Transforms and Appli-
cations. Chichester, Wiley 1999.
Mine92 Miner G.F., Comer D.J.: Physical Data Acquisition for Digital Processing. Englewood Cliffs,
Prentice Hall 1992.
Mitc96 Mitchell J.L.: MPEG Video Compression Standard. New York, Chapman & Hall 1996.
Mitr93 Mitra S.K., Kaiser J.F. (red.): Handbook for Digital Signal Processing. New York, Wiley 1993.
Mitr98 Mitra S. K.: Digital Signal Processing. A Computer-Based Approach. New York, McGraw-Hill
1998.
Mitr99 Mitra S.K.: Digital Signal Processing Laboratory Using Matlab. Boston, McGraw-Hill 1999.
Moor99 Moore B.: Wprowdzenie do psychologii słyszenia. Warszawa, PWN, 1999.
Neko99 Nekoogar F., Moriarty G.: Digital Control Using Digital Signal Processing. Upper Saddle River,
Prentice Hall 1999.
Niki93 Nikias C.L., Petropulu A.P.: Higher-Order Spectra Analysis: A Nonlinear Signal Processing
Framework. Englewood Cliffs, Prentice Hall 1993.
O’Fl87 O’Flynn M., Moriarty E.: Linear Systems. Time Domain and Transform Analysis. New York,
Wiley 1987.
Oppe79 Oppenheim A.V., Schafer R.: Cyfrowe przetwarzanie sygnałów. Warszawa, WKŁ 1979
Oppe82 Oppenheim A.V.: Sygnały cyfrowe: przetwarzanie i zastosowania. Warszawa, WNT 1982.
Oppe89 Oppenheim A.V., Schafer R.W.: Discrete-Time Signal Processing. Englewood Cliffs, Prentice
Hall 1989.
Oppe97 Oppenheim A.V., Willsky A.S., Nawab S.H.: Signals & Systems. Upper Saddle River, Prentice
Hall 1997.
Orfa88 Orfanidis S.J.: Optimum Signal Processing. An Introduction. New York, Macmillan 1988.
Orfa96 Orfanidis S.J.: Introduction to Signal Processing. Englewood Cliffs, Prentice Hall 1996.
Osio65 Osiowski J.: Zarys rachunku operatorowego. Warszawa, WNT 1965.
Otne78 Otnes R.K., Enochson L.: Analiza numeryczna szeregów czasowych. Warszawa, WNT 1978.
Ozim85 Ozimek E.: Podstawy teoretyczne analizy widmowej sygnałów. Warszawa-Poznań, PWN 1985.
Ozim02 Ozimek E.: Dźwięk i jego percepcja. Warszawa-Poznań, PWN 2002.
Qian96 Qian D.S., Chen D.: Joint Time-Frequency Analysis. Upper Saddle River, Prentice Hall 1996.
Panu01 Panuszka R.: Acoustic Waves, Kraków, Wydawnictwo PTA 2001.
Papa87 Papamichalis P.E.: Practical Approaches to Speech Coding. Eng. Cliffs, Prentice Hall 1987.
Papi95 Papir Z.: Analiza częstotliwościowa sygnałów. Zbiór zadań. Kraków, Wydawnictwa AGH 1995.
Papo77 Papoulis A.: Signal Analysis. New York, Mc-Graw Hill 1977.
Papo84 Papoulis A.: Probability, Random Variables, and Stochastic Processes. New York, McGraw-Hill
1984.
Papo88 Papoulis A.: Obwody i układy. Warszawa, WKŁ 1988.
Parh99 Parhi K.K.: VLSI Digital Signal Processing Systems: Design and Implementation. New York,
Wiley 1999.
Parh99 Parhi K.K., Nishitani T. (red.): Digital Signal Processing for Multimedia Systems. New York,
Marcel Dekker 1999.
Park87 Parks T.W., Burrus C.S.: Digital Filter Design. New York, Wiley 1987.
Pask99 Pasko M., Walczak J.: Teoria sygnałów. Gliwice, Wydawnictwa Politechniki Śląskiej 1999.
Pele95 Peleg S., Friedlander B.: Polynomial Phase Transform, IEEE Trans. on Signal Processing, vol.
43, no. 8, 1901−1914, 1995.
Peti03 Petitcolas F. A. P.: MPEG psychoacoustic model I for MATLAB, www.cl.cam.ac.uk/~fapp2/
software/mpeg/, 2003.
Pirs98 Pirsch P.: Architectures for Digital Signal Processing. Chichester, Wiley 1998.
Pita90 Pitas I.: Nonlinear Digital Filters. Boston, Kluwer 1990.
Pita93 Pitas I.: Digital Image Processing Algorithms. Englewood Cliffs, Prentice Hall 1993.
Plui03 Pluim J.P.W. , Maintz J.B.A., Viergever M.A.: Mutual-information-based registration of medical
images: a survey. IEEE Trans. on Medical Imaging, vol. 22, no. 8, 986-1004, August 2003.
Literatura 819

Pora94 Porat B.: Digital Processing of Random Signals: Theory and Methods. Englewood Cliffs,
Prentice Hall 1994.
Pora97 Porat B.: A Course in Digital Signal Processing. New York, Wiley 1997.
Poul85 Poularikas A.D., Seely S.: Signals and Systems. Boston, PWS Engineering 1985.
Prat01 Pratt W.K.: Digital Image Processing. New York, Wiley 2001.
Proa92 Proakis J.G., Manolakis D.G.: Digital Signal Processing. Principles, Algorithms, and Appli-
cations. New York, Macmillan 1992.
Quat01 Quatieri T.F.: Discrete-Time Speech Signal Processing. Upper Saddle River, Prentice Hall 2001.
Rabi75 Rabiner L.R., Gold B.: Theory and Application of Digital Signal Processing. Englewood Cliffs,
Prentice Hall 1975.
Rabi78 Rabiner L.R., Shafer R.W.: Digital Processing of Speech Signals. Prentice Hall 1978.
Raus98 Rauschmayer D.: Adsl/Vdsl Principles: A Practical and Precise Study of Asymmetric Digital
Subscriber Lines and Very High Speed Digital Subscriber Lines. Macmillan Technical Publish-
ing, 1998.
Redd96 Reddy, B.S., Chatterji, B.N.: An FFT-based technique for translation, rotation, and scale-inva-
riant image registration. IEEE Trans.on Image Processing vol. 5, no. 8, 1266–1271, August
1996.
Rei92 Reid C.E., Passin T.B.: Signal Processing in C. New York, Wiley 1992.
Robe87 Roberts R.A., Mullis C.T.: Digital Signal Processing. Reading, Addison-Wesley 1987.
Robi85 Robinson E.A., Durrani T.: Geophysical Signal Processing. Prentice Hall 1985.
Romb96 Romberg T.M., Black J.L., Ledwidge T.J.: Signal Processing for Industrial Diagnostics. Chi-
chester, Wiley 1996.
Rora93 Rorabaugh C.B.: Digital Filter Designer’s Handbook. New York, McGraw-Hill 1993.
Rora99 Rorabaugh C.B.: DSP Primer. New York, McGraw-Hill 1999.
Rutk94 Rutkowski L.: Filtry adaptacyjne i adaptacyjne przetwarzanie sygnałów. Warszawa, WNT 1994.
Said96 Said A., Pearlman W.A.: Set Partitioning in Hierarchical Trees. IEEE Transactions on Circuits
and Systems for Video Technology, vol. 6, no. 3, 243-250, 1996.
Schm97 Schmidl T.M, Cox D.C.: Robust Frequency and Timing Synchronization for OFDM. IEEE
Trans. on Communications, vol. 45, no. 12, 1613-1621, 1997.
Shap93 Shapiro J. M.: Embedded image coding using zerotrees of wavelet coefficients. IEEE Trans. on
Signal Processing, vol. 41, no. 12, 3445-3462, 1993.
Shen95 Shenoi K.: Digital Signal Processing in Telecommunications. Upper Saddle River, Prentice Hall
1995.
Simp94 Simpson R.J.: Digital Signal Processing Using the Motorola DSP Family. Englewood Cliffs,
PTR Prentice Hall 1994.
Skar93 Skarbek W.: Metody reprezentacji obrazów cyfrowych. Warszawa, Akademicka Oficyna Wy-
dawnicza PLJ 1993.
Skar98 Skarbek W. (red.): MULTIMEDIA: Algorytmy i standardy kompresji. Warszawa, Akademicka
Oficyna Wydawnicza PLJ 1998.
Skór03 Skórka E.: Rozpoznawanie izolowanych słów w systemach sterowania głosem. Praca dyplo-
mowa, Państwowa Wyższa Szkoła Zawodowa, Tarnów 2003.
Smit92 Smith M.J.T., Mersereau R.M.: Introduction to Digital Signal Processing. A Computer Labora-
tory Textbook. New York, Wiley 1992.
Soch05a Socha M., Duplaga M., Turcza P., Zieliński T.P.: Oprogramowanie wspomagające zabieg trans-
bronchialnej igłowej biopsji aspiracyjnej metodą wirtualnej bronchoskopii. Sympozjum Mode-
lowanie i Pomiary w Medycynie, Krynica Górska 2005.
Soch05b Socha M., Duda K., Zieliński T., Duplaga M.: Algorytmiczna korekcja zniekształceń geome-
trycznych kamery bronchoskopu. Sympozjum Modelowanie i Symulacja Systemów Pomiaro-
wych, Krynica Górska 2005.
Sode97 Soderstrom T., Stoica P.: Identyfikacja systemów. Warszawa, PWN 1997.
Star99 Starr T., Cioffi J.M., Silverman P.J.: Understanding Digital Subscriber Line Technology. Upper
Saddle River, Prentice Hall, 1999.
Star02 Starr T., Sorbara M., Cioffi J.M., Silverman P.J.: DSL Advances. Prentice Hall, 2002.
Stea88 Stearns S.D., David R.A.: Signal Processing Algorithms. Eng. Cliffs, Prentice Hall 1988
Stea90 Stearns S.D.: Digital Signal Analysis. Englewood Cliffs, Prentice Hall 1990.
820 Literatura

Stea96 Stearns S.D., David R.A.: Signal Processing Algorithms in Matlab. Upper Saddle River, Prentice
Hall 1996.
Stei77 Steiglitz K.: Wstęp do systemów dyskretnych. Warszawa, WNT 1977.
Stęp00 Stępień J., Zieliński T.P., Rumian R.: Image denoising using scale-adaptive lifting schemes.
Proc. IEEE International Conference on Image Processing, Vancouver 2000.
Stęp01a Stępień J., Zieliński T.P.: Signal denoising using line-adaptive lifting wavelet transform. IEEE
Instrumentation and Measurement Technology Conference, 1386−1391, Budapest 2001.
Stęp01b Stępień J.: Predykcyjna wersja transformacji falkowej sygnałów cyfrowych. Rozprawa doktorska,
Kraków, Akademia Górniczo-Hutnicza 2001.
Stoi97 Stoica P., Moses R.: Introduction to Spectral Analysis. Upper Saddle River, Prentice Hall 1997.
Stra96 Strang G., Nguyen T.: Wavelets and Filter Banks. Wellesley, Wellesley-Cambridge Press 1996.
Stra04 Stranneby D.: Cyfrowe przetwarzanie sygnałów. Warszawa, Wydawnictwo btc, 2004.
Swel96 Sweldens W., Schröder P.: Building your own wavelets at home. W Wavelets in Computer
Graphics, ACM SIGGRAPH Course Notes, 15-87, 1996.
Szab90 Szabatin J.: Podstawy teorii sygnałów. Warszawa, WKŁ 1990.
Szyp92 Szyper M., Zieliński T.P., Sroka R.: Spectral analysis of nonstationary signals in the system with
wide phase modulation. IEEE Transactions on Instrumentation and Measurement, vol.41, no.6,
919-920, 1992.
Tade88 Tadeusiewicz R.: Sygnał mowy. Warszawa, WKŁ 1988.
Tade92 Tadeusiewicz R.: Systemy wizyjne robotów przemysłowych. Warszawa, WNT 1992.
Tade97 Tadeusiewicz R., Korohoda P.: Komputerowa analiza i przetwarzanie obrazów. Kraków, Wy-
dawnictwa Fundacji Postępu Telekomunikacji 1997.
Tayl83 Taylor F.: Digital Filter Design Handbook. New York, Marcel Dekker 1983
Tayl94 Taylor F.J.: Principles of Signals and Systems. New York, McGraw-Hill 1994.
Tayl98 Taylor F., Mellott J.: Hands-on Digital Signal Processing. New York, McGraw-Hill 1998.
Teka95 Tekalp A.M.: Digital Video Processing. Upper Saddle River, Prentice Hall 1995.
Teme78 Temes G.T., Mitra S.K.: Teoria i projektowanie filtrów. Warszawa, WNT 1978.
Teol98 Teolis A.: Computational Signal Processing with Wavelets. Boston, Birkhauser 1998.
Teub92 Teuber J.: Digital Image Processing. Englewood Cliffs, Prentice Hall 1992.
Thed96 Thede L.D.: Analog and Digital Filter Design Using C. Upper Saddle River, Prentice Hall 1996.
Theo01 Theodoridis S.: Adaptive filtering algorithms. Proc. IEEE Instrumentation and Measurement
Technology Conference, 1497−1501, Budapest 2001.
Ther92 Therrien C.W.: Discrete Random Signals and Statistical Signal Processing. Englewood Cliffs,
Prentice Hall 1992.
Tiet87 Tietze U., Schenk Ch.: Układy półprzewodnikowe. Warszawa, WNT 1996.
Tkac03 Tkacenko A., Vaidyanathan P.P.: A Low-Complexity Eigenfilter Design Method for Channel
Shortenning Equalizers for DMT Systems. IEEE Trans. on Communications, vol. 51, no. 7, 1069-
-1072, July 2003.
Trei87 Treichler J.R., Johnson C.R., Larimore M.G.: Theory and Design of Adaptive Filters. New York,
Wiley 1987.
Turc97a Turcza P., Zieliński T.P.: VME/VXI instrument with parallel DSP processors for real-time dyna-
mic measurements. XIV IMEKO World Congress, Finland, vol. 4B, 132−136, Tampere 1997.
Turc97b Turcza P., Zieliński T.P.: Hardware instantaneous phase shift estimation on field programmable
gate arrays. Proc. IMEKO-TC4 9th International Symposium on Electrical Instruments in In-
dustry, 237−240, Glasgow 1997.
Turc97c Turcza P., Zieliński T.P.: On accelerating DSP algorithms using FPGA hardware. Proc. 4th Int.
Workshop on Systems, Signals and Image Processing, Poland, 77−80, Poznań 1997.
Turc97d Turcza P., Zieliński T.P.: Real-time implementation of MPEG audio psychoacoustical model on
fixed-point Motorola DSP56002. Proc. 4th International Workshop on Systems, Signals and Ima-
ge Processing, 81−84, Poznań 1997.
Turc98 Turcza P., Zieliński T.P.: Fast cosine Gabor transform and its application to image compression.
IEEE-SP Symposium on Time-Frequency and Time-Scale Analysis, 461−464, Pittsburgh 1998.
Turc99a Turcza P., Zieliński T.P.: Design of prototype filters for cosine-modulated filter banks. Proc. 6th
Int. Workshop on Systems, Signals and Image Processing, 169−172, Bratislava 1999.
Literatura 821

Turc99b Turcza P., Zieliński T.P.: Extension of finite length signals in linear-phase sine/cosine-modula-
ted filter banks. Proc. 6th Int. Workshop on Systems, Signals and Image Processing. 173−176,
Bratislava 1999.
Turc99c Turcza P., Zieliński T.P.: Regular linear-phase cosine-modulated filter banks for image com-
pression. Second European Conference on DSP for Multimedia Communications and Services,
Kraków 1999.
Turc99d Turcza P., Czosnowski J., Zieliński T.P.: Linear phase modulated filter banks with efficient VLSI
realization. Materiały XXII Krajowej Konferencji Teorii Obwodów i Układów Elektronicznych
KKTOiUE-99, 503−508, Warszawa − Stare Jabłonki 1999.
Turc01 Turcza P.: Modulowane zespoły filtrów o regularnej strukturze i liniowej charakterystyce fazo-
wej. Rozprawa doktorska, Kraków, AGH 2001.
Turc05 Turcza P.: Navigation system for bronchofiberoscopic procedures based on image registration
with scale adaptive image similarity measures. European Signal Processing Conference
EUSIPCO-05, Antalya 2005.
Twar04 Twardowski T., Zieliński T.: Fast estimation of power spectral density of ISI/ICI interferences
for ADSL modem. Proc. IEEE Int. Conference on Acoustics, Speech and Signal Processing
ICASSP-04, 1049-1052, Montreal 2004.
Twar05 Twardowski T., Zieliński T.P., Turcza P.: Equalizer design for discrete multitone systems com-
bining response shortening and spectral shaping. 17-th European Conference on Circuits Theory
and Design, Cork (Irlandia) 2005.
Uhl98 Uhl T., Kurowski P.: Zastosowanie środowisk MATLAB i Siglab do analizy sygnałów. Kraków,
KCIS 1998.
Vaid93 Vaidyanathan P.P.: Multirate Systems and Filter Banks. Englewood Cliffs, Prentice Hall 1993.
Vash96 Vaseghi S.V.: Advanced Signal Processing and Digital Noise Reduction. Chichester, Wiley
1996.
Vett95 Vetterli M., Kovacevic J.: Wavelets and Subband Coding. Eng. Cliffs, Prentice Hall 1995.
Weso03 Wesołowski K.: Podstawy cyfrowych systemów telekomunikacyjnych. Warszawa, WKŁ 2003.
West94 Westall F.A. (red.): Digital Signal Processing in Telecommunications. London, Chapman & Hall
1994.
Widr85 Widrow B., Stearns S.: Adaptive Signal Processing. Englewood Cliffs, Prentice Hall 1985.
Wiel01 Wielgat R.: Zastosowanie znaczników fonetycznych, nieliniowej transformacji czasowej i nie-
jawnych modeli Markowa do rozpoznawania izolowanych słów mowy polskiej. Praca doktorska,
Politechnika Łódzka 2001.
Wojn80 Wojnar A.: Teoria sygnałów. Warszawa, WNT 1980
Wojn94 Wojnar L., Majorek M.: Komputerowa analiza obrazu. Kraków, FOTOBIT-DESIGN 1994.
Wojn98 Wojnar L.: Image Analysis: Applications in Material Engineering. Boca Raton, CRC Press 1998.
Wojt00 Wojtaszczyk P.: Teoria falek. Warszawa, PWN 2000.
Wojt87 Wojtkiewicz A.: Elementy syntezy filtrów cyfrowych. Warszawa, WNT 1984.
Wojt00 Wojtkiewicz A., Gajo Z. (red.): Cyfrowe przetwarzanie sygnałów. Ćwiczenia laboratoryjne.
Warszawa, Oficyna Wydawnicza Politechniki Warszawskiej 2000.
Worn95 Wornell G.W.: Signal Processing with Fractals: A Wavelet-Based Approach. Upper Saddle Ri-
ver, Prentice Hall 1995.
Xie03 Xie H., Hicks N., Keller G.R., Huang H., Kreinovich V.: An IDL/ENVI implementation of the
FFT-based algorithm for automatic image registration. Computers & Geosciences, vol. 29,
1045–1055, 2003.
Zarz98 Zarzycki J.: Cyfrowa filtracja ortogonalna sygnałów losowych. Warszawa, WNT 1998.
Zeln94 Zelniker G., Taylor F.J.: Advanced Digital Signal Processing: Theory and Applications. New
York, Marcel Dekker 1994.
Ziel88 Zieliński T.P.: On a software implementation of the Wigner-Ville transform. Computer Physics
Communications (Netherlands), vol.50, 747−750, 1988.
Ziel89a Zieliński T.P.: Algorithms for mixed time-frequency signal processing by means of the Wigner-
-Ville distribution. Proc. Australasian Measurement and Instrumentation Conference AIM-89,
75−79, Adelaide 1989.
Ziel89b Zieliński T.P., Donevsky B.D.: Razpredelenie na Wigner-Ville: algoritmi i prilozenia. Elektro-
promislennost i Priborostroene (Bulgaria), no.12, 2−6, 1989.
822 Literatura

Ziel89c Zieliński T.P.: Detection using cross-terms in the Wigner-Ville distribution. Proc. XII GRETSI
Symposium on Signal and Image Processing, 133−136, Juan Les Pins 1989.
Ziel90 Zieliński T.P.: New detection method based on the cross-terms mechanism of the Wigner-Ville
transform. Proc. V European Signal Processing Conference (Signal Processing V, Elsevier Scien-
ce), 157−160, Barcelona 1990.
Ziel91 Zieliński T.P.: Note on computation of some bilinear time-frequency signal representations.
Proc. Int. Conf. on Digital Signal Processing (DSP-91, Elsevier Science), 40−44, Florence 1991.
Ziel93a Zieliński T.P., Liszka S., Kołczak A.: Practical software implementation of the discrete wavelet
transform. Proc. Signal Processing'93 Workshop − Polish IEEE Chapter on Circuits and Systems,
19−22, Poznań 1993.
Ziel93b Zieliński T.P.: Efficient computation of the wavelet transform using fast Mellin transform. Proc.
7th International Symp. on Theoretical Electrical Engineering, 303−308, Szczecin 1993.
Ziel93c Zieliński T.P.: Note on computation of come affine bilinear time-frequency signal representa-
tions. Proc. Int. Conf. on Digital Signal Processing DSP-93, 94−99, Nicosia 1993.
Ziel94a Zieliński T.P.: Computation of the time-frequency Q-distribution of Altes. Proc. IEEE Interna-
tional Symposium on Circuits and Systems, vol.2, 365−368, London 1994.
Ziel94b Zieliński T.P.: Computation of affine Wigner-Ville distributions by means of chirp-Z transform.
Proc. VII European Signal Processing Conference, 649−652, Edinburgh 1994.
Ziel94c Zieliński T.P.: Reprezentacje sygnałów niestacjonarnych typu czas-częstotliwość i czas-skala.
Wydawnictwa AGH, nr 10 w serii „Rozprawy, monografie”, Kraków 1994.
Ziel95a Zieliński T.P.: Metody estymacji chwilowego przesunięcia fazowego. Część I: Algorytmy i ich
implementacje. Symp. Modelowanie i Symulacja Systemów Pomiarowych, 76−87, Krynica 1995.
Ziel95b Zieliński T.P.: Metody estymacji chwilowego przesunięcia fazowego. Część II: Porównanie włas-
ności użytkowych. Symp. Modelowanie i Symulacja Systemów Pomiarowych, 88−100, Krynica
1995.
Ziel96a Zieliński T.P.: Instantaneous phase shift estimation methods. IEEE/IMEKO Instrumentation and
Measurement Technology Conference, 162−167, Brussels 1996.
Ziel96b Zieliński T.P.: Wigner transform instantaneous phase estimator. VIII European Signal Proce-
ssing Conference EUSIPCO-96, 695−698, Trieste 1996.
Ziel96c Zieliński T.P., Turcza P., Rumian R.: Audio MPEG compression using Motorola digital signal
processor 56002. Materiały XIX Krajowej Konferencji Teorii Obwodów i Układów Elektronicz-
nych KKTOiUE-96, 567−572, Krynica 1996.
Ziel99a Zieliński T.P., Turcza P.: Time-frequency sampling schemes in Gabor transforms. Second Euro-
pean Conf. on DSP for Multimedia Communications and Services, Kraków 1999.
Ziel99b Zieliński T.P., Turcza P.: Design of Lerner prototype filters for communication filter banks. In-
ternational Conference on Broadband Access BAC-99, 42−47, Kraków 1999.
Ziel00a Zieliński T.P., Stepień J., Duda K.: Filter design for adaptive lifting schemes. Proc. European
Signal Processing Conference EUSIPCO-2000, Tampere, Finland, 2000.
Ziel00b Zieliński T.P.: Analiza czasowo-częstotliwościowa sygnałów biomedycznych. Materiały II Sym-
pozjum Pomiary i Modelowanie w Medycynie, 44−96, Krynica Górska 2000.
Ziel01a Zieliński T.P.: Window choice strategies in the short-time Fourier transform. Proc. of the Inter-
national Conf. on Signals and Electronic Systems, 141−146, Łódź 2001.
Ziel01b Zieliński T.P.: Joint time-frequency resolution of signal analysis with Gabor transform. IEEE
Trans. on Instrumentation and Measurement, vol.50, no.5, 1436−1444, 2001.
Ziel02 Zieliński T.P.: Design of Lerner prototype filters for audio cosine-modulated filter banks.
Bulletin of the Polish Academy of Sciences: Technical Sciences, vol. 50, no. 1, 29−36, 2002.
Ziel04 Zieliński T.P.: Wavelet transform applications in instrumentation and measurement: tutorial &
& literature survey. Metrology and Measurement Systems, vol. XI, no. 1, 61-101, 2004.
Dodatki

D.1. Wykaz programów


Nr tabeli Strona Program
1-3 37 Sygnały i ich parametry
2-1 60 Transformacje ortogonalne sygnałów
3-2 69 Szereg Fouriera − aproksymacja wybranych przebiegów czasowych
4-2 101 Twierdzenie o próbkowaniu
5-2 129 Projektowanie transmitancji H(s) układów analogowych metodą zer i biegunów
6-1 145 Transformacje częstotliwości filtrów analogowych
6-2 154 Projektowanie transmitancji analogowych filtrów LP, HP, BP i BS Butterwortha
6-3 160 Projektowanie transmitancji analogowych filtrów Czebyszewa typu I
6.4 163 Projektowanie transmitancji analogowych filtrów Czebyszewa typu II
6-5 169 Zaprojektowanie układu elektronicznego dolnoprzepustowego filtra Butterwortha
8-2 225 Analiza częstotliwościowa sygnałów metodą dyskretnego przekształcenia Fouriera
8-4 228 Szybkie wyznaczanie funkcji autokorelacji i funkcji gęstości widmowej mocy
9-1 240 Dyskretna transformacja świergotowa sygnału (ang. chirp-Z)
9-3 248 Algorytm szybkiej transformacji Fouriera FFT typu radix-2 DIT
10-2 266 Filtracja cyfrowa z wykorzystaniem buforów przesuwnych i kołowych
10-4 286 Projektowanie rekursywnych filtrów cyfrowych metodą „zer i biegunów”
11-1 297 Transformacja biliniowa
11-2 304 Projektowanie cyfrowych filtrów Butterwortha (LP, HP, BP i BS)
12-2 316 Projektowanie nierekursywnych filtrów cyfrowych metodą próbkowania w dziedzinie
częstotliwości
12-3 320 Projektowanie nierekursywnych filtrów cyfrowych metodą próbkowania w dziedzinie
częstotliwości i optymalizacji średniokwadratowej
12-4 323 Projektowanie nierekursywnych filtrów cyfrowych w dziedzinie częstotliwości
metodą aproksymacji Czebyszewa − algorytm Remeza
12-9 338 Projektowanie nierekursywnych filtrów cyfrowych metodą okien z zastosowaniem
okna Kaisera
12-10 352 Projektowanie specjalnych filtrów cyfrowych metodą okien − Hilberta,
różniczkujących i interpolujących
13-2 376 Algorytmy splotu dwóch sygnałów dyskretnych: bezpośredni, „szybki”
niesekcjonowany oraz „szybki” sekcjonowany − wersje overlap-save i overlap-add
14-2 394 Filtry adaptacyjne typu LMS (NLMS) − losowego gradientu
15-2 407 Rekursywna estymacja parametrów metodą RLS i WRLS
15-5 415 Filtr Kalmana − filtracja sygnałów z układu RLC
16-4 440 Niefourierowskie metody estymacji widmowej
17-1 454 Czasowo-częstotliwościowa analiza/synteza sygnału metodą transformacji Gabora
17-2 457 Krótkoczasowa transformacja Fouriera
17-3 464 Generacja funkcji skalujących i falek
824 Dodatki

Nr tabeli Strona Program


17-4 469 Czasowo-częstotliwościowa analiza/synteza sygnału metodą transformacji falkowej
17-5 475 Czasowo-częstotliwościowa transformacja Wignera
17-8 493 Porównawcza analiza czasowo-częstotliwościowa sygnałów z zastosowaniem
krótkoczasowej transformacji Fouriera i Wignera
18-2 536 Projektowanie filtrów prototypowych dla zespołu filtrów z modulacją kosinusową
DCT-IV za pomocą metody okien
18-3 537 Wyznaczanie charakterystyk czasowych i częstotliwościowych zespołu filtrów
z modulacją kosinusową
18-4 541 Generacja odpowiedzi impulsowej filtra prototypowego dla zespołu filtrów standardu
MPEG audio
18-5 541 M-kanałowy zespół filtrów z modulacją kosinusową implementowany w sposób
bezpośredni jako reprezentacja czasowo-częstotliwościowa
18-6 542 M-kanałowy zespół filtrów z modulacją kosinusową implementowany w sposób
bezpośredni za pomocą operacji splotu
18-7 543 M-kanałowy zespół filtrów z modulacją kosinusową efektywnie implementowany
w sposób polifazowy
19-4 567 Kompresja sygnału mowy według standardu LPC-10 (w uproszczeniu)
19-5 574 Rozpoznawanie izolowanych słów poprzez porównywanie ich współczynników
cepstralnych metodą DTW
20-3 590 Filtry kratowe
21-2 601 Podstawy modelowania psychoakustycznego ludzkiego narządu słuchu
21-3 613 Model psychoakustyczny II standardu MPEG-1 audio
21-5 627 Zespoły filtrów analizy i syntezy sygnału audio, stosowane w kodeku MP3 standardu
MPEG-1
21-11 638 Koder i dekoder standardu MPEG-1 audio POZIOMU 2 (MP2)
22-2 668 Wykorzystanie transformacji 2D-DFT i 2D-DCT do filtracji obrazu
22-5 688 Projektowanie współczynników wagowych nierekursywnych filtrów 2D
22-6 696 Projektowanie wag funkcji predyktora dla predykcyjnej transformacji falkowej
22-8 704 Falkowa dekompozycja obrazu metodą predykcyjną (predykcja − uaktualnienie)
22-9 714 Koder i dekoder arytmetyczny
22-10 717 Nanoszenie znaków wodnych na obrazach cyfrowych metodą rozpraszania widma
22-11 720 Przedstawienie obrazu we współrzędnych log-polar
22-12 723 Dopasowywanie obrazów metodą transformacji log-polar
22-13 725 Losowe iterowanie odwzorowań afinicznych
22-14 727 Dopasowywanie obrazów metodą maksymalizacji informacji wzajemnej
23-2 766 Projektowanie wag filtra korektora czasowego TEQ
23-3 774 Symulacja pracy modemu ADSL (Neostrady) − szybki dostęp do Internetu po linii
telefonicznej
25-2 795 Przykładowy program filtracji sygnałów dla procesora sygnałowego DSP56xxx firmy
Motorola, przeznaczony dla symulatora tego procesora

D.2. Wersja elektroniczna programów


Wszystkie programy przedstawione w niniejszej książce można pobrać ze strony WWW:
http://galaxy.uci.agh.edu.pl/~zmetr/ksiazki.htm
Przyjęto zasadę, że program z tabeli o numerze X-Y ma nazwę TX_Y.m. Przykładowo,
program z tabeli 23-2 ze strony 766 nazywa się T23_2.m.
Skorowidz

A Bootstrap 800
A/C 180 BP 106, 132, 289
ADPCM 547 BS 106, 132, 289
ADSL 740 Bufory przesuwne 265, 791
AIC 427 − kołowe 265, 791, 794
A-law 548
AGU 793 C
Algorytm filtracji cyfrowej 265, 356 CCD 175
− Goertzela 235 Cecha liczby zmiennoprzecinkowej 178
− Remeza 321 Cepstrum 556, 570
− szybkiego splotu 371, 373 Charakterystyka amplitudowa 106, 133
− szybkiej transformacji Fouriera 241 − fazowa 106
Aliasing 96, 211 − − liniowa 107, 309
ALU 789 Chirp-Z 239
AM, AM-SC 91 Chrominancja 652
AMDF 555 CMYK 651
Analiza czasowo-częstotliwościowa 444, 493 CTD 175
− częstotliwościowa Częstotliwość chwilowa 9
− − fourierowska 210 − rezonansowa układu RLC 122
− −, lupa w dziedzinie częstotliwości 239 − sygnału 7
− −, metody klasyczne 31, 226, 420
− −, metody zaawansowane 420 D
− −, przykłady zastosowania funkcji okien 220 DBS, DBS-SC 91
− −, wykorzystanie okna Kaisera 219 DCT 1D 52, 57
− spektralna patrz analiza częstotliwościowa − −, obliczanie za pomocą FFT 258
− widmowa patrz analiza częstotliwościowa − 2D 663
Aproksymacja Czebyszewa 321 Debbuger 803
AR 264, 557 Decybele 134
ARMA 264 Decymator 347, 500, 508
ASIC 787 Dekada 116
Atan2 107 Dekompozycja falkowa 461, 463
AVC 712 − − 2D (dwuwymiarowa) 701
AWGN 757 − macierzy względem wartości własnych 59
− polifazowa sygnału 503
B − Wolda 28
Bark 596 Delta Diraca 79
Baza dyskretna Fouriera 51 − Kroneckera 260, 672
− ortogonalna 42, 51 Demodulacja amplitudy 344
− ortonormalna 42, 51 − przesunięcia fazowego 344
BIBO 262 DFT 1D (jednowymiarowe) 199
Biortonormalność 445 − −, algorytm bezpośredni 231
Bootloader 800 − −, − Goertzela 234
826 Skorowidz

DFT 1D, algorytm rekurencyjny 236 FFT DIF (podział w częstotliwości) 252
− −, interpretacja 206 − DIT (podział w czasie) 241
− −, przykłady transformat 202 − − radix-2 241
− −, właściwości 200 − − radix-4 246
− 2D (dwuwymiarowe) 257, 653, 659 − − split-radix 250
− −, szybki algorytm 258 − − uniwersalne 250
DMA 797, 801 − −, zmiana kolejności próbek 244
DOA 205 −, opis metody 241
Dopasowywanie obrazów 718 −, program 248
Double Precision 178 −, struktura „motylka” 243
DP 185 − sygnałów rzeczywistych 255
DST 52 −, złożoność obliczeniowa 241, 244
DTW 571 − 2D 258
Dyskretna transformacja patrz transformacja Filtr analogowy Bessela 135
Dyskretyzacja w czasie 173
− − Butterwortha 135, 146
Dystrybuanta 24
− −, charakterystyka amplitudowa 106, 133
Dzielenie wielomianów 270
Dzwonienie (ringing effect) 661, 664 − −, − fazowa 106
− − Czebyszewa I 135, 157
− − Czebyszewa II 135, 161
E − − eliptyczny 135
Efekt brzegowy 673 − − Hilberta 339
Ekspander cyfrowy 347, 500 − −, implementacja sprzętowa 165
Emulator procesora DSP 802 − − LP, HP, BP, BS 106, 132
Energia sygnału 6
− −, projektowanie 137
Entropia 725
− − prototypowy 135
− psychoakustyczna 610, 611, 620
− − rekonstruujący 186
− wzajemna 726
− − różniczkujący 345
Ergodyczność 27
− −, struktury Sallena-Keya 166
ESPRIT 437
Estymacja minimalno-średniokwadrat. MMS 408 − cyfrowy adaptacyjny 380
− najmniejszych kwadratów LS 399 − − − gradientowy 384
− parametrów sygnału 418 − − − LMS 386
− przepływności bitowej w modemie ADSL 770 − − − LS 388
− przesunięcia fazowego 778 − − − NLMS 387
− − obrazu 733 − − − RLS 399
− rekursywna 399 − − − WLS 388
− ruchu w MPEG wideo 711 − − − WRLS 390, 399
Estymator 30 − − decymatora 351, 508
− funkcji autokorelacji 31 − − deemfazy 561
− − gęstości widmowej mocy 31 − − dwuwymiarowy 674, 683
− wartości oczekiwanej 31 − − Gaussa 686
−, własności (obciążony, zgodny itp.) 30 − − gradientowy 685
− − Hilberta 341
− − interpolatora 348, 508
F
falka 466, 471 − − Kalmana 408
falki Haara 467 − − kratowy 581
− biortogonalne 698, 699 − − − FIR 583
− Daubechies 467 − − − IIR 586, 587
− ortogonalne 467, 698 − − maksymalny (dylatacji) 685
− 2D 703 − − medianowy 364, 685
FDM 749 − − minimalny (erozji) 685
FEQ 769 − − nieliniowy 364
FEXT 757 − − nierekursywny FIR 264, 307, 583
Skorowidz 827

Filtr cyfrowy polifazowy 506 Indeks maskowania 598


− − preemfazy 560 − tonalności 598, 609
− − prototypowy 519, 528 Informacja wzajemna 726
− − rekursywny IIR 264, 288, 586, 587 Instrukcja MAC 789, 792, 793
− − różniczkujący 345, 685 Interpolacja wielomianowa 693, 694
− − − podwójnie 685 Interpolator 347, 500, 508
− − traktu głosowego 550, 557 Inwersja częstotliwości 507, 623
− − transponowany 357
− − Wienera 382 J
Filtracja analogowa 104 Jądro Wignera-Ville’a 472
− cyfrowa 264 JPEG 707
− − nierekursywna FIR 307 JTAG 797
− − rekursywna IIR 288
− obrazów 657, 672, 685 K
− − w dziedzinie częstotliwości 660 Klasa Cohena reprezentacji TF 477
− splotowa sygnałów 18 Klasyfikacja sygnałów 2, 3
− sygnałów losowych 34 Kod AMI 741
FIR 264, 307 − Manchester 741
Format patrz kod − NRZ 741
FPE 427 − RZ 741
FPGA 787 − QAM 743
Funkcja analityczna 309 − stałoprzecinkowy 175
− Bessela 218 − − ułamkowy ZM i U2 177
− Gaussa 9, 82, 447, 678, 688 − − uzupełnień do dwóch U2 176
− gęstości prawdopodobieństwa 24 − − znak-moduł ZM 176
− − widmowej mocy 29, 226 − zmiennoprzecinkowy 178
− korelacji 14, 25, 28, 78, 226 Koder audio MP1, MP2 631
− − 2D (dwuwymiarowa) 671 − mowy LPC-10 563
− kowariancji 15, 28
− obrazów JPEG 707
− „rozszerzająca” (spreading function) 598
− wideo MPEG 711
− skalująca transformacji falkowej 465, 470
Kodowanie arytmetyczne 713
Funkcje bazowe 1D 53, 55
− Huffmana 546
− − 2D 667
− liczb 175
Kompensacja ruchu 711
G Kompresja bezstratna 545
Głoski bezdźwięczne, dźwięczne 550
− JPEG 707
Gradient kierunkowy Sobela, Prewitta, ... 685
− M-JPEG 710
− MPEG audio 593
H − − wideo 711
Hesjan 385
Histogram 31 − stratna 547
HP 106, 132, 289 Konstelacja QAM 744
Korekcja czasowa TEQ kanału 764, 773
− częstotliwościowa FEQ kanału 769
I
− gamma 652
Identyfikacja układów liniowych 382, 419
IIR 264, 288 Korelacja 14, 28, 78
Iloczyn skalarny 40 Kowariancja 15, 28
− sygnałów 78, 87 Kryterium najmniejszych kwadratów LS 388
Impuls Diraca 79 − średniokwadratowe LMS 380
− jednostkowy 260 − ważonych najmniejszych kwadratów WLS 388
− Kroneckera 260 − wyboru rzędu modelu AR 427
− prostokątny 80 Kwantyzacja 174
− sinc 81
828 Skorowidz

L Model AR 426
Laplasjan 686 − ARMA 429
Liczby patrz kod − generacji sygnału mowy 549
Listek główny widma okna 210, 215, 335 − MA 427
Listki boczne widma okna 210, 215, 335 − psychoakustyczny I 603, 632
LMS 386 − psychoakustyczny II 604, 632
LP 106, 132, 289 Modelowanie parametryczne 423
LPC-10 545, 563 − psychoakustyczne 594
Log-polar 719 Modem 740
LOT 499 Modulacja amplitudy 9, 11, 91
LS 388 − częstotliwości 10, 11
LSB 182 − fazy 10, 11
LSF 567 − kąta 9, 11
LSP 567 − QAM 743
LTI 103, 260 − rzeczywista 76
Luminancja 652
− wielotonowa DMT 745
− zespolona 77
M Modulator DMT 751
MA 264 Momenty centralne, zwykłe sygnału 6
MAC 789, 792, 793 Mowa bezdźwięczna, dźwięczna 551
Mantysa liczby zmiennoprzecinkowej 178 MP1, MP2 618, 631
Masa prawdopodobieństwa 24 MP3 618
Maskowanie częstotliwościowe 595 MPEG audio 593
MDCT, IMDCT 620 − wideo 711
MDL 427 MSB 182
Mel 570 Multiplekser 187
Metoda aproksymacji Czebyszewa 321 MUSIC 436
− Bartletta 420
µ-law 548
− Blackmana-Tukeya 31, 227, 421, 439
− dopasowanej transformacji Z 293
− Durbina-Levinsona 577, 581 N
− EV (EigenVector) 436 Nadpróbkowanie 452
NEXT 758
− MN (Minimum Norm) 436
Nieprognozowalność widmowa 608, 610
− modelowania parametrycznego 423
Niezależność sygnałów liniowa 42
− MV (Minimum Variance) 440 NLMS 387
− niezmienności odpowiedzi impulsowej 291 NMT 609
− okien 1D i 2D 325, 678 Norma 40
− optymalizacji średniokwadratowej 317 Normalizacja bazy ortogonalnej 45
− overlap-add 373
− overlap-save 373 O
− Pisarenki 432, 436 Obserwator 389
− podprzestrzeni 430 OFDM 740
− próbkowania w częstotliwości 313, 682 Okna w MPEG audio (długie, krótkie, ...) 621
− residuów 273 Okno Bartletta patrz trójkątne
− transformacji biliniowej 293 − Blackmana 90, 213, 335
− Welcha 32, 421 − Dolpha-Czebyszewa 217
− Yule’a-Walkera 291 − Hamminga 90, 213, 335
− zer i biegunów 108, 124, 277, 280 − Hanninga (Hanna) 90, 213, 335
Metryka i jej warunki 39 − Kaisera 218, 335
M-JPEG 710 − Parzena 90
MMS 409 − prostokątne 90, 213, 335
Moc sygnału 6 − trójkątne (Bartletta) 90, 213, 335
Skorowidz 829

Odpowiedź częstotliwościowa 106, 262 Przestrzeń liniowa unitarna 40


− impulsowa 104, 108, 261 − L(0, T) 40
− − (a)symetryczna 310, 311 − L2(0, T) 40
− − filtra dolnoprzepustowego 327 − LT2 41
− − − górnoprzepustowego 327 − metryczna 39
− − − pasmowoprzepustowego 329 − − zupełna 39
− − − pasmowozaporowego 329 − wektorowa 41, 50
− −, identyfikacja 759 Przesunięcie fazowe 778
Okres sygnału 7 − obrazu 733
Opóźnienie grupowe układu 107, 353 Przetworniki A/C 179
Ortogonalizacja Grama-Schmidta 45 − C/A 184
Ortogonalność sygnałów 40, 51, 63 P&P 186
Ortonormalność sygnałów 40, 51, 444
Q
P QAM 743
Paleta kolorów 651 QMF 512
Parametry sygnałów 6
Pasma krytyczne 596 R
Perfekcyjna rekonstrukcja 512, 514 Radix-2 FFT 241
Periodogram 29, 420 Radix-4 FFT 246
−, modyfikacje 32, 420 RC 115, 120
Płaskość widmowa SFM 599 Realizacja procesu losowego 26
Połączenie równoległe, szeregowe 118 Reduktor cyfrowy 347, 500
Precyzja zmiennoprzecinkowa 178 Rejestry procesora 794
Predykcja liniowa 392 Reprezentacje czasowo-częstotliwościowe 443
Proces ergodyczny 27 Residuum 274
− − losowy 24, 26 RGB 650
− − stacjonarny 27 RLC 121, 707
Procesory DSP 798 RLS 399
Progowanie 565 Rozdzielczość amplitudowa 88, 210
Program bootloader 800 − częstotliwościowa 88, 210
− bootstrap 800 − obrazu 649
Programowanie, język asembler 800, 8001, 795 Rozkład normalny (gaussowski) 25
−, − C/C++ 803 − równomierny 25
−, − Matlab i Simulink 804, 806 Rozpoznawanie mowy 569
−, zintegrowane środowiska 804 Równanie Wienera-Chinczyna 29
Prototyp analogowy 135 Równość Parsevala 43, 46, 48, 79
Próbkowanie 173 − Poissona 83
− krytyczne 452
−, nadpróbkowanie 500 S
−, podpróbkowanie 500 SAW 131
−, twierdzenie o próbkowaniu 93 SCC 185
Próg maskowania 598 SCF, SCFI 631
− słyszalności absolutny 595 Sinc 9
Przekształcenie patrz transformacja Single Precision 178
Przenik zbliżny NEXT 757 Skala barkowa 596
− zdalny FEXT 758 − decybelowa 134
Przepływność bitowa modemu 770 − logarytmiczna 134
Przerwania 801 − log-polar 719
Przestrzeń Banacha 40 − melowa 570
− C(0, T) 40 Skalogram 459
− Hilberta 40 Składowa nieparzysta 14
− liniowa 39 − nietonowa mowy 603
830 Skorowidz

Składowa parzysta 14 Synchronizacja próbek filtra 353


− rzeczywista 14 − blokowa w modemie ADSL 767
− stała 14 Szereg Fouriera 46, 63, 193, 198
− tonowa mowy 603 − −, przejście do DFT 71
− urojona 14 − −, przykłady 68
− zmienna 14 − − trygonometryczny 46, 66
Składowe główne 430, 439 − − zespolony 23, 47, 65
Skok jednostkowy 10 − geometryczny 313
Słuch 594 − Laurenta 267
SMR 599, 604, 632 Szerokość średniokwadratowa 7, 447
Spektrogram 455 Szum biały, kolorowy, różowy, niebieski 30
Split-radix 250 − o rozkładzie normalnym (gaussowski) 25, 30
Splot cykliczny patrz splot kołowy − − − równomiernym 25
− kołowy 201, 364 Szybka transformacja Fouriera patrz FFT
− liniowy 17, 78, 364 Szybkie wyznaczanie funkcji autokorelacji 226
− szybki 371 − − funkcji gęstości widmowej mocy 226
− − sekcjonowany 373 S&H 186
− 2D (dwuwymiarowy) 670
Suma Poissona 83 Ś
Stabilizacja obrazu 733 Średnia 6
Stabilność patrz układy stabilne
Stacjonarność 27
Standard JPEG 707
T
TDM 797
− MPEG audio 593
TEQ 764, 773
− − wideo 711 Tłumienie filtra 134
STFT 455 TMN 609
Struktura zmiennych stanu 361 Ton podstawowy 550
Struktury filtrów cyfrowych 356
− −, metoda cepstralna 555
− Sallena-Keya filtrów analogowych 166
− −, metoda filtra odwrotnego 557
Sygnał analityczny 14, 49, 340
− −, metoda funkcji AMDF 555
− cyfrowy 3
− −, metoda funkcji autokorelacji 552
− deterministyczny 3
Trakt głosowy 550
− fali prostokątnej 11 Transformacja biliniowa 294
− gaussowski 9, 82 − ciągła Cohena 477
− harmoniczny patrz zespolony wykładniczy − − falkowa 459
− impulsowy 8 − − Fouriera 22, 48, 71, 74, 193
− losowy 3 − − − dwuwymiarowa 658
− okresowy 7 − − −, przykłady transformat 80
− prawie okresowy 8 − − −, właściwości 75
− resztkowy 557 − − Fouriera kosinusowa 49
− Si 9 − − Fouriera krótkoczasowa STFT 455
− Sign, Sgn 10 − − Fouriera sinusowa 49
− Sinc 9 − − Gabora 451
− sinusoidalny 7, 11, 81 − − Henkela 49
− wykładniczy malejący 9 − − Hilberta 48, 339
− − narastający 10 − − Laplace’a 48, 112
− zespolony 13 − − −, przykłady transformat 114
− − wykładniczy 14, 65 − − Mellina 49
− zmodulowany 9, 11 − − Wignera-Ville’a 472
Sygnały, klasyfikacja 2, 3
− − − afiniczna 476
−, parametry 6
− − − wielomianowa 476
Symetria DFT sygnału rzeczywistego 201
− częstotliwości 139, 137
Symulator procesora DSP 803
Skorowidz 831

Transformacja dyskretna afiniczna 2D 721 Układy analogowe stabilne 110


− − całkowitoliczbowa 692, 712 − − szeregowe 118
− − dwuwymiarowa 665 − ASIC 787
− − falkowa 460 − cyfrowe 260
− − − biortogonalna 697 − −, charakterystyka amplitudowa i fazowa 277
− − − całkowitoliczbowa 692 − − liniowe 260
− − − predykcyjna 691 − − niezmienne w czasie 260
− − − dwuwymiarowa 700 − −, projektowanie transmitancji 276
− − Fouriera DFT 23, 51, 71, 194, 198 − − przyczynowe 262
− − − − dwuwymiarowa 257, 659 − −, przykłady projektowania 276
− − Fouriera krótkoczasowa STFT 456 − − równoległe 262
− − Gabora 452 − − stabilne 262, 276
− − Haara 54 − − szeregowe 262
− − Hadamarda 52 − − transponowane 357
− − Hartleya 52 − FPGA 787, 808
− − Hilberta 341 Unwrap 107
− − Hougha 730 Usuwanie echa 392
− − Karhunena-Loevego 59 − interferencji 391
− − kosinusowa DCT 52, 57
− − − − dwuwymiarowa 663 V
− − Radona 732 VDSL 740
− − sinusowa DST 52 VLI 707
− − Wignera-Ville’a 472
− − Z 267 W
− − −, interpretacja częstotliwościowa 276 Wariancja sygnału 6, 25
− − −, odwrotna 270 Warunek perfekcyjnej rekonstrukcji 514
− − −, przykłady transformat 269 Wartość oczekiwana 24
− − −, transmitancja 275 − − średniokwadratowa 25
− − −, właściwości 274 − skuteczna 6
− ortogonalna patrz baza ortogonalna − średnia 6
− świergotowa 239 − własna macierzy 59, 434
Transmisja szeregowa synchroniczna 802 − − uogólniona dwóch macierzy 439
Transmitancja Fouriera 107 Wektor własny macierzy 59, 434
− Laplace’a 112 Wielomiany Czebyszewa 157, 218
− Z 275 −, dzielenie 270
Transmultiplekser 497 Widmo Fouriera 22, 74
Twierdzenie całkowe Cauchy’ego 270 − − iloczynu dwóch sygnałów 78, 87
− o próbkowaniu 93 − − przykładowych sygnałów 80
− o rzucie ortogonalnym 43 − − splotu dwóch sygnałów 78, 91
− o zbieżności 46 − − sygnału spróbkowanego 97, 192
− Wolda 28 WLS 388
WRLS 390, 399
U Współczynniki AC 708
Układ próbkowania z podtrzymaniem 186 − cepstralne 570
− RC 115, 120 − DC 707
− RLC 121, 413 − LAR 565
Układy analogowe 103 − LSF, LSP 567
− −, charakterystyka amplitudowa i fazowa 106 − mel-cepstralne 570
− − liniowe 103 − odbicia filtra kratowego 581
− − niezmienne w czasie 103 − predykcji liniowej 559
− −, projektowanie transmitancji 124 Współrzędne log-polar 719
− − równoległe 118 Wykładniczy sygnał patrz sygnał
Wykres Bodego 116
832 Skorowidz

Wzmacniacz 190 − − − − − MP3 618


Wzmocnienie filtra 134 − − STFT 518
− Kalmana 389 − − transformacji falkowej 463
− − z modulacją kosinusową 497, 527
Z − − − − PR 533
Zapis patrz kod − − − − quasi-PR 533
Zasada nieoznaczoności 447 − − z modulacją zespoloną 497, 515
Zbiór ortonormalny zupełny − przykłady 47 − − − − nadpróbkowany 527
− zupełny 45 − − − − uogólniony 519
Zespół filtrów 497 Zmienna losowa 24
− − DFT 516 Zmienne stanu 362
− −, filtr prototypowy 519, 528, 533 Znaki wodne 715
− − standardu MPEG audio MP1, MP2 539 Zniekształcenia kamery (obrazu) 653

You might also like