FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN



Hasonló dokumentumok
PARAMÉTERES GÖRBÉK ALKALMAZÁSA VALÓSIDE- JŰ DIGITÁLIS HANGFELDOLGOZÁS SORÁN

FIR és IIR szűrők tervezése digitális jelfeldolgozás területén

MŰSZAKI TUDOMÁNY AZ ÉSZAK-ALFÖLDI RÉGIÓBAN 2010

Bevezető előadás Mikrórendszerek összahasonlítása.dsp bevezető

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

A gyakorlat célja a szűrők viselkedésének elemzése, vizsgálata 2.

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Mérési útmutató. Széchenyi István Egyetem Távközlési Tanszék. SDR rendszer vizsgálata. Labor gyakorlat 1 (NGB_TA009_1) laboratóriumi gyakorlathoz

Számítógépek felépítése, alapfogalmak

Corel PHOTO-PAINT X5 Maszkolástól nyomtatásig

Az INTEL D-2920 analóg mikroprocesszor alkalmazása

HÍRADÁSTECHNIKA SZÖVETKEZET

VLIW processzorok (Működési elvük, jellemzőik, előnyeik, hátrányaik, kereskedelmi rendszerek)

A színtévesztés javításáról - közérthetően

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

ARM Cortex magú mikrovezérlők

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Matematikai alapok. Dr. Iványi Péter

A PC története. Informatika alapjai-9 Személyi számítógép (PC) 1/15. (Personal computer - From Wikipedia, the free encyclopedia)

Máté: Számítógép architektúrák

FONTOS BIZTONSÁGI ELŐÍRÁSOK VESZÉLY: FIGYELEM: H22

MECHANIZMUSOK KINEMATIKAI VIZSGÁLATA

Joint Test Action Group (JTAG)

HIDEGEN HENGERELT ALUMÍNIUM SZALAG LENCSÉSSÉGÉNEK VIZSGÁLATA INVESTIGATION OF CROWN OF COLD ROLLED ALUMINIUM STRIP

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Számítógép architektúrák I. Várady Géza

Számítógép Architektúrák

Számítógép Architektúrák

MŰSZAKI TUDOMÁNY AZ ÉSZAK-KELET MAGYARORSZÁGI RÉGIÓBAN 2012

Dr. Pétery Kristóf: Adobe Photoshop Elements 3

Cache, Cache és harmadszor is Cache

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

HASZNÁLATI ÚTMUTATÓ TERMÉKISMERTETŐ

RavaszNégyzet egy kombinatorikai játék

Mintavétel: szorzás az idő tartományban

PC-Kismester verseny első forduló feladatai. Beküldési határidő: december 6.

EGYEZMÉNY. 37. Melléklet: 38. számú Elõírás. 2. Felülvizsgált szövegváltozat

Mikroprocesszorok (Microprocessors, CPU-s)

1. Az utasítás beolvasása a processzorba

ELŐADÁS SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA

Hatékony kétmagos teljesítmény a ma és a holnap üzletemberei számára

A fafeldolgozás energiaszerkezetének vizsgálata és energiafelhasználási összefüggései

Irányítástechnika. II. rész. Dr. Turóczi Antal

TECHNIKAI RENDSZEREK ÁLLAPOTLEÍRÁSÁNAK KÉRDÉSEI QUESTIONS REGARDING THE DESCRIPTION OF THE STATE OF TECHNICAL SYSTEMS

Multimédia hardver szabványok

Parciális differenciálegyenletek numerikus módszerei számítógépes alkalmazásokkal Karátson, János Horváth, Róbert Izsák, Ferenc

1. Ismertesse az átviteltechnikai mérőadók szolgáltatásait!

TAPADÓ VÍZ TELÍTETTSÉGÉNEK MEGHATÁROZÁSA GÁZKISZORÍTÁSOS MÓDSZER ALKALMAZÁSÁVAL

Új VAIO Fit notebook Elképesztő hang- és képminőség a zene és a filmek szerelmeseinek saját stúdióval

(11) Lajstromszám: E (13) T2 EURÓPAI SZABADALOM SZÖVEGÉNEK FORDÍTÁSA

A GŐZ ÉS MELEGVÍZTÁMASZÚ ABSZORPCIÓS HŰTŐGÉPEK ÖSSZEHASONLÍTÁSA A JÓSÁGI FOK SZEMPONTJÁBÓL

Generátor harmadik harmonikus testzárlatvédelem funkcióblokk leírása

