Aqui está um sinusóide de frequência f = 236.4 Hz
(tem 10 milissegundos de comprimento; tem N=441
pontos na taxa de amostragem fs=44100Hz
) e sua DFT, sem preenchimento zero :
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 :
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!
Respostas:
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.
fonte
x(n)
prolongar (com0
no final), eu mantenho ox(n)
comprimento N, MAS a mudança está aqui: em vez deDFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)
parak=0,1,...,N-1
, eu façoDFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
pork=0,1,...,10*N-1
... Isso é como adicionar mais bandejas (10 N
bandejas em vez deN
bandejas de frequência), mas mantendo o mesmox(n)
de comprimentoN
. Agora, os compartimentos seriam 10hz, 20hz, ..., 100hz, 110hz, 120hz, ..... => É o mesmo que o preenchimento zero: nenhuma resolução adicional real, mas apenas interpolação?DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
parak=0,1,...,10*N-1
e manter a mesmax(n)
de comprimentoN
dão o mesmo resultado que zero-padding: não é realmente mais resolução, mas apenas interpolação?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.
fonte
f=236.4 hz
durante o mesmo10ms
apenas mas com fs = 192khz em vez de 44.1khz: a verdadeira resolução de frequência será maior?sinc
curva 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)