I'm having some trouble performing an inverse Fourier transform, essentially I have a function which I can Fourier transform with seemingly no issue, but I can't inverse Fourier transform the result. My overall objective is to perform a Hilbert transform.
I have a function, found by solving a differential equation:
Xsol[t_] =
DSolveValue[
{
X''[t] + \[Gamma] X'[t] + \[Omega]0^2 X[t] == F/m Cos[\[Omega]0 t],
X[0] == A0 Sin[\[Phi]0] && X'[0] == \[Omega]0 A0 Cos[\[Phi]0]
}, X[t], t
] // Simplify
which seems to be well-behaved. I then attempt to find the Hilbert Transform of Xsol[t]
, I found several implementations from this question:
HilbertTransformMethod1[f_] := InverseFourierTransform[I * Sign[\[Omega]] * FourierTransform[f, t, \[Omega]], \[Omega], t]
HilbertTransformMethod2[f_] := InverseFourierTransform[-I * (2 * HeavisideTheta[\[Omega]] - 1) * FourierTransform[f, t, \[Omega]], \[Omega], t]
HilbertTransformMethod3[f_] := 1/Pi * Convolve[f, 1/\[Omega], \[Omega], t, PrincipalValue -> True]
The third method seems to be obsolete (based on information in the comments) due to changes in the way Convolve[...]
behaves. The Inverse Fourier transform seems to be where the problem lies, as
InverseFourierTransform[FourierTransform[Xsol[t], t, \[Omega]], \[Omega], t]
returns unevaluated, which seems strange as FourierTransform[Xsol[t], t, \[Omega]]
works with no problem.
I've tried different approaches to get the inverse Fourier transform bit working such as using Assuming[]
to make sure that all the variables are real and $>0$, using Integrate[]
to "directly" inverse Fourier transform, and I have also use FourierTransform[]
but with redefined FourierParameters
(on the off chance that FourierTransform
and InverseFourierTransform
behave differently)
Set
rather thanSetDelayed
forXsol
so that the differential equation is solved once and simplify the results.Xsol[t_] = DSolveValue[{X''[t] + ω0^2 X[t] == F/m Cos[ω0 t], X[0] == A0 Sin[φ0] && X'[0] == A0 ω0 Cos[φ0]}, X[t], t] // Simplify
$\endgroup$