This is a reference pack of MED-related implementations to go along with a published paper..
--- Functions: ---
Minimum Entropy Deconvolution Adjusted convolution (MED and MEDA)
[y_final f_final kurtIter] = med2d(x,filterSize,termIter,termDelta,overlapMode,plotMode)
Optimal Minimum Entropy Deconvolution Adjusted convolution (OMEDA)
[y f d_norm] = omeda(x,filterSize,plotMode)
Multipoint Optimal Minimum Entropy Deconvolution Adjusted convolution (MOMEDA)
[MKurt f y] = momeda(x,filterSize,window,period,plotMode)
[T MKurt f y T_best MKurt_best f_best y_best] = momeda_spectrum(x,filterSize,window,range,plotMode)
Maximum Correlated Kurtosis Deconvolution (MCKD)
[y_final f_final ckIter] = mckd(x,filterSize,termIter,T,M,plotMode)
--- Introduction to Minimum Entropy Deconvolution: ---
Minimum Entropy Deconvolution (MED) is a technique commonly applied to rotating machine vibration to detect gear and bearing faults. It is used to design a filter that deconvolves the impulse-like features from the vibration data.
MED poses an optimization problem that is designed to deconvolve impulses from an input signal. It was originally proposed as an iterative FIR filter selection problem by R. Wiggins , however this is a non-optimal solution to the problem, and the problem goal of deconvolving a single impulse (MED) is not well-defined to the periodic impulse-train fault manifestation of faults in rotating machines. Carlos Cabrelli proposed a deconvolution problem based on D-Norm shown geometrically similar to the MED problem, and showed it had an optimal non-iterative solution for the filter  forming the method Optimal MED (OMED), however in rotating machines the non-optimal solution reached by the iterative solution is often better since it is able to terminate early and not reach the preferred solution of a single impulse.
With the MED definition used by Wiggens and Cabrelli, the convolution definition creates a discontinuity between the assumed zero input data and the input data. This creates a tendency for MED and OMED to deconvolve the trivial solution at this discontinuity - often referred to as a spurious impulse. Pre-processing with AR tends to mitigate much of the discontinuity, but instead I've re-derived the MED iterative solution and OMED solution using only the 'valid' filtered output with no assumed zero input.This forms MED Adjusted convolution (MEDA) and similarly OMEDA,, which mitigates the discontinuity. See reference  derivations and example for this adjustment.
To better-suite the problem towards extracting periodic faults, the iterative Maximum Correlated Kurtosis Deconvolution method was proposed . This deconvolves a defined M series of impulses in a row, but is iterative, and can only search for a small number of impulses in a row.
As an alternative, I propose and derive Multipoint Optimal Minimum Entropy Deconvolution Adjusted (MOMEDA) , which poses the problem of an infinite train of impulses as the goal and solves directly for the optimal solution for the filter. Since it is non-iterative and relatively cheap to compute, spectrums are easily calculated to identify the health of machine vibrations. I recommend this method as the strongest of the above deconvolution methods in application to rotating machines.
 R.A. Wiggins, Minimum entropy deconvolution, Geoexploration 16 (1--2)(1978) 21--35.
 Cabrelli, Carlos A. "Minimum entropy deconvolution and simplicity: A noniterative algorithm." Geophysics 50.3 (1985): 394-413.
 McDonald, Geoff L., Qing Zhao, and Ming J. Zuo. "Maximum correlated Kurtosis deconvolution and application on gear tooth chip fault detection." Mechanical Systems and Signal Processing 33 (2012). For PDF see my blog http://split-code.com/rotation.html.
 McDonald, Geoff L., and Qing Zhao. "Multipoint Optimal Minimum Entropy Deconvolution and Convolution Fix: Application to vibration fault detection." Mechanical Systems and Signal Processing 82 (2017): 461-477. For PDF see my blog http://split-code.com/rotation.html.
How to determine the parameter 'period', for example, I would like to process the vibration signal for bearing download from Case Western Reserve University Bearing Central How to determine the parameter 'period' and the other parameters in function 'momeda' or 'med2d'. Thank you in advance!
Great! Thanks. This is a set of excellent code!
But when I start your example in momeda_spectrum I get the best output signal with period=45. But the period should be 50 as set in the example.
Thanks huang hai. You can email me at firstname.lastname@example.org for the draft version. The paper should be published in the next few weeks, and I will update this description once it is out.
hello,McDonald,I'm very interested in your algorithm，But, your article has not been published at present，Can your send a brief description of the algorithm?Thank you!
Thank you!!!! I'm engaged in rotating machinery fault diagnosis.Your method is very practical.
- Added published paper references.
- Updated figure.
- Updated figure.
- Updated MOMEDA to normalize MKurt better. Now the fault indicator MKurt is generally between 0 and 1.
- Fix description
Inspired by: med2d(x,filterSize,termIter,termDelta,overlapMode,plotMode), Maximum Correlated Kurtosis Deconvolution (MCKD), omeda(x,filterSize,plotMode), Multipoint Optimal Minimum Entropy Deconvolution with Convolution Adjustment (MOMEDA)