Sorozatok konvolúciója

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. november 9-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

A szekvenciakonvolúció két numerikus sorozat  lineáris transzformációja . A konvolúció eredménye egy sorozat, amelynek elemeit úgy kapjuk meg, hogy az eredeti sorozatok elemeit úgy szorozzuk és összegezzük, hogy az egyik sorozat tagjait növekvő, a másiké pedig csökkenő indexekkel vegyük (ami arra szolgál e művelet elfogadott elnevezésének alapjaként). Léteznek lineáris és ciklikus konvolúciók, amelyeket véges, illetve periodikus sorozatokhoz használunk.

A és sorozatok konvolúcióját jelöljük .

A szekvenciális hajtogatás a funkciós hajtogatás speciális esete . A konvolúció szintén szorosan összefügg a keresztkorrelációval .

Hajtási típusok

A hagyományos kötegek a következők:

Konvolúció számítás

Tekintsük az egyes konvolúciótípusok kiszámításának szabályait és sorrendjét.

Lineáris konvolúció számítás

Adjunk meg két numerikus sorozatot:

Ezen sorozatok lineáris konvolúciójának kiszámításához a következő lépéseket kell végrehajtania:

ahol:  a kimeneti sorozat elemeinek száma;  az első sorozat elemeinek száma;  a második sorozat elemeinek száma;

A fent leírt műveletek végrehajtása eredményeként a és sorozatok lineáris konvolúcióját kapjuk , amelynek elemeit két képlet egyikével számítjuk ki:

vagy

Itt feltételezzük, hogy - esetén a megfelelő sorozat elemei egyenlők nullával.

A képletek ekvivalenciáját és ennek eredményeként a konvolúciós művelet kommutativitását úgy ellenőrizheti , hogy egyszerűen lecseréli az indexeket valamelyik képletben.

Ciklikus konvolúció számítása

Tekintsünk most két azonos hosszúságú numerikus sorozatot :

A periodikus körkörös konvolúció eléréséhez el kell képzelni, hogy ezek a sorozatok két körön helyezkednek el, amelyek közül az egyik a másik belsejében van. Ezen sorozatok értékei egyenlő távolságra vannak egymástól. A körkörös konvolúció minden egyes értékének megszerzéséhez el kell képzelni, hogy az egyik sorozat a másikhoz képest körben mozog az óramutató járásával megegyező irányban. Először vegye a forgó sorozat első értékét, szorozza meg egymás után egy másik sorozat értékeivel, és összegezze a szorzások eredményeit, és kapja meg a kimeneti sorozat első értékét . Ezután megismételjük ezeket a műveleteket a sorozat minden egyes értékére, amely a másikhoz képest forog. A kimeneti sorozat elemeinek száma .

Más szóval, a ciklikus konvolúció elemeit a képlet számítja ki

ahol .

A kapott sorozat ekvivalens két periodikus jel, azaz a sorozatok konvolúciójával, és az és a képletekkel mindenkire meghatározottnak tekinthető .

Az aperiodikus konvolúció számítása

Az aperiodikus konvolúció eléréséhez ugyanazokat a műveleteket hajtjuk végre, mint a körkörös konvolúció esetén, de a sorozatok eltérő számú elemet tartalmazhatnak (például és ), és azokat nullákkal kell kitölteni a számhoz . Az ilyen típusú konvolúció végrehajtása során a körkörös átfedés hatása, amely körkörös konvolúciónál jelentkezik, megszűnik. Ez egy alternatív módszer a lineáris konvolúció kiszámítására.

Lineáris és ciklikus konvolúciók kapcsolata

A fent leírt megközelítés lehetővé teszi a lineáris és ciklikus konvolúciók számítása közötti kapcsolat létrehozását. Ehhez a ciklikus konvolúció elemeinek képletében az összeget elosztjuk kettővel, az és eseteknek megfelelően :

Feltételezve, hogy most az első összegben van , és a második összegben at , megváltoztathatjuk az összegzési határokat, és összefüggést kaphatunk a lineáris és ciklikus konvolúciók között a következő formában:

