E-splines

By Michael Unser,  EPFL,  October 2003

Basic functions that are required for calculating with E-splines

Localization filter for the nth order operator L=(D-poles[1] I)* ... *(D-poles[n] I)

Localization[z_, poles_] := 
      Collect[(∏_(k = 1)^(Length[poles]))(1 - 
              Exp[poles[[k]]] z), z]

Green function of nth order rational operator L with specifed poles and zeros

GreenE[t_, poles_, zeros_: {}]:=InverseLaplaceTransform[
If[Length[zeros] == 0, 
                1, ((∏_(k = 1)^(Length[zeros]))(s - 
                        zeros[[k]]))]/((∏_(k = 1)^(Length[poles]))(s - poles[[k]])), s,tt]/.tt -> t

Generalized B-spline

BsplineE[t_, poles_, zeros_: {}] := 
      Block[{aa = CoefficientList[Localization[z, poles], z]}, 
        Return[
(∑_(k = 1)^(Length[aa]))If[
              t < k - 1, 0, 
              aa[[k]]*
                GreenE[t - (k - 1), poles, zeros ]]]]

Generalized discrete B-spline

B[z_, poles_, 
        zeros_: {}] := 
(∑_(l = 0)^(Length[poles] - 1))BsplineE[l, poles, zeros]*z^(-l)

Transfert function of the Gram sequence of the generalized B-spline

A[z_, poles_, zeros_: {}] := 
      Block[{polesaux = Join[poles, -Conjugate[poles]], 
          zerosaux = Join[zeros, -Conjugate[zeros]], N0 = Length[poles], 
          M0 = Length[
              zeros]}, 
Return[
(-1)^M0 * 
            Expand[((∏_(k = 1)^N0) Exp[
                      Conjugate[poles[[k]]]])*B[z, polesaux, zerosaux]*
                z^N0]]]

Examples of computations

pp = {0, 0, I Pi/2, -I  Pi/2};

pp = {0, 0}

Localization[z, pp]

Plot[{BsplineE[x, pp], BsplineE[x, {0, 0, 0, 0}]}, {x, -1, 5}, 
      PlotRange -> {{-1, 5}, {-0.05, 1}}, 
      AspectRatio -> 0.4]

Interpolation filter

1/B[z, {0, 0, I Pi/2, -I  Pi/2}]

Solve[B[z, pp] == 0, z] // N

Gram sequence

A[z, pp]
AF[f_] = A[Exp[I 2 π f], pp];

Plot[Abs[AF[f]], {f, 0, 1}, PlotRange -> {0, AF[0]}, 
      AspectRatio -> 0.4]