Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Generate a matrix that arises in the computation of the discrete Hilbert transform
| ResourceFunction["DiscreteHilbertTransformMatrix"][n] returns an n×n Hilbert transform matrix. | 
A 4×4 Hilbert transform matrix:
| In[1]:= | ![ResourceFunction["DiscreteHilbertTransformMatrix"][4] // MatrixForm](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/64c859b7fb007816.png) | 
| Out[1]= |  | 
Visualize a Hilbert transform matrix of odd dimension:
| In[2]:= | ![MatrixPlot[ResourceFunction["DiscreteHilbertTransformMatrix"][127]]](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/40d7f5584c9188dc.png) | 
| Out[2]= |  | 
By default, an exact matrix is computed:
| In[3]:= | ![ResourceFunction["DiscreteHilbertTransformMatrix"][3] // Simplify // MatrixForm](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/79f1ecd64614dbcd.png) | 
| Out[3]= |  | 
Use machine precision:
| In[4]:= | ![ResourceFunction["DiscreteHilbertTransformMatrix"][3, WorkingPrecision -> MachinePrecision] // MatrixForm](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/63b438573ee5bb2a.png) | 
| Out[4]= |  | 
Use arbitrary precision:
| In[5]:= | ![ResourceFunction["DiscreteHilbertTransformMatrix"][3, WorkingPrecision -> 20] // MatrixForm](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/1f7b936c11990df5.png) | 
| Out[5]= |  | 
The Hilbert transform matrix is antisymmetric:
| In[6]:= | ![ResourceFunction["DiscreteHilbertTransformMatrix"][6]](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/28d6f89acf3b74b7.png) | 
| Out[6]= |  | 
| In[7]:= | ![AntisymmetricMatrixQ[%]](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/6dd68593c1b3b60f.png) | 
| Out[7]= |  | 
Compute the discrete Hilbert transform of a vector by multiplying it with the Hilbert transform matrix:
| In[8]:= | ![u = N[{1, 2, 3, 4, 5, 6, 7}];
n = Length[u];](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/09d776c32283a2a1.png) | 
| In[9]:= | ![AbsoluteTiming[
 v1 = ResourceFunction["DiscreteHilbertTransformMatrix"][n] . u]](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/6a545982807b0aaf.png) | 
| Out[9]= |  | 
Using the resource function DiscreteHilbertTransform is faster:
| In[10]:= | ![AbsoluteTiming[v2 = ResourceFunction["DiscreteHilbertTransform"][u]]](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/534bba05fba933b2.png) | 
| Out[10]= |  | 
| In[11]:= | ![Chop[v1 - v2]](https://www.wolframcloud.com/obj/resourcesystem/images/f90/f90dfca4-e3dd-46bf-a768-deb6b0b7a0b7/007686af23cf1367.png) | 
| Out[11]= |  | 
This work is licensed under a Creative Commons Attribution 4.0 International License