1function f_val = DFT_time2freq( t, val, freq, signal_type )
2% f_val = DFT_time2freq( t, val, freq, signal_type )
3%
4% computes the DFT at the given frequencies
5%
6% parameter:
7% t  : time vector
8% val: data vector
9% freq: DFT frequency vector
10% signal_type: 'pulse' (default), 'periodic'
11%
12% return values:
13% f_val:  single-sided spectrum
14%
15% example:
16%   t=linspace(0,1,100);
17%   t_val=0.9*sin(2*pi*3*t); % sine wave; amplitude 0.9; frequency 3 Hz
18%   f=linspace(1,5,101);
19%   f_val=DFT_time2freq( t, t_val, f, 'periodic' );
20%   interp1(f,abs(f_val),3)
21% ans = 0.8910
22%   plot( t, t_val )
23%   plot( f, abs(f_val) )
24
25if numel(t) ~= numel(val)
26    error 'numel(t) ~= numel(val)'
27end
28
29if nargin<4
30  signal_type = 'pulse';
31end
32
33f_val = zeros(1,numel(freq));
34for f_idx=1:numel(freq)
35    f_val(f_idx) = sum( val .* exp( -1i * 2*pi*freq(f_idx) * t ) );
36end
37
38if strcmpi(signal_type, 'pulse')
39  dt = t(2)-t(1);
40  f_val = f_val * dt;
41elseif strcmpi(signal_type, 'periodic')
42  f_val = f_val / length(t);
43else
44  error 'unknown signal type'
45end
46
47f_val = f_val * 2; % single-sided spectrum
48