A FFT da onda senoidal não está conforme o esperado, ou seja, ponto único

14

O gráfico ciano é um espectro de 50 Hz, e o magenta é uma onda senoidal de 50,1 Hz (com amplitude 0,7). Ambos são amostrados em 1024 amostras / s. Eu realizei uma FFT de 1024 pontos para obter esse espectro.

Por que apenas o espectro de 50Hz é um valor único? Por que o seno de 50,1 Hz consiste em outras frequências além de 50,1 Hz; De onde vêm essas novas frequências?

Eu não fiz nenhum processamento não linear no sinal de 50,1 Hz! Além disso, os 50,1 Hz parecem ter uma amplitude máxima menor, ou seja, não são 0,7, quando, de fato, a onda senoidal que geramos tem uma amplitude de 0,7.

Por que é isso?

Dois espectros, para 50Hz e 50.1Hz, respectivamente Obtido pelo comando MATALB fft ();

gpuguy
fonte
Você poderia, por favor, postar o código usado para produzir esse enredo? Meu melhor palpite é que, porque seus sinais estão tão próximos, o fft não pode resolvê-los adequadamente. Isso ou alguma mancha espectral porque as amostras não se alinham com as frequências.
Tom Kealy
4
As respostas abaixo estão corretas. O termo para o que você está observando é chamado de vazamento espectral e é observado quando você analisa um sinusóide cuja frequência não está exatamente no centro de uma de suas caixas de saída DFT.
Jason R
Por favor, posso saber o que u plotados contra o que para você ser capaz de obter o seu pico na marca de 50Hz
Nazario_Jnr
Veja esta resposta para uma descrição detalhada de qual é o problema e como corrigi-lo.
Dilip Sarwate

Respostas:

14

Na verdade, a resposta de Matt já dá uma visão do problema aqui: a DFT é implicitamente periódica no domínio do tempo e da frequência (veja esta pergunta ). A partir dos seus parâmetros, podemos calcular que seu período de observação é de 1 s. Isso significa que você observa 50 períodos de um tom de 50 Hz. Estender periodicamente esse intervalo de observação sempre resultará em uma onda senoidal aparentemente. Se você usar o tom de 50,1 Hz, estará transformando 50,1 períodos de uma oscilação. A extensão periódica desse sinal resultará em saltos de fase que causam tributários espectrais adicionais.

fs/NDFT=1024Hz/1024=1Hz

Ambos os efeitos descritos acima contribuem para o espectro que você está observando.

Deve
fonte
1
Isso faz sentido. Mas apenas para ser mais claro o vazamento espectral que você descreveu é um problema com a ferramenta (FFT) para observação de espectros. Não é um defeito no sinal. Significa Se eu 'ouvir' um sinal de áudio de 50,1 Hz, ele aparecerá nos meus ouvidos como um tom único, e não como um tipo de 'ruído'. Estou certo?
gpuguy
1
Você está absolutamente correto. Ele mostra o quão importante é entender o que a DFT está realmente fazendo para poder interpretá-la corretamente. Como nota de rodapé: o que você "ouviria" em uma implementação real também depende de como você está convertendo o sinal discreto em analógico.
DEVE
11

Este é o efeito de truncar ou abaixar o sinal senoidal. Você precisa truncar de tal maneira que, se você adicionar o sinal alterado ao truncado, ainda será a onda senoidal original.

Matt L.
fonte
6

Você obterá apenas um ponto FFT de resultado único para uma frequência de sinusóide puro não modulado que seja exatamente inteiro periódico na abertura ou largura da FFT. Qualquer outra frequência de sinusóide aparecerá como convolvida com a transformação (um Sinc periódico) da janela padrão (um retângulo).

50,1 Hz não é exatamente periódico na janela de 1 segundo da sua FFT.

Esses outros compartimentos ou frequências de resultado de FFT de "vazamento" são necessários para representar a descontinuidade produzida entre os limites da janela por qualquer sinal que não seja exatamente inteiro periódico na largura da FFT. Isso ocorre porque todos os vetores de base de uma DFT são exatamente inteiros periódicos dentro da largura da DFT e, portanto, não têm descontinuidade acentuada entre o final e o início do vetor de base. Portanto, qualquer sinal que não tenha essas características não pode ser representado por apenas um vetor base DFT (e seu complexo conjugado); portanto, as informações sobre o restante do sinal precisam ir a algum lugar.

Como a energia total é preservada pela transformação FFT (teorema de Parseval'a), a energia nos compartimentos de "vazamento" retira-se do compartimento de pico. Portanto, a magnitude do compartimento de pico deve ser menor.

hotpaw2
fonte
5

Aposto que sua onda senoidal é zero na primeira e na última amostra? Não deveria ser. Ele deve ser alinhado para que a próxima amostra após a última seja zero, para que você possa copiar e colar cópias do sinal uma após a outra e elas parecerão contínuas, sem amostras duplicadas. Talvez pense nisso como um papel de parede lado a lado, em que uma borda precisa atender perfeitamente à borda oposta quando lado a lado. :)

Vejo https://gist.github.com/endolith/236567 para obter um exemplo de python:

# Sampling rate
fs = 128 # Hz

# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)

# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)

# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))

Veja como duas cópias do sinal se encaixam de ponta a ponta para formar uma onda contínua:

insira a descrição da imagem aqui

Quando isso acontece, a energia da FFT é contida inteiramente em uma única bandeja:

insira a descrição da imagem aqui

endólito
fonte
1
Eu tive o mesmo problema que OP. Foi resolvido graças à configuração do ponto final = sinalizador falso. Eu pensei que o espaço de linhas é (fechado, aberto) por padrão, mas acaba sendo (fechado, fechado). Encontrei o bug graças ao seu código.
Trismegistos
-1

Isso ocorre devido a vazamentos espectrais e janelas. A resposta ideal, isto é, a função impulso, é para ondas senoidais de tempo contínuo. Quando você toma DFT de uma onda senoidal discreta em um computador digital, está basicamente tomando a Transformada de Fourier de seno com janela e com amostra e, em seguida, amostrando-a no domínio da frequência. Isso causa vazamento espectral. Consulte: http://w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html

Akshat
fonte