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 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ê aumenta N 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 .
s i n cs eun c
s i n c0 0s i n c
N= 1000N= 10000
E uma parte ampliada:
Coisas a serem observadas:
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'})