MATLAB:


11

En MATLAB, los resultados de las funciones ffty / o a ifftmenudo requieren un procesamiento adicional antes de ser considerados para el análisis.

He escuchado muchas opiniones diferentes sobre lo que es correcto:

  • Escalada

    Mathworks afirma que ffty las ifftfunciones se basan en las siguientes ecuaciones:

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • Escalado por longitud de señal

    Mis compañeros suelen escalar los datos en 1N inmediatamente después del procesamiento de lafft.
    (No consideramos losfftdatos enbrutoantes de escalar).

    %% Realizar fft
    X_f = fft (x, n_sample, 1) / n_sample; % fft debe normalizarse por el número de muestras en los datos. % Esta convención fue establecida por el desarrollador de software (Mathworks).

    ¿Es esto correcto?

    1. Si es así, ¿por qué la ifftfunción MATLAB espera que no hayamos escalado en ?1/N
    2. ¿Existe una ifftfunción o opción de función MATLAB que no se escala automáticamente en ?1/N

    Alternativamente, ¿hay una convención mejor que deberíamos usar para colocar el ? Por ejemplo, colocando 1 / N en lugar de , o colocando 1 / 1/N1/Nfftifft en ambas ecuaciones, en lugar de un1/N?1/N1/N

  • Escalado por período de muestreo

    He oído que las funciones ffty ifftsuponen que el período de muestreo , y que para que las funciones sean verdaderas, lo siguiente necesitaría aplicar:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1nN

Ver enlaces:

  • Enlace 1 (ver comentario a Matt Szelistowski por el Dr. Seis)
  • Enlace 2 (véase la respuesta de Rick Rosson frente a la del Dr. Seis)
  • Enlace 3 (ver comentario de Matt (Mensaje: 7/16) y comentario de Poorya (14/16)
  • Enlace 4 (ver página 10, diapositiva [1,1])
  • Enlace 5 (ver páginas 8 + 9) [parece que está usando la convención inversa para fft y ifft].

¿Es esto cierto?

Estoy particularmente molesto porque no puedo encontrar ninguna ecuación DFT o DTFT en Wikipedia que incluya el período de muestreo.


2
Por cierto, kando solo lo dice como es (con MATLAB): pero tengo que decir que esta convención cableada de MATLAB para poner DC en el bin # 1 (o la amplitud del componente de frecuenciaken bink+1)me vuelve jodidamente loco.
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
robert bristow-johnson

Respuestas:


6

La posibilidad de escalar o no la FFT directa en 1 / N depende del resultado que desee para un análisis posterior: energía (preservar la identidad de Parseval) o amplitud (medición de altura o voltios, etc.).

Si desea medir o analizar energía, no escale 1 / N, y una sinusoide más larga de la misma amplitud producirá un resultado FFT mayor, proporcional a la mayor energía de una señal más larga.

Un poco más común, si desea medir o analizar amplitudes, para obtener una sinusoide más larga (por lo tanto, con más energía total en la misma amplitud exacta) para producir aproximadamente el mismo resultado FFT como una señal más corta, deberá reducir la escala Suma de FFT por una proporción proporcional a la longitud. La relación podría ser reference_length / N, que a veces es 1 / N si la ganancia de entrada del sistema es 1.0 para cualquier dimensión o unidad, incluidas las dimensiones del intervalo de tiempo, que elija utilizar en su análisis posterior. Debe reducir la escala proporcionalmente porque un DFT es una suma: cuanto más sume elementos similares, mayor será el resultado.

Entonces. Energía o amplitud. ¿Cuál quieres?

Ahora, si reduce la FFT hacia adelante, entonces no debe escalar la inversa de modo que IFFT (FFT (x)) == x. O hacer al revés.

El 1 / sqrt (N) para el escalado me parece ser cuando se necesita una simetría formal para alguna prueba, o cuando se construye algún tipo de tubería de hardware donde la latencia y / o el número de unidades / puertas aritméticas para el DFT y para el IDFT debe ser idéntico. Pero no se obtiene una buena medición directa de energía o amplitud para ningún tipo típico de análisis de ingeniería.


1/N1/N1/N1/N

Además, al decir "así con más energía a la misma amplitud" ... ¿no preferirías decir "frecuencia"?
LCsa

7

1/N1/N1

El comentario

% fft debe normalizarse por el número de muestras en los datos.
% Esta convención fue establecida por el desarrollador de software (Mathworks).

Está Mal. Nadie dice que debe normalizar el resultado de la FFT. Si quieres, eres libre de hacerlo.

TT

(1)X(2πkNT)Tn=0N1x(nT)ej2πkn/N,0k<N

TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]. En esta respuesta se pueden encontrar más detalles sobre el uso del DFT para aproximar la transformación de Fourier de tiempo continuo .


2
¿Para qué es el voto negativo? Por favor comenta.
Matt L.

1
Normalmente voto por voto secreto, pero esta vez haré una excepción. dependiendo de lo que uno esté haciendo con el DFT, ciertamente hay convenciones "mejores" que otras. (pero ninguna convención es mejor que las demás en todas las circunstancias.)
Robert Bristow-Johnson

5

particularmente dado que se trata de una convención, no reforzaré la convención ridícula de MATLAB y responderé solo con la convención o convenciones correctas y apropiadas . es decir, la indexación de MATLAB para el DFT no es correcta ni adecuada, pero soy bastante agnóstico acerca de cuál de las tres convenciones de escalado comunes.

0n<N0k<Nx[n]NX[k]N

x[n+N]=x[n] nZ
X[k+N]=X[k] kZ

x[n]X[k]

h[n]x[n]i=0N1h[i]x[ni]=i=0N1x[i]h[ni]
W[k]X[k]i=0N1W[i]X[ki]=i=0N1X[i]W[ki]

entonces, la única ventaja de una convención sobre la otra (suponiendo que ambas convenciones sean válidas) puede ser la simplicidad de expresión de algunos de los teoremas.


La convención de escalado más común para el DFT:

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

tiene la ventaja de la simplicidad con respecto a la convolución circular en el "dominio del tiempo"

DFT{h[n]x[n]}=H[k]X[k]

pero hay un factor de escala del que debe preocuparse si se involucra en el "dominio de frecuencia" :

iDFT{W[k]X[k]}=1Nw[n]x[n]

El teorema de Parseval también tiene que preocuparse por un factor de escala.

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

y el teorema de la dualidad:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

La otra convención de escala común para el DFT:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

También tiene más simplicidad con respecto a la convolución circular en el dominio de frecuencia

iDFT{W[k]X[k]}=w[n]x[n]

pero hay un factor de escala del que debe preocuparse si participa en el dominio del tiempo :

DFT{h[n]x[n]}=1NH[k]X[k]

El teorema de Parseval también tiene que preocuparse por un factor de escala.

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

y el teorema de la dualidad:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

La convención de escala unitaria para el DFT es idéntica en escala con su inversa y conserva la energía a través de la transformación o transformación inversa:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

la convolución en el dominio del tiempo o del dominio de la frecuencia tiene que preocuparse por el mismo factor de escala:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

pero el teorema de Parseval no tiene que preocuparse por el factor de escala.

n=0N1|x[n]|2=k=0N1|X[k]|2

ni el teorema de dualidad:

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


Cuando se habla de convenciones de DFT, generalmente se trata solo de los factores de escala, no de la no cuestión de indexación. Si pensabas que me refería a la indexación cuando dije que esa es la convención DSP común, entonces fue un malentendido. Por supuesto, me referí a la escala; la indexación es totalmente irrelevante, porque no tiene nada que ver con la definición de DFT (y la escala sí lo tiene).
Matt L.

no es un jodido "no problema" cuando, en MATLAB, usas la max(abs(X))función para encontrar dónde está un pico espectral y olvidas restar 1del índice devuelto y vas a hacer cálculos matemáticos sobre él. Es un problema. y triste por eso. el origen de indexación tiene tanto que ver con la " definición de DFT" como la escala. tiene que ver con qué contabilidad se requiere o no.
robert bristow-johnson

podría haber sido yo, pero esta vez no lo soy :) Pero aún así, no estoy de acuerdo con la importancia que le das a la indexación, pero aprecio que eso sea personal. Nuevamente, no hay voto negativo porque aprecio el tiempo que dedicas a la respuesta.
Matt L.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.