2
$\begingroup$

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?

$\endgroup$

1 Answer 1

2
$\begingroup$

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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.