A lineáris konvolúció akkor számítható ciklikusnak, ha a képlet második tagja egyenlő nullával, vagyis az összes és a szorzata nullával egyenlő . Ennek a feltételnek a teljesülése érdekében kiválaszthatjuk a ciklikus konvolúció hosszát úgy, hogy az ne legyen kisebb, mint , miközben a bemeneti sorozatokat nullákkal töltjük fel.

Konvolúció kiszámítása a Fourier-transzformáció segítségével

A diszkrét Fourier-transzformáció segítségével történő konvolúció kiszámításához mindkét bemeneti sorozatot nullákkal kell feltölteni, hogy az elemek száma ezekben a sorozatokban egyenlő legyen . Ezután az egyes sorozatok közvetlen Fourier-transzformációját kell végrehajtani. Ezután a transzformált sorozatokat elemenként megszorozzuk, majd végrehajtjuk a szorzási eredmény inverz transzformációját.

A konvolúció leírt módon történő kiszámítása a konvolúciós tételnek köszönhetően megvalósítható.

Egy lineáris, ciklikus vagy konvolúció számításának helyességének ellenőrzéséhez a Fourier-transzformáció segítségével a másik két konvolúciótípus egyikét is kiszámíthatja, mivel a kimeneti sorozatoknak egyenlőnek kell lenniük, ha a bemeneti sorozatok azonosak.

Számítási összetettség

A konvolúció kiszámítása műveleteket igényel . Ez a szám jelentősen csökkenthető a konvolúció különböző gyors algoritmusokkal történő kiszámításával.

Leggyakrabban a műveletek számának csökkentése érdekében a konvolúciót két Fourier-transzformáció segítségével számítják ki, amelyek mindegyikét gyors algoritmusokkal számítják ki . Ez a konvolúciós művelet számítási bonyolultságát -ra csökkenti .

A tér dimenziójának csökkentése többdimenziós konvolúcióval

Legyen két diszkrét komplex jel és legyen megadva térben . Ezeknek a jeleknek a konvolúcióját a következőképpen definiáljuk

Állítsuk be a tér méretének csökkentésének műveletét is úgy, hogy a jelet as -on mérjük vagy összegezzük

Tétel. A tér egy tetszőleges dimenziója esetén a konvolúció eredménye, amelyet az összegzés követ , ami megegyezik a jelek feletti előzetes összegzéssel  és az azt követő konvolúcióval: . [egy]

Programpélda

Az alábbiakban egy példa a lineáris konvolúció megvalósítására, C++ nyelven írva :

/* * A kimeneti sorozat mérete M + N - 1 */ vektor < double > conv ( const vektor < double >& x , const vektor < double >& h ) { if (( x . méret () == 0 ) && ( h . méret () == 0 )) { visszatérési vektor < double > (); } vektor < double > a ; vektor < double > b ; if ( x .size () < h .size ( ) ) { a = x _ b = h _ } másik { a = h _ b = x ; } vektor < double > eredmény ( a . méret () + b . méret () - 1 , 0 ); for ( méret_t k = 0 ; k < a . méret (); k ++ ) { for ( méret_t l = 0 ; l < b . méret (); l ++ ) { eredmény [ l + k ] += a [ k ] * b [ l ]; } } eredmény visszaadása ; }

Lásd még

Jegyzetek

  1. Grishentsev A. Yu., Korobeinikov A. G. A tér dimenziójának csökkentése a digitális jelek korrelációja és konvolúciója során  // Izv. egyetemek. Hangszerelés. : nyomtatott. - 2016. - 3. sz . - S. 211-218 . — ISSN 0021-3454 . Az eredetiből archiválva: 2016. május 12.

Irodalom

  • Rabiner L., Gould B. 2. fejezet: Lineáris diszkrét rendszerek elmélete // A digitális jelfeldolgozás elmélete és alkalmazása. - M . : Mir, 1978. - S. 72-81. — 848 p.
  • Blahut R.Gyors digitális jelfeldolgozó algoritmusok. — M.: Mir , 1989.