Preciso de ajuda para entender a saída do cálculo DFT / FFT.
Sou um engenheiro de software experiente e preciso interpretar algumas leituras do acelerômetro de smartphones, como encontrar as frequências principais. Infelizmente, dormi durante a maior parte das minhas aulas de EE na faculdade há quinze anos, mas tenho lido sobre DFT e FFT nos últimos dias (sem sucesso, aparentemente).
Por favor, nenhuma resposta de "vá fazer uma aula de EE". Na verdade, estou planejando fazer isso se meu empregador me pagar. :)
Então aqui está meu problema:
Capturei um sinal em 32 Hz. Aqui está uma amostra de 1 segundo de 32 pontos, que tracei no Excel.
Então, obtive algum código FFT escrito em Java da Columbia University (depois de seguir as sugestões em um post sobre " FFT confiável e rápida em Java ").
A saída deste programa é a seguinte. Acredito que ele esteja executando um FFT local, portanto, ele reutiliza o mesmo buffer para entrada e saída.
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
Portanto, neste ponto, não posso fazer cara ou coroa com a saída. Eu entendo os conceitos DFT, como a parte real sendo as amplitudes das ondas cossenos componentes e a parte imaginária sendo as amplitudes das ondas senoidais componentes. Também posso acompanhar este diagrama do grande livro " O Guia do Cientista e do Engenheiro para Processamento de Sinal Digital ":
Então, minhas perguntas específicas são:
A partir da saída do FFT, como encontro as "frequências mais ocorrentes"? Isso faz parte da minha análise dos dados do meu acelerômetro. Devo ler as matrizes reais (cosseno) ou imaginárias (seno)?
Eu tenho uma entrada de 32 pontos no domínio do tempo. A saída do FFT não deveria ser uma matriz de 16 elementos para reais e uma matriz de 16 elementos para o imaginário? Por que o programa fornece saídas de array reais e imaginárias de tamanho 32?
Em relação à pergunta anterior, como analiso os índices nas matrizes de saída? Dada minha entrada de 32 amostras amostradas em 32 Hz, meu entendimento é que uma saída de matriz de 16 elementos deve ter seu índice uniformemente espalhado até 1/2 da taxa de amostragem (de 32 Hz), então estou correto em entender que cada elemento da matriz representa (32 Hz * 1/2) / 16 = 1 Hz?
Por que a saída FFT tem valores negativos? Achei que os valores representam as amplitudes de uma sinusóide. Por exemplo, a saída de Real [3] = -1,075 deve significar uma amplitude de -1,075 para uma onda cosseno de frequência 3. Está certo? Como pode uma amplitude ser negativa?