Por que dizemos que "o preenchimento zero realmente não aumenta a resolução de frequência"

12

Aqui está um sinusóide de frequência f = 236.4 Hz(tem 10 milissegundos de comprimento; tem N=441pontos na taxa de amostragem fs=44100Hz) e sua DFT, sem preenchimento zero :

insira a descrição da imagem aqui

A única conclusão que podemos dar olhando para o DFT é: "A frequência é aproximadamente 200Hz".

Aqui está o sinal e seu DFT, com um grande preenchimento zero :

insira a descrição da imagem aqui

Agora podemos dar uma conclusão muito mais precisa : "Observando atentamente o máximo do espectro, posso estimar a frequência 236Hz" (ampliei o zoom e descobri que o máximo está próximo de 236).

Minha pergunta é: por que dizemos que "o preenchimento zero não aumenta a resolução" ? (Eu já vi essa frase com muita frequência, então eles dizem "apenas adiciona interpolação")

=> No meu exemplo, o preenchimento zero me ajudou a encontrar a frequência certa com uma resolução mais precisa!

Basj
fonte
1
Outra maneira de pensar sobre essa pergunta muito antiga: se você não possuía a plotagem de séries temporais, mas apenas a fft de 'baixa resolução' - era possível convertê-las nas séries cronológicas, zero-pad e re -fft para obter os 236Hz. Portanto, o fft 'baixa resolução' deve conter todas as mesmas informações da suave.
21418 Joshua R.Jul

Respostas:

19

Resolução tem uma definição muito específica nesse contexto. Refere-se à sua capacidade de resolver dois tons separados em frequências próximas. Você aumentou a taxa de amostragem de sua estimativa de espectro, mas não obteve nenhuma capacidade de discriminar entre dois tons que podem estar em, por exemplo, 236 Hz e 237 Hz. Em vez disso, eles "derreterão juntos" em um único blob, independentemente do valor zero aplicado.

A solução para aumentar a resolução é observar o sinal por um período mais longo e usar um DFT maior. Isso resultará em lobos principais cuja largura é inversamente proporcional ao tamanho da DFT; portanto, se você observar por tempo suficiente, poderá realmente resolver as frequências de vários tons próximos um do outro.

-

Para ver como isso acontece, aqui está um gráfico da FFT ampliada com a adição de dois sinais: seu sinusóide original e um que difere em frequência dele de 0 a 100 Hz.

É apenas no final da diferença de 100Hz do gráfico (lado esquerdo aqui) que você pode distinguir (resolver) os dois.

Código Scilab para gerar o gráfico abaixo.

insira a descrição da imagem aqui

f = 236.4;
d = 10;
N=441;
fs=44100;
extra_padding = 10000; 

t=[0:1/fs:(d/1000-1/fs)]
ff = [0:(N+extra_padding-1)]*fs/(N+extra_padding);

x = sin(2*%pi*f*t);

XX = [];

for delta_f = [0:100];
    y = sin(2*%pi*(f+delta_f)*t);
    FFTX = abs(fft([x+y zeros(1,extra_padding)]));
    XX = [XX; FFTX];
end

mtlb_axis([0 1300 0 500])

figure(1);
clf
[XXX,YYY] = meshgrid(ff,0:100);
mesh(XXX(1:100,[50:90]),YYY(1:100,[50:90]),XX(1:100,[50:90]))
Jason R
fonte
obrigado ! ok, então o preenchimento zero não ajudará a resolver dois tons separados em frequências próximas; no entanto, no meu exemplo, ele pode ser útil a fim de encontrar o pico do espectro, e, assim, encontrar a frequência fondamental de um tom (por exemplo, para fins de controle de pitch precisas)
Basj
Eu pensei que "o preenchimento zero não aumenta a resolução" significaria "você não pode fazer um rastreamento preciso do tom com a ajuda do preenchimento zero" (isso não é verdade aqui, o exemplo mostra que é possível detectar com precisão algum tom)
Basj
Eu acho que você entendeu corretamente. O preenchimento zero tem seus usos, como na estimativa fina da localização do pico a partir de um espectro grosso. Não é apenas uma bala de prata.
Jason R
1
Eu apenas tentei algo mais que zero-padding, mas relacionado. Em vez de x(n)prolongar (com 0no final), eu mantenho o x(n)comprimento N, MAS a mudança está aqui: em vez de DFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)para k=0,1,...,N-1, eu faço DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))por k=0,1,...,10*N-1... Isso é como adicionar mais bandejas ( 10 Nbandejas em vez de Nbandejas de frequência), mas mantendo o mesmo x(n)de comprimento N. Agora, os compartimentos seriam 10hz, 20hz, ..., 100hz, 110hz, 120hz, ..... => É o mesmo que o preenchimento zero: nenhuma resolução adicional real, mas apenas interpolação?
Basj
Será que a adição de mais bins (10N em vez de N): DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))para k=0,1,...,10*N-1e manter a mesma x(n)de comprimento Ndão o mesmo resultado que zero-padding: não é realmente mais resolução, mas apenas interpolação?
Basj
13

