# Segmentierte Faltung

Die segmentierte Faltung (englisch overlap add, OA, OLA) ist ein Verfahren zur Schnellen Faltung und wird in der digitalen Signalverarbeitung eingesetzt. Dabei wird eine Eingangsfolge in einander nicht überlappende Teilfolgen zerlegt. Diese Segmente werden mit Nullen aufgefüllt, von denen dann die DFT (bzw. FFT) gebildet wird. Das Ergebnis bildet einen Teil der Ausgangsfolge, bei deren Zusammensetzung die Überlappungsbereiche – im Gegensatz zum Overlap-Save-Verfahren – addiert werden. Das Ziel dieses Verfahrens ist es, die zyklische Faltungsoperation der zur schnellen Faltung eingesetzten schnellen Fourier-Transformation in die aperiodische Faltungsoperation zu überführen. Bei der segmentierten Faltung können, im Gegensatz zu dem Overlap-Save-Verfahren, prinzipbedingte Signallaufzeiten auftreten, welche im Bereich der Dauer eines Blockes zur schnellen Fourier-Transformation liegen.
In den Anwendungen wird die segmentierte Faltung zur effizienten Implementierung von FIR-Filtern höherer Ordnung verwendet. Die segmentierte Faltung hat dabei im Gegensatz zur direkten Implementierung der aperiodischen Faltungsoperation in digitalen Signalprozessoren (DSP) den Vorteil, Ressourcen wie Speicher oder Rechenzeit zu sparen.

## Verfahren
### Funktion

Die direkte Ausführung der aperiodischen Faltungsoperation zwischen einer beliebig langen Eingangsfolge x[n] und der Impulsantwort h[n] der Länge M ergibt die Ausgangsfolge y[n]:
    $y[n]=x[n]*h[n]\ {\stackrel {\mathrm {def} }{=}}\ \sum _{m=-\infty }^{\infty }h[m]\cdot x[n-m]=\sum _{m=1}^{M}h[m]\cdot x[n-m]$
wobei h[m] außerhalb des Intervalls [1, M] gleich 0 gesetzt ist. Dieses Verfahren zur schnellen Faltung beruht auf der folgenden Idee:
* Das unendlich lange Eingangssignal wird in kurze Abschnitte der Länge L aufgeteilt, welche im Folgenden mit dem Index k zur Unterscheidung versehen sind.
* Da das Ergebnis der Faltung eines Abschnittes der Länge L mit einer Funktion der Länge M L+M Werte lang ungleich 0 sein kann und keine Information vom Ergebnis verlorengehen soll, wird jeder der Abschnitte $x_{k}$ mit M Nullen aufgefüllt (dies wird auch als Zero-Padding bezeichnet), um das Ergebnis der Faltungsoperation auf die Länge L+M zu bringen:
    $x_{k}[n]\ {\stackrel {\mathrm {def} }{=}}{\begin{cases}x[n+kL]&n=1,2,\ldots ,L\\0&{\textrm {ansonsten}}\end{cases}}$
* Nun werden die Ergebnisse der einzelnen Faltungen dort addiert, wo sich die einzelnen Faltungsprodukte überlappen, und das Ergebnis dieser Operation entspricht der Faltung der unendlich langen Eingangsfolge.

### Mathematische Beschreibung

Die Eingangsfolge x[n] besteht aus der Summe der Teilfolgen x$_k$[n]
    $x[n]=\sum _{k}x_{k}[n-kL]$ ,
womit die Ausgangsfolge y[n] als Summe einzelner Faltungen dargestellt werden kann:
    ${\begin{aligned}y[n]=\left(\sum _{k}x_{k}[n-kL]\right)*h[n]&=\sum _{k}\left(x_{k}[n-kL]*h[n]\right)\\&=\sum _{k}y_{k}[n-kL]\end{aligned}}$
Die Ausgangsteilfolgen
    $y_{k}[n]\ {\stackrel {\mathrm {def} }{=}}\ x_{k}[n]*h[n]$
sind außerhalb des Intervalls [1,L+M-1] Null. Für jeden Wert des Parameters N, der größer-gleich als L+M-1 gewählt sein muss, ergibt sich die zirkulare Faltungsoperation der Ausgangsfolge. Die einzelnen Ausgabefolgen y$_k$[k] überlappten sich in den Intervallen [k(L+1),k(L+M)], und durch die Summierung wird die Ausgabefolge y[k] gebildet.

### Vorteile dieses Verfahrens

Der Vorteil besteht darin, dass die zirkulare Faltungsoperation zur Bildung der Teilfolgen y$_k$ effizient in Form der schnellen Fourier-Transformation (FFT) beziehungsweise der inversen schnellen Fourier-Transformation (IFFT) nach folgender Form implementiert werden kann:
    $y_{k}[n]={\textrm {IFFT}}\left({\textrm {FFT}}\left(x_{k}[n]\right)\cdot {\textrm {FFT}}\left(h[n]\right)\right)$
Je nach verwendeten FFT-Algorithmus ist es sinnvoll, die konkrete Blocklänge N zur Berechnung der zirkularen Teilfaltungen abzustimmen. Bei Verwendung des FFT-Algorithmus nach Cooley und Tukey (Radix-2-Algorithmus) ist es günstig, die Blocklänge als Zweierpotenz zu wählen:
    $N=L+M=2^{p},\quad p\in \mathbb {N}$

### Pseudocode

In Abhängigkeit vom FFT-Algorithmus N und L wählen.