# Implement inverse discrete-time Fourier transform

In Mathematica after version 9. We had ListFourierSequenceTransform to do discrete-time Fourier Transform, but we do not have the inverse function. If we peform it according to the formula, $$\frac 1{2\pi} \int_0^{2\pi} H(e^{j\omega}) \, e^{j \omega n}\,d\omega$$ e.g.

Integrate[(1/4 + 7/8*Exp[-I*\[Omega]] - 1/2*Exp[-2*I*\[Omega]])/(
1 + 1/6*Exp[-I*\[Omega]] - 1/6*Exp[-2*I*\[Omega]])*
Exp[I*\[Omega]*n], \[Omega], {\[Omega], 0, 2*Pi}]


It will take long time and give complex result. May some kind one give me some hint how to implement the inverse discrete-time Fourier transform?

The documentation contains the following inverse for the 1D case:

dtft = ListFourierSequenceTransform[{1/5, 1/4, 1/3, 1/2, 1}, ω]
Table[InverseFourierSequenceTransform[dtft, ω, n], {n, 0, Length[dtft] - 1}]


In higher dimension

InverseListFourierSequenceTransform[L_, p_List] :=
Normal[SparseArray[With[{sz = Length[p]},
With[{xs = Unique[ConstantArray["x", sz]],
cs = Unique[ConstantArray["c", sz + 1]]}, (Remove /@ Join[cs, xs]; #)&[
(List @@ InverseFourierTransform[L, p, xs + 1, FourierParameters -> {1, 1}] /.
Pattern[Evaluate[Last[cs]], Blank[]] Times @@ MapThread[DiracDelta[# +
Pattern[#2, Blank[]]] &, {xs, Most[cs]}] -> #) &[Most[cs] -> Last[cs]]]]]]]


which also works in 1D if you provide the variable argument in a list.

Note that it is only a right inverse. A left inverse doesn't exist because of the we don't have injectivity:

 ListFourierSequenceTransform[{1/5, 1/4, 1/3, 1/2, 1, 0}, ω] ===
ListFourierSequenceTransform[{1/5, 1/4, 1/3, 1/2, 1}, ω]


True