Como crio um gráfico de frequência versus tempo?

9

Eu sou um engenheiro químico, não um EE, então isso é um pouco difícil.

Estou tentando descobrir como obter dados de amplitude versus tempo e transformá-los em frequência versus tempo. Meu primeiro instinto é dividir meus dados em partes, executar a FFT em cada parte e depois traçar isso. Infelizmente, como o tempo de duração de cada fatia se aproxima de zero, não há mais informações suficientes para obter informações precisas sobre a frequência (frequências baixas exigem mais do que uma fatia muito pequena). Então ... como eu faço isso? Tenho certeza de que esse é algum tipo de problema famoso que alguém já resolveu.

Aqui está o tipo de transformação que estou procurando, ilustrada com uma onda sonora (nota de piano G). Como você pode ver, este gráfico tem três eixos, com o terceiro sendo representado pela cor.

Obrigado!

insira a descrição da imagem aqui

usuario
fonte

Respostas:

5

A resolução de tempo versus frequência é um problema bem conhecido e, de fato, existem abordagens para superá-lo. Para sinais de áudio, algumas das técnicas mais usadas incluem: métodos paramétricos; resolução adaptativa (analise com várias configurações de tempo / frequência e remende os resultados juntos - Wen X. e M. Sandler, "Espectrograma composto usando múltiplas transformadas de Fourier"); wavelets / decomposições em bases supercompletas; e uso de informações de fase para extrair a localização precisa dos picos de frequência (IFgram).

No entanto, parece que o gráfico que você mostrou não usa algumas dessas técnicas; então suspeito que não seja isso que você possa estar procurando. Parece haver alguma "mancha" no eixo horizontal (por exemplo, em t = 1,2s) e este é um sinal claro de que a análise foi feita com uma alta sobreposição entre os pedaços.

De fato, a duração do bloco e o número de quadros de análise por segundo não precisam ser vinculados entre si se você permitir que os quadros se sobreponham. Portanto, se você deseja usar o quadro de análise de 40ms, sua grade não precisa ser:

quadro 1: t = 0..t = 40ms; quadro 2: t = 40ms..t = 80ms

Poderia muito bem ser:

quadro 1: t = 0..t = 40ms; quadro 2: t = 10ms..t = 50ms

Essa sobreposição pode dar a ilusão de uma resolução temporal mais alta sem reduzir muito o tamanho da janela da FFT. Observe que isso só pode ajudar a localizar com precisão um evento no eixo do tempo - não ajudará a resolver dois eventos próximos no tempo ... Assim como aumentar o tamanho da FFT pode ajudar a identificar a localização de um pico de frequência, mas não com o resolução de dois picos de frequência adjacentes.

pichenettes
fonte
Como você ir por outro caminho (transformar a partir de espectrograma para sinal de áudio)
pete
4

Sim, muitas pessoas trabalharam na análise de frequência do tempo.

A abordagem de "dividir meus dados em partes, executar a FFT em cada parte" é uma boa idéia. A aplicação de uma "função de janela" em cada parte, imediatamente antes de executar a FFT, ajuda a evitar muitos artefatos. Permitir que os pedaços se sobreponham também ajuda. Após esses ajustes, você acaba com a transformação Gabor , que parece ser a transformada de Fourier (STFT) de curto prazo mais popular.

Como você já apontou, e como o artigo da Wikipedia aponta, todas as técnicas de transformação de Fourier de curto prazo têm uma desvantagem:

  • Quando você divide a série temporal em partes muito curtas, obtém informações de tempo altamente precisas sobre exatamente quando um tom inicia e para, mas as informações de frequência são muito desfocadas.
  • Quando você divide a série temporal em partes muito longas, obtém informações de frequência altamente precisas quanto à frequência exata de um tom, mas o tempo exato em que ele inicia e pára é embaçado.

Este é um problema famoso, mas, infelizmente, não só não foi resolvido, como ficou provado que a incerteza entre os dois é inevitável - o limite de Gabor, o limite de Heisenberg-Gabor, o princípio da incerteza etc.

Se eu fosse você, começaria com uma das muitas bibliotecas disponíveis para calcular a transformação de Gabor e experimentaria cortar a série temporal em vários comprimentos. Há uma boa chance de que bonito você vai ter sorte e você vai acabar com algum comprimento que dá adequada localização tempo e adequada discriminação de frequências.

Se isso não funcionar para esta aplicação, então eu gostaria de passar para outras abordagens para a representação tempo-freqüência e análise tempo-freqüência - transformadas wavelet, transforma chirplet , fractional transformada de Fourier (FRFT), etc.

EDIT: Algum código fonte para gerar espectrogramas / gráficos em cascata a partir de dados de áudio:

A imagem no espectrograma vai na direção inversa dos utilitários acima.

David Cary
fonte
A transformação Gabor é apenas com janelas Gaussianas. Se você usar outra janela, é apenas um STFT. (E as verdadeiras janelas gaussianas não existem no digital porque diminuem para o infinito.) #
21151
@ endolith: Você está certo. A transformação Gabor usa uma "função de janela gaussiana" truncada em comprimento finito - é bem próxima, mas não matematicamente idêntica a uma gaussiana ideal.
David Cary
Eu acho que a transformação de Gabor é uma transformação contínua, usando uma integral, para que possa ter um Gaussiano não truncado como janela?
Endolith 17/06
@ endolith: Sim, em princípio, uma pessoa poderia usar um gaussiano não truncado como uma janela. Na prática, uma vez que praticamente toda a energia do gaussiano está a poucos sigma da corcova central, o uso de uma janela truncada praticamente sempre não faz diferença perceptível no gráfico de saída. Como o software que produz plotagens em cascata de espectrogramas aplica repetidamente a janela Gaussiana e, em seguida, executa uma FFT para todas as colunas do gráfico, "não truncar" tornaria o software insuportavelmente lento.
David Cary