SignalUtils::Hilbert Function

TVec *Hilbert(TVec *SrcDst);

Applies hilbert transform to Src.

#NameTypeDescription
1SrcDstTVec *
Remarks:

Applies hilbert transform to Src. Src must be real signal. The result is complex. Hilbert transform generates a 90 degree phase shifted version of the original. This becomes the imaginary part of the complex signal. This routine is very usefull for single block processing, but can not be used for streaming data. Use a digital FIR filter based hilbert transformer for streaming data or resort to quadrature sampling techniques [1], p. 297.

References:

[1] Understanding digital signal processing. Richard G. Lyons, Prentice-Hall, 2001.

Examples
#include "MtxExpr.h"
#include "Units.MtxExpr.h"
#include "Units.SignalUtils.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units::MtxExpr;
using namespace Dew::Signal;
using namespace Dew::Signal::Units;
using namespace Dew::Signal::Units::SignalUtils;

void Example()
{
    Vector h = Sin(Ramp(256, TMtxFloatPrecision::mvDouble, 0, 2 * PI * 6/256));
    Vector Re(0);
    Vector Im(0);
    Vector h1(0);

    SignalUtils::Hilbert(h);
    h.CplxToReal(Re, Im);
    h1.SetIt(false, DewArray<double>{Re.DotProd(Im)});

    h = Sin(Ramp(256, TMtxFloatPrecision::mvDouble, 0, 2 * PI * 6.5/256));
    SignalUtils::Hilbert(h);
    h.CplxToReal(Re, Im);
    h1.SetIt(false, DewArray<double>{Re.DotProd(Im)});

    h = Sin(Ramp(256, TMtxFloatPrecision::mvDouble, 0, 2 * PI * 6.5/256));
    Re.Copy(h);
    Im.Copy(h);
    KaiserImpulse(h1, DewArray<double>{0.95, 1}, 0.01, TFilterType::ftHilbertIII, 1, 2, true);
    //Or use remez:    RemezImpulse(h1, DewArray<double>{0.05, 0.95}, 0.01, TFilterType::ftHilbertIII);
    FirFilter(Im, h1, 1, 1);  //also compensates for integer filter delay (if filter is Odd length (type III))
    h1.SetIt(false, DewArray<double>{Re.DotProd(Im)});  //dot product between Re and Im should be zero
}
See Also: OptimalFir::remez, SignalUtils::KaiserImpulse, OptimalFir::RemezImpulse
Declared in Dew::Signal::Units::SignalUtils · Dew.Signal/Units.SignalUtils.h · Cross-compiler