FFT para uma faixa de frequência específica.


11

Eu gostaria de converter um sinal no domínio da frequência. A faixa de frequência desejada é 0.1 Hzpara 1 Hze a resolução de frequência é 0.01 Hz.

Com a taxa de amostragem de 30 Hz, FFT fornece aos componentes de frequência até 15 Hz. Aumentar a taxa de amostragem fornece uma melhor resolução de frequência. No entanto, a FFT oferece uma faixa de frequência mais ampla. No meu caso, eu apenas quero que 0.1 Hza 1 HzFFT desista de 15 Hz(Computação extra).

Minha pergunta é: existe uma maneira padrão de calcular um domínio de frequência de um sinal com faixa de frequência específica e alta resolução?


2
Parece que você quer o Zoom FFT arc.id.au/ZoomFFT.html
endolith

Se você fizer um DFT padrão com taxa de amostragem de 2 Hz e duração de 100 s, obterá uma banda de frequência de 0 a 1 Hz com resolução de 0,01 Hz. Apenas 10% de suas amostras estarão fora da banda de seu interesse. Vale a pena o esforço de elaborar os detalhes de um algoritmo "não tão padrão" para melhorar a eficiência desse cálculo relativamente pequeno?
O fóton

A restrição é que, a duração precisa ser a mais curta possível. 100s é muito longo. Precisamos de mais de 10 s
NcJie

Respostas:


5

Eu acho que a melhor solução para o seu problema é usar o chirp-DFT. É como uma lupa para uma certa faixa de frequência. É mais eficiente que a implementação direta da DFT (sem FFT), porque um algoritmo da FFT pode ser usado com algum pré e pós-processamento apropriado. Basicamente, você precisa modular seu sinal com um sinal sonoro, depois filtrar usando uma FFT e, em seguida, modular novamente seu sinal para obter a resposta de frequência desejada. Veja aqui e aqui para obter detalhes sobre como implementar o chirp-DFT.


2

Também existe a possibilidade de usar distorção de frequência (também funciona como uma lupa, na medida em que você obtém uma resolução aprimorada na sua faixa de frequência de interesse para o mesmo tamanho de FFT à custa de uma resolução mais baixa em frequências mais altas). No entanto, você não salva nenhum MIPS, pois o tamanho da FFT não é reduzido e a distorção de frequência está longe de ser barata.

Se você deseja calcular apenas determinadas posições na FFT (e, assim, salvar o MIPS), existem alguns métodos para fazer isso. Por exemplo, o DFT deslizante. As referências neste artigo fornecem uma explicação muito boa http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . Eu também acho que o algo do Goertzel faz algo semelhante, mas eu não sei.

Depois, há a opção de reduzir a amostragem antes da FFT. Isso provavelmente também salvará alguns MIPS.

Edit: Apenas para esclarecer o comentário sobre o algoritmo Goertzel não sendo útil. Ao conectar diretamente valores à expressão encontrada na parte inferior desta página da wiki http://en.wikipedia.org/wiki/Goertzel_algorithm , a abordagem de Goertzel será mais complexa que uma FFT quando o tamanho da FFT exigida for maior que 128 (supondo que o tamanho da FFT seja um fator 2 e uma implementação radix-2).

No entanto, há outros fatores que devem ser levados em consideração, a favor do Goertzel. Apenas para citar a página wiki: "As implementações e plataformas de processamento da FFT têm um impacto significativo no desempenho relativo. Algumas implementações da FFT [9] realizam cálculos internos de números complexos para gerar coeficientes em tempo real, aumentando significativamente seu" custo K por unidade de trabalho ". Os algoritmos FFT e DFT podem usar tabelas de valores de coeficientes pré-calculados para obter melhor eficiência numérica, mas isso requer mais acessos a valores de coeficientes armazenados em buffer na memória externa, o que pode levar a um aumento na contenção de cache, o que contraria algumas vantagens numéricas. . "

"Ambos os algoritmos ganham aproximadamente um fator de eficiência 2 ao usar dados de entrada com valor real e não com valor complexo. No entanto, esses ganhos são naturais para o algoritmo de Goertzel, mas não serão alcançados para a FFT sem o uso de determinadas variantes de algoritmos especializadas para transformar dados reais. dados avaliados. "


11
O DFT deslizante é realmente útil no contexto da análise de espectro em tempo real, onde a sequência de entrada é muito longa e o espectro precisa ser recalculado em intervalos regulares. O algoritmo de Goertzel é muito eficiente se apenas alguns valores de DFT precisarem ser calculados. Não seria útil para resolver o problema em questão, porque o número desejado de pontos de frequência é muito grande.
Matt L.

Obrigado @MattL. por apontar a fraqueza do algoritmo de Goertzel.
NcJie 27/05

1

A resolução da frequência é que é a frequência de amostragem e é o tamanho da FFT. Portanto, aumentar a frequência de amostragem na verdade aumenta a resolução da frequência (presumo que "melhor" você quer dizer menor). Portanto, você deve aumentar o tamanho da FFT , ou seja, o número de amostras processadas pela FFT em um bloco de dados, para diminuir a resolução da frequência. No seu exemplo, você precisaria de pelo menos 300 amostras para atingir a resolução de frequência desejada. fsNN

Δf=fsN
fsNN

Se não puder ser aumentado devido à complexidade computacional, o sinal de banda ilimitada poderá ser mudado de frequência antes da FFT. Seja o sinal contínuo, sua frequência central e sua largura de banda. é a versão amostrada de , ou seja, . Então uma mudança de freqüência pode ser alcançada por que . A frequência de amostragem agora pode ser reduzida, pois o sinal agora tem uma frequência de corte de em contraste com a frequência de cortes ( t ) f c f b x ( n ) s ( t ) x ( n ) = s ( n / f s ) ˜ x ( n ) = x ( n ) e - j 2 π k 0 / NNs(t)fcfbx(n)s(t)x(n)=s(n/fs)

x~(n)=x(n)ej2πk0/N
f b f b + f c ~ f s f b ~ x ( n ) H = f s / f b Nk0=fc/fsfbfb+fc que possuía antes da mudança de frequência. De acordo com o teorema da amostragem, a nova frequência de amostragem deve ser maior ou igual a e, portanto, pode ser reduzido por um fator de aumentando assim a resolução da frequência enquanto mantém constante.f~sfbx~(n)M=fs/fbN

Este método só funciona se for estritamente ilimitado por banda. Caso contrário, a filtragem passa-banda para filtrar a faixa de frequência desejada deve ser aplicada com antecedência. Observe também que a redução da amostragem por um número fracionário também introduzirá complexidade computacional adicional.Ms(t)M

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.