Overlap/Add Verfahren

Bisher wurde immer davon ausgegangen, dass die Aufteilung des Gesamt-Audiostreams in die Puffergröße entsprechende Häppchen keinerlei Auswirkungen auf das Signal hat. Dies ist richtig, solange keine Datenmanipulation durchgeführt wird. Daher sollte der Test des Audiorahmen-VIs per Mikrofon auch keinerlei Verzerrungen ergeben. An den Daten wird nichts geändert. Anders sieht es aus, wenn wir die I(n) und Q(n) Signale nun digital bearbeiten.

Anhand Grundverfahren der Digitalen Signalverarbeitung soll die aus einer Signal-Blockbildung entstehende Problematik erläutert und ein Lösungsverfahren aufgezeigt werden

Bild 15 zeigt ein 4-poliges Filter des Typs FIR, was für Finite Impulse Response oder Endliche Sprungantwort steht.

 

Bild 15: FIR-Filter 4. Ordnung

Typische Elemente sind Multiplikationen, Additionen und Verzögerungen (  Blöcke).

Eine Verzögerung bedeutet dabei, dass ein Element am Eingang des Verzögerungsblocks einen Sequenzschritt später am Ausgang auftritt. Physikalisch liegen beispielsweise zwei Werte der I(n) und Q(n) Sequenzen bei 48000 Hz Abtastfrequenz rund 20,83 μ-Sekunden auseinander.

Dieser Abstand ist aber in der Signalverarbeitung weniger interessant, da er durch die Abtastfrequenz festgelegt ist. Hier ist vielmehr die Lage der einzelnen Werte untereinander wichtig.

So zeigt das Blockschaltbild, dass 4 folgende Werte mit jeweils einem Faktor oder Koeffizient multipliziert und anschließend addiert werden. Die Koeffizienten h(n) entsprechen der Impulsantwort des Filters. Von der x(n) Eingangsfolge werden also 4 nebeneinander liegende Werte abgegriffen, mit der Impulsantwort verrechnet und man erhält einen Ausgangswert. Danach rücken die Abgriffe an x(n) eine Stelle weiter nach links. Der nächste y-Wert liegt vor. So geht der Vorgang weiter und mit jedem Vorrücken erhält man einen neuen, gefilterten Ausgangswert.

Wurden alle Eingangswerte mit der Impulsantwort verrechnet, so ist aus x(n) die Ausgangsfolge y(n) entstanden, mathematisch nennt man dies eine Diskrete Faltung der Eingangsfolge x(n) mit der Impulsantwort h(n).

Die Faltung ist eine elementare Grundfunktion der Digitalen Signalverarbeitung. Ist die Impulsantwort eines Filters bekannt, so kann aus jeder Eingangsfolge die Ausgangsfolge berechnet werden. Mathematisch wurde ein eigener Operator eingeführt, das Sternchen in der folgenden Formel:

  wobei L die Anzahl der Pole des Filters ist.

Es mag zunächst schwer vorstellbar sein, dass solch ein Gebilde ein Filter darstellt, mit Hoch-, Tief-, Bandpass- oder Bandsperr-Eigenschaften.

Dennoch, wählt man die Koeffizientenzahl hoch genug, so ergeben sich Filter mit Eigenschaften, die in der analogen Ausführung kaum vorstellbar sind.

Das beispielhafte, aufgezeigte FIR-Filter ist 100 % stabil, da es keine Rückkopplung enthält. Es ist phasenkonstant, demnach hat es lediglich eine konstante Phasendrehung über alle Frequenzen. Weiterhin bemerkenswert ist, dass die Folge der Koeffizienten beim FIR-Filter direkt die Impulsantwort darstellt.

Im hier behandelten SDR wird ein FIR-Filter als hocheffizientes Bandpassfilter eingesetzt.

Eine ausgezeichnete, umfassende Einführung in die Digitale Signalverarbeitung und weitere Komponenten findet sich in [10].

Was bedeutet nun die Verarbeitung aller Eingangswerte? Dazu sei Bild 16 betrachtet, welches ein Berechnungsbeispiel für die Filterung mit einem 4-poligen FIR-Filter aufzeigt.

Bild 16: FIR-Berechnungsbeispiel

Bild 16: FIR-Berechnungsbeispiel HIGHRES Version

