A Transformação rápida de Fourier realiza operações , enquanto a Transformação rápida de wavelet realiza O ( N ) . Mas o que, especificamente, o FWT calcula?
Embora muitas vezes sejam comparados, parece que o FFT e o FWT são maçãs e laranjas. Pelo que entendi, seria mais apropriado comparar o STFT (FFTs de pequenos pedaços ao longo do tempo) com o complexo Morlet WT , uma vez que ambas são representações de frequência de tempo baseadas em sinusóides complexos (por favor, corrija-me se estiver errado ) Isso geralmente é mostrado com um diagrama como este:
( Outro exemplo )
A esquerda mostra como o STFT é um monte de FFTs empilhados uns sobre os outros à medida que o tempo passa (essa representação é a origem do espectrograma ), enquanto a direita mostra o WD diádico, que tem melhor resolução de tempo em altas frequências e melhor frequência resolução em frequências baixas (essa representação é chamada de escalograma ). Neste exemplo, para o STFT é o número de colunas verticais (6) e uma única operação O ( N log N ) FFT calcula uma única linha de N coeficientes de N amostras. O total é de 8 FFTs de 6 pontos cada, ou 48 amostras no domínio do tempo.
O que eu não entendo:
Quantos coeficientes calcula uma única operação FWT e onde eles estão localizados no gráfico de tempo-frequência acima?
Quais retângulos são preenchidos por uma única computação?
Se calcularmos um bloco de área igual de coeficientes de frequência de tempo usando ambos, obteremos a mesma quantidade de dados?
O FWT ainda é mais eficiente que o FFT?
Exemplo concreto usando PyWavelets :
In [2]: dwt([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[2]:
(array([ 0.70710678, 0. , 0. , 0. ]),
array([ 0.70710678, 0. , 0. , 0. ]))
Ele cria dois conjuntos de 4 coeficientes, portanto, é o mesmo que o número de amostras no sinal original. Mas qual é a relação entre esses 8 coeficientes e os blocos no diagrama?
Atualizar:
Na verdade, eu provavelmente estava fazendo isso errado e deveria estar usando wavedec()
, o que faz uma decomposição DWT em vários níveis:
In [4]: wavedec([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[4]:
[array([ 0.35355339]),
array([ 0.35355339]),
array([ 0.5, 0. ]),
array([ 0.70710678, 0. , 0. , 0. ])]
Respostas:
Você está certo de que o FWT é melhor pensado como um "primo" do STFT, em vez de o FT. De fato, o FWT é apenas uma amostragem discreta do CWT (transformada de wavelet contínua), pois o FFT / DFT é uma amostragem discreta da transformada de Fourier. Isso pode parecer um ponto sutil, mas é relevante ao escolher como você discretiza a transformação.
O CWT e o STFT são análises redundantes de um sinal. Em outras palavras, você tem mais "coeficientes" (no caso discreto) do que precisa para representar totalmente um sinal. No entanto, uma transformação de Fourier (ou seja, uma transformação de wavelet usando apenas uma escala) integra um sinal de-infinito a + infinito. Isso não é muito útil em sinais do mundo real; portanto, truncamos (ou seja, janela) as transformações para comprimentos menores. A janela de um sinal altera a transformação - você multiplica pela janela no tempo / espaço, portanto, no espaço da transformação, você tem a convolução da transformação da janela com a transformação do sinal.
No caso do STFT, as janelas têm (geralmente) o mesmo comprimento (extensão diferente de zero) o tempo todo e são independentes de frequência (você visualiza um sinal de 10 Hz com a mesma largura que um sinal de 10 kHz). Então você obtém o espectrograma de grade retangular como você desenhou.
O CWT tem essa janela embutida pelo fato de que as wavelets ficam mais curtas (no tempo ou no espaço) à medida que a escala diminui (como maior frequência). Portanto, para frequências mais altas, a janela efetiva é mais curta e você termina com um escalograma que se parece com o que você desenhou para o FWT.
A decisão de como discretizar o CWT depende de você, embora eu ache que há amostragens mínimas em turnos e escalas para representar totalmente um sinal. Normalmente (pelo menos como eu os usei), para a escala mais baixa (frequência mais alta), você fará uma amostra em todos os locais do turno (tempo / espaço). À medida que aumenta sua escala (menor frequência), você pode experimentar com menos frequência. A lógica é que as frequências baixas não mudam tão rapidamente (pense em uma queda de pratos versus um baixo - o impacto dos pratos tem transitórios muito curtos, enquanto o baixo levaria mais tempo para mudar). De fato, na escala mais curta (supondo que você faça uma amostragem em todos os locais do turno), você tem a representação completa de um sinal (você pode reconstruí-lo usando apenas os coeficientes nessa escala). Não tenho tanta certeza sobre a lógica de amostrar a escala. EU' Já vi isso sugerido como logarítmico, com (acho) um espaçamento mais próximo entre escalas mais curtas. Eu acho que isso ocorre porque as wavelets em escalas mais longas têm uma transformada de Fourier mais ampla (portanto, "captam" mais frequências).
Admito que não entendo completamente o FWT. Meu palpite é que na verdade é a amostragem mínima em turno / escala e não é uma representação redundante. Mas acho que você perde a capacidade de analisar (e mexer com) um sinal em pouco tempo sem a introdução de artefatos indesejados. Vou ler mais sobre isso e, se aprender alguma coisa útil, informarei de volta. Espero que outros gostem de comentar.
fonte
Considere o caso da wavelet de Haar. A Transformada rápida de wavelet subdivide recursivamente o seu sinal e calcula a soma e a diferença das duas metades de cada vez. A diferença é a magnitude da transformação para a wavelet atual e a soma é retornada para o chamador calcular a magnitude da transformação para uma wavelet dilatada com metade da frequência. Assim, o FWT cobre o plano de frequência do tempo usando o padrão descrito no diagrama que você forneceu.
Observe que o diagrama que você deu é um pouco enganador. O que eles realmente estão tentando lhe dizer é que você obtém uma amostra na frequência mais baixa, duas amostras no dobro dessa frequência, quatro amostras no quádruplo dessa frequência e assim por diante. As propriedades de frequência e tempo de cada wavelet não são tais que cobrem seu ladrilho. Na prática, cada wavelet cobrirá uma área infinita porque possui suporte compacto e, portanto, deve ser completamente deslocalizada em termos de frequência. Então, você deve apenas pensar nos centros dessas peças.
Além disso, o FWT exige uma wavelet discreta que deve aderir a um critério de admissibilidade muito mais restritivo do que as wavelets contínuas para o CWT. Consequentemente, as propriedades de frequência de tempo de wavelets discretas são geralmente terríveis (por exemplo, as wavelets de Daubechies estão cheias de características nítidas ou mudam de frequência) e a utilidade do plano de frequência de tempo é grandemente diminuída no contexto do FWT. No entanto, wavelets contínuas são usadas para calcular representações de sinais no tempo e na frequência.
fonte
Sua referência tem:
Para mais, você pode gostar da página DWT . Lá, introduz wavelets Haar, waubets Daubechies e outras. Aponta como
Se, em vez de wavelets discretas, você quiser agora sobre wavelets contínuas ou wavelets complexas, poderá começar com séries de wavelets .
Além da wikipedia, um livro e um curso podem ser úteis.
fonte
Comece pelo STFT genérico em janela (formulário contínuo). Se você conectar uma janela infinita de altura da unidade, recuperará a transformação de Fourier como um caso especial. Você pode discretizar (e obter a DFT) e torná-la rápida (e obter a FFT).
Comece de um CWT (formulário contínuo). O CWT contínuo admite uma quantidade incrível de possíveis formas de wavelets. Eles podem ser discretizados exatamente apenas com padrões de amostragem (em tempo ou escala) que respeitam alguma desigualdade "Heisenberg": uma amostra por unidade de superfície. Esses padrões dependem da wavelet. Na maioria dos casos, os padrões criam um CWT discretizado que é redundante e produz um quadro de wavelet.
Alguns o queriam não redundante, com uma escala diádica (DWT). Apenas muito poucas wavelets (ainda um número infinito, mas você não pode encontrá-las por acaso) permitem isso. Entre os primeiros, estavam as wavelets Haar, Franklin e Meyer. Se você, em seguida, impõe que o suporte da wavelet seja finito, Haar foi o único por um longo tempo. É quase impossível obter uma wavelet ortogonal a partir de "wavelets naturais contínuas", por isso as de Daubechies foram construídas e, posteriormente, Symmlets e Coiflets . Essas wavelets de formato estranho não têm fórmulas simples e agradáveis, como a wavelet de Morlet.
O DWT (ou FWT) é exato, como o DFT / FFT. A maioria dos outros CWT discretizados (com qualquer wavelet) é apenas aproximadamente isso (sem muito dano se você tiver redundância suficiente).
Tão:
As figuras a seguir revelam como uma versão contínua da wavelet Haar
pode ser amostrada em uma wavelet discreta ortogonal:
Observe que algumas wavelets discretas, especialmente as longas (como splines), às vezes são calculadas usando uma FFT :)
fonte