Em resposta a uma pergunta anterior , foi declarado que se deveria
zere os sinais de entrada (adicione zeros no final para que pelo menos metade da onda fique "em branco")
Qual o motivo disso?
Em resposta a uma pergunta anterior , foi declarado que se deveria
zere os sinais de entrada (adicione zeros no final para que pelo menos metade da onda fique "em branco")
Qual o motivo disso?
Respostas:
O preenchimento zero permite usar um FFT mais longo, o que produzirá um vetor de resultado mais longo.
Um resultado mais longo da FFT possui mais compartimentos de frequência com espaçamento mais próximo na frequência. Mas eles fornecerão essencialmente o mesmo resultado que uma interpolação Sinc de alta qualidade de uma FFT mais curta e sem preenchimento de zero dos dados originais.
Isso pode resultar em um espectro de aparência mais suave quando plotado sem interpolação adicional.
Embora essa interpolação não ajude na resolução ou na resolução e / ou entre frequências adjacentes ou próximas, pode ser mais fácil resolver visualmente o pico de uma única frequência isolada que não possui sinais adjacentes significativos ou ruído no espectro . Estatisticamente, a densidade mais alta dos escaninhos de resultados de FFT provavelmente tornará mais provável que o escaninho de magnitude de pico esteja mais próximo da frequência de um sinusóide de frequência de entrada isolada aleatória e sem interpolação adicional (parabólica, et al.).
Mas, essencialmente, o preenchimento zero antes de uma DFT / FFT é um método computacionalmente eficiente de interpolar um grande número de pontos.
O preenchimento zero para filtragem de correlação cruzada, correlação automática ou convolução é usado para não misturar resultados de convolução (devido à convolução circular). O resultado completo de uma convolução linear é maior que qualquer um dos dois vetores de entrada. Se você não fornecer um local para finalizar esse resultado de convolução mais longo, a convolução rápida da FFT apenas o misturará e criará o resultado desejado. O preenchimento zero fornece zeros no qual misturar o resultado mais longo. E é muito mais fácil descompactar algo que só foi misturado / somado com um vetor de zeros.
Há algumas coisas a considerar antes de decidir zerar seu sinal no domínio do tempo. Você pode não precisar zerar o sinal!
1) Aumente os dados do domínio do tempo (não o preenchimento zero) para obter uma melhor resolução no domínio da frequência.
2) Aumente o número de pontos da FFT além do comprimento do sinal no domínio do tempo (preenchimento zero) se desejar obter uma melhor definição dos compartimentos da FFT, apesar de não comprar uma resolução mais verdadeira. Você também pode pressionar para obter uma potência de 2 pontos FFT.
3) Ao mexer nos pontos FFT (no ponto anterior), verifique se os pontos de frequência acabam onde você deseja. O espaçamento dos pontos é , onde é a frequência de amostragem e é o número de pontos FFT.
Existem algumas figuras legais ilustrando esses pontos em http://www.bitweenie.com/listings/fft-zero-padding/
Uma última coisa a mencionar: se você zerar o sinal no domínio do tempo e quiser usar uma função de janelas, certifique-se de exibir o sinal antes de zerar o teclado. Se você aplicar a função window após o preenchimento zero, não realizará o que a janela deve realizar. Mais especificamente, você ainda terá uma transição nítida do sinal para zero, em vez de uma transição suave para zero.
Em geral, o preenchimento zero antes da DFT é equivalente a interpolação ou amostragem com mais frequência no domínio transformado.
Aqui está uma rápida visualização de como o oposto funciona. Se você amostrar um sinal de banda ilimitada no tempo a uma taxa mais alta, obterá um espectro mais 'esmagado', ou seja, um espectro com mais zeros nas duas extremidades. Em outras palavras, você pode obter mais amostras no tempo simplesmente preenchendo o zero com frequência após DFT'ing e, em seguida, IDFT'ing com o resultado do preenchimento zero.
O mesmo efeito ocorre ao contrário quando o preenchimento zero ocorre com o tempo. Tudo isso porque a reconstrução perfeita do sinal é possível desde que o sinal seja ilimitado por banda e amostrado pelo menos na taxa de Nyquist.
O termo 'resolução' depende de como você o define. Para mim, significa quão bem os dois pontos de observação adjacentes no tempo ou na frequência podem ser discriminados de forma confiável (estatisticamente). Nesse caso, a resolução realmente depende do tamanho da DFT devido a vazamentos espectrais. Ou seja, menor o tamanho da janela, mais embaçado ou manchado o sinal transformado e vice-versa. É diferente da frequência com que você experimenta ou do que eu chamo de 'definição'. Por exemplo, você pode ter uma imagem muito borrada amostrada em alta taxa (alta definição), mas ainda não pode obter mais informações do que a amostragem em menor taxa. Portanto, em resumo, o preenchimento zero não melhora a resolução, pois você não obtém mais informações do que antes.
Se alguém tiver algum interesse no espectro da função de janelas usada para isolar a amostra no domínio do tempo, o preenchimento zero aumentará a resolução de frequência da função de janelas.
Se o sinal de tempo for , onde é a função de janelas, o espectro geral é , onde inidica a convolução. w ( t ) X ( f ) ∗ W ( f ) ∗
Se sua função de janelas é um retângulo simples (uma extração de algum conjunto de valores de . Então é a função de sincronização. Por exemplo, se Nfft for igual à largura do seu retângulo, e você tinha um sinusóide precisamente em uma das frequências da caixa, então as amostras da função de sincronização que apareceriam centralizadas nessa caixa caem exatamente nos cruzamentos de zero fora do pico e você não vê a forma da sincronização em Se você agora zerar os dados que entram na FFTX ( f ), você verá algumas amostras em outros lugares além do pico e do cruzamento de zero, revelando o formato da função de sincronização no espectro resultante. Então, para que serve o preenchimento zero? Certamente é de utilidade educacional revelar a natureza da transformação discreta de sinais em janelas, como é o caso usual. Em um sentido prático, pode ser útil em qualquer caso em que você esteja interessado na forma espectral de um envelope isolado montado em uma onda portadora.
Pode haver diferentes razões para isso, dependendo de qualquer processo realizado antes e depois da transformação de Fourier. O motivo mais comum é obter maior resolução de frequência em qualquer transformação resultante. Ou seja, quanto maior o número de amostras usadas em sua transformação, menor a largura de caixa no espectro de potência resultante. Lembre-se: binwidth = sample_frequency / transform_size (geralmente chamado de tamanho da janela). Você pode imaginar disso, à medida que aumenta o tamanho da transformação, a largura da bin reduz (= melhor resolução de frequência). O preenchimento zero é uma maneira de aumentar o tamanho da transformação sem introduzir novas informações no sinal.
Então, por que não fazer uma transformação maior sem preenchimento zero? Isso não alcançaria o mesmo efeito? Boa pergunta. Em muitos casos, convém analisar um fluxo de dados no domínio do tempo, para o qual você pode estar usando uma transformação de Fourier (stft) de curta duração. Isso envolve a transformação de cada N amostras de acordo com a resolução de tempo necessária para caracterizar alterações no espectro de frequências. Aqui reside o problema. Uma janela muito grande e você perderá a resolução do tempo, uma janela muito pequena e a resolução da frequência. A solução é usar janelas de domínio de tempo pequenas, oferecendo uma boa resolução de tempo e, em seguida, zerá-las para fornecer uma boa resolução de frequência. Espero que isso seja útil para você
Atualização
Eu não expliquei isso bem. Eu deveria ter esclarecido melhor. Referindo-se a uma transformação em janela, na verdade você não obtém uma resolução de frequência maior "real", mas para fins de visualização (lendo o espectro de potência com o olho), ela pode fornecer resultados mais claros. Usando a taxa de amostragem crítica, cada lóbulo lateral ocupa um único compartimento, o que, dependendo da técnica gráfica, pode ser enganoso. O preenchimento zero fornece um espectro de frequência interpolado que pode ser mais revelador. Além disso, se você estiver usando um método simples de seleção de pico para estimativa de frequência, o efeito de interpolação espectral do preenchimento zero fornecerá uma amostra espectral mais próxima do pico real do lobo principal. Este link fornece alguns diagramas úteis: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html
Não os vi mencionados nas boas respostas anteriores, portanto adicionarei os seguintes motivos importantes adicionais para o preenchimento zero:
Os algoritmos Radix-2 são mais eficientes, portanto, o preenchimento zero para a próxima potência de 2 (ou potência de 4 em alguns casos para a Radix-4), ou evitar significativamente os fatores primos grandes, pode melhorar o desempenho em tempo real. Além disso, ao usar a FFT para análise, o preenchimento zero geralmente é feito para calcular amostras da DTFT, como determinar a resposta de frequência de uma FIR: compare fft ([1 1 1 1]) com fft ([1 1 1 1], 512) que é idêntico ao freqz ([1 1 1 1]).