VÝPOČET DISKRÉTNÍ KONVOLUCE V PROSTŘEDÍ MATLAB® g(t

Transkript

VÝPOČET DISKRÉTNÍ KONVOLUCE V PROSTŘEDÍ MATLAB® g(t
Slaboproudý obzor
Roč. 69 (2013) Číslo 1
K. Zaplatílek: Výpočet diskrétní konvolunce v prostředí MATLAB®
P1
VÝPOČET DISKRÉTNÍ KONVOLUCE V PROSTŘEDÍ MATLAB®
Prof. Ing. Karel Zaplatílek, Ph.D.
Katedra elektrotechniky; Fakulta vojenských technologií, Univerzita obrany, Brno, [email protected]
Abstrakt
Abstract
Článek je věnován praktickým výpočtům lineární a kruhové konvoluce
v prostředí MATLAB. Jsou uvedeny dva konkrétní příklady včetně detailního
rozboru jejich výpočetní náročnosti. Pro výpočet obou typů konvolucí je
použit také algoritmus FFT.
This contribution deals with the practical calculation of linear and cyclic
convolution in the MATLAB environment. Two concrete examples are
introduced including the computational complexity analysis. The FFT
algorithm is also used for calculation of both types of convolution.
Klíčová slova: Lineární a kruhová konvoluce, MATLAB, FFT
Keywords: Linear and cyclic convolution, MATLAB, FFT
1
2
Úvod
Jak je známo ze základních partií teorie lineárních
analogových obvodů, konvoluce je využívána jako jedna
z možností pro výpočet odezvy na obecný vstupní signál [1].
x(t)
Obr. 1.
g(t)
y(t)
Lineární elektrický obvod, popsaný impulzní odezvou g(t).
Podle obr. 1 je lineární elektrický obvod popsán impulzní
odezvou g(t). Působí-li nyní na jeho vstup časový průběh x(t),
lze pro výpočet odezvy použít tzv. konvolučního integrálu:
y (t ) =
t
∫ g (τ ) x(t − τ ) dτ ,
(1)
−∞
kde τ je posunutí na časové ose. V literatuře lze objevit
zkrácené zápisy výrazu (1), např. y(t)=g(t)*x(t).
Vztah (1) platí pro tzv. kauzální systémy, u kterých
impulzní odezva nemůže předbíhat její příčinu, tedy Diracův
impulz. Je-li vstupní signál x(t) nulový pro časy t < 0, lze
rovnici (1) zjednodušit tím, že spodní mez integrálu bude 0.
Konvolucí podle (1) je tedy každá funkční hodnota
vstupního signálu, zpožděná o časový interval τ, násobena
funkční hodnotou impulzní odezvy. Hovoříme o tzv. vážené
integraci. Další podrobnosti viz [2], [3], [5]. Článek je
věnován praktickým výpočtům diskrétních konvolucí
v prostředí MATLAB, jedná se tedy o práci s číslicovými
signály a systémy, viz obr. 2. Impulzní odezva lineárního
číslicového systému je označena hn z důvodů častého výskytu
tohoto symbolu v literatuře [4], [5], [6].
xn
Obr. 2.
hn
yn
Lineární číslicový systém, popsaný impulzní odezvou hn.
Výpočet diskrétní konvoluce
Diskrétní konvoluce je důležitou a poměrně častou součástí
algoritmů pro číslicové zpracování signálů (DSP). Podle
některých pramenů se dokonce používá pro testování rychlosti
signálových procesorů [6], [7]. Její primární použití je
analogické analogovým obvodům, tedy výpočet výstupní
posloupnosti lineárního číslicového systému na obecnou
vstupní posloupnost. Vzhledem k určitým odlišnostem
číslicových systémů a reálných hardwarových prostředků
(konečná délka registrů, diskrétní charakter posloupností),
je třeba kapitolu 2 rozdělit na několik částí. Důležitým
aspektem, kromě vlastního výpočtu konvoluce, bude také
rozbor výpočetní náročnosti algoritmů.
2.1 Lineární diskrétní konvoluce
Ze základní literatury je znám vztah pro výpočet lineární
diskrétní konvoluce [4], [5], [6], [8]:
n
yn = ∑ xm . hn− m ,
(2)
m= 0
kde n je pořadový index právě počítaného vzorku výstupní
posloupnosti a m je pořadový index vstupní posloupnosti. Je-li
délka vstupní posloupnosti Nx a délka impulzní odezvy Nh, pak
délka výstupní posloupnosti (počet jejich vzorků) je dána
vztahem:
N y = N x + N h − 1.
(3)
Výpočet si ukážeme na konkrétním příkladu spolu s aplikací
vestavěné funkce systému MATLAB [9], [10].
Příklad 1
Uvažujme lineární číslicový systém, popsaný svou impulzní
odezvou: hn = {0.45, 1.72, 0.62}. Na jeho vstup působí vstupní
posloupnost xn = ={2, 0.95}. Úkolem je vypočítat vzorky
výstupní posloupnosti a provést analýzu výpočetní náročnosti
včetně jejího zobecnění.
K. Zaplatílek: Výpočet diskrétní konvolunce v prostředí MATLAB®
P2
Podle (3) bude délka výstupní posloupnosti Ny = 2+3-1=4
s pořadovými indexy 0-3. Pro její výpočet rozepíšeme vztah
(2) (z důvodů odlišnosti symbolu tečky pro násobení budeme
výjimečně v tomto případě používat u čísel desetinnou čárku):
0
y0 = ∑ x0 . h0 = 2. 0,45 = 0,9
Tab. 1. Analýza výpočetní náročnosti příkladu 1.
n-tý
výst. vzorek
1
2
3
4
Σ
n
(4)
m= 0
1
y1 = ∑ xm . h1− m = x0 . h1 + x1. h0 = 2.1,72 + 0,95. 0,45 = 3,8675
m= 0
2
y2 = ∑ xm . h 2− m = x0 . h2 + x1. h1 + x2 . h0 = 2. 0,62 + 0,95.1,72 +
m= 0
+ 0. 0,45 = 2,8740
m= 0
Pro výstupní posloupnost tedy platí (vracíme se k použití
desetinných teček, jak je zvykem):
(5)
yn = {0.9 , 3.8675 , 2.8740 , 0.589}.
Situaci názorně shrnuje obr. 3.
•
•
•
hn
n
xn ={2, 0.95}
Obr. 3.
1
2
3
4
10
n
0
1
2
3
6
n-1
)
)
Uveďme nyní souhrnně vlastnosti výpočtu podle (2):
yn
1
Počet sčítání
Obecně při výpočtu n-tého prvku lineární diskrétní
konvoluce je třeba provést n operací násobení a n-1 operací
sčítání, celkem tedy 2n-1. Jinak napsáno, bude-li mít výstupní
posloupnost yn celkem Ny vzorků (indexy 0 až Ny -1), bude
třeba provést celkem N y2 operací, z toho 1 N y2 + N y operací
2
1
násobení a
N y2 − N y operací sčítání. Např. pro Ny = 64
2
bude třeba realizovat celkem 4096 operací, z toho 2080
násobení a 2016 sčítání. Kromě poměrně vysokého počtu
operací, které nemusejí být realizovatelné v reálném čase, je
hlavním znakem výpočtů podle (2), resp. (4) nerovnoměrné
rozložení výpočetní náročnosti, které narůstá s pořadovým
číslem počítaného vzorku výstupní posloupnosti.
(
+ 0,95. 0,62 + 0.1,75 + 0. 0,45 = 0,589
0
Počet násobení
(
3
y3 = ∑ xm . h 3− m = x0 . h3 + x1. h2 + x2 . h1 + x3 . h0 = 2. 0 +
xn
Slaboproudý obzor
Roč. 69 (2013) Číslo 1
0
1
2
3
n
yn ={0.9, 3.8675, 2.8740, 0.589}
•
Odezva lineárního číslicového systému na vstupní posloupnost.
V systému MATLAB je vestavěna vnitřní funkce conv pro
snadný výpočet lineární diskrétní konvoluce, jak dokumentuje
obr. 4. Vyzkoušejte si, že obrátíte-li pořadí proměnných
v příkazu conv, vyjde shodný výsledek (komutace symbolů).
Posloupnosti ve vztahu (2) mohou mít různou délku.
Délka výstupní posloupnosti je větší, viz (3).
Počet aritmetických operací roste s pořadovým číslem
vzorku výstupní posloupnosti; výpočetní náročnost je
rozložena nerovnoměrně.
Z výpočtů podle (4) je zřejmé, že indexy vzorků
vstupní posloupnosti postupně narůstají, zatímco
indexy impulzní odezvy naopak klesají a jsou navíc
postupně posouvány.
Východiskem při práci s dlouhými posloupnostmi může být
použití algoritmu FFT, umožňující výrazné zkrácení doby
výpočtu, a to zejména u dlouhých posloupností, viz níže.
2.2 Kruhová (cyklická) diskrétní konvoluce
Zásadní rozdíly kruhové konvoluce oproti lineární jsou tyto
[4], [5], [6]:
•
•
Obr. 4.
Výpočet lineární konvoluce příkazem conv v systému MATLAB.
Při konkrétních hardwarových implementacích algoritmů
pro výpočet konvoluce (a také jiných algoritmů) je třeba
analyzovat výpočetní náročnost, tedy určit počet potřebných
aritmetických operací. V rámci tabulky tab. 1 jsou uvedeny
počty operací násobení a sčítání, vyplývající z rovnic (4) spolu
s jejich součty. Pro příklad 1 bylo třeba provést celkem 10
násobení a 6 sčítání.
Vstupní posloupnost i impulzní odezva mají stejnou
délku N a jsou obě chápány jako periodické.
Výstupní posloupnost bude mít shodnou délku N
a bude opět chápána jako periodický signál.
Vzorky výstupní posloupnosti vypočteme podle známého
vztahu (6):
N −1
yn = ∑ xm . hn− m ,
(6)
m= 0
kde N je délka všech zúčastněných posloupností. Rozdílem
oproti (2) je, že horní index sumy je pevný a nemění se
s pořadovým
indexem
počítaného
vzorku
výstupní
posloupnosti. Výpočet si opět ukážeme na praktickém
příkladu.
Slaboproudý obzor
Roč. 69 (2013) Číslo 1
K. Zaplatílek: Výpočet diskrétní konvolunce v prostředí MATLAB®
Příklad 2
xn
Uvažujme lineární číslicový systém, popsaný svou impulzní
odezvou: hn = {2.25, 1.42, 0.77}. Na jeho vstup působí vstupní
posloupnost xn = {1, 2, 1.35}. Úkolem je vypočítat vzorky
výstupní posloupnosti podle (6) a opět provést analýzu
výpočetní náročnosti a jejího zobecnění.
Jak bylo zmíněno, délka všech posloupností bude stejná,
tedy platí Ny=Nx=Nh=3 s pořadovými indexy 0-2. Při rozpisu
výpočtů opět budou použity desetinné čárky u čísel, aby
nedošlo k záměně se symbolem násobení.
y0 =
2
∑x
m
m=0
. h− m = x0 . h0 + x1. h− 1 + x2 . h− 2 = 1. 2,25 + 2. 0,77 +
2
∑x
m=0
m
. h1− m = x0 . h1 + x1. h0 + x2 . h− 1 = 1.1,42 + 2. 2,25 +
y2 =
∑x
m=0
m
. h 2 − m = x0 . h2 + x1. h1 + x2 . h0 = 1. 0,77 + 2.1,42 +
(7)
+ 1,35. 2,25 = 6,6475
Tab. 2. Analýza výpočetní náročnosti příkladu 2.
n-tý
výst. vzorek
1
2
3
Σ
Počet násobení
Počet sčítání
3
3
3
9
2
2
2
6
Jak je vidět z tab. 2, při výpočtu každého vzorku výstupní
posloupnosti je třeba vykonat 3 operace násobení a 2 operace
sčítání, celkem tedy 5 operací. Bude-li délka všech
posloupností N, pak při výpočtu jednoho vzorku bude třeba
provést N násobení a N-1 sčítání, tedy souhrnně 2N-1 operací,
v našem příkladu 5 operací. Celkově při výpočtu všech vzorků
je celkový počet operací dán vztahem N(2N-1), z toho N2
násobení a N(N-1) sčítání. Např. při N=64 vychází celkový
počet aritmetických operací na hodnotu 8128, z toho násobení
je 4096 a sčítání 4032. Ve srovnání s příkladem 1 vychází
celkový počet operací přibližně dvakrát tak vysoký. Předností
je však shodná výpočetní náročnost všech vzorků výstupní
posloupnosti.
Je tedy zřejmé, že při výpočtu kruhové konvoluce jsou
výpočty rozloženy rovnoměrně, je jich však značný počet.
Proto se s výhodou aplikuje algoritmus FFT, viz níže. Shrnuto:
•
•
•
-1 0 1 2
n
xn={1, 2, 1.35}
hn
hn
-1 0 1 2
-1 0 1 2
n
n
yn={5.707, 6.9595, 6.6475}
Obr. 5.
Výpočet kruhové (cyklické) konvoluce.
2.3 Využití algoritmu FFT při výpočtu konvolucí
+ 1,35. 0,77 = 6,9595
2
yn
hn={2.25, 1.42, 0.77}
+ 1,35.1,42 = 5,707
y1 =
P3
Všechny posloupnosti ve vztahu (6) mají shodnou
délku (hlavní přednost u hardwarových aplikací).
Počet aritmetických operací je při výpočtu všech
vzorků stejný.
Celková výpočetní náročnost je však poměrně
vysoká.
Na obr. 5 je ilustrační obrázek
konvoluce. Z něj je zřejmé, jak pracovat
v rámci výpočtů vzorků v (7). Je
periodičnost všech posloupností.
Vyzkoušejte si aplikaci příkazu conv
konvoluce. Obdržíte chybné výsledky.
Vysoká výpočetní náročnost diskrétní konvoluce, zejména
při dlouhých posloupnostech, si vyžádala nasazení algoritmu
pro rychlou Fourierovu transformaci FFT [4], [5], [6]. V této
kapitole bude tento algoritmus aplikován pro výpočet jak
lineární, tak kruhové (cyklické) konvoluce.
Jak známo z literatury, platí vztah:
xn * hn ≅ X . H ,
(8)
kde xn a hn jsou posloupnosti výše používané a X a H jsou
jejich Fourierovy obrazy (komplexní spektra). Symbol * značí
operaci konvoluce, viz text pod vztahem (1) v úvodu. Operátor
≅ je třeba chápat jako „odpovídá“. Z rovnice (8) plyne, že
konvoluce v základní oblasti (posloupností) odpovídá ve
Fourierově prostoru součinu jejich obrazů.
Pokud je tedy možné pomocí algoritmu FFT vypočítat
vzorky Fourierových obrazů X a H, pak pro výpočet vzorků
výstupní posloupnosti konvoluce platí:
yn = real (iFFT ( X . H )) ,
(9)
kde iFFT značí použití inverzního algoritmu k FFT. Vztah (9)
je vlastně přímo příkazem systému MATLAB.
Aplikaci algoritmu FFT ukážeme nejprve na příkladu
kruhové (cyklické) konvoluce. Použijeme shodná data
z příkladu 2.
Na obr. 6 je uveden zdrojový text výpočtu kruhové
konvoluce pomocí algoritmu FFT. Výstupy srovnejte
s výsledky v rámci (7). Kruhová (cyklická) konvoluce
zohledňuje konečnou délku hardwarových registrů. Daní za to
je ovšem periodičnost chápání všech posloupností.
Připomeňme, že jak algoritmu FFT, tak jeho inverzní varianta,
potřebná pro výpočet konvoluce podle (9), jsou v prostředí
MATLAB k dispozici.
Je-li třeba počítat vzorky lineární diskrétní konvoluce, avšak
zachovat stejnou délku všech posloupností, což je hlavní
vlastnost hardware v praxi, je třeba provést tyto kroky:
k výpočtu kruhové
se zápornými indexy
třeba si uvědomit
•
•
pro výpočet kruhové
•
Určit délku výstupní posloupnosti podle (3).
Doplnit posloupnosti xn a hn zprava nulami tak, aby
obě měly stejnou délku jako posloupnost výstupní.
Aplikovat algoritmus FFT jako u kruhové konvoluce,
viz obr. 6.
P4
K. Zaplatílek: Výpočet diskrétní konvolunce v prostředí MATLAB®
Slaboproudý obzor
Roč. 69 (2013) Číslo 1
Zajímavým je příkaz filter, který umožňuje přímý výpočet
výstupní posloupnosti (odezvy) lineárního číslicového systému
pro danou vstupní posloupnost. Příkaz je vhodný zejména,
ale jistě nejenom, pro studentské experimenty. Při práci
v MATLAB lze s výhodou použít nejen popsané příkazy,
ale také vestavěná interaktivní prostředí. Za všechny zmiňme
sptool, spustitelný zápisem a potvrzením stejného jména.
Aplikace umožňuje efektivní práci se signály, číslicovými
filtry, spektry, apod. Podobných prostředí obsahuje MATLAB
více, viz jeho help.
3
Obr. 6.
Výpočet kruhové konvoluce pomocí algoritmu FFT.
Výsledná posloupnost bude mít shodnou délku, ale její
vzorky budou přesně odpovídat výpočtu lineární konvoluce.
Jako vstupní data zachováme ta z příkladu 1. Délka
výstupní posloupnosti podle (3) vyšla Ny = 4. Je tedy třeba
modifikovat obě posloupnosti na délku 4: xn = {2, 0.95, 0, 0}
a hn = {0.45, 1.72, 0.62, 0}. Nyní lze aplikovat postup z obr. 6
a využít tak algoritmus FFT, viz obr. 7.
Závěr
Článek je věnován problematice praktických výpočtů
diskrétních konvolucí s využitím systému MATLAB. Na dvou
konkrétních příkladech jsou vysvětleny postupy výpočtů
lineární a kruhové konvoluce. Ruční výpočty jsou doplněny
aplikací vestavěných příkazů systému MATLAB. Oba druhy
konvolucí jsou vypočteny také s využitím algoritmu FFT. Jsou
diskutovány základní vlastnosti algoritmů včetně detailního
rozboru jejich výpočetní náročnosti.
Poznámky
Článek vznikl v rámci řešení Projektu pro rozvoj organizace
PRO-K217 a za podpory sdružení uživatelů MATLAB
UDeMAG, oboje na Univerzitě obrany v Brně.
MATLAB® je registrovanou ochrannou známkou společnosti
The MathWorks, Inc.
Literatura
Obr. 7.
Výpočet lineární konvoluce pomocí algoritmu FFT.
Výstupy srovnejte se závěry kolem obr. 5. Tímto přístupem
lze vyhovět požadavku na výpočet lineární konvoluce, avšak
umožnit aplikaci algoritmu FFT, který zase vyžaduje
periodičnost a shodné délky posloupností. Je-li k výpočtu
konvoluce využit algoritmus FFT, hovoříme o tzv. rychlé
konvoluci.
Vzhledem k rozsahu a zaměření článku není možné
se zabývat mnohými teoretickými předpoklady a závěry, stejně
jako řadou zajímavých vlastností algoritmů pro výpočet FFT
a konvolucí. Zkušenost z univerzitní výuky nám říká, že pro
rozumně dlouhé posloupnosti lze využít přímo vztahy (2),
resp. (6). Jsou-li délky posloupností příliš velké anebo
při požadavku na výpočty v reálném čase, je na místě použití
algoritmu FFT, který má také své vícerozměrné varianty.
Záleží na povaze konkrétní úlohy a použitém výpočetním
prostředku (PC, mikropočítače, specializované signálové
procesory, hradlová pole).
V systému MATLAB je pro zmíněné účely k dispozici sada
příkazů, např. zmíněný conv a dále conv2, convn, deconv,
filter, fft2, fftn, fftshift, ifft.
[1] Ondráček, O. Signály a sústavy. Slovenská technická
univerzita v Bratislave, 2003, ISBN 80-227-1875-0.
[2] Šebesta, V. Systémy, procesy a signály 1.
VUTIUM, Brno, 2001, ISBN 80-214-1925-3.
[3] Nevřiva, P. Analýza signálů a soustav. Praha: BEN –
technická literatura, 2002, ISBN 80-7300-004-0.
[4] Jan, J. Číslicová filtrace, analýza a restaurace signálů.
VUTIUM, Brno, 1997, ISBN 80-214-0816-2.
[5] Zaplatílek, K., Doňar, B. MATLAB®: Začínáme se
signály. BEN-technická literatura, Praha, 2006, ISBN 807300-200-0.
[6] Oppenheim, A.V., Schafer, R.W., Buck J. R. DiscreteTime Signal Processing. Prentice-Hall, Inc., 1999.
[7] Poularikas, A. D. The Handbook of Formulas and Tables
for Signal Processing. CRC Press, 1998.
[8] Balmer, L. Signals and Systems. An Introduction. Pearson
Prentice-Hall, 1991.
[9] Zaplatílek, K. MATLAB®: Průvodce začínajícího
uživatele. Tribun EU, Brno, 2011, ISBN 978-80-2630014-4.
[10] Hanselman, D., Littlefield, B. Mastering MATLAB® 7.
Pearson Prentice-Hall, 2007.

Podobné dokumenty

Digitalizace

Digitalizace Omezený signál v jedné oblasti Ù Nekonečný signál v druhé oblasti

Více

MATLAB, v. 6.5.0180913, Release 13

MATLAB, v. 6.5.0180913, Release 13 MS Word). Pomocí MATLAB C/C++ Compiler, Math Library a Graphics Library je možné automaticky překládat programy v jazyce MATLAB do jazyka C nebo C++. Dovoluje vytvářet samostatné aplikace pro všech...

Více

Plynovod Mozart

Plynovod Mozart Ing. Jan Zaplatílek

Více

Pardubice, Czech Republic April, 21

Pardubice, Czech Republic April, 21 Comparison of H.265 and VP9 Coding Efficiency for Full HDTV and Ultra HDTV Applications

Více

1882.5kB

1882.5kB Narodil se v době války v obci Bukovina u Čisté. Jeho rodným domem se stalo čp.58. Dnes chalupa Josefa Červi. Otec pracoval jako pomocný dělník v papírnách, matka byla služka. Po válce, v roce 1946...

Více