Por que tenho vazamento de frequência na DFT após preenchimento zero, se a resolução da frequência é boa?


12

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á?


o preenchimento zero não reduzirá o vazamento espectral aparente, mas apenas fará os solavancos do vazamento espectral parecerem mais suaves.
22810 Robert Pattinson-Johnson

Respostas:


18

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 amostras N , existe uma resolução de frequência máxima possível Δf que pode ser alcançada:

Δf=fsN

No seu caso, Δf é exatamente 2Hz . Se você zerar o sinal, não há informações extras para recuperar - você apenas diminuirá oespaçamentodafrequência.

No exemplo acima, quando você aumenta N para 1000 , obtém um espaçamento de frequência de 1Hz . Todas as amostras extra-observadas são apenas uma interpolação, feita pela função window (sEunc 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çãosEunc .


sEuncsEunc

insira a descrição da imagem aqui

sEunc0 0sEunc


N=1000N=10000

insira a descrição da imagem aqui

E uma parte ampliada:

insira a descrição da imagem aqui

Coisas a serem observadas:

  • N=500

  • Também podemos observar o ruído da FFT na parte inferior.

  • N=10000sEunc


E, obviamente, o código para reproduzir os resultados:

Fs=1000; 
Ns=500;
Ns2=1000;
Ns3=10000;
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);

X1 = abs(fft(x))/length(x);
X2 = abs(fft(x, Ns2))/Ns;
X3 = abs(fft(x, Ns3))/Ns;

F1 = 0:Fs/Ns:Fs-Fs/Ns;
F2 = 0:Fs/Ns2:Fs-Fs/Ns2;
F3 = 0:Fs/Ns3:Fs-Fs/Ns3;

plot(F1, 20*log10(X1))
hold on
plot(F2, 20*log10(X2))
plot(F3, 20*log10(X3))
xlim([0, Fs/2])
grid on
legend({'N=500', 'N=1000', 'N=10000'})

1
Resposta muito completa +1. "[...] você aumentará apenas o espaçamento da frequência." Suponho que deveria diminuir .
Matt L.

2

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.


1

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.