Por que as magnitudes são normalizadas durante a síntese (IDFT), não a análise (DFT)?

17

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?

bryhoyt
fonte
2
Sinceramente, acho que essa é uma das perguntas mais legais já feitas aqui.
Phonon

Respostas:

9

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:

f(n) = 6 * cos(1*Freq * 2*Pi * n/N)  n = 0 - 127
f(n) = 1 * cos(2*Freq * 2*Pi * n/N)  n = 128 - 895
f(n) = 6 * cos(4*Freq * 2*Pi * n/N)  n = 896 - 1023

Domínio do tempo

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.

Domínio de Freqüência Não Janela

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).

Espectro Windowed

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.

user5108_Dan
fonte
Eu escolhi esta resposta para abrangência e muitas informações detalhadas, mas veja também a excelente resposta de Phonon para uma visão geral intuitiva.
Bryhoyt 15/11/2013
9

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.

1(N)

Phonon
fonte
Ótima resposta, obrigado! Eu escolhi a resposta do usuário5108_Dan para abrangência, mas sua resposta definitivamente ajudou a fornecer a melhor intuição.
Bryhoyt 15/11/2013
7

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.

hotpaw2
fonte