Programozható logikai vezérlõk

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Tárgyszavak: személyre szabás; egyediesítés; egyedi gyártás; sorozatgyártás; cserélhető alkatrészek; alvállalkozói modellek.

118. Melléklet: 119 számú Elõírás EGYSÉGES FELTÉTELEK GÉPJÁRMÛVEK BEKANYARODÁSI LÁMPÁINAK JÓVÁHAGYÁSÁHOZ

Szupermikroprocesszorok és alkalmazásaik

A mikroszámítógép felépítése.

M ANYAG FRÖCCSÖNT SZERSZÁMOK KÖLTSÉGÉT BEFOLYÁSOLÓ TÉNYEZ K

DÖNTÉSI MODELL KIALAKÍTÁSA KÖZBESZERZÉSI ELJÁRÁS SORÁN ELŐSZÓ

Mérnöki Optimálás Példatár

Az Ön kézikönyve BLAUPUNKT ODA SURROUND

5 Egyéb alkalmazások. 5.1 Akkumulátorok töltése és kivizsgálása Akkumulátor típusok

Anyagmérnöki Tudományok, 37. kötet, 1. szám (2012), pp

Kosztolányi József Kovács István Pintér Klára Urbán János Vincze István. tankönyv. Mozaik Kiadó Szeged, 2013

Bevezetés a programozásba. 12. Előadás: 8 királynő

(11) Lajstromszám: E (13) T2 EURÓPAI SZABADALOM SZÖVEGÉNEK FORDÍTÁSA

ÉS TESZTEK A DEFINITSÉG

Számítógépek felépítése

Iránymérés adaptív antennarendszerrel

ROSCAMAT. Szériaszám. Gépszám. Gyártási év TECNOSPIRO, S.A.

Az ábra felső részében a feladatok funkcionális felosztása, alul pedig a konkrét műveletek találhatóak.

Mikrohullámú aluláteresztő szűrők tápvonalas megvalósítása

Tanulmányozza az 5. pontnál ismertetett MATLAB-modell felépítést és működését a leírás alapján.

Harmonikus zavarok, mint a villamosítás ellensége

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

Vasúti kocsik vázszerkezetének a felhasználhatósága kisebb nyílások áthidalására helyi érdek8 közúti utakon

A Margit híd pillérszobrának 3D-s digitális alakzatrekonstrukciója Nagy Zoltán 1 Túri Zoltán 2

BIZONYOS GRÁFELMÉLETI ALGORITMUSOK TANÍTÁSA ELEGÁNSAN KISS LÁSZLÓ

SZABADALMI LEÍRÁS. SZOLGÁLATI TALÁLMÁNY Nemzetközi A bejelentés napja: (22) (21)717/83

E-Laboratórium 1 Kombinációs digitális áramkörök alkalmazása Elméleti leírás

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK A STRUKTURÁLT SZÁMÍTÓGÉP-FELÉPÍTÉS. Misák Sándor. 2. előadás DE TTK

Miskolci Egyetem. Részbenrendezés maximális kompatibilis kiterjesztéseir l ütemezéselméleti vonatkozásokkal. PhD értekezés

Mérési útmutató. Széchenyi István Egyetem Távközlési Tanszék. QPSK moduláció jellemzőinek vizsgálata

A HÉLIUM AUTOIONIZÁCIÓS ÁLLAPOTAI KÖZÖTTI INTERFERENCIA (e,2e) KÍSÉRLETI VIZSGÁLATA

Képfeldolgozási módszerek a geoinformatikában

Ismétlés: Moore törvény. Tranzisztorok mérőszáma: n*százmillió, n*milliárd.

TERMELÉSMENEDZSMENT. Gyakorlati segédlet a műszaki menedzser szak hallgatói számára. Összeállította: Dr. Vermes Pál főiskolai tanár 2006.

Kezelői kézikönyv. WarmTouch. WT-5900 modellszámú betegmelegítő rendszer

LINEÁRIS ALGEBRA PÉLDATÁR MÉRNÖK INFORMATIKUSOKNAK

A PC története. Informatika alapjai-9 Személyi számítógép (PC) 1/12. (Personal computer - From Wikipedia, the free encyclopedia)

Hazánkban jelentõs múlttal rendelkeznek a klasszikus tesztelméleti módszerekkel

GÁZMINŐSÉGEK VIZSGÁLATA AZ EGYSÉGES EURÓPAI GÁZSZOLGÁLTATÁSI SZABVÁNY VONATKOZÁSÁBAN

3. Gyakorlat Ismerkedés a Java nyelvvel

EGÉSZSÉGÜGYI DÖNTÉS ELŐKÉSZÍTŐ

