Transformada de Fourier de función gaussiana (Matlab)

0

Estoy tratando de escribir mi propio código Matlab para muestrear una función gaussiana y calcular su DFT, y hacer un gráfico de la forma de onda gaussiana temporal y su transformada de Fourier.

Según el par FT:

\ $ e ^ {- at ^ 2} \ iff \ sqrt {\ frac {\ pi} {a}} e ^ {- \ pi ^ 2 \ nu ^ 2 / a}, \ $

El FT de un gaussiano es un gaussiano, y también debería ser una función real .

Así que aquí está mi gráfica:

Entonces, ¿por qué mi FT es una línea plana en lugar de ser gaussiano?

¿Y por qué es que cuando grafico el argumento de la DFT, la parte imaginaria es distinta de cero? ¿No debería ser real el FT?

Cualquier ayuda sería muy apreciada.

Aquí está mi código:

clear; clf; clc;
a=5;
n=50; % Length of DFT
k=[-n:1:n];

x=exp(-a.*k.^2); % Gaussian function

subplot(221);
plot(k,x);grid;
axis([1.5,n,-max(-x),max(x)]);
xlabel('Data waveform');
hold on; plot(k,x,'o'); hold off;

xx=fft(x)/n;
subplot(222);
plot(k, abs(xx));grid;xlabel('Transformed, magnitude');
axis([1,n,0,1]);
hold on; plot(k,abs(xx),'o'); hold off;

subplot(223);

plot(k, real(xx));grid;xlabel('Transformed, real');
hold on; plot(k, real(xx), 'o'); hold off;
axis([1,n,-1,1]);

subplot(224)
plot(k,imag(xx)); grid;
axis([1,n,-1,1]);
xlabel('Transformed, imaginary');
hold on; plot(k, imag(xx), 'o'); hold off;

figure(gcf);
    
pregunta Merin

1 respuesta

1

La FFT parece plana, porque el valor de tu a es demasiado alto.

En segundo lugar, debes usar un eje x diferente para el gráfico FFT. Con los valores de tiempo N + 1, obtienes puntos FFT para los valores nu de -N / 2 a + N / 2.

Debería saber que el vector que devuelve la función FFT de Matlab tiene estos puntos en el orden [0,1,2, ..., + N / 2, -N / 2, ..., - 1 ]. Esto significa que tiene que cambiar el vector para parecerse a un gaussiano.

Recomendaría, no escalar el eje manualmente para una primera prueba.

Hay partes imaginarias, debido a cómo se representa el gaussiano en el vector Matlab. Más información aquí . Puede usar x = circshift(x,[0 -50]); para obtener una FFT sin partes imaginarias.

clear; clf; clc;
a=5;
n=50; % Length of DFT
k=[-n:1:n];

x=exp(-a.*k.^2); % Gaussian function
xs = circshift(x,[0 -50]); 

subplot(221);
plot(k,x);grid;
%axis([1.5,n,-max(-x),max(x)]);
xlabel('Data waveform');
hold on; plot(k,x,'o'); hold off;

nu=[0:1:2*n];
xx=fft(xs);
subplot(222);
plot(nu, abs(xx));grid;xlabel('Transformed, magnitude');
%axis([1,n,0,1]);
hold on; plot(nu,abs(xx),'o'); hold off;

subplot(223);

plot(nu, real(xx));grid;xlabel('Transformed, real');
hold on; plot(nu, real(xx), 'o'); hold off;
%axis([1,n,-1,1]);

subplot(224)
plot(nu,imag(xx)); grid;
%axis([1,n,-1,1]);
xlabel('Transformed, imaginary');
hold on; plot(nu, imag(xx), 'o'); hold off;

figure(gcf);
    
respondido por el xoron

Lea otras preguntas en las etiquetas