% Fourier Transform by iddata
% By Mehdi Ahmadizadeh, PhD
% Sharif University of Technology
ft_fsize=13;
ft_lthick=1.5;
ft_showtf=1;
ft_showin=1;
ft_endfre=100;
ft_n=1024;
ft_tdout=input('Variable Containing Time Domain Output >> ','s');
ft_ts   =input('Time Step (s)                          >> ');
ft_tdinp=input('Variable Containing Time Domain Input  >> ','s');
if isempty(ft_tdinp)
    ft_tdinp=ft_tdout;
    ft_showin=0;
    ft_showtf=0;
end
eval(['ft_tdidd=iddata(' ft_tdout ',' ft_tdinp ',' num2str(ft_ts) ');']);
ft_n=length(ft_tdidd.y);
ft_fdidd=fft(ft_tdidd,ft_n);

% output frequency spectrum
figure(1)
subplot(2,1,1)
plot(ft_fdidd.fre./(2*pi),abs(ft_fdidd.y),'LineWidth',ft_lthick);
set(gca,'FontSize',ft_fsize);
ylabel('Amplitude');
title('Output')
axis([0  ft_endfre 0 1]);, axis 'auto y';
subplot(2,1,2)
plot(ft_fdidd.fre./(2*pi),phase(ft_fdidd.y),'LineWidth',ft_lthick);
set(gca,'FontSize',ft_fsize);
xlabel('Frequency (Hz)');
ylabel('Phase');
axis([0  ft_endfre 0 1]);, axis 'auto y';

if ft_showin
    figure(2)
    subplot(2,1,1)
    plot(ft_fdidd.fre./(2*pi),abs(ft_fdidd.u),'LineWidth',ft_lthick);
    set(gca,'FontSize',ft_fsize);
    ylabel('Amplitude');
    title('Input')
    axis([0  ft_endfre 0 1]);, axis 'auto y';
    subplot(2,1,2)
    plot(ft_fdidd.fre./(2*pi),phase(ft_fdidd.u),'LineWidth',ft_lthick);
    set(gca,'FontSize',ft_fsize);
    xlabel('Frequency (Hz)');
    ylabel('Phase');
    axis([0  ft_endfre 0 1]);, axis 'auto y';
end

% transfer function
if ft_showtf
    figure(3)
    ft_tf=ft_fdidd.y./ft_fdidd.u;
    ft_tfa=abs(ft_fdidd.y)./abs(ft_fdidd.u);
    ft_tfp=phase(ft_fdidd.y)-phase(ft_fdidd.u);
    subplot(2,1,1)
    plot(ft_fdidd.fre./(2*pi),abs(ft_tf),'LineWidth',ft_lthick);
    set(gca,'FontSize',ft_fsize);
    ylabel('Amplitude');
    title('Transfer Function');
    axis([0  ft_endfre 0 1]);, axis 'auto y';
    subplot(2,1,2)
    plot(ft_fdidd.fre./(2*pi),phase(ft_tf),'LineWidth',ft_lthick);
    set(gca,'FontSize',ft_fsize);
    xlabel('Frequency (Hz)');
    ylabel('Phase');
    axis([0  ft_endfre 0 1]);, axis 'auto y';
end