%% ====================================================
%% FUNCIÓN ANALÍTICA Y ENVOLVENTE A PARTIR DE TDF
%% ====================================================

clear all; close;

% =====================================================
% Parámetros para generar la ondícula de Ricker
% =====================================================

leng  = 108 ; % (ms) Longitud en tiempo
dt    = 1   ; % (ms) Intervalo de muestreo en tiempo
f0    = 30  ; % (Hz) Frecuencia central

%% Llamo a la subrutina ricker y defino la ondícula
[rw,N] = ricker(leng,dt,f0);
M      = (N - 1)/2;

% =====================================================
% Transformada discreta de Fourier
% =====================================================

RW = fft(rw) ;

% =====================================================
% Espectro de la senal analítica 
% =====================================================

dw = 2*pi/N;
for k = 2:N         
  w = dw*(k-1);
  if (w == 0)       % k = 1 es w=0, GW(1) = RW(1)
    GW(k)= RW(k)
  elseif(w < pi)    % w>0 o w < w_nyquist = pi
    GW(k)= 2*RW(k);
  else              % w > w_nyquist = pi o w < 0
    GW(k) = 0;
  endif
endfor

% Otra forma más simple:
% 1 ... M  M+1  M+2 ... N
% |        |     |
% w=0    w<=pi  w>pi
%
% GW(1) = RW(1) ;           % Para w=0 
% GW(2:M+1) = 2*RW(2:M+1) ; % Para w>0 o w < w_nyquist = pi.
% GW(M+2:N) = 0 ;           % Para w<0 o w > w_nyquist = pi


% =====================================================
% Senal analítica (antitransformando)
% =====================================================

gw = ifft(GW) ;

% =====================================================
% Transformada de Hilbert 
% Tomo la parte imaginaria cambiada de signo de la 
% señal analítica: g = h - i*hw
% =====================================================

hw = -1 * imag(gw) ;

% =====================================================
% Envolvente (módulo de  la señal analítica)
% =====================================================

env = abs(gw) ;

% =====================================================
% GRÁFICOS
% =====================================================

t=(-M:M)*dt; % vector de tiempo

figure(1)
clf;
hold on ;
plot(t,rw,';Ondicula de Ricker;b-') ;
plot(t,hw,';Transformada de Hilbert;g-') ;
plot(t,env,';Envolvente;r-','linewidth',2) ;
plot(t,-env,'r-','linewidth',2) ;
axis([-M*dt,M*dt,-1.1,1.1])
hold off

% Guardo el gráfico en un postscript
print('fun_analitica_freq.eps','-depsc')
