Es gibt eine Reihe von Aufgaben, bei denen ein Langzeitsignal in Segmente unterteilt wird, von denen jedes separat verarbeitet wird. Insbesondere wird dieser Ansatz verwendet, um das Signal unter Verwendung der Fenster-Fourier-Transformation oder umgekehrt bei der Synthese zu analysieren; sowie bei der spektralen Verarbeitung wie Rauschunterdrückung, Tempowechsel, nichtlineare Filterung, Audiodatenkomprimierung und anderen.
Der Prozess der Partitionierung selbst wird mathematisch durch Multiplikation mit einer Gewichtsfunktion (
Fensterfunktion ) mit einem Versatz dargestellt. Für das einfachste Fenster - rechteckig - könnte es so aussehen:
Quellensignal:

Partitionen:



Sie können das ursprüngliche Signal wiederherstellen, indem Sie es einfach addieren.
Weitere Details
Jedoch von
Aus einer Reihe von Gründen ist eine Rechteckfunktion nicht die beste Fensterfunktion. Bei der Spektralanalyse scheint der analysierte Datenblock durch die (normalerweise schnelle) diskrete Fourier-Transformation eine „Schleife“ zu bilden, was zu einer Lücke an den Rändern und einer Verzerrung des Spektrums führt:

Es ist auch nicht für die umgekehrte Synthese geeignet - da jede Änderung auch zu Brüchen führt - zum Beispiel, wenn wir versuchen, einen der Teile umzukehren:

Um diese Nachteile zu beseitigen, wird eine Überlappung verwendet, wenn jedes nachfolgende Fenster einen Teil der Daten aus dem vorherigen erfasst. bzw. das Gewichtsfenster fällt allmählich auf die Kanten.
Überlappung bei 50%
Am häufigsten verwenden sie das
Hannah-Fenster (auch als „Raised Cosine“ bezeichnet) mit einer Überlappung von 50%:






Aufgrund der Symmetrie der Kosinusfunktion während der Addition werden sie zu Eins summiert:

Mit der umgekehrten Synthese erhalten wir keine Lücken - sondern nur unter der Bedingung, dass die Werte an den Fensterrändern immer noch auf Null gehen. Wenn Sie beispielsweise eines der Teile umkehren, wird die Glätte nicht verletzt:

Doppelte Überlagerungsverarbeitung
Betrachten Sie den Algorithmus zum Verarbeiten eines Signals unter Verwendung einer schnellen Fourier-Transformation (FFT) genauer:
- Aufteilen des Signals in Segmente mit einer Fensterüberlagerung;
- direkte FFT;
- Spektrumverarbeitung;
- inverse FFT;
- wiederholte Fensterüberlagerung (da nach der umgekehrten FFT die Ränder nicht unbedingt auf Null andocken, ohne zu brechen);
- Summation der resultierenden Segmente.
Wenn keine Spektrumverarbeitung durchgeführt wird, sollte das Ausgangssignal mit dem Eingangssignal identisch sein (nur mit einer unvermeidlichen Zeitverzögerung).
Bei Verwendung des Hann-Fensters reicht eine Überlappung von 50% nicht mehr aus, da Einbrüche auftreten:

Da doppelte Überlappung gleichbedeutend mit Quadrieren ist, besteht die offensichtliche Lösung darin, die Wurzel des Hann-Fensters zu verwenden, um das Quadrieren zu kompensieren:

In diesem Fall war das Fenster an den Rändern jedoch nicht mehr glatt - in der ersten Ableitung trat eine Lücke auf.
HinweisInteressanterweise haben wir in diesem Fall die Hälfte der Sinusperiode.
Sie können auch in die andere Richtung gehen - verwenden Sie die Überlappung von 75%, und dann werden die Fenster auch zu einer Konstanten summiert - nur nicht in
1 und in
frac32 ::

