Espectro de potencia de función gaussiana (Matlab)

0

Estoy intentando trazar el espectro de potencia (\ $ | FT (f) | ^ 2 \ $) de una función gaussiana, y superponerlo con el espectro teóricamente esperado calculado a partir del par de transformadas de Fourier:

\ $ e ^ {- \ alpha t ^ 2} \ iff \ sqrt {\ frac {\ pi} {\ alpha}} e ^ {- \ pi ^ 2 \ nu ^ 2 / \ alpha}. \ $

Pero cuando hago esto en Matlab, se ven completamente diferentes:

Entonces, ¿qué está mal aquí? Estoy muy confundido, pero creo que tiene algo que ver con las diferencias en la normalización de la FT utilizada aquí con la de la DFT de Matlab. ¿Qué es exactamente lo que necesito cambiar en el código para que coincidan los gráficos?

Cualquier ayuda sería muy apreciada.

Aquí está mi código:

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

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

nu=[0:1:2*n];
xx=fft(x); % DFT calculation
y=(sqrt(pi/a)).*exp((-pi^2*nu.^2)./a); % Theoretical
yy=(abs(y)).^2; % Power spectrum


% subplot(2,1,1) % Power spectrum plot
plot(nu, yy, '-om'); hold on;
hold on; plot(nu,(abs(fftshift(xx))).^2,'-o'); grid;xlabel('Frequency');
title('Power Spectrum')
hold off;

% subplot(2,1,2) % Temporal waveform plot
% plot(k,x);grid;
% xlabel('Time');
% title('Data waveform');
% hold on; plot(k,x,'o'); hold off;

figure(gcf);
    
pregunta Merin

1 respuesta

1

El problema es su cálculo de los valores teóricos de Fourier.

Cuando realiza una DFT con N puntos, el intervalo entre los puntos en el eje de frecuencia es \ $ \ Delta f = 1 / (N t_s) \ $ donde \ $ t_s \ $ denota el tiempo de muestreo.

Por lo tanto, tienes que calcular los valores teóricos de Fourier con $$ \ sqrt {\ frac {\ pi} {a}} \ exp {- (\ frac {(\ pi k) ^ 2} {(Nt_s) ^ 2 \ cdot a})} $$

Use nu=[-n:1:n]; y y=(sqrt(pi/a))*exp((-pi^2*nu.^2)/((2*n+1)^2*a)); en su código.

    
respondido por el xoron

Lea otras preguntas en las etiquetas