Developer Reference

  • 2020
  • 07/15/2020
  • Public Content
Contents

Hilbert

MODIFIED API.
Computes an analytic signal using the Hilbert transform.

Syntax

IppStatus ippsHilbert_32f32fc(const Ipp32f*
pSrc
, Ipp32fc*
pDst
, IppsHilbertSpec*
pSpec
, Ipp8u*
pBuffer
);
IppStatus ippsHilbert_64f64fc(const Ipp64f*
pSrc
, Ipp64fc*
pDst
, IppsHilbertSpec*
pSpec
, Ipp8u*
pBuffer
);
Include Files
ipps.h
Domain Dependencies
Headers:
ippcore.h
,
ippvm.h
Libraries:
ippcore.lib
,
ippvm.lib
Parameters
pSpec
Pointer to the Hilbert specification structure.
pSrc
Pointer to the vector containing original real data.
pDst
Pointer to the output array containing complex data.
pBuffer
Pointer to the work buffer.
Description
The API of this function has been modified in Intel IPP 9.0 release.
The
ippsHilbert
function computes a complex analytic signal
pDst
, which contains the original real signal
pSrc
as its real part and computed Hilbert transform as its imaginary part. The Hilbert transform is performed according to the
pSpec
specification parameters: the number of samples
len
, and the specific code
hint
. The input data is zero-padded or truncated to the size of
len
as appropriate.
Before using this function, you need to compute the size of the work buffer and specification structure using the HilbertGetSize function and initialize the structure using HilbertInit .
Return Values
ippStsNoErr
Indicates no error.
ippStsNullPtrErr
Indicates an error when one of the specified pointers is
NULL
.
ippStsContextMatchErr
Indicates an error when the specification identifier
pSpec
is incorrect.

Example

The example below shows how to initialize the specification structure and use the function
ippsHilbert_32f32fc
.
IppStatus hilbert( ) { Ipp32f x[10]; Ipp32fc y[10]; int n; IppStatus status; IppsHilbertSpec* pSpec; Ipp8u* pBuffer; int sizeSpec, sizeBuf; status = ippsHilbertGetSize_32f32fc(10, ippAlgHintNone, &sizeSpec, &sizeBuf); pSpec = (IppsHilbertSpec*)ippMalloc(sizeSpec); pBuffer = (Ipp8u*)ippMalloc(sizeBuf); status = ippsHilbertInit_32f32fc(10, ippAlgHintNone, pSpec, pBuffer); for (n = 0; n < 10; n ++) { x[n] = (Ipp32f)cos(IPP_2PI * n * 2 / 9); } status = ippsHilbert_32f32fc(x, y, pSpec, pBuffer); ippsMagnitude_32fc((Ipp32fc*)y, x, 5); ippFree(pSpec); ippFree(pBuffer); printf_32f("hilbert magn =", x, 5, status); return status; }
Output:
hilbert magn = 1.0944 1.1214 1.0413 0.9707 0.9839 Matlab* Analog: >> n=0:9; x=cos(2*pi*n*2/9); y=abs(hilbert(x)); y(1:5)

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804