pysdkit.hvd#

Created on 2025/02/06 00:19:17 @author: Whenxuan Wang @email: wwhenxuan@gmail.com

pysdkit._hvd.hvd

Created on 2025/02/06 00:19:23 @author: Whenxuan Wang @email: wwhenxuan@gmail.com

hvd.hvd#

Created on 2025/02/06 00:19:23 @author: Whenxuan Wang @email: wwhenxuan@gmail.com

class pysdkit._hvd.hvd.HVD(K: int = 3, fpar: int | None = 20, mirror: bool | None = True)[source]#

Bases: object

Hilbert Vibration Decomposition

The Hilbert Vibration Decomposition is an adaptive/data-driven separation of a multi-component non-stationary vibration signal into simple quasi-harmonic components. The method is characterized by high frequency and amplitude resolution, which provides a comprehensive account of the case of amplitude and frequency modulated vibration analysis. The HVD is a simple and fast recursive vibration mode decomposition, that sifts out a 1D input signal into a set of k-band separated simplest components with their envelopes and instantaneous frequencies. The HVD decomposes composition as a vector and returns a matrix of inherent components as the Hilbert spectrum plus residual signal.

Feldman, Michael. “Time-varying vibration decomposition and analysis based on the Hilbert transform.” Journal of Sound and Vibration 295.3-5 (2006): 518-530.

Ramos, J. J., J. I. Reyes, and E. Barocio. “An improved Hilbert Vibration Decomposition method for analysis of low frequency oscillations.” 2014 IEEE PES Transmission & Distribution Conference and Exposition-Latin America (PES T&D-LA). IEEE, 2014.

Python code: MVRonkin/dsatools

MATLAB code: https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav

The original code has a serious endpoint problem. The algorithm provided cannot handle the signal decomposition near the endpoint well. Therefore, we have improved it by mirroring the input signal to alleviate this problem. It can work only with narrowband signals!

__call__(signal: ndarray, return_all: bool | None = False) Tuple[ndarray, ndarray] | ndarray[source]#

allow instances to be called like functions

__init__(K: int = 3, fpar: int | None = 20, mirror: bool | None = True) None[source]#

Create the Hilbert Vibration Decomposition instance

Decomposition results are very depends on the fpar value We have improved the original code by mirroring the input signal to alleviate this problem.

Parameters:
  • K – the number of intrinsic mode functions to be decomposed

  • fpar – filter parameter, equal to point of cut frequency for low-pass filter (have to be regulized for optimal decomposition).

  • mirror – whether to mirror the original input signal

__module__ = 'pysdkit._hvd.hvd'#
__str__() str[source]#

Get the full name and abbreviation of the algorithm

__weakref__#

list of weak references to the object (if defined)

fit_transform(signal: ndarray, return_all: bool | None = False) Tuple[ndarray, ndarray] | ndarray[source]#

Start executing the Hilbert Vibration Decomposition algorithm.

square_window(seq_len: int, w_filt: Tuple[int, int] | None = None, real_valued_filter: bool = True) ndarray[source]#

Square window in range 0:fs//2. It is mainly used to specify a frequency band range in the frequency domain, where the frequency components within this range are retained, while those outside the range are suppressed.

Parameters:
  • seq_len – filter length

  • w_filt – cut-off low and high points

  • real_valued_filter – whether to make the window a real-valued filter

Returns:

the square window