This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

 Documentation /  Mathematica /  Das Mathematica Buch /  Höhere Mathematik in Mathematica /  Numerische Operationen mit Daten /

FouriertransformationenInhalt

3.8.4 Faltungen und Korrelationen

Faltungen und Korrelationen spielen eine zentrale Rolle bei vielen Arten von Operationen auf Listen von Daten. Sie werden in Bereichen wie Signal- und Bildverarbeitung, statistischer Datenanalyse und Approximationen partieller Differentialgleichungen, sowie Operationen auf Ziffernfolgen und Potenzreihen eingesetzt.

Sowohl bei der Faltung als auch bei der Korrelation besteht die Grundidee darin, eine Kern-Liste mit aufeinanderfolgenden Unterlisten einer Datenliste zu kombinieren. Die Faltung eines Kern mit einer Liste hat die allgemeine Form , während die Korrelation die allgemeine Form hat.

Faltung und Korrelation von Listen

So wird die Faltung des Kerns {x, y} mit einer Datenliste gebildet.

In[1]:= ListConvolve[{x,y}, {a,b,c,d,e}]

Out[1]=

So wird die Korrelation erzeugt.

In[2]:= ListCorrelate[{x,y}, {a,b,c,d,e}]

Out[2]=

In diesem Falle ergibt die Umkehrung des Kerns genau dasselbe Ergebnis wie ListConvolve.

In[3]:= ListCorrelate[{y, x}, {a,b,c,d,e}]

Out[3]=

So werden aufeinanderfolgende Differenzen der Daten gebildet.

In[4]:= ListCorrelate[{-1,1}, {a,b,c,d,e}]

Out[4]=

Bei der Erzeugung von Unterlisten für die Kombination mit einem Kern gibt es immer das Problem, was man an den Enden der Datenliste machen soll. In der Voreinstellung bilden ListConvolve und ListCorrelate niemals Unterlisten, die an den Enden der Datenliste „überhängen" würden. Das führt dazu, daß die Ausgabe, die man erhält, normalerweise kürzer als die ursprüngliche Datenliste ist.

Bei einer Eingabeliste der Länge 6 hat die Ausgabeliste in diesem Fall die Länge 4.

In[5]:= ListCorrelate[{1,1,1}, Range[6]]

Out[5]=

In der Praxis möchte man häufig eine Ausgabe erhalten, die so lang wie die ursprüngliche Datenliste ist. Dazu ist es erforderlich, daß Unterlisten gebildet werden, die über das eine oder über beide Enden der Datenliste hinausgehen. Die zusätzlichen Elemente, die für die Bildung dieser Unterlisten benötigt werden, müssen durch irgendeine Form der „Auffüllung" ergänzt werden. In der Voreinstellung verwendet Mathematica für die Auffüllung Kopien der ursprünglichen Liste und behandelt die Liste im Grunde als zyklische Liste.

Kontrolle der Behandlung der Enden einer Datenliste

In der Voreinstellung gibt es keine Überhänge.

In[6]:= ListCorrelate[{x, y}, {a, b, c, d}]

Out[6]=

Der letzte Term im letzten Element kommt jetzt vom Anfang der Liste.

In[7]:= ListCorrelate[{x, y}, {a, b, c, d}, 1]

Out[7]=

Der erste Term des ersten Elements und der letzte Term des letzten Elements verwenden jetzt beide zyklische Fortsetzungen.

In[8]:= ListCorrelate[{x, y}, {a, b, c, d}, {-1, 1}]

Out[8]=

Die allgemeine Form ListCorrelate[kern, liste, , ] ist so konstruiert, daß im ersten Element des Ergebnisses das Produkt aus dem ersten Element von liste mit dem Element an der Position in kern erscheint, und so, daß im letzten Element des Ergebnisses das Produkt aus dem letzten Element von liste mit dem Element an der Position in kern erscheint. Der Voreinstellung, bei der auf keiner Seite ein Überhang erlaubt ist, entspricht demnach ListCorrelate[kern, liste, 1, -1].

Bei einem Kern der Länge 3 bewirken die Ausrichtungen {-1, 2}, daß die ersten und letzten Elemente des Ergebnisses immer dieselben sind.

In[9]:= ListCorrelate[{x, y, z}, {a, b, c, d}, {-1, 2}]

Out[9]=

Für viele Datenarten muß angenommen werden, daß nicht die Daten zyklisch sind, sondern daß sie vielmehr mit einem bestimmten festen Element, häufig 0, oder mit einer Elementfolge aufgefüllt werden.

Kontrolle der Auffüllung einer Datenliste

Dies füllt mit dem Element p auf.

In[10]:= ListCorrelate[{x, y}, {a, b, c, d}, {-1, 1}, p]

Out[10]=

Häufig wird mit Null aufgefüllt.

In[11]:= ListCorrelate[{x, y}, {a, b, c, d}, {-1, 1}, 0]

Out[11]=

In diesem Fall erscheint q an einem Ende, und p erscheint am anderen Ende.

In[12]:= ListCorrelate[{x, y}, {a, b, c, d}, {-1, 1}, {p, q}]

Out[12]=

Durch die Wahl eines entsprechenden Kerns lassen sich ListConvolve und ListCorrelate für verschiedene Arten von Berechnungen nutzen.

So wird ein gleitendes Mittel der Daten berechnet.

In[13]:= ListCorrelate[{1,1,1}/3, {a,b,c,d,e}, {-1,1}]

Out[13]=

Hier ist ein Gaußscher Kern.

In[14]:= kern = Table[Exp[-n^2/100]/Sqrt[2. Pi], {n, -10, 10}] ;

Dies erzeugt einige „Daten".

In[15]:= data = Table[BesselJ[1, x] + 0.2 Random[ ], {x, 0, 10, .1}] ;

Hier ist eine Darstellung der Daten.

In[16]:= ListPlot[data];

So wird der Kern mit den Daten gefaltet.

In[17]:= ListConvolve[kern, data, {-1, 1}] ;

Das Ergebnis ist eine geglättete Version der Daten.

In[18]:= ListPlot[%]

Out[18]=

Mit ListConvolve und ListCorrelate kann man symbolische sowie numerische Daten bearbeiten.

So wird die Faltung zweier symbolischer Listen gebildet.

In[19]:= ListConvolve[{a,b,c}, {u,v,w}, {1, -1}, 0]

Out[19]=

Das Ergebnis gibt genau die Terme der entwickelten Form dieses Polynom-Produktes wieder.

In[20]:= Expand[(a + b x + c x^2)(u + v x + w x^2)]

Out[20]=

ListConvolve und ListCorrelate funktionieren mit Daten in jeder Anzahl Dimensionen.

So werden Bilddaten aus einer Datei importiert.

In[21]:= g = ReadList["fish.data", Number, RecordLists->True];

Hier ist das Bild.

In[22]:= Show[Graphics[Raster[g], AspectRatio->Automatic]]

Out[22]=

So werden die Daten mit einem zweidimensionalen Kern gefaltet.

In[23]:= ListConvolve[{{1,1,1},{1,-8,1},{1,1,1}}, g] ;

Dies zeigt das Bild entsprechend den Daten.

In[24]:= Show[Graphics[Raster[%], AspectRatio->Automatic]]

Out[24]=

Andere Funktionen zur Manipulation mehrdimensionaler Daten

FouriertransformationenInhalt