O fato de o resultado ser complexo é de se esperar. Quero destacar algumas coisas:
Você está aplicando um filtro no domínio da frequência da parede de tijolos aos dados, tentando zerar todas as saídas FFT que correspondem a uma frequência maior que 0,005 Hz e depois transformando inversamente para obter um sinal no domínio do tempo novamente. Para que o resultado seja real, a entrada na FFT inversa deve ser conjugada simétrica . Isso significa que, por um comprimento - FFT,N
X[k]=X∗[N−k],k=1,2,…,N2−1(Neven)
X[k]=X∗[N−k],k=1,2,…,⌊N2⌋(Nodd)
- Observe que, para pares, e não são iguais em geral, mas são reais. Para ímpar , deve ser real.NX[0]NX[0]X[N2]NX[0]
Vejo que você tentou fazer algo assim no seu código acima, mas não está totalmente correto. Se você aplicar a condição acima no sinal transmitido para a FFT inversa, deverá receber um sinal real.
Meu segundo ponto é mais filosófico: o que você está fazendo funcionará, pois suprimirá o conteúdo do domínio da frequência que você não deseja. No entanto, isso não é tipicamente o modo como um filtro passa-baixo seria implementado na prática. Como mencionei antes, o que você está fazendo é essencialmente aplicar um filtro que tenha uma resposta de magnitude na parede de tijolos (ou seja, perfeitamente retangular). A resposta ao impulso de um filtro desse tipo tem uma forma . Como a multiplicação no domínio da frequência é equivalente a (no caso de usar a DFT, circular) convolução no domínio do tempo, essa operação é equivalente a convolver o sinal do domínio do tempo com uma função .s i n csinc(x)sinc
Por que isso é um problema? Lembre-se de como é a função no domínio do tempo (abaixo da imagem, vergonhosamente emprestada da Wikipedia):sinc
A função possui amplo suporte no domínio do tempo; decai muito lentamente à medida que você se afasta no tempo do lóbulo principal. Para muitas aplicações, essa não é uma propriedade desejável; quando você envolve um sinal com um , os efeitos dos lóbulos laterais decadentes lentamente serão aparentes na forma no domínio do tempo do sinal de saída filtrado. Esse tipo de efeito costuma ser chamado de toque . Se você sabe o que está fazendo, há alguns casos em que esse tipo de filtragem pode ser apropriado, mas no caso geral, não é o que você deseja.s i n csincsinc
Existem meios mais práticos de aplicar filtros passa-baixo, nos domínios de tempo e frequência. A resposta de impulso finito e os filtros de resposta de impulso infinito podem ser aplicados diretamente usando sua representação na equação de diferença . Ou, se o seu filtro tiver uma resposta de impulso suficientemente longa, você poderá obter benefícios de desempenho usando técnicas de convolução rápidas baseadas na FFT (aplicando o filtro multiplicando no domínio da frequência em vez de convolução no domínio do tempo), como a sobreposição salvar e sobrepor-adicionar métodos.