Aqui está o problema. Eu tenho uma matriz de dados 2D, a primeira coluna representa os dados de tempo e a segunda coluna representa os dados de resposta senoidal, com base nos dados de tempo. Aplico fft e obtenho minha frequência (com a qual comecei) em um compartimento específico, conforme esperado, e encontro a amplitude e o ângulo de fase desse compartimento. Agora, o problema é que tenho a mesma configuração, mas com mais pontos de dados, aplico o fft novamente e o número do compartimento muda (o que é normal e é onde eu espero que seja), a amplitude é a mesma, mas o ângulo da fase é diferente) primeiro isso é normal? segundo, que abordagem devo adotar? Obrigado
PS: nenhuma das configurações (mencionadas acima) fornece dados com comprimento de potência de 2, digamos que o primeiro fornece 1620 pontos de dados e o segundo fornece 1745 pontos de dados; portanto, deve usar a próxima potência de 2 para ambos do começando?
Não há nada inerentemente 'mágico' em executar uma potência de 2 DFT, além do fato de que executar uma potência de 2 DFT permite executar a DFT em vez de . Portanto, o poder de 2 DFT (o algoritmo que faz isso é conhecido como FFT) permite que você simplesmente acelere sua computação por um grande fator.O(Nlog(N)) O(N2)
Se você fizer uma DFT maior que o seu vetor de dados, estará essencialmente interpolando no domínio da frequência. Portanto, seu novo pico pode não ser o pico equivalente antigo que você detectou pela primeira vez antes de fazer uma DFT maior. E como não é o mesmo, você está essencialmente escolhendo uma base exponencial complexa diferente (seno mais cosseno) desta vez, o que significa que você provavelmente teria um valor de fase diferente, sim.
Sim, se você deseja obter uma potência de 2 FFT, basta escolher a próxima potência de 2 FFT de comprimento maior que o comprimento do registro de dados.
Você nunca deve ter uma FFT de comprimento inferior ao tamanho do seu registro, a menos que queira descartar dados. A questão de "Qual é o tamanho da minha FFT", assumindo que o tamanho da FFT é maior que o tamanho do registro de dados, torna-se rapidamente dependente do aplicativo. Normalmente, você pode obter uma duração de FFT igual à duração do seu registro. No entanto, às vezes você deseja escolher um pico de uma FFT 'mais suave'. Nesse caso, você pode ter um comprimento maior de FFT (2 vezes mais, 3 vezes mais, 10 vezes mais etc.) e interpolaria seu pico no domínio da frequência. Não há número mágico, no entanto. Lembre-se de que a granularidade do seu resultado de FFT é sempre .fsN
fonte
Mostrando a resposta de @ user4619:
Usando IPython, que é semelhante ao Matlab
Se você estiver usando números realmente primos, é bastante importante (um fator de 50!). Se você estiver usando números com fatores baixos, não é importante. Mas fazê-lo apenas com números primos apenas o torna mais rápido - não muda a resposta.
fonte