Gegeben sei ein 4-poliges FIR-Filter mit der Impulsantwort h (1, 2, 3, 1) und eine Eingangsfolge aus 7 Elementen x (1, 2, 2, 4, 3, 6, 5). Die Filterung/Faltung wird nun Schritt für Schritt abgebildet, um die Ausgangsfolge y zu erhalten. Jeder Schritt ist eine Multiplikation der Elemente der Eingangsfolge mit den Elementen der Impulsantwort und die Addition dieser (4) Ergebnisse.

Die Schritte 4, 5, 6, 7 sind problemlos durchführbar, da hier für jede Multiplikation ein Element der Eingangsfolge zur Verfügung steht. Errechnet werden die Elemente y(3), y(4), y(5), y(6).

Problematisch wird es an den Randbereichen, da hier keine Elemente der Eingangsfolge zur Verfügung stehen. Dennoch wird ein Ausgangswert offensichtlich zum Teil von der Eingangsfolge beeinflusst. Hat das Filter n Elemente, so werden n-1 mehr Elemente in einer Ausgangsfolge beeinflusst, als die Eingangsfolge lang ist. Die Ausgangsfolge ist also um die Länge der Impulsantwort minus 1 länger als die Eingangsfolge! Hier ergeben sich 10 Ausgangswerte von 7 Eingangswerten.

Dies ist eine wichtige Erkenntnis der Digitalen Signalverarbeitung, die in vielen Quellen in sofern wenig Beachtung findet, da stets unendlich lange Eingangsfolgen betrachtet werden. Praktisch ist dies jedoch so gut wie nie der Fall. Auch beim vorliegen Konzept stehen nur begrenzte Eingangsfolgen zur Verfügung. I(n) und Q(n) haben die Länge n entsprechend der Puffergröße.

Wie sich noch zeigen wird, rechnet Labview hier sehr penibel. Faltet/filtert man ein Eingangs-Array von beispielsweise 4096 Werten mit einem Filter-Kernel von 200, so erstellt Labview am Ausgang des Filters korrekterweise ein Array der Größe 4295.

Es stellt sich die Frage, wie denn nun Ausgangs-Arrays die länger als der Ausgabepuffer sind verarbeitet werden sollen, bzw. wie die portionsweise Verarbeitung der Eingangssequenzen stattzufinden hat?

Die Lösung der Problematik geschieht mit dem sogenannten Overlap-Add Korrekturverfahren, bei dem jeweils ein Teil der Filterung des vorherigen Blockes mit dem aktuellen Block verrechnet wird.

Dies ist erlaubt, da sich die Faltung/Filterung der Gesamtfolge als Summe der Faltung/Filterung von Teilfolgen ausdrücken lässt:

  

Dabei sind T1, T2, T3 etc. die Teilfolgen der Gesamtfolge, also die I(n) und Q(n) Teilfolgen in Pufferlänge.

Demnach sind alle Teilfolgen separat zu falten/filtern, und zwar ohne Verlust von Informationen, und dann entsprechend zu überlagern..

Die erste Bedingung kann leicht erfüllt werden, in dem die Eingangsfolge mit Nullen verlängert wird. Im vorliegenden Fall wird dazu vor der Filterung das Eingangs-Array in der Größe verdoppelt und mit Nullen aufgefüllt. Das Ergebnis-Array enthält dann alle Informationen.

Zur Erfüllung der zweiten Bedingung reicht es aus, lediglich jeweils zwei angrenzende Faltungen/Filterungen zu überlagern, da nur diese sich direkt beeinflussen. Dies gilt, so lange die Eingangsfolge länger als die Impulsantwort des Filters ist.

Ist die Puffergröße für I(n) und Q(n) beispielsweise 4096 Werte, so wird das Array auf 8192 Werte verdoppelt und mit Nullen aufgefüllt. Dabei wird der neue Teil des Arrays angehängt. Für die Faltung/Filterung ist es bedeutungslos, mit welchem Element begonnen wird. Hier wird mit I(0) und Q(0) begonnen, daher wird das Array zu größeren Indices hin vergrößert.