TopologyMaster Pro v0.93 Haszna lati utası ta s

2009/3 ANYAGSZERKEZET-VIZSGÁLAT INVESTIGATION OF STRUCTURE

Az MSP430 energiatakarékos használata

Technikai adatlap. 3M FF-400 sorozatú teljesálarcok. Termékjellemzők. Nagyméretű látómező Scotchgard bevonattal. Választható komfort fejkosár

Átírás:

Multidiszciplináris tudományok, 4. kötet. (2014) 1. sz. pp. 31-38. FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN Lajos Sándor Mérnöktanár, Miskolci Egyetem, Matematikai Intézet, Ábrázoló Geometriai Intézeti Tanszék 3515 Miskolc, Miskolc-Egyetemváros, e-mail: LajosS@abrg.uni-miskolc.hu Összefoglalás A digitális jelfeldolgozás során, ha fontos a lineáris fázis jelleggörbe, FIR szűrőket alkalmazunk. A nagy fokszámú FIR szűrők megvalósítása viszont jelentős számítási teljesítményt igényel, mely a cikkben bemutatott optimalizálási módszerek segítségével a töredékére csökkenthető. Kulcsszavak: FIR szűrő, optimalizálás, C/C++. Abstract In digital signal processing FIR filters are used, when the linear phase characteristic is important. The realization of high order FIR filters uses lots of CPU power, which can be reduced by the proposed optimization methods. Keywords: FIR filter, optimization, C/C++. 1. Bevezetés A digitális jelfeldolgozásban alkalmazott szűrők két típusra oszthatók: Véges impulzusválaszú FIR (Finite Impulse Response) Végtelen impulzusválaszú IIR (Infinite Impulse Response). Mindkét típusnak vannak előnyei. Egy IIR szűrő megvalósítása kevesebb memóriát és számítást igényel, mint egy hasonló tulajdonságokkal rendelkező FIR szűrő. Másrészről a FIR szűrők fázis jelleggörbéje lehet lineáris, vagyis a szűrők nem torzítják a jel fázisát. Ez utóbbi tulajdonságuk miatt sok esetben előnyben részesítik a FIR szűrőket [1]. 2. FIR szűrők megvalósítása A FIR szűrők direkt megvalósítási formája az 1. ábrán látható. Ennek a szűrőstruktúrának az output/input viszonya az alábbi egyenlettel írható le [2]: ahol: N y n c x n i (1) i i 0 xn az bemenő jel n-edik mintája, yn a kimenő jel n-edik mintája,

Lajos, S N a szűrő fokszáma (rendje), c a szűrőegyütthatók. 0...N 1. ábra. A FIR szűrők direkt megvalósítási formája. Az (1) egyenlet alapján egy FIR szűrő megvalósításához két N+1 elemű vektor skaláris szorzatát kell kiszámítanunk. Ehhez a programkódban mintánként N+1 darab szorzás és N+1 darab összeadás szükséges. Bizonyos feladatokhoz nagy (akár több ezer) fokszámú szűrőket kell alkalmazni. Ilyenkor már a vektorok skaláris szorzása is jelentős számítási teljesítményt igényel, nem beszélve a minták tárolásához szükséges járulékos számításokról. A következő fejezetekben szereplő programkódok tesztelése során megmértük, hogy mennyi processzorciklus szükséges 44 100 darab véletlenszerű minta feldolgozásához. 3. Körkörös puffer Az 1. ábrán látható szűrőstruktúrához tárolnunk kell a bemenő jel előző N darab mintáját. Ezt a feladatot egy körkörös puffer segítségével oldjuk meg [3]. 3.1. Körkörös írás, körkörös olvasás Első lépésben a legegyszerűbb körkörös puffert fogjuk alkalmazni, amikor az adatoknak az írása és az olvasása is körkörösen történik (2. ábra). 2. ábra. Puffer körkörös írással és olvasással. Ebben az esetben a FIR szűrő programkódja a következő: 32

