Na maioria dos exemplos e códigos FFT que eu já vi, a saída (magnitudes de frequência) da operação DFT direta é dimensionada por N - ou seja, em vez de fornecer a magnitude de cada compartimento de frequência, ele fornece N vezes a magnitude.
Operacionalmente, isso ocorre simplesmente porque a DFT é calculada tomando o produto interno do sinal com cada seno-base (isto é, correlação não normalizada). No entanto, isso não responde à pergunta filosófica de por que não apenas dividimos por N antes de retornar a saída?
Em vez disso, a maioria dos algoritmos se divide por N ao re-sintetizar.
Isso parece contra-intuitivo para mim, e (a menos que esteja faltando alguma coisa), torna todas as explicações da DFT muito confusas.
Em todos os cenários que posso imaginar, a magnitude real (não a magnitude * N) é o valor que eu preciso de uma operação DFT, e a magnitude normalizada é o valor que eu quero inserir em uma operação IDFT.
Por que o DFT não é definido como DFT / N e o IDFT é definido como uma simples soma de sinusóides de magnitude normalizada?
fonte
Respostas:
Se você dimensiona a saída do seu DFT, direta ou inversa, nada tem a ver com a convenção ou o que é matematicamente conveniente. Tem tudo a ver com a entrada para o DFT. Permitam-me mostrar alguns exemplos em que o dimensionamento é necessário ou não para as transformações direta e inversa.
Deve escalar uma transformação direta em 1 / N.
Para começar, deve ficar claro que, para analisar uma simples onda senoidal, o comprimento da transformação deve ser irrelevante, matematicamente falando. Suponha que N = 1024, Freq = 100 e seu sinal seja:
f (n) = cos (Freq * 2 * Pi * n / N)
Se você usar um DFT de 1024 pontos de f (n), encontrará o bin [100] = 512. Mas esse valor não é significativo até que você o dimensione por N. 512/1024 = 1/2 e, é claro, o outro 1/2 está no espectro negativo no compartimento [924].
Se você dobrar o comprimento da DFT, N = 2048, os valores de saída serão duas vezes os da DFT de 1024 pontos, o que novamente torna os resultados sem sentido, a menos que a escala seja 1 / N. O comprimento da DFT não deve ser um fator nesse tipo de análise. Portanto, neste exemplo, você deve dimensionar a DFT em 1 / N.
Não deve dimensionar uma transformação direta.
Agora, suponha que você tenha a resposta de impulso de um filtro FIR de 32 torneiras e queira saber sua resposta de frequência. Por conveniência, assumiremos um filtro passa-baixo com um ganho de 1. Sabemos que, para esse filtro, o componente DC da DFT deve ser 1. E deve ficar claro que esse será o caso, independentemente do tamanho do filtro. DFT porque o componente DC é simplesmente a soma dos valores de entrada (ou seja, a soma dos coeficientes FIR).
Portanto, para essa entrada, o DFT não é escalado em 1 / N para obter uma resposta significativa. É por isso que você pode zerar uma resposta de impulso o quanto quiser, sem afetar o resultado da transformação.
Qual é a diferença fundamental entre esses dois exemplos?
A resposta é simples. No primeiro caso, fornecemos energia para cada amostra de entrada. Em outras palavras, a onda senoidal estava presente em todas as 1024 amostras, por isso precisamos escalar a saída da DFT em 1/1024.
No segundo exemplo, por definição, fornecemos energia apenas para 1 amostra (o impulso em n = 0). Foram necessárias 32 amostras para o impulso passar pelo filtro de 32 torneiras, mas esse atraso é irrelevante. Como fornecemos energia para 1 amostra, escalamos a saída da DFT em 1. Se um impulso fosse definido com 2 unidades de energia em vez de 1, escalaríamos a saída em 1/2.
Não deve escalar uma transformação inversa.
Agora vamos considerar uma DFT inversa. Assim como no DFT avançado, devemos considerar o número de amostras para as quais estamos fornecendo energia. Obviamente, temos que ser um pouco mais cuidadosos aqui, porque devemos preencher os compartimentos de frequência positivo e negativo de forma adequada. No entanto, se colocarmos um impulso (ou seja, 1) em dois compartimentos apropriados, a saída resultante da DFT inversa será uma onda cosseno com uma amplitude de 2, independentemente de quantos pontos usarmos na DFT inversa.
Assim, como na DFT direta, não escalamos a saída da DFT inversa se a entrada for um impulso.
Deve escalar uma transformação inversa.
Agora considere o caso em que você conhece a resposta de frequência de um filtro passa-baixo e deseja fazer uma DFT inversa para obter sua resposta de impulso. Nesse caso, como estamos fornecendo energia em todos os pontos, devemos escalar a saída da DFT em 1 / N para obter uma resposta significativa. Isso não é tão óbvio, porque os valores de entrada serão complexos, mas se você trabalhar com um exemplo, verá que isso é verdade. Se você não aumentar em 1 / N, terá valores de resposta de impulso de pico na ordem de N, o que não pode ser o caso se o ganho for 1.
As quatro situações que acabei de detalhar são exemplos de pontos finais, onde fica claro como dimensionar a saída da DFT. No entanto, há muita área cinza entre os pontos finais. Então, vamos considerar outro exemplo simples.
Suponha que tenhamos o seguinte sinal, com N = 1024, Freq = 100:
Observe as diferenças de amplitude, frequência e duração dos três componentes. Infelizmente, o DFT deste sinal mostrará todos os três componentes no mesmo nível de potência, mesmo que o segundo componente tenha 1/36 do nível de potência dos outros dois.
O fato de todos os três componentes estarem fornecendo a mesma quantidade de energia é óbvio, o que explica os resultados da DFT, mas há um ponto importante a ser mencionado aqui.
Se soubermos a duração dos vários componentes de frequência, poderemos dimensionar os vários compartimentos de frequência de acordo. Nesse caso, faríamos isso para dimensionar com precisão a saída da DFT: bin [100] / = 128; bin [200] / = 768; bin [400] / = 128;
O que me leva ao meu ponto final; em geral, não temos idéia de quanto tempo um componente de frequência específico está presente na entrada da nossa DFT; portanto, não podemos fazer esse tipo de escala. No entanto, em geral, fornecemos energia para cada ponto de amostra, e é por isso que devemos escalar a DFT direta em 1 / N ao analisar um sinal.
Para complicar, quase certamente aplicaríamos uma janela a esse sinal para melhorar a resolução espectral da DFT. Como o primeiro e o terceiro componentes de frequência estão no início e no final do sinal, eles são atenuados em 27 dB, enquanto o componente central é atenuado em apenas 4 dB (janela de Hanning).
Para ser claro, a saída do DFT pode ser uma representação muito ruim da entrada, escalada ou não.
No caso da DFT inversa, que geralmente é um problema de matemática pura, em oposição à análise de um sinal desconhecido, a entrada para a DFT é claramente definida, para que você saiba como dimensionar a saída.
Ao analisar um sinal com um analisador de espectro, analógico ou FFT, os problemas são semelhantes. Você não conhece a potência do sinal exibido, a menos que também conheça seu ciclo de trabalho. Mas, mesmo assim, a janelação, a amplitude, as taxas de varredura, a filtragem, o tipo de detector e outros fatores trabalham para alcançar o resultado.
Por fim, você deve ter bastante cuidado ao se mover entre os domínios de tempo e frequência. A pergunta que você fez em relação à escala é importante, por isso espero ter deixado claro que você deve entender a entrada da DFT para saber como escalar a saída. Se a entrada não estiver claramente definida, a saída da DFT deve ser considerada com muito ceticismo, seja ela escalada ou não.
fonte
Posso pensar em várias razões que envolvem questões de precisão computacional, mas isso provavelmente não faria justiça, porque matematicamente a definimos da mesma maneira, não importa o quê, e a matemática não conhece questões de precisão.
Aqui está a minha opinião. Vamos pensar conceitualmente sobre o que DFT significa no sentido de processamento de sinal, não apenas como uma transformação. Nesse caso, parece-me que a aplicação de DFT a um sinal e a um sistema nos faz desejar ver resultados diferentes.
Por exemplo, vamos aplicar a DFT a um sinal constante de valor 1. Suponhamos também que esse sinal tenha comprimento finito e 16 toques. O que queremos da DFT neste caso? Obviamente, queremos que ele nos diga qual amplitude cada componente de frequência do sinal possui. Claramente, nosso sinal tem um único componente de frequência 0 e amplitude 1. Mas o DFT nos dá um único pico no compartimento 0 e na altura 16! Nesse caso, sua frustração com a definição da DFT faz todo sentido. Devemos escalar os coeficientes de análise, não os coeficientes de síntese.
Ok, agora vamos analisar a mesma matriz numérica, ou seja, nossa sequência de 16, mas neste caso como um sistema. O que conceitualmente queremos que a resposta em frequência de um sistema signifique? A maioria das pessoas dirá que é a amplitude da saída comparada à da entrada, ou seja, a função de transferência. Nesse caso, suponha que alimentemos um sinal DC de amplitude unitária em nosso sistema e observemos a amplitude da resposta em estado estacionário. Bem, convolva dois sinais constantes de 16 toques juntos e você obterá uma rampa transitória seguida por uma saída em estado estacionário, que é um sinal de amplitude DC (verifique isto!) 16! Nesse caso, nossa definição de transformação de análise não escalonável faz mais sentido do que o contrário.
No final do dia, é tudo sobre o que você está tentando representar. Há muitas razões para considerar essa definição centrada no sistema da DFT.
fonte
Na verdade, três maneiras diferentes de colocar os fatores de escala são comuns em várias e diferentes implementações de FFT / IFFT: 1.0 para frente e 1.0 / N para trás, 1.0 / N para frente e 1.0 para trás e 1.0 / sqrt (N) para frente e para trás.
Todas essas três variações de escala permitem que uma viagem de ida e volta do IFFT (FFT (x)), usando funções genéricas não escalonadas de pecado () e cos () para os fatores de dois fatores, seja uma transformação de identidade.
Observe que preservar a magnitude sinusoidal na FFT direta não preserva a energia total (como no teorema de Parseval). Escolha o que você preferir.
fonte