Eu gostaria de converter um sinal no domínio da frequência. A faixa de frequência desejada é 0.1 Hz
para 1 Hz
e 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 Hz
a 1 Hz
FFT 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?
Respostas:
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.
fonte
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. "
fonte
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
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 / NN s(t) fc fb x(n) s(t) x(n)=s(n/fs)
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
fonte