O que é uma boa função da janela FFT para rejeitar DC?

9

Estou usando um FFT para analisar o que é essencialmente o envelope de potência de um sinal (veja aqui para obter informações sobre o projeto que o contém) e, como os números de potência são sempre positivos, para eliminar o componente DC que eu gostaria de usar em uma janela função 50/50 positiva e negativa, versus a função totalmente positiva usual.

Eu peguei a função " flat top ", removi o a0viés e o converti de cossenos em senos, mas não tenho certeza se isso é ótimo (ou mesmo significativo).

Alguma sugestão?

Daniel R Hicks
fonte
9
apenas subtrair a média antes de janear?
Endolith

Respostas:

1

A primeira derivada das funções mais comuns da janela contínua (von Hann, etc.) rejeitará a DC, mas ainda terá uma resposta de frequência de magnitude semelhante à da função original da janela; portanto, você ainda pode usar o critério original de "bondade" para a seleção da janela, se não estiver relacionado à fase.

hotpaw2
fonte
2
Embora essa resposta seja principalmente correta, é mais um comentário, portanto, expandi-la seria muito útil.
Phonon
No entanto, ele aborda minha pergunta até certo ponto.
Daniel R Hicks #
11
Existe uma razão para fazer isso, em vez de apenas subtrair a média antes da janela?
Nibot 15/05
Se a resposta de JasonR estiver correta, essa ideia de rejeitar DC através da função de janela (e ainda obter uma boa estimativa espectral) não funcionará.
Nibot 15/05
@nibot: Uma possível razão pode ser que uma soma mais subtração não é possível (não disponível em alguns gasoduto hardware fixo ou latência, por exemplo.)
hotpaw2
7

Se você está preocupado em fazer uma análise espectral de um sinal com um grande componente CC e deseja suprimir esse pico de CC, uma função de janela não é o que você deseja. Como algumas outras respostas observadas, um filtro passa-alto (ou, visto de maneira diferente, um filtro de entalhe com o entalhe na frequência zero) é uma solução apropriada.

Para entender o porquê, você precisa pensar no que a aplicação de uma função de janela faz na resposta de frequência de cada saída DFT. O DFT é definido como:

X[k]=n=0N1x[n]ej2πnkN

Uma interpretação de como o DFT funciona é como um banco de filtros em frequências igualmente espaçadas entre - f sN efsfs2 . Redefina a soma acima da seguinte maneira:fs2

X[k]=n=0N1xk[n]

Onde:

xk[n]=x[n]ej2πnkN

Assim, a ésima saída DFT é gerada pegando primeiro o sinal de entrada x [ n ] e multiplicando-o por um exponencial complexo na frequência - 2 π kkx[n] para gerar um sinal de conversão descendentexk[n]. O sinal resultante é então somado sobre ajanelaN-sample para produzir a saída DFTX[k]. Este é efetivamente um filtro de média móvel (às vezes chamado de filtro de vagão), cuja resposta ao impulso pode ser descrita como:2πkNxk[n]NX[k]

b[n]={1, x=0,1,,N10, otherwise

A resposta de magnitude do filtro de vagão coberto pode ser encontrada usando a transformada de Fourier em tempo discreto (DTFT) dessa resposta de impulso:

|H(f)|=|sin(Nπffs)sin(πffs)|

Este é um núcleo do Dirichlet , e às vezes é chamado de "sinc periódico", pois parece um pouco com uma função sinc, mas se repete periodicamente, o que um sinc não faz. Essa expressão fornece a resposta de magnitude de cada saída DFT, em que é medido como o deslocamento de frequência da frequência central do respectivo compartimento de saída. Isso ilustra o efeito de vazamento espectral ; cada saída DFT possui uma resposta de frequência que cobre uma faixa contínua do espectro do sinal de entrada, não apenas a frequência central discreta de cada saída.f

Agora considere como as coisas mudam se você aplicar uma função de janela ao sinal de entrada antes de executar o DFT:x[n]

X[k]=n=0N1w[n]x[n]ej2πnkN=n=0N1w[n]xk[n]

xk[n]

|H(f)|=|W(f)|

W(f)w[n]x[n]

Portanto, se você realmente deseja apenas cancelar o componente DC do sinal, removê-lo através de algum outro tipo de pré-processamento, não a janela no domínio do tempo, é o caminho a percorrer. Você pode usar um filtro passa-alto linear com uma frequência de corte muito baixa ou subtrair a média estimada do sinal primeiro, por exemplo. A escolha entre esses métodos deve basear-se em outras restrições que seu sistema possui.

Jason R
fonte
3

Não acho que usar uma função de janela seja uma boa maneira de remover o controlador de domínio. Como o endólito mencionado, um método comum é apenas subtrair a média antes da janela. Outra opção seria aplicar um filtro passa-alto ao seu sinal antes da análise, por exemplo, com uma frequência de corte de cerca de 10 Hz.

schnarf
fonte
A aplicação de um filtro passa-alto não é uma opção se o sinal não existir na forma analógica. Mas acredito que você (e endólito) está correto em que subtrair a média deve funcionar, especialmente se também for usada uma janela que puxa os pontos de extremidade para zero. (E um filtro passa alta seria necessário um corte mais baixo, dado que eu estou analisando o baixo sinal para talvez 0,01 Hz.)
Daniel R Hicks
2
Por que você acha que precisa de um sinal analógico para aplicar um filtro passa-alto? Certamente é possível criar um HPF digital.
Jason R
@JasonR - Admito que sou bastante ignorante nessas coisas (meus cursos de sinais foram há 40 anos, praticamente antes da FFT, et al), mas parece-me que, para criar um filtro passa-alta digital, primeiro teria que produzir a transformada de Fourier do sinal.
Daniel R Hicks
11
Esse não é o caso; você pode gerar um filtro passa-alto tão bem quanto passa-baixo, passa-banda etc. Na verdade, existem técnicas para pegar um protótipo de filtro passa-baixo e transformá-lo em um filtro passa-alto com resposta análoga. A maioria dos softwares para design de filtros (por exemplo, MATLAB) pode ser usada para criar todos os tipos de filtros.
Jason R
11
Não tenho certeza de onde você teve a impressão de que implementar um filtro passa-alto requer diferenciação. A diferenciação é uma operação de passagem alta, mas não é uma implementação adequada para um filtro de passagem alta (já que sua resposta de frequência é uma rampa, amplificando frequências mais altas onde o ruído geralmente está presente). O artigo da Wikipedia sobre filtros passa-alto seria um bom começo.
Jason R