Projetar funções da janela resumidas em uma unidade com um determinado nível de sobreposição

Há várias tarefas nas quais um sinal de longa data é dividido em segmentos, cada um dos quais é processado separadamente. Em particular, essa abordagem é usada para analisar o sinal usando a janela Fourier transform, ou vice-versa, na síntese; bem como no processamento espectral, como remoção de ruído, mudança de andamento, filtragem não linear, compactação de dados de áudio e outros.

O processo de particionamento é representado matematicamente pela multiplicação por alguma função de peso ( janela ) com um deslocamento. Para a janela mais simples - retangular - pode ser assim:

Sinal de origem:



Partições:







Você pode restaurar o sinal original simplesmente adicionando-o.

Mais detalhes


No entanto, por Por várias razões, uma função retangular não é a melhor função da janela. Na análise espectral, através da transformada de Fourier discreta (geralmente rápida) discreta, o bloco de dados analisados ​​parece “girar”, o que leva a uma lacuna nas bordas e à distorção do espectro:



Também não é adequado para síntese reversa - já que qualquer alteração também levará a quebras - por exemplo, se tentarmos reverter uma das partes:



Para eliminar esses inconvenientes, a sobreposição é usada - quando cada janela subseqüente captura parte dos dados da anterior; e a janela de peso, respectivamente, cai gradualmente nas bordas.

Sobreposição a 50%


Na maioria das vezes, eles usam a janela Hannah (também conhecida como "cosseno elevado") com uma sobreposição de 50%:








Devido à simetria da função cosseno durante a adição, eles são somados à unidade:



Agora, com a síntese inversa, não teremos lacunas - mas apenas na condição de que nas bordas da janela os valores ainda cheguem a zero. Por exemplo, ao reverter uma das partes, a suavidade não será violada:



Processamento de sobreposição dupla


Considere com mais detalhes o algoritmo para processar um sinal usando a transformada rápida de Fourier (FFT):

  1. dividir o sinal em segmentos com uma sobreposição de janela;
  2. FFT direta;
  3. processamento espectro;
  4. FFT inversa;
  5. sobreposição de janela repetida (porque após a FFT reversa, as bordas não serão necessariamente zeradas sem quebrar);
  6. somatória dos segmentos resultantes.

Além disso, se o processamento do espectro não for realizado, o sinal de saída deve ser idêntico ao sinal de entrada (apenas com um atraso de tempo inevitável).

Ao usar a janela Hann, a sobreposição de 50% não é mais suficiente, pois ocorrerão quedas:



Como a sobreposição dupla equivale a quadrado, a solução óbvia seria usar a raiz da janela Hann para compensar o quadrado:



Nesse caso, no entanto, a janela deixou de ser suave nas bordas - uma lacuna apareceu na primeira derivada.

Nota
Curiosamente, neste caso, temos metade do período do sinusóide.

Você pode seguir o outro caminho - use a sobreposição de 75% e as janelas também serão somadas em uma constante - apenas não em 1e em  frac32:



Nesse caso, tivemos apenas sorte. Se expandirmos o quadrado na soma, podemos ver que é uma composição de duas janelas Hannah, mas em escalas diferentes, o que nos permite atender aos requisitos de que precisamos:

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



Com outras funções da janela, esse truque não funcionará; Além disso, nem todas as funções padrão da janela podem fornecer somas em uma constante, mesmo com sobreposição de 50%.

Idéia


Podemos considerar a janela Hann não como uma função independente, mas como a diferença entre duas funções contínuas por partes (um artigo separado foi dedicado a uma discussão detalhada sobre elas) com um deslocamento. Por exemplo, usando a seguinte função

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



pode escrever

f(x+1)f(x1)



Tendo considerado os componentes da soma de duas dessas janelas, sua capacidade de resumir em uma constante se tornará mais visual:



No segmento [0,2]recebemos compensação mútua além de funções f(x1)e f((x+1)2)desde f((x+1)2)=f(x1)

Você pode escolher outro deslocamento, com mais sobreposições, por exemplo:

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



E então, ao mudar de etapa  frac12, eles também serão somados em uma constante:



Pode-se observar que, se você reorganizar os componentes da função de janela, obtém as mesmas janelas Hann.

Assim, usando diferentes funções de restrição, é possível formar janelas com a forma requerida.

Fórmula final


Agora, resta apenas definir a escala para que as áreas e valores de definição não dependam da quantidade de sobreposição. Definindo uma janela em um intervalo [0,1]nós temos

 fracf left( frac2txt11 right)f left( frac2t(x1)t1+1 right)2


onde f- função contínua por partes do formulário

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


mas g- alguma função de interpolação entre pontos (1,1)e (1,1).

Parâmetro tdetermina o nível de sobreposição - um divisor que determina a etapa pela qual cada próxima janela deve ser deslocada, xn+1=xn+ frac1te deve ser maior que um, t>1.

Porcentagem de sobreposição ppode ser calculado pela fórmula

p= frac100(t1)t


e vice-versa

t= frac100100p



Nota
Ao trabalhar com dados reais, pode ser necessário recalcular o nível de sobreposição, dependendo do tamanho específico da FFT. Por exemplo, com uma FFT de 2048 pontos e um nível de sobreposição de 3, obtemos uma etapa de 2048/3 = 682.666 ..., o que, na prática, é claro, não é viável. Portanto, arredondamos para o todo e trecalcular como 2048/683 = 2,998535871156662 ...

Ou você pode vice-versa - use o tamanho da janela, obviamente divisível por 3 (digamos, 999) e adicione o restante ao tamanho necessário para a FFT com zeros (25º).

A aparência final da janela dependerá da escolha do nível de sobreposição e da escolha da função limitadora.

Alguns exemplos interessantes


Aqui veremos algumas soluções prontas, para as quais tudo foi iniciado. Para simplificar, consideramos uma função simplesmente interpoladora g(x), sem qualquer outra fita.

Janelas polinomiais


Eles são os menos computacionalmente caros. Usando a fórmula derivada anteriormente

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


obtemos um polinômio com um número determinado de zeros em derivadas mais altas que fornecem a suavidade necessária da janela nas bordas.

primeiros 10 polinômios

 beginarraycx frac12x left(3x2 right) frac18x left(3x410x2+15 direita) frac116x left(5x6+21x435x2+35 right) frac1128x left(35x8180x6+378x4420x2+315 right) frac1256x left(63x10+385x8990x6+1386x41155x2+693 right) fracx left(231x121638x10+5005x88580x6+9009x46006x2+3003 right)1024 fracx left(429x14+3465x1212285x10+25025x832175x6+27027x415015x2+6435 right)2048 fracx left(6435x1658344x14+235620x12556920x10+850850x8875160x6+612612x4291720x2+109395 right)32768 fracx left(12155x18+122265x16554268x14+1492260x122645370x10+3233230x82771340x6+1662804x4692835x2+230945 right)65536 endarray



Com uma sobreposição de 75% da janela com valores diferentes de n, as janelas ficarão assim:



E no caso de extração de raiz - assim (ao usar 75% de sobreposição):



mais ou menos (ao usar sobreposição de 50%):



A janela mais suave


Função

 tanh left( frackx sqrt1x2 right)


É interessante que seja infinitamente diferenciável e todas as suas derivadas nas bordas sejam 0 (o que pode ser comprovado considerando-se suas derivadas com base em regras de diferenciação - em cada termo, haverá um fator de zero). Isso nos permite construir janelas com base em todos os derivados, sem lacunas:



Vista da janela "saia"


A necessidade desse tipo de janela é causada pelo aumento da resolução da FFT, mas pela redução do efeito do efeito “incerteza de tempo e frequência” em altas frequências, aumentando sua concentração no centro.

Primeiro, determinamos o tipo desejado de função da janela - por exemplo, da seguinte maneira:

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



Aqui, o primeiro termo determina a forma da função em si, o segundo - fornece a interseção com o eixo da abcissa, o terceiro (parábola) redefine a derivada nas bordas para um encaixe suave; e o parâmetro kdefine a "nitidez" do pico. Neste formulário, ele ainda não é adequado para uso - primeiro você precisa obter a função de restrição através da integração e dimensionamento:

 frackx esquerda(k2 esquerda(x2+3 direita)+6 direita)+3 esquerda(k2+1 direita) esquerda(kx esquerda( log left(k2+1 right) log left(k2x2+1 right) right)2 tan1(kx) right)4k36 esquerda(k2+1 direita) tan1(k)+6k


Por conveniência, você pode vincular o parâmetro kao nível de sobreposição t- por exemplo, para que a quarta derivada no centro da janela seja 0 - e depois kserá considerado como  sqrt3(t1):



Aqui, para maior clareza, todas as janelas são reduzidas na mesma escala.

Janela de visualização da agulha


É uma versão mais "agressiva" da janela anterior. Foi escolhida uma hipérbole como base, a partir da qual, através de sucessivas transformações

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


e usando as mesmas etapas na forma de integração e dimensionamento obteve a fórmula

 frackx esquerda(2k2 esquerda(x24 direita)3 direita) sqrtk2x2+1+ esquerda(8 esquerda(k4+k2 direita)+3 direita) sinh1(kx) left(8 left(k4+k2 right)+3 right) sinh1(k)3k sqrtk2+1 esquerda(2k2+1 direita)


Aqui você também pode vincular o parâmetro kao nível de sobreposição. A solução direta da equação da 4ª derivada fornece um resultado complicado, então faça a imagem da janela anterior na imagem e semelhança definindo kcomo k(t1)garantindo assim o papel do parâmetro kcomo "ajuste fino". At k=2,22O Windows ficará assim:



Janela assimétrica


A função da janela não precisa ser simétrica. Digamos que precisamos de uma janela com um ataque agudo e atenuação suave. Podemos obtê-lo de acordo com um esquema já familiar - primeiro determine a forma desejada da função e, em seguida, pela integração, obtemos a função de restrição. Aqui a tarefa é um pouco mais complicada devido ao fato de que, devido à assimetria, o centro não passa mais pela origem, portanto, uma etapa de cálculo adicional é adicionada. Isso também leva ao fato de que as fórmulas, como resultado, são bastante complicadas. Por exemplo, considere a opção mais simples - uma parábola multiplicada por uma janela de peso polinomial:

(1x)2 esquerda(1x10 direita)2



Aqui, o grau de x na janela ponderada (ou seja, 10) determina a "nitidez" do ataque. Usamos um valor específico, em vez de um parâmetro simbólico, para simplificar as fórmulas para maior clareza - se desejar, você pode recalculá-lo mais tarde.

Após a integração, o simples dimensionamento não é mais suficiente - você ainda precisa alinhar as bordas:



Para fazer isso, primeiro deslocamos a função para cima para alinhar a borda esquerda e depois a escalamos para as duas na borda direita e subtraímos uma. Então obtemos a seguinte fórmula:

 frac8775 left( fracx2727 frac2x2626+ fracx2525 frac2x1515+ frac4x1414 frac2x1313+ fracx33x2+x+ frac11759261425 right)98561


Para que a janela final tenha a aparência desejada, também é necessário fornecer um nível suficientemente grande de sobreposição:



Conclusão


Da mesma forma, você pode construir janelas a partir de qualquer outra função em forma de sino - por exemplo, Gaussians; e você também pode modificar os que já foram considerados para proporcionar maior suavidade ou alterar a forma da curva.

Fora de consideração, a composição espectral de tais funções de janela permaneceu - estudos separados devem ser dedicados a isso.

Uma versão ligeiramente mais avançada do artigo (com a capacidade de alterar dinamicamente os parâmetros nas janelas sob consideração e fórmulas ocultas) na forma de um documento do Wolfram Mathematica pode ser baixada aqui .

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


All Articles