Por que a transformação de Fourier de um único ciclo de onda senoidal não é uma única barra?

12

Tentei diferentes códigos de transformada de Fourier por aí em ondas senoidais simples, e todos eles produzem um espectro distribuído com uma ressonância na frequência do sinal, quando deveriam teoricamente exibir uma única barra.

A frequência de amostragem tem pouco efeito (10kHz aqui), no entanto, o número de ciclos:

Um ciclo:

insira a descrição da imagem aqui

100 ciclos:

insira a descrição da imagem aqui

100000 ciclos:

insira a descrição da imagem aqui

Parece que a transformação de Fourier converge apenas para um número infinito de ciclos, por que isso? Uma janela de tempo de exatamente um ciclo não deve trazer os mesmos resultados que os de N ciclos?

Aplicação: Isso é apenas por curiosidade e também porque eu quero saber quanto a resposta em etapas de um sistema de primeira ordem será emocionante para a ressonância de uma montagem mecânica. Portanto, preciso de uma transformação precisa de Fourier da resposta ... Na qual não confio mais. O que eu poderia fazer para melhorar a precisão, com base no caso "onda senoidal"?

insira a descrição da imagem aqui

PS: Essas capturas de tela específicas são baseadas no código aqui .

Mister Mystère
fonte
6
Além da resposta aceita, observe que não há motivos para acreditar que a transformada de Fourier em tempo discreto (que você está calculando usando a DFT) seria um impulso para um sinal de entrada que é um período de um sinusóide. A transformação Fourier em tempo contínuo de um sinusóide é um impulso, sim, mas esse sinusóide é infinito em duração. Quando você limita o sinal no tempo, isso equivale a multiplicar por uma função retangular da janela. O resultado no domínio da frequência é a convolução do impulso e a transformação de Fourier da janela, que é essencialmente o que você está observando.
Jason R
Obrigado pela observação. Então, como você explica que, se eu alterar o número NFFT para o comprimento do vetor, o resultado será uma única barra?
Mister Mystère
1
Boa pergunta. Isso ocorre devido a uma suposição inerente ao DFT. Presume-se que o sinal de comprimento finito dado na entrada do DFT se estenda periodicamente em ambas as direções com duração infinita. Portanto, quando você tem um número inteiro de ciclos dentro da "abertura" da DFT, acaba com a transformação de um sinusóide de duração infinita: um único impulso. Isso corresponde ao caso de vazamento espectral exatamente zero e raramente ocorre na prática.
Jason R

Respostas:

30

Este é um artefato de janela.

O código vinculado preenche um sinal de 10.000 amostras com zeros, de modo que o comprimento seja uma potência de dois.

%% Author :- Embedded Laboratory

%%This Project shows how to apply FFT on a signal and its physical 
% significance.

fSampling = 10000;          %Sampling Frequency
tSampling = 1/fSampling;    %Sampling Time
L = 10000;                  %Length of Signal
t = (0:L-1)*tSampling;      %Time Vector
F = 100;                    %Frequency of Signal

%% Signal Without Noise
xsig = sin(2*pi*F*t);
...

%%Frequency Transform of above Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
...

Observe que no código acima, a FFT é obtida com o tamanho da FFT, NFFTque é a próxima potência 2 maior que o comprimento do sinal (neste caso, 16.384). Na documentação do Mathworksfft() :

Y = fft(X,n)retorna o DFT de ponto n. fft(X)é equivalente a fft(X, n)onde nestá o tamanho de Xna primeira dimensão não singleton. Se o comprimento de Xfor menor que n, Xserá preenchido com zeros à direita n. Se o comprimento de Xfor maior que n, a sequência Xserá truncada. Quando Xé uma matriz, o comprimento das colunas é ajustado da mesma maneira.

Isso significa que você não está realmente recebendo uma FFT de uma 'onda senoidal pura' - você está recebendo a FFT de uma onda senoidal com um sinal plano depois dela.

Isso é equivalente a obter a FFT de uma onda senoidal multiplicada por uma função de janela quadrada. O espectro de FFT é então a convolução do espectro de frequência de onda senoidal (uma função de impulso) com o espectro de frequência de onda quadrada (sinc (f)).

Se você mudar L = 16,384para que não haja preenchimento zero do sinal, você observará uma perfectFFT.

Outras palavras-chave de pesquisa: "Vazamento espectral", "Função da janela", "Janela de Hamming".


Edit: Eu limpei algum material que escrevi sobre esse tópico na universidade, que entra em substancialmente mais detalhes. Eu publiquei isso no meu blog .

Li-aung Yip
fonte
Estava bem na minha frente esse tempo todo. Muito bem, senhor, acabei de alterar o número NFFT para o comprimento do vetor e foi o que aconteceu.
Mister Mystère
1
@ MisterMystère: Veja a edição para obter um link para o material relevante que escrevi na universidade. Uma explicação muito mais completa, incluindo fotos.
precisa saber é o seguinte
(Embora eu esqueci de re-escrever as fórmulas matemáticas -. Fixos agora)
Li-Aung Yip
Apenas um lembrete de que há pouca vantagem em avançar para o nextpow2 usando algoritmos FFT do matlab, que eu acredito que seja fftw (transformação fourier mais rápida no oeste)
Scott Seidman