FIR szűrők teljesítményének javítása void Fir(float *x, float *y, int ns, int N) register int i, j, rp; float o; for(i = 0;i < ns;i++) o = 0; b[wp] = x[i]; for(j = 0;j <= N;j++) rp = wp+j; if(rp > N) rp -= N+1; o += b[rp] * c[j]; if(--wp < 0) wp = N; y[i] = o; A függvény az x tömbben kapja az bejövő mintákat, az y tömbben adja vissza a feldolgozott mintákat. Az ns a feldolgozandó minták száma, N a szűrő fokszáma. A wp globális változó az körkörös puffer írásmutatója, az rp pedig az olvasásmutatója. A b globális tömb maga a körkörös puffer, a c globális tömb pedig a szűrőegyütthatókat tárolja. A fenti kód végrehajtásához 199 269 ezer processzorciklus szükséges (5. ábra). 3.2. Körkörös írás lineáris olvasás Az előzőekben vázolt puffer hátránya, hogy mind az írás, mind az olvasás során vizsgálnunk kell a puffermutatót, hogy az elérte-e a puffer végét. Ez a vizsgálat lassítja a feldolgozást. Ezért megduplázzuk a puffer méretét és minden mintát kétszer írunk be. Ebben az esetben lehetővé válik, hogy az olvasás lineáris legyen, nincs szükség az olvasásmutató vizsgálatára (3. ábra). 3. ábra. Puffer körkörös írással, lineáris olvasással. Ebben az esetben a FIR szűrő programkódja a következő: 33

Lajos, S void Fir(float *x, float *y, int ns, int N) register int i, j, rp; float o; for(i = 0;i < ns;i++) o = 0; b[wp] = b[wp + N+1] = x[i]; for(j = 0;j <= N;j++) rp = wp+j; o += b[rp] * c[j]; if(--wp < 0) wp = N; y[i] = o; A fenti kód végrehajtásához már csak 73 484 ezer processzorciklus szükséges (5. ábra). 4. Ciklusok kibontása Egy FIR szűrő programkódja két egymásba ágyazott ciklusból áll. A külső ciklus a feldolgozandó mintákon lép végig, míg a belső ciklus végzi a két vektor skaláris szorzását. A ciklusok adminisztrálása azonban időigényes feladat. Minden egyes iteráció során léptetni kell a ciklusváltozót, majd vizsgálni kell, hogy elérte-e a ciklus végét. Ezek a ciklusadminisztrációs feladatok csökkenthetők a ciklusok kibontásával [4]. Jelen esetben a cikluskibontást úgy valósítjuk meg, hogy a ciklusmagban négy műveletet végzünk el, és a ciklusváltozót négyesével léptetjük. Csak a belső ciklust kibontva a végrehajtáshoz szükséges processzorciklusok száma 71 160 ezerre csökken (5. ábra). Mindkét ciklust kibontva már csak 68 751 ezer proceszszorciklus szükséges a végrehajtáshoz (5. ábra). Ebben az esetben a FIR szűrő programkódja a következő: void Fir(float *x, float *y, int ns, int N) register int i, j, rp; float o, o1, o2, o3; 34 for(i = 0;i < ns;i+=4) o = o1 = o2 = o3 = 0; b[wp] = b[wp + N+1] = x[i]; b[wp-1] = b[wp + N] = x[i+1]; b[wp-2] = b[wp + N-1] = x[i+2]; b[wp-3] = b[wp + N-2] = x[i+3]; for(j = 0;j <= N;j+=4)

FIR szűrők teljesítményének javítása rp = wp+j; o += b[rp] * c[j] + b[rp+1] * c[j+1] + b[rp+2] * c[j+2] + b[rp+3] * c[j+3]; o1 += b[rp-1] * c[j] + b[rp] * c[j+1] + b[rp+1] * c[j+2] + b[rp+2] * c[j+3]; o2 += b[rp-2] * c[j] + b[rp-1] * c[j+1] + b[rp] * c[j+2] + b[rp+1] * c[j+3]; o3 += b[rp-3] * c[j] + b[rp-2] * c[j+1] + b[rp-1] * c[j+2] + b[rp] * c[j+3]; wp -= 4; if(wp < 0) wp = N; y[i] = o; y[i+1] = o1; y[i+2] = o2; y[i+3] = o3; 5. SIMD utasítások A modern processzorok multimédiás utasítás-kiegészítései egy utasítással egyszerre több adaton végzik el ugyan azt a műveletet. Ezeket az utasításokat egységesen SIMD (Single Instruction Multiple Data) utasításoknak nevezzük. Ezek az új kiegészítések új regisztereket is igényelnek. Ezek a regiszterek a betöltött adat formátumától és a kiadott utasítástól függően úgy viselkednek, mintha több önálló regiszterre lennének felosztva. Egy 128 bites regiszterbe például egyszerre négy 32 bites adat tölthető be, és ha ennek a regiszternek a tartalmát például hozzáadjuk egy másik, ugyanilyen módon feltöltött regiszterhez, akkor nem két számot adunk össze, hanem egyetlen utasítással négy számpárt, vagyis ebben az esetben a négyszeresére nőtt a számítási teljesítmény. Az Intel a lebegőpontos számokkal dolgozó utasításkészlet kiegészítését, az SSE-t (Streaming SIMD Extensions) a Pentium III-mal vezette be 1999-ben. Az SSE azóta számos fejlesztésen, bővítésen esett át. Az SSE4 már lehetővé teszi két darab négyelemű vektor skaláris szorzását egyetlen utasítással [5]. Ennek felhasználásával az előző programkód az alábbiak szerint alakítható át: void Fir(float *x, float *y, int ns, int N) register int i, j; float *rp; m128 o, o1, o2, o3, cm, zero, b0, b1, b2, b3; zero = _mm_setzero_ps(); for(i = 0;i < ns;i+=4) 35

