transformada rapida inversa graficar frecuencia fourier espectro ejemplos discreta corta matlab image-processing signal-processing fft

rapida - Obteniendo transformada de Fourier a partir de fase y magnitud-Matlab



transformada rapida de fourier en matlab ejemplos (1)

Su función es intentar probar dos cosas a la vez: (1) FFT y FFT inversa una imagen, y (2) desmontar un número complejo en partes reales e imaginarias, transformar en amplitud y fase, y luego volver a armarlo. En lugar de intentar todo al mismo tiempo y preguntarse por qué no funciona, debe probar cada una de estas dos funciones por separado.

Para comprobar si ifft(fft(image)) devuelve la imagen original, puede eliminar o comentar todas las manipulaciones de números complejos:

function y = forwardBackwardFFT(image) F = fft2(image); %# stuff removed f = ifft2(F); subplot(1,2,1); imshow(image); title(''Original Image''); subplot(1,2,2); imshow(f, []); title(''Image after forward and backward FFT''); y = f;

Esto funciona Entonces, el problema es con sus complejas manipulaciones numéricas. Considere lo que sucede cuando fase = 0 o fase = pi / 2. La tangente de 0 es 0, lo que lleva a una división por cero; y tan (pi / 2) es infinito.

Aquí hay un código que funciona:

mag = sqrt(real(F).^2 + imag(F).^2); phase = atan2(imag(F),real(F)); re = mag .* cos(phase); im = mag .* sin(phase); F = re + 1i*im;

Tendrá que hacer imagesc(abs(f)) para mostrar la imagen transformada inversa resultante, para deshacerse de un componente imaginario (casi cero).

Una forma más idiomática de obtener la magnitud y la fase de un número complejo es simplemente hacer:

mag = abs(F); phase = angle(F);

Espero que esto ayude.

La magnitud y la fase de una transformada Fourier F se definen como:

Mag = sqrt(Real(F)^2 + Imaginary(F)^2)

y

Phase = arctan(Imaginary(F)/Real(F))

Intenté escribir el código de matlab que toma una matriz de imagen en escala de grises, realiza fft2 () en la matriz y luego calcula la magnitud y la fase de la transformación. Luego deseo calcular las partes imaginarias y reales de la transformada de Fourier. Esto se hace reorganizando las primeras dos ecuaciones en:

Real = Mag/sqrt(1 + tan(Phase)^2)

y

Imaginary = Real*tan(Phase)

y finalmente combinando e inverso fft2:

F = Real + i*Imaginary image = ifft2(F)

Esperaría ver la misma imagen que la entrada, pero me sale basura. ¿Mis cálculos están equivocados? Mi código mfile de matlab es el siguiente:

function y = forwardBackwardFFT(image) F = fft2(image); mag = sqrt(real(F).^2 + imag(F).^2); phase = atan(imag(F)./real(F)); re = sqrt((mag.^2)./(1 + tan(phase).^2)); im = re.*tan(phase); F = re + i*im; f = ifft2(F); subplot(1,2,1); imshow(image); Title(''Original Image''); subplot(1,2,2); imshow(f); Title(''Image after forward and backward FFT''); y = f;

muchas gracias :)