In diesem Fall hatten wir einfach Glück. Wenn wir das Quadrat in die Summe erweitern, können wir sehen, dass es sich um eine Komposition aus zwei Hannah-Fenstern handelt, jedoch in unterschiedlichen Maßstäben, wodurch wir die Anforderungen erfüllen können, die wir benötigen:
left( frac cos(2 pix)+12 right)2= frac cos(2 pix)+12+ frac cos(4 pix)−18

Bei anderen Fensterfunktionen funktioniert ein solcher Trick nicht. Außerdem können nicht alle Standardfensterfunktionen selbst bei einer Überlappung von 50% eine Summierung in einer Konstanten liefern.
Idee
Wir können das Hann-Fenster nicht als unabhängige Funktion betrachten, sondern als den Unterschied zwischen zwei stückweise stetigen Funktionen (ein
separater Artikel wurde einer ausführlichen Diskussion gewidmet) mit einem Versatz. Verwenden Sie beispielsweise die folgende Funktion
\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ \ sin \ left (\ frac {\ pi x} {2} \ right) & -1 <x <1 \\ \ end {array} \ right.
\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ \ sin \ left (\ frac {\ pi x} {2} \ right) & -1 <x <1 \\ \ end {array} \ right.

kann schreiben
f(x+1)−f(x−1)

Wenn man die Komponenten der Summe zweier solcher Fenster betrachtet, wird ihre Fähigkeit, sie zu einer Konstanten zusammenzufassen, visueller:

Auf dem Segment
[0,2] Wir haben zusätzlich zu den Funktionen eine gegenseitige Entschädigung erhalten
−f(x−1) und
f((x+1)−2) seit
f((x+1)−2)=f(x−1)Sie können einen anderen Versatz mit mehr Überlappung auswählen, zum Beispiel:
f left(x+ frac12 right)−f left(x− frac12 right)

Und dann beim schrittweisen Schalten
frac12 werden sie auch zu einer Konstanten summiert:

Es ist ersichtlich, dass Sie die gleichen Hann-Fenster erhalten, wenn Sie die Komponenten der Fensterfunktion neu anordnen.
Somit ist es unter Verwendung verschiedener Beschränkungsfunktionen möglich, Fenster mit der erforderlichen Form zu bilden.
Endgültige Formel
Jetzt muss nur noch die Skalierung so eingestellt werden, dass die Definitionsbereiche und Werte nicht vom Ausmaß der Überlappung abhängen. Fenster in einem Intervall definieren
[0,1] wir bekommen
fracf left( frac2txt−1−1 right)−f left( frac2t(x−1)t−1+1 right)2
wo
f - stückweise stetige Funktion der Form
\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ g (x) & -1 <x <1 \\ \ end {array} \ richtig.
\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ g (x) & -1 <x <1 \\ \ end {array} \ richtig.
aber
g - eine Interpolationsfunktion zwischen Punkten
(−1,−1) und
(1,1) .
Parameter
t bestimmt den Grad der Überlappung - ein Teiler, der den Schritt bestimmt, um den jedes nächste Fenster verschoben werden muss,
xn+1=xn+ frac1t und muss größer als eins sein,
t>1 .
Überlappungsprozentsatz
p kann durch die Formel berechnet werden
p= frac100(t−1)t
und umgekehrt
t= frac100100−p
HinweisBei der Arbeit mit realen Daten kann es erforderlich sein, den Grad der Überlappung abhängig von der spezifischen Größe der FFT neu zu berechnen. Zum Beispiel erhalten wir mit einer FFT von 2048 Punkten und einem Überlappungsniveau von 3 einen Schritt von 2048/3 = 682.666 ..., was in der Praxis natürlich nicht möglich ist. Deshalb runden wir es auf das Ganze und t neu berechnen als 2048/683 = 2.998535871156662 ...
Oder Sie können umgekehrt - verwenden Sie die Fenstergröße, die offensichtlich durch 3 teilbar ist (z. B. 999), und addieren Sie den Rest zur erforderlichen Größe für die FFT mit Nullen (25.).
Das endgültige Erscheinungsbild des Fensters hängt sowohl von der Wahl des Überlappungsgrades als auch von der Wahl der Begrenzungsfunktion ab.
Einige interessante Beispiele
Hier sehen wir uns einige vorgefertigte Lösungen an, für die alles gestartet wurde. Der Einfachheit halber betrachten wir eine einfach interpolierende Funktion
g(x) ohne andere Umreifung.
Polynomfenster
Sie sind am wenigsten rechenintensiv. Verwendung der
zuvor abgeleiteten Formel
frac2x Gamma left(n+ frac12 right)2F1 left( frac12,1−n; frac32;x2 right) sqrt pi Gamma(n)
Wir erhalten ein Polynom mit einer gegebenen Anzahl von Nullen auf höheren Ableitungen, die die notwendige Glätte des Fensters an den Rändern liefern.
erste 10 Polynome beginarraycx frac12x left(3−x2 right) frac18x left(3x4)−10x2+15 rechts) frac116x links(−5x6+21x4−35x2+35 rechts) frac1128x left(35x8−180x6+378x4−420x2+315 right) frac1256x left(−63x10+385x8−990x6+1386x4−1155x2+693 rechts) fracx links(231x12−1638x10+5005x8−8580x6+9009x4−6006x2+3003 rechts)1024 fracx links(−429x14+3465x12−12285x10+25025x8−32175x6+27027x4−15015x2+6435 rechts)2048 fracx left(6435x16−58344x14+235620x12−556920x10+850850x8−875160x6+612612x4−291720x2+109395 right)32768 fracx left(−12155x18+122265x16−554268x14+1492260x12−2645370x10+3233230x8−2771340x6+1662804x4−692835x2+230945 right)65536 endarray
Bei einer 75% igen Überlappung des Fensters mit unterschiedlichen Werten von n sehen die Fenster folgendermaßen aus:

Und im Fall der Wurzelextraktion - so (bei Verwendung von 75% Überlappung):

oder so (bei Verwendung von 50% Überlappung):

Das glatteste Fenster
Funktion
tanh left( frackx sqrt1−x2 right)
Es ist insofern interessant, als es unendlich differenzierbar ist und alle seine Ableitungen an den Rändern 0 sind (was durch Berücksichtigung seiner Ableitungen auf der Grundlage von Differenzierungsregeln bewiesen werden kann - in jedem Term gibt es einen Nullungsfaktor). Dies ermöglicht es uns, Fenster auf seiner Basis zu erstellen, deren Ableitungen keine Lücken aufweisen:

Fensteransicht "Rock"
Die Notwendigkeit für diesen Fenstertyp wird durch Erhöhen der FFT-Auflösung verursacht, aber durch Verringern ihrer Konzentration im Zentrum wird der Effekt des Effekts "Zeit-Frequenz-Unsicherheit" bei hohen Frequenzen verringert.
Zunächst bestimmen wir den gewünschten Typ der Fensterfunktion - zum Beispiel wie folgt:
− log left(k2x2+1 right)+ log left(k2+1 right)− frack2 left(1−x2 right)k2+1

Hier bestimmt der erste Term die Form der Funktion selbst, der zweite - liefert den Schnittpunkt mit der Abszissenachse, der dritte (Parabel) setzt die Ableitung an den Rändern für ein reibungsloses Andocken zurück; und der Parameter
k definiert die "Schärfe" des Peaks. In dieser Form ist es noch nicht für die Verwendung geeignet - zuerst müssen Sie die Einschränkungsfunktion durch Integration und Skalierung daraus erhalten:
frackx left(k2 left(x2+3 right)+6 right)+3 left(k2+1 right) left(kx left( log\)links(k2+1 rechts)− log links(k2x2+1 rechts) rechts)−2 tan−1(kx) rechts)4k3−6 left(k2+1 right) tan−1(k)+6k
Der Einfachheit halber können Sie den Parameter binden
k auf das Niveau der Überlappung
t - zum Beispiel, so dass die 4. Ableitung in der Mitte des Fensters 0 ist - und dann
k wird als betrachtet
sqrt3(t−1) ::

Hier sind aus Gründen der Übersichtlichkeit alle Fenster auf den gleichen Maßstab verkleinert.
Nadelansichtsfenster
Es ist eine "aggressivere" Version des vorherigen Fensters. Als Grundlage wurde eine Übertreibung gewählt, von der aus durch sukzessive Transformationen
frac1x bis frac1 sqrtx2 bis frac1 sqrtx2+1 bis frac1 sqrtk2x2+1 to frac left(1−x2 right)2 sqrtk2x2+1
und mit den gleichen Schritten in Form von Integration und Skalierung bekam die Formel
frackx left(2k2 left(x2−4 right)−3 right) sqrtk2x2+1+ left(8 left(k)4+k2 rechts)+3 rechts) sinh−1(kx) links(8 links(k4+k2 rechts)+3 rechts) sinh−1(k)−3k sqrtk2+1 left(2k2+1 right)
Hier können Sie auch den Parameter binden
k auf das Niveau der Überlappung. Die direkte Lösung der Gleichung der 4. Ableitung ergibt ein umständliches Ergebnis. Erstellen Sie also einfach das Bild für das vorherige Fenster im Bild und die Ähnlichkeit durch Definieren
k wie
k(t−1) Dadurch wird die Rolle des Parameters sichergestellt
k als "Feinabstimmung". Bei
k=2,22 Fenster sehen folgendermaßen aus:

Asymmetrisches Fenster
Die Fensterfunktion muss überhaupt nicht symmetrisch sein. Nehmen wir an, wir brauchen ein Fenster mit einem scharfen Angriff und einer gleichmäßigen Dämpfung. Wir können es nach einem bereits bekannten Schema erhalten - zuerst die gewünschte Form der Funktion bestimmen und dann durch Integration die Restriktionsfunktion erhalten. Hier ist die Aufgabe etwas komplizierter, da das Zentrum aufgrund von Asymmetrie den Ursprung nicht mehr durchläuft, sodass ein zusätzlicher Berechnungsschritt hinzugefügt wird. Dies führt auch dazu, dass die Formeln dadurch eher umständlich sind. Betrachten Sie zum Beispiel die einfachste Option - eine Parabel multipliziert mit einem Polynomgewichtsfenster:
(1−x)2 left(1−x10 right)2

Hier bestimmt der Grad von x im gewichteten Fenster (nämlich 10) die „Schärfe“ des Angriffs. Wir haben einen bestimmten Wert anstelle eines symbolischen Parameters verwendet, um die Formeln der Übersichtlichkeit halber zu vereinfachen. Wenn Sie möchten, können Sie ihn später neu berechnen.
Nach der Integration reicht eine einfache Skalierung nicht mehr aus - Sie müssen die Kanten noch ausrichten:

Dazu verschieben wir zuerst die Funktion nach oben, um den linken Rand auszurichten, skalieren sie dann auf die beiden am rechten Rand und subtrahieren einen. Dann erhalten wir die folgende Formel:
frac8775 left( fracx2727− frac2x2626+ fracx2525− frac2x1515+ frac4x1414− frac2x1313+ fracx33−x2+x+ frac11759261425 right)9856−1
Damit das endgültige Fenster das gewünschte Aussehen hat, muss auch ein ausreichend großer Überlappungsgrad bereitgestellt werden:

Fazit
Ebenso können Sie Fenster aus anderen glockenförmigen Funktionen erstellen - zum Beispiel Gaußschen; Sie können auch die bereits berücksichtigten ändern, um eine größere Glätte zu erzielen, oder die Form der Kurve ändern.
Aus Rücksicht blieb die spektrale Zusammensetzung solcher Fensterfunktionen erhalten - dies sollte gesondert untersucht werden.
Eine etwas fortgeschrittenere Version des Artikels (mit der Möglichkeit, die Parameter in den betrachteten Fenstern und versteckten Formeln dynamisch zu ändern) in Form eines Wolfram Mathematica-Dokuments kann hier heruntergeladen
werden .