Lajos, S o = o1 = o2 = o3 = zero; b[wp] = b[wp + N+1] = x[i]; b[wp-1] = b[wp + N] = x[i+1]; b[wp-2] = b[wp + N-1] = x[i+2]; b[wp-3] = b[wp + N-2] = x[i+3]; for(j = 0;j <= N;j+=4) rp = b+wp+j; cm = _mm_load_ps(c+j); b0 = _mm_loadu_ps(rp); b1 = _mm_loadu_ps(rp-1); b2 = _mm_loadu_ps(rp-2); b3 = _mm_loadu_ps(rp-3); o = _mm_add_ss(_mm_dp_ps(b0,cm,0xf1),o); o1 = _mm_add_ss(_mm_dp_ps(b1,cm,0xf1),o1); o2 = _mm_add_ss(_mm_dp_ps(b2,cm,0xf1),o2); o3 = _mm_add_ss(_mm_dp_ps(b3,cm,0xf1),o3); wp -= 4; if(wp < 0) wp = N; _mm_store_ss(y+i,o); _mm_store_ss(y+i+1,o1); _mm_store_ss(y+i+2,o2); _mm_store_ss(y+i+3,o3); A fenti kód végrehajtásához mindössze 50 163 ezer processzorciklus szükséges (5. ábra). 6. Eredmények A cikkben bemutatott programkódok teszteléséhez egy VST modult készítettünk a Steinberg cég által kiadott VST SDK felhasználásával [6]. A fordításhoz a Microsoft Visual Studio 2008-at használtuk a következő optimalizálási kapcsolókkal: /Ox, /Ot, /GL, valamint letiltottuk, hogy a fordító SSE utasításokat használjon. A teszthardver egy Intel Core i7-2760qm @ 2,4GHz processzorral felszerelt számítógép volt. A tesztelést egy 2047 fokszámú FIR szűrővel végeztük. A szűrő együtthatóiként egy Celestion V30 hangszórókkal szerelt gitárhangládán mért impulzusválaszfájl első 2048 értékét használtuk [7]. Ebben az esetben a FIR szűrő frekvenciakarakterisztikája a 4. ábrán látható. A méréseket a VST Plugin Analiser programmal végeztük [8]. 36

FIR szűrők teljesítményének javítása A különféle optimalizálási lépések eredményeként elérhető sebességnövekedést az 5. ábra mutatja. 4. ábra. A teszteléshez használt FIR szűrő frekvenciakarakterisztikája. 5. ábra. Futtatási eredmények 44 100 db véletlen minta feldolgozása esetén. 37

Lajos, S 7. Összefoglalás A fentiekben bemutatott optimalizálási lépések jól mutatják, hogy már a programkód megfelelő strukturálásával is jelentős sebességnövekedés érhető el. Emellett további jelentős javulás érhető el a modern processzorok lehetőségeinek kihasználásával. A legutolsó kód futtatásához nagyjából negyedannyi processzorciklusra volt szükség, mint a legelső kód esetében. 8. Köszönetnyilvánítás A kutató munka a Miskolci Egyetem stratégiai kutatási területén működő Mechatronikai és Logisztikai Kiválósági Központ keretében valósult meg. 9. Irodalom [1] Zölzer, U.: DAFX-Digital Audio Effects, John Wiley & Sons, 2002. [2] http://en.wikipedia.org/wiki/finite_impulse_response [3] http://en.wikipedia.org/wiki/circular_buffer [4] http://en.wikipedia.org/wiki/loop_unwinding [5] Streaming SIMD Extensions (SSE), http://msdn.microsoft.com/enus/library/t467de55(v=vs.90).aspx [6] http://www.steinberg.net/en/company/developers.html [7] http://www.redwirez.com/bigbox.jsp [8] http://www.savioursofsoul.de/christian/programs/measurement-programs/ 38