O termo "resolução" tem vários significados, o que pode confundir as pessoas que tentam se comunicar ao usar dois significados diferentes.

No sentido óptico, de ser capaz de resolver dois pontos claramente separados próximos (ou dois picos adjacentes no espectro) em vez de um blob embaçado, o preenchimento zero não ajudará. Este é o significado mais provavelmente usado ao afirmar que o preenchimento zero não aumenta a resolução.

Se o requisito de resolução requer um mergulho (por exemplo, um mínimo de 3 dB de abaixamento) entre picos espectrais, a resolução será ainda menor do que o espaçamento entre compartimentos da FFT, por exemplo, nem mesmo Fs / N, mas 2X a 3X que, ou mais, dependendo da janela utilizada. Um requisito mais fraco para a resolução pode ser apenas o espaçamento de frequência dos vetores de base ortogonais da DFT, por exemplo, Fs / N.

Em termos de pontos de plotagem, sim, o preenchimento zero fornecerá mais pontos para plotagem, como na resolução DPI (pontos de plotagem por polegada). Isso pode facilitar a seleção de extremos pelo globo ocular. No entanto, eles são os mesmos pontos que você obteria ao fazer uma interpolação de plotagem de qualidade muito alta (interpolação Sinc) sem nenhum preenchimento zero, portanto, eles realmente não adicionam informações que não poderiam ser calculadas sem o preenchimento zero.

Em termos de rastreamento de afinação, a interpolação parabólica ou Sinc (interpolação entre os compartimentos de resultados da FFT) de um resultado de FFT com janela e sem preenchimento de zero pode fornecer um resultado tão bom quanto em um gráfico de FFT com preenchimento de zero mais longo e intensivo em termos computacionais. Assim, o preenchimento zero fornece um resultado "melhor" do rastreamento de afinação do que a seleção de pico não preenchida com zero e não interpolada, mas geralmente com muito menos eficiência do que apenas o uso da interpolação.

Se você adicionar ruído ao seu exemplo, mas um pouco menos que o sinal, verá que o pico preenchido com zero pode ser tão impreciso quanto o pico preenchido que não é zero. Portanto, no caso mais geral, você pode não ter encontrado a frequência "certa" com mais precisão do que antes. O preenchimento zero interpola apenas o resultado impreciso devido ao ruído, outra razão pela qual se diz que não aumenta a resolução.

hotpaw2
fonte
Apenas para lembrar: o que acontece se eu tiver o mesmo senoide f=236.4 hzdurante o mesmo 10msapenas mas com fs = 192khz em vez de 44.1khz: a verdadeira resolução de frequência será maior?
Basj
Aumentar a taxa de amostragem lhe dará escaninhos mais alta frequência, mas o mesmo espaçamento bin DFT perto de qualquer baixa frequência de interesse,
hotpaw2
1
Aumentar a taxa de amostragem tornará a sinccurva semelhante na DFT mais estreita ou não? Se não, isso implica que o aumento da taxa de amostragem não vai acrescentar resolução (no sentido capacidade para resolver as frequências)
Basj
1/TT
A largura do Sinc em frequência está relacionada à largura da janela de dados no tempo, o preenchimento zero ou a alteração da taxa de amostragem não o afetam realmente (exceto os problemas de amostragem ou quantização).
hotpaw2