Wird jetzt die Eingangsfolge mit einem 200-poligen Filter gefaltet, so ergeben sich in diesem Array, bestehend aus 8192 Werten, insgesamt 4295 Werte ungleich null. Die Werte 4096 bis 4295 sind nun für die folgende Filterung des nächsten Blockes relevant und müssen gespeichert werden, um dann zu dessen ersten 4096 Werten addiert zu werden. Für den aktuellen Block sind wiederum die ‚alten’ Werte 4096 bis 4295 zu überlagern. Die ersten 4096 Werte dieser Überlagerung sind das aktuelle Filterergebnis.

So geht es Block für Block weiter. Daher auch der Name Overlap-Add.

Eine anschauliche, visuelle Erläuterung des Verfahrens findet sich in [10].

Es bewährt sich im Übrigen für die Puffergröße/Arraygröße stets ein Vielfaches von 2 zu nehmen. Grund ist ein weiteres Verfahren, die Fast-Fouriertransformation (FFT), die besonders effizient mit Eingangsfolgen zur Basis 2 arbeitet. Sie wird später noch umfangreich eingesetzt.

Die Umsetzung des Overlap-Add Verfahrens in Labview ist aus Bild 17 ersichtlich.

 

Bild 17. SDR Audiorahmen mit Overlap-Add

Bild 17. SDR Audiorahmen mit Overlap-Add HIGHRES Version

Auf der linken Seite wird das Komplexe Eingangs-Array verdoppelt, mit Nullen aufgefüllt und steht für weitere Verarbeitung zur Verfügung. Die Array VIs finden sich unter ProgrammierungÆArray.

Auf der rechten Seite wird das Array zunächst auf die doppelte Puffergröße begrenzt und dann aufgesplittet. Die Begrenzung erzeugt eine definierte Array-Länge, da Labview bei jeder Faltung die Arrays vergrößert. Die Ergänzung enthält augrund des implementierten Overlap-Add Verfahrens nur Nullen und kann abgeschnitten werden.

Die untere Hälfte des Arrays wird mit dem Ausgang eines Rückkopplungsknotens addiert. Die obere Hälfte wird auf den Eingang des Rückkopplungsknotens für den nächsten Zyklus der While-Schleife gegeben.

Der Rückkopplungsknoten findet sich unter ProgrammierungÆStrukturen und stellt    

einen sehr komfortable Möglichkeit dar, Daten über Zyklen hinweg zu speichern. Initialisiert wird für den ersten Durchlauf mit einem mit Nullen gefüllten Array. Dies ist die Eins zu Eins Umsetzung des separat beschriebenen Overlap-Add Verfahrens.

Der nun erstellte SDR-Rahmen erlaubt jegliche Digitale Signalverarbeitung ohne Verluste aus der Segmentierung der Eingangssequenzen, solange die Filterlängen der Operationen in der Summe nicht die Arraylänge des Puffers übersteigen. Dies ist durch das Overlap-Add Verfahren und die Verdoppelung der Arraygröße sichergestellt.

Bild 17 zeigt noch drei weitere neue Komponenten.

Zunächst ist eine Lautstärkeregelung analog zum Zweitongenerator implementiert.

Dann ist eine Messung der Signalverarbeitungszeit vom Eintreffen der I(n) & Q(n) Sequenzen bis zur Ausgabe der Audiosequenzen L(n) & R(n) ersichtlich. Diese Ereignisse werden als Ereignis genutzt, um jeweils eine Flache Sequenz anzustoßen, in der ein Timer gesetzt wird. Aufgrund des Labview Signalflussprinzips kann der erste Timerwert in der zweiten Sequenz vom zweiten Timerwert zeitrichtig subtrahiert und dann angezeigt werden. Die Genauigkeit des VIs aus ProgrammierungÆTiming ist auf Millisekunden beschränkt, reicht aber für die vorliegende Anwendung vollkommen aus.

Um Last zu simulieren, ist in der Mitte der While-Schleife ein Warten VI in einer Flachen Sequenz eingeführt worden. Dies bewirkt eine definierte Verzögerung und kann für eine experimentelle Ermittlung der für eine Signalverarbeitung zur Verfügung stehenden Zeit dienen. Diese Sequenz ist im weiteren Vorgehen zu entfernen.

Das nunmehr fertig gestellte SDR Rahmen VI ist unter [11] als SDR Frame SI 570 OA.VI erhältlich.