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
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...
Pardubice, Czech Republic April, 21
Comparison of H.265 and VP9 Coding Efficiency for Full HDTV
and Ultra HDTV Applications