Conception de fonctions de fenĂȘtre rĂ©sumĂ©es en une unitĂ© avec un niveau donnĂ© de chevauchement

Il existe un certain nombre de tĂąches dans lesquelles un signal Ă  long terme est divisĂ© en segments, chacun Ă©tant traitĂ© sĂ©parĂ©ment. En particulier, cette approche est utilisĂ©e pour analyser le signal en utilisant la transformĂ©e de Fourier de fenĂȘtre, ou vice versa, dans la synthĂšse; ainsi que dans le traitement spectral tel que la suppression du bruit, le changement de tempo, le filtrage non linĂ©aire, la compression des donnĂ©es audio et autres.

Le processus de partitionnement lui-mĂȘme est reprĂ©sentĂ© mathĂ©matiquement par la multiplication par une fonction de poids ( fenĂȘtre ) avec un dĂ©calage. Pour la fenĂȘtre la plus simple - rectangulaire - cela pourrait ressembler Ă  ceci:

Signal source:



Cloisons:







Vous pouvez restaurer le signal d'origine en les ajoutant simplement.

Plus de détails


Cependant par Pour un certain nombre de raisons, une fonction rectangulaire n'est pas la meilleure fonction de fenĂȘtre. En analyse spectrale, Ă  travers la transformĂ©e de Fourier discrĂšte (gĂ©nĂ©ralement rapide), le bloc de donnĂ©es analysĂ© semble "boucler", ce qui conduit Ă  un Ă©cart aux bords et Ă  une distorsion du spectre:



Il ne convient pas non plus Ă  la synthĂšse inverse - car tout changement entraĂźnera Ă©galement des ruptures - par exemple, si nous essayons d'inverser l'une des parties:



Pour Ă©liminer ces inconvĂ©nients, un chevauchement est utilisĂ© - lorsque chaque fenĂȘtre suivante capture une partie des donnĂ©es de la prĂ©cĂ©dente; et la fenĂȘtre de poids, respectivement, tombe progressivement sur les bords.

Chevauchement Ă  50%


Le plus souvent, ils utilisent la fenĂȘtre Hannah (Ă©galement appelĂ©e «cosinus surĂ©levé») avec un chevauchement de 50%:








En raison de la symétrie de la fonction cosinus lors de l'addition, elles se résument à l'unité:



Maintenant, avec la synthĂšse inverse, nous n'obtiendrons pas de lacunes - mais seulement Ă  condition qu'aux frontiĂšres de la fenĂȘtre les valeurs iront toujours Ă  zĂ©ro. Par exemple, lors de l'inversion d'une des piĂšces, le lissage ne sera pas violĂ©:



Traitement de double superposition


Considérons plus en détail l'algorithme de traitement d'un signal utilisant la transformée de Fourier rapide (FFT):

  1. diviser le signal en segments avec une superposition de fenĂȘtre;
  2. FFT directe;
  3. traitement du spectre;
  4. FFT inverse;
  5. superposition de fenĂȘtres rĂ©pĂ©tĂ©e (car aprĂšs la FFT inversĂ©e, les bordures ne seront pas nĂ©cessairement ancrĂ©es Ă  zĂ©ro sans se casser);
  6. sommation des segments résultants.

De plus, si le traitement du spectre n'est pas effectuĂ©, le signal de sortie doit ĂȘtre identique au signal d'entrĂ©e (uniquement avec un retard inĂ©vitable).

Lorsque vous utilisez la fenĂȘtre Hann, un chevauchement de 50% ne suffit plus, car des creux se produiront:



Étant donnĂ© que le double chevauchement Ă©quivaut Ă  la quadrature, la solution Ă©vidente serait d'utiliser la racine de la fenĂȘtre de Hann pour compenser la quadrature:



Dans ce cas, cependant, la fenĂȘtre a cessĂ© d'ĂȘtre lisse sur les bords - un Ă©cart est apparu dans la premiĂšre dĂ©rivĂ©e.

Remarque
Fait intéressant, dans ce cas, nous avons obtenu la moitié de la période de la sinusoïde.

Vous pouvez aller dans l'autre sens - utilisez le chevauchement de 75%, puis les fenĂȘtres seront Ă©galement additionnĂ©es en une constante - mais pas dans 1 et  frac32 :



Dans ce cas, nous avons juste eu de la chance. Si nous dĂ©veloppons le carrĂ© dans la somme, nous pouvons voir que c'est une composition de deux fenĂȘtres Hannah, mais Ă  des Ă©chelles diffĂ©rentes, ce qui nous permet de rĂ©pondre aux exigences dont nous avons besoin:

 left( frac cos(2 pix)+12 right)2= frac cos(2 pix)+12+ frac cos(4 pix)−18



Avec d'autres fonctions de fenĂȘtre, une telle astuce ne fonctionnera pas; De plus, toutes les fonctions de fenĂȘtre standard ne peuvent pas fournir une sommation dans une constante mĂȘme avec un chevauchement de 50%.

Idée


Nous pouvons considĂ©rer la fenĂȘtre de Hann non pas comme une fonction indĂ©pendante, mais comme la diffĂ©rence entre deux fonctions continues par morceaux (un article sĂ©parĂ© a Ă©tĂ© consacrĂ© Ă  une discussion dĂ©taillĂ©e Ă  leur sujet) avec un dĂ©calage. Par exemple, en utilisant la fonction suivante

\ 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.



peut Ă©crire

f(x+1)−f(x−1)



AprĂšs avoir considĂ©rĂ© les composants de la somme de deux de ces fenĂȘtres, leur capacitĂ© Ă  rĂ©sumer en une constante deviendra plus visuelle:



Sur le segment [0,2] nous avons reçu une compensation mutuelle en plus des fonctions −f(x−1) et f((x+1)−2) depuis f((x+1)−2)=f(x−1)

Vous pouvez choisir un autre décalage, avec plus de chevauchement, par exemple:

f left(x+ frac12 right)−f left(x− frac12 right)



Et puis, lors du passage par Ă©tapes  frac12 , ils seront Ă©galement rĂ©sumĂ©s en une constante:



On peut voir que si vous rĂ©organisez les composants de la fonction fenĂȘtre, vous obtenez les mĂȘmes fenĂȘtres Hann.

Ainsi, en utilisant diffĂ©rentes fonctions de restriction, il est possible de former des fenĂȘtres de la forme requise.

Formule finale


Maintenant, il ne reste plus qu'Ă  dĂ©finir l'Ă©chelle de sorte que les zones de dĂ©finition et les valeurs ne dĂ©pendent pas de la quantitĂ© de chevauchement. DĂ©finition d'une fenĂȘtre sur un intervalle [0,1] nous obtenons

 fracf left( frac2txt−1−1 right)−f left( frac2t(x−1)t−1+1 right)2


oĂč f - fonction continue par morceaux de la forme

\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ g (x) & -1 <x <1 \\ \ end {array} \ Ă  droite.

\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ g (x) & -1 <x <1 \\ \ end {array} \ Ă  droite.


mais g - une fonction d'interpolation entre les points (−1,−1) et (1,1) .

ParamĂštre t dĂ©termine le niveau de chevauchement - un diviseur qui dĂ©termine l'Ă©tape par laquelle chaque fenĂȘtre suivante doit ĂȘtre dĂ©calĂ©e, xn+1=xn+ frac1t et doit ĂȘtre supĂ©rieur Ă  un, t>1 .

Pourcentage de chevauchement p peut ĂȘtre calculĂ© par la formule

p= frac100(t−1)t


et vice versa

t= frac100100−p



Remarque
Lorsque vous travaillez avec des donnĂ©es rĂ©elles, il peut ĂȘtre nĂ©cessaire de recalculer le niveau de chevauchement en fonction de la taille spĂ©cifique de la FFT. Par exemple, avec une FFT de 2048 points et un niveau de chevauchement de 3, on obtient un pas de 2048/3 = 682,666 ..., ce qui en pratique est bien sĂ»r irrĂ©aliste. Par consĂ©quent, nous l'arrondissons Ă  l'ensemble, et t recalculer comme 2048/683 = 2,998535871156662 ...

Ou vous pouvez vice versa - utilisez la taille de la fenĂȘtre, Ă©videmment divisible par 3 (disons 999), et ajoutez le reste Ă  la taille requise pour la FFT avec des zĂ©ros (25e).

L'aspect final de la fenĂȘtre dĂ©pendra Ă  la fois du choix du niveau de chevauchement et du choix de la fonction de limitation.

Quelques exemples intéressants


Nous allons voir ici quelques solutions toutes faites, pour lesquelles tout a commencé. Pour simplifier, nous considérons une fonction simplement interpolante g(x) , sans autre cerclage.

FenĂȘtres polynomiales


Ils sont les moins chers en termes de calcul. Utilisation de la formule précédemment dérivée

 frac2x Gamma left(n+ frac12 right)2F1 left( frac12,1−n; frac32;x2 droite) sqrt pi Gamma(n)


on obtient un polynĂŽme avec un nombre donnĂ© de zĂ©ros sur des dĂ©rivĂ©es supĂ©rieures qui assurent la douceur nĂ©cessaire de la fenĂȘtre aux bords.

10 premiers polynĂŽmes

 beginarraycx frac12x left(3−x2 right) frac18x left(3x4−10x2+15 droite) frac116x gauche(−5x6+21x4−35x2+35 droite) frac1128x gauche(35x8−180x6+378x4−420x2+315 droite) frac1256x gauche(−63x10+385x8−990x6+1386x4−1155x2+693 droite) fracx gauche(231x12−1638x10+5005x8−8580x6+9009x4−6006x2+3003 droite)1024 fracx gauche(−429x14+3465x12−12285x10+25025x8−32175x6+27027x4−15015x2+6435 droite)2048 fracx gauche(6435x16−58344x14+235620x12−556920x10+850850x8−875160x6+612612x4−291720x2+109395 droite)32768 fracx left(−12155x18+122265x16−554268x14+1492260x12−2645370x10+3233230x8−2771340x6+1662804x4−692835x2+230945 droite)65536 endarray



Avec un chevauchement de 75% de la fenĂȘtre avec diffĂ©rentes valeurs de n, les fenĂȘtres ressembleront Ă  ceci:



Et dans le cas de l'extraction de racine - comme ceci (lors de l'utilisation d'un chevauchement de 75%):



ou ainsi (lorsque vous utilisez un chevauchement de 50%):



La fenĂȘtre la plus lisse


Fonction

 tanh left( frackx sqrt1−x2 right)


Il est intĂ©ressant en ce qu'il est infiniment diffĂ©rentiable et toutes ses dĂ©rivĂ©es aux bords sont 0 (ce qui peut ĂȘtre prouvĂ© en considĂ©rant ses dĂ©rivĂ©es sur la base de rĂšgles de diffĂ©renciation - dans chaque terme, il y aura un facteur de mise Ă  zĂ©ro). Cela nous permet de construire des fenĂȘtres sur sa base, dont toutes les dĂ©rivĂ©es n'ont pas de lacunes:



Vue de la fenĂȘtre "jupe"


Le besoin de ce type de fenĂȘtre est dĂ» Ă  l'augmentation de la rĂ©solution FFT, mais Ă  la rĂ©duction de l'effet de «l'incertitude temps-frĂ©quence» aux hautes frĂ©quences en augmentant leur concentration au centre.

Tout d'abord, nous dĂ©terminons le type de fonction de fenĂȘtre souhaitĂ© - par exemple, comme suit:

− log left(k2x2+1 right)+ log left(k2+1 right)− frack2 left(1−x2 right)k2+1



Ici, le premier terme dĂ©termine la forme de la fonction elle-mĂȘme, le second - fournit l'intersection avec l'axe des abscisses, le troisiĂšme (parabole) rĂ©initialise la dĂ©rivĂ©e sur les bords pour un ancrage en douceur; et le paramĂštre k dĂ©finit la "nettetĂ©" du pic. Sous cette forme, il n'est pas encore utilisable - vous devez d'abord en obtenir la fonction de restriction via l'intĂ©gration et la mise Ă  l'Ă©chelle:

 frackx left(k2 left(x2+3 right)+6 right)+3 left(k2+1 right) left(kx left( log gauche(k2+1 droite)− log gauche(k2x2+1 droite) droite)−2 tan−1(kx) droite)4k3−6 gauche(k2+1 droite) tan−1(k)+6k


Pour plus de commoditĂ©, vous pouvez lier le paramĂštre k au niveau du chevauchement t - par exemple, de sorte que la 4Ăšme dĂ©rivĂ©e au centre de la fenĂȘtre soit 0 - puis k sera considĂ©rĂ© comme  sqrt3(t−1) :



Ici, pour plus de clartĂ©, toutes les fenĂȘtres sont rĂ©duites Ă  la mĂȘme Ă©chelle.

FenĂȘtre de vue d'aiguille


Il s'agit d'une version plus «agressive» de la fenĂȘtre prĂ©cĂ©dente. Une hyperbole a Ă©tĂ© choisie comme base, Ă  partir de laquelle, par des transformations successives

 frac1x to frac1 sqrtx2 to frac1 sqrtx2+1 to frac1 sqrtk2x2+1 to frac left(1−x2 right)2 sqrtk2x2+1


et en utilisant les mĂȘmes Ă©tapes sous forme d'intĂ©gration et de mise Ă  l'Ă©chelle a obtenu la formule

 frackx left(2k2 left(x2−4 right)−3 right) sqrtk2x2+1+ left(8 left(k4+k2 droite)+3 droite) sinh−1(kx) gauche(8 gauche(k4+k2 droite)+3 droite) sinh−1(k)−3k sqrtk2+1 gauche(2k2+1 droite)


Ici, vous pouvez Ă©galement lier le paramĂštre k au niveau du chevauchement. La solution directe de l'Ă©quation de la dĂ©rivĂ©e 4 donne un rĂ©sultat encombrant, il suffit donc de faire l'image de la fenĂȘtre prĂ©cĂ©dente dans l'image et la ressemblance en dĂ©finissant k comment k(t−1) assurant ainsi le rĂŽle du paramĂštre k comme "rĂ©glage fin". À k=2,22 les fenĂȘtres ressembleront Ă  ceci:



FenĂȘtre asymĂ©trique


La fonction de fenĂȘtre ne doit pas du tout ĂȘtre symĂ©trique. Disons que nous avons besoin d'une fenĂȘtre avec une attaque nette et une attĂ©nuation douce. Nous pouvons l'obtenir selon un schĂ©ma dĂ©jĂ  familier - dĂ©terminer d'abord la forme souhaitĂ©e de la fonction, puis par intĂ©gration, nous obtenons la fonction de restriction. Ici, la tĂąche est lĂ©gĂšrement plus compliquĂ©e du fait que, en raison de l'asymĂ©trie, le centre ne passera plus par l'origine, donc une Ă©tape de calcul supplĂ©mentaire est ajoutĂ©e. Cela conduit Ă©galement au fait que les formules en consĂ©quence sont plutĂŽt lourdes. Par exemple, considĂ©rons l'option la plus simple - une parabole multipliĂ©e par une fenĂȘtre de poids polynomial:

(1−x)2 gauche(1−x10 droite)2



Ici, le degrĂ© de x dans la fenĂȘtre pondĂ©rĂ©e (Ă  savoir 10) dĂ©termine la «netteté» de l'attaque. Nous avons utilisĂ© une valeur spĂ©cifique, plutĂŽt qu'un paramĂštre symbolique, pour simplifier les formules pour plus de clartĂ© - si vous le souhaitez, vous pouvez le recalculer plus tard.

AprÚs l'intégration, la simple mise à l'échelle ne suffit plus - vous devez toujours aligner les bords:



Pour ce faire, nous décalons d'abord la fonction vers le haut pour aligner le bord gauche, puis la redimensionnons aux deux sur le bord droit et soustrayons un. Ensuite, nous obtenons la formule suivante:

 frac8775 left( fracx2727− frac2x2626+ fracx2525− frac2x1515+ frac4x1414− frac2x1313+ fracx33−x2+x+ frac11759261425 droite)9856−1


Pour que la fenĂȘtre finale ait l'apparence souhaitĂ©e, il est Ă©galement nĂ©cessaire de prĂ©voir un niveau de chevauchement suffisamment important:



Conclusion


De mĂȘme, vous pouvez crĂ©er des fenĂȘtres Ă  partir de toutes les autres fonctions en forme de cloche - par exemple, les gaussiens; et vous pouvez Ă©galement modifier ceux dĂ©jĂ  considĂ©rĂ©s pour fournir une plus grande fluiditĂ© ou changer la forme de la courbe.

Par considĂ©ration, la composition spectrale de ces fonctions de fenĂȘtre est restĂ©e - des Ă©tudes distinctes devraient y ĂȘtre consacrĂ©es.

Une version lĂ©gĂšrement plus avancĂ©e de l'article (avec la possibilitĂ© de modifier dynamiquement les paramĂštres dans les fenĂȘtres considĂ©rĂ©es et les formules cachĂ©es) sous la forme d'un document Wolfram Mathematica peut ĂȘtre tĂ©lĂ©chargĂ©e ici .

Source: https://habr.com/ru/post/fr430536/


All Articles