function [TAU NU tfs]=tfa(t,s,dt_new,width,threshold,mode)

% time frequency transformation 
%
% t = discrete time
% s = discrete signal
% dt_new = time increment in the tf domain
% width = width of the Gaussian window

%==========================================================================
% interpolation
%==========================================================================

ti=t(1):dt_new:t(end);
si=interp1(t,s,ti,'spline');

t=ti;
s=si;
t_min=t(1);
t_max=t(end);

%==========================================================================
% initialisation
%==========================================================================

N=length(t);
dnu=1/(N*dt_new);
nu=0:dnu:(N-1)/(N*dt_new);
tau=t;

[TAU NU]=meshgrid(tau, nu);

%==========================================================================
% computation of the time-frequency representation
%==========================================================================

tfs=zeros(size(NU));
i=sqrt(-1);

for k=1:length(tau)
        
    w=win(t-tau(k),width);
    f=w.*s;
    
    if (max(abs(f))>threshold*max(abs(s)))
    
        tfs(k,:)=fft(f)/sqrt(2*pi)*dt_new;
        tfs(k,:)=tfs(k,:).*exp(-2*pi*i*t_min*nu);
        
    else
        
        tfs(k,:)=0.0;
        
    end
    
end

%==========================================================================
% plot results
%==========================================================================

if (strcmp(mode,'plot'))

    figure
    pcolor(TAU,NU,abs(tfs'));shading interp
    axis([0 tau(end) 0 1/(2*dt_new)])
    xlabel('time [s]');
    ylabel('frequency [Hz]');
    
end