Vamos considerar este exemplo:
Fs=1000;
Ns=500;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X=fft(x);
Nesse cenário, a resolução de frequência é 2 e todos os componentes de frequência são capturados corretamente. No entanto, se eu fizer isso:
X=fft(x,1000);
a resolução de frequência é 1, mas há um vazamento espectral. Efeito semelhante é visto aqui . Parece-me que as transformadas de Fourier de ambas as janelas (uma com comprimento 500 e outra com comprimento 1000) têm zeros nas frequências que são apresentadas no sinal, então não vejo por que o vazamento ocorrerá?
fft
frequency-spectrum
dft
user3616359
fonte
fonte
Respostas:
Esse fenômeno não tem nada a ver com vazamento espectral. O que você está observando é o efeito do preenchimento zero. Dado um número de amostrasN , existe uma resolução de frequência máxima possível Δ f que pode ser alcançada:
No seu caso,Δ f é exatamente 2H z . Se você zerar o sinal, não há informações extras para recuperar - você apenas diminuirá oespaçamentodafrequência.
No exemplo acima, quando você aumentaN para 1000 , obtém um espaçamento de frequência de 1H z . Todas as amostras extra-observadas são apenas uma interpolação, feita pela função window (s i n c no seu caso). Você começará a observar lobos laterais do espectro da janela. Como você multiplicou implicitamente o seu sinal por uma janela retangular, isso resultará na convolução do espectro do seu sinal (dois Dirac's + DC) com a funçãos i n c .
E uma parte ampliada:
Coisas a serem observadas:
Também podemos observar o ruído da FFT na parte inferior.
E, obviamente, o código para reproduzir os resultados:
fonte
Vazamento espectral é geralmente outro nome para o efeito de convolução de Sinc ou artefato de janelas retangulares no outro domínio (t ou tempo no seu caso). E o preenchimento zero é feito adicionando uma janela retangular (que são os dados originais que não são preenchidos com zero) a uma FFT mais longa.
Sua hipótese de que o TF deve ser zero, mas uma frequência é falsa em geral. Qualquer sinal de comprimento finito (e diferente de zero) terá uma extensão infinita de espectro diferente de zero. Essa extensão infinita do espectro (em forma de Sinc ou a transformação de outras janelas) será invisível em um resultado DFT / FFT apenas para sinusóides puros que abrangem toda a largura da FFT com periodicidade exata exata nessa largura. O preenchimento zero não permite isso.
fonte
O vazamento ocorre principalmente com janelas de comprimento finito, que você sempre tem na prática. No entanto, se você tiver exatamente um número inteiro de períodos de seus componentes senoidais, a periodização inerente à FFT age como se os senos fossem "infinitos" e suas frequências caem exatamente em compartimentos discretizados. E assim o vazamento é de alguma forma cancelado, por pura sorte: se você soubesse antecipadamente o período do seu sinal, não precisaria analisá-lo com as ferramentas de Fourier.
Com o preenchimento zero, você não tem mais um seno puro. Nem com janela múltipla de período não inteiro. Você está concatenando pedaços de senos que apresentam mudanças bruscas nos limites da janela. Portanto, todo o sinal periodizado não é mais um "seno infinito". Portanto, você pode obter o que assimila com vazamentos, mas que é um efeito de preenchimento zero, como perfeitamente explicado por @jojek.
fonte