Loading [MathJax]/jax/output/HTML-CSS/jax.js
Contents
In [1]:
 



1  The continuous time case

1.1  The continuous time Fourier transform

1.1.1  Definition

We saw above that any discrete sequence can be expressed exactly as an infinite sum of complex exponentials. The same kind of result exist for continuous time signals. Any x(t) can be expressed as the Fourier integral x(t)=+X(f) ej2πft df, where X(f)=+x(t) ej2πft dt.

The Fourier transform exists if the three sufficient conditions of Dirichlet are verified:

  1. x(t) possesses a finite number of discontinuities on any finite interval,
  2. x(t) possesses a finite number of maxima and minima on any finite interval,
  3. x(t) is absolutely integrable, that is +|x(t)| dt<+. Indeed, if x(t) is absolutely integrable, then +|x(t) ej2πft| dt<+|x(t)| dt<+ (since |x(t) ej2πft|=|x(t)| |ej2πft|<|x(t)|).

1.1.2  Example - The Fourier transform of a rectangular pulse

Example 1
rectangular pulse. We denote rectT(t) the rectangular pulse defined by rectT(t)={1if t[T/2,T/2],0elsewhere. We look for the Fourier transform of x(t)=ArectT(t). It is enough to write down the definition of the Fourier transform: X(f)=FT{ArectT(t)}=AT/2T/2ej2πftdt, that is X(f)=A[ej2πftj2πf]T2T2=A1j2πf[ejπfTejπfT] so that finally X(f)=ATsin(πfT)πfT=ATsinc(πfT). where sinc(.) is called a `cardinal sinus`. We note that this Fourier tyransform is peal and even. We will see later that this property is true for the Fourier transforms of all real and even signals. The function sinc(πfT) vanishes for πfT=kπ, that is for f=k/T; except for k=0, since sinc(x)=1 for x0.

Let us look at this sinc function (you may play with several values of the width):

In [2]:
%matplotlib inline
def sinc(x):
    if isinstance(x,(int,float)): x=[x]
    x=np.array(x)
    out=np.ones(np.shape(x))
    I=np.where(x!=0)
    out[I]=np.sin(x[I])/x[I]
    return out

def dsinc(x,L):   # This is the "discrete time" cardinal sinus
    if isinstance(x,(int,float)): x=[x]
    x=np.array(x)
    out=np.ones(np.shape(x))
    I=np.where(x!=0)
    out[I]=np.sin(x[I])/(L*np.sin(x[I]/L))
    return out

N=1000
f=np.linspace(-0.5,0.5,400)
plt.plot(f,sinc(pi*6*f))
plt.grid(b=True)

Playing with values using a slider.

In [3]:
N=1000
f=np.linspace(-0.5,0.5,400)
out = widgets.Output()

#----- Callbacks des widgets -------------
@out.capture(clear_output=True, wait=True)
def pltsinc(value):
    #clear_output(wait=True)
    T = s.value
    plt.plot(f,sinc(pi*T*f))
    plt.grid(b=True)
    plt.show()
s=widgets.FloatSlider(min=0, max=20, step=0.1, value=8)
pltsinc('Width')
s.observe(pltsinc,'value')
display(widgets.VBox([s, out]))
#alternatively
#interact(pltsinc,value=fixed(1), T=[0.1,10,0.1])
Widget Javascript not detected.  It may not be installed or enabled properly.

The integral of sinc(πfT) -- Using the fact the Dirichlet integral is +0sinc(x)dx=π2, the symmetry of sinc(), and a change of variable, we obtain that +Tsinc(πfT)df=1.

It is now useful to look at the limit cases.

  • First, let T+, that is let the rectangular pulse tends to a constant value. Its Fourier transform, Tsinc(πfT) tends to a mass on zero, since all the zero crossings occurs at zero. Furthermore, the amplitude is proportionnal to T and then goes to infinity. Hence, the Fourier transform of a constant is a mass with infinite amplitude, located at 0. As we noted above, the integral of Tsinc(πfT) equals to 1, which implies that the integral of this mass at zero is 1. This Fourier transform is not a function in the classical sense, but a distribution, see also the Encyclopedia of mathematics. In fact, it is the generalization of the Dirac δ function we had in discrete time.It is called Dirac distribution (or function) and we end with the following pair
1δ(f)
  • Second, consider a rectangular pulse with amplitude 1/T and width T. When TO, this pulse tends to a Dirac distribution, a mass at zero, with infinite amplitude but also with a unit integral. By the Fourier transform of a rectangular pulse (8), we obtain that the Fourier transform of a Dirac function is a unit constant
δ(t)1
In [4]:
%matplotlib tk
from matplotlib.widgets import Slider

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2, left=0.1)

slider_ax = plt.axes([0.1, 0.1, 0.8, 0.02])
slider = Slider(slider_ax, "L/T", 0, 100, valinit=8, color='#AAAAAA')
L=10
f=np.linspace(-0.5,0.5,400)

line, = ax.plot(f,dsinc(pi*L*f,L), lw=2,label="Discrete time sinc")
line2, = ax.plot(f,sinc(pi*L*f), lw=2,label="Standard sinc")
#line2 is in order to compare with the "true" sinc
ax.grid(b='on')  
ax.legend()

def on_change(L):
    line.set_ydata(dsinc(pi*L*f,L))
    line2.set_ydata(sinc(pi*L*f))
        

slider.on_changed(on_change)
/usr/local/lib/python3.5/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: 
Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
  warn_deprecated("2.2", "Passing one of 'on', 'true', 'off', 'false' as a "
Out[4]:
0

1.1.3  Table of Fourier transform properties

This table is adapted and reworked from Dr Chris Jobling's resources, see this page. Many pages give tables and proofs of Fourier transform properties or Fourier pairs, e.g.:

Namex(t)X(f)1Linearityiaixi(t)iaiXi(f)2Dualityx(f)X(t)3.Time and frequency scalingx(αt)1|α|S(fα)4.Time shiftingx(tt0)ej2πft0X(f)5.Frequency shiftingej2πf0tx(t)X(ff0)7.Frequency differentiation(jt)kx(t)dkdfkX(f)8.Time integrationtf(t)dtX(f)j2πf+X(0)δ(f)9.Conjugations(t)S(f)10.Time convolutionx1(t)x2(t)X1(f)X2(f)11.Frequency convolutionx1(t)x2(t)X1(f)X2(f)12.Sum of x(t)x(t)dtX(0)13.Area underX(f)f(0)X(f)df15.Parseval's theorem|x(t)|2dt|X(f)|2df.

Property 1
This property enables to express the Fourier transform of a delayed signal as a function of the Fourier transform of the initial signal and a delay term: x(tt0)X(f)ej2πft0.

Proof
This property can be obtained almost immediately from the definition of the Fourier transform: FT{x(tt0)}=+x(tt0) ej2πft dt; Noting that ej2πft=ej2πf(tt0)ej2πft0, we obtain FT{x(tt0)}=+x(tt0)ej2πf(tt0)ej2πft0dt, that is FT{x(tt0)}=ej2πft0+x(tt0)ej2πf(tt0)dt=ej2πft0X(f).

1.1.4  Symmetries of the Fourier transform.

Time domainFrequency domainrealhermitian(real=even, imag=odd modulus=even, phase=odd)imaginaryanti-hermitian(real=odd, imag=even modulus=even, phase=odd)evenevenoddoddreal and evenreal and even (i.e. cosine transform)real and oddimaginary and odd (i.e. sine transform)imaginary and evenimaginary and evenimaginary and oddreal and odd

(table adapted from cv.nrao.edu)

1.2  Dirac impulse, representation formula and convolution

1.2.1  Dirac impulse

Recall that the Dirac impulse δ(t) satisfies δ(t)={0 if t0,+ for t=0, and is such that +δ(t)dt=1.

1.2.2  Representation formula

The Dirac impulse plays the role of an indicator function. In particular, we have x(t)δ(tt0)=x(t0)δ(tt0). Consequently, +x(t)δ(tt0)dt=x(t0)+δ(tt0)dt=x(t0). Therefore, we always have

{x(t)=+x(τ)δ(tτ)dτwith x(τ)=+x(t)δ(tτ)dt.

This is nothing but the continuous-time version of the representation formula.

The set of distributions {δτ(t):δ(tτ)}, forms an orthonormal basis and x(τ) can be viewed as a coordinate of x(t) on this basis. Indeed, the scalar product between x(t) and δτ(t) is nothing but x(τ)=<x(t),δτ(t)>=+x(t)δ(tτ)dt, and x(t) is then given as the sum of the basis functions, weighted by the associated coordinates: x(t)=+x(τ)δ(tτ)dτ.

Following the same approach as in the discrete case, we define the impulse response h(t) as the output of a linear invariant system to a Dirac impulse. By linearity, the output of the system to any input x(t), expressed using the representation formula, is y(t)=+x(τ)h(tτ)dτ=[xh](t). This is the time-continuous convolution between x and h, denoted [xh](t). It enables to express the output of the filter using only the input and the impulse response. This shows the importance of the impulse response as a description of the system. The other notions we studied in the discrete case, namely transfer function, Plancherel and Parseval theorems, etc, extends straightforwardly to the continuous case.