Complete Ensemble Empirical Mode Decomposition on FPGA for Condition Monitoring of Broken Bars in Induction Motors

: Empirical mode decomposition (EMD)-based methods are powerful digital signal processing techniques because they do not need a priori information of the target signal due to their intrinsic adaptive behavior. Moreover, they can deal with non-linear and non-stationary signals. This paper presents the ﬁeld programmable gate array (FPGA) implementation for the complete ensemble empirical mode decomposition (CEEMD) method, which is applied to the condition monitoring of an induction motor. The CEEMD method is chosen since it overcomes the performance of EMD and EEMD (ensemble empirical mode decomposition) methods. As a ﬁrst application of the proposed FPGA-based system, the proposal is used as a processing technique for feature extraction in order to detect and classify broken rotor bar faults in induction motors. In order to obtain a complete online monitoring system, the feature extraction and classiﬁcation modules are also implemented on the FPGA. Results show that an average e ﬀ ectiveness of 96% is obtained during the fault detection.


Introduction
In recent years, the development of new systems for monitoring the condition of rotating machines has become an important issue for different fields such as academia and industry. In particular, inductions motors have received more attention since they constitute about the 85% of the employed power in industrial processes [1]. The presence of a fault in an induction motor can lead to setbacks and substantial economic losses, therefore, early detection of faults becomes an important task. One of the most common faults in induction motors is a broken bar, representing about 10% of the total failures on induction motors [2]. The problem with the broken bar fault is that the motor can keep operating with apparent normality, however this fault can cause different problems: changes in the current consumption, unwanted vibrations, and damages to other bars [3][4][5].
A great number of methods are available in the literature for condition monitoring of induction motors, and many of them have been focused on early fault detection through vibration analysis and motor current signature analysis (MCSA) [6]. A simple way to make a frequency analysis is to use Fourier transform, but it is only useful for stationary signals [7]. In order to analyze non-stationary signals, short-time Fourier transform (STFT) can be employed; yet, its frequency resolution depends mainly on the selected time window, which in some cases cannot be adequate for transient signals.
As an alternative for the analysis of transient signals, methods based on wavelet transform have For obtaining suitable results using the EEMD method, the number of trials or ensemble number N has to be as large as possible, generally about a few hundred.

CEEMD
The CEEMD method is a variation of the EEMD method. This method requires less than half the sifting iterations of classical EEMD. Hence, the analyzed signal can be rightly reconstructed by summing the frequency bands or IMFs estimated [26]. The procedure can be described by the following algorithm: 1.
Decompose N realizations of x[n] + ε 0 w i [n], i = 1, . . . , N using EMD, where ε 0 and w i represent the noise standard deviation and the white noise, respectively; then, ensemble all of the first modes to obtain a true IMF 1 [n] as: 2.
Calculate a unique first residue at the first stage (k = 1) as: 3.
Decompose N realizations of r 1 [n] + ε 1 E 1 (w i [n]), i = 1, . . . , N. E j (·) is an operator that for a given signal produces the j-th mode obtained by EMD. Next use EMD to obtain the second mode: 4.
For the next stages (k = 2, . . . , K), keep computing the k-th residue and obtain the next IMFs by: Steps 3 to 4 continues until the residue r k [n] does not have at least two extrema. 5.
The final residue can be calculated with K equal to the total number of modes as: Hence, the original signal x[n] can be expressed as:

Proposed Methodology and Its FPGA Implementation
In this section the steps used in the proposed methodology and its FPGA implementation to provide a condition monitoring system of broken roto bars are presented, see Figure 1. Firstly, the proposal employs a current clamp and a data-acquisition system (DAS) for measuring and acquiring one phase of the stator current, respectively. Then, the measured signal is sent to the FPGA processor for diagnosis of automatic way the induction motor condition, where an overall control unit coordinates the DAS driver for data acquisition, the three stages of signal processing, and the display of the induction motor condition. In general, the signal processing performs the CEEMD method to decompose the signal into narrow frequency bands, then two indices (Entropy and Energy) are computed as fault indicators, and a feed forward neural network (FFNN) carries out the automatic diagnosis. In this work, four conditions are tested: the healthy condition (HLT), half broken bar (HBB), one broken bar (1BB), and two broken bars (2BB).
In this section the steps used in the proposed methodology and its FPGA implementation to provide a condition monitoring system of broken roto bars are presented, see Figure 1. Firstly, the proposal employs a current clamp and a data-acquisition system (DAS) for measuring and acquiring one phase of the stator current, respectively. Then, the measured signal is sent to the FPGA processor for diagnosis of automatic way the induction motor condition, where an overall control unit coordinates the DAS driver for data acquisition, the three stages of signal processing, and the display of the induction motor condition. In general, the signal processing performs the CEEMD method to decompose the signal into narrow frequency bands, then two indices (Entropy and Energy) are computed as fault indicators, and a feed forward neural network (FFNN) carries out the automatic diagnosis. In this work, four conditions are tested: the healthy condition (HLT), half broken bar (HBB), one broken bar (1BB), and two broken bars (2BB).  Figure 2 shows the flowchart of the proposed methodology for its hardware implementation. Firstly, the input current signal is decomposed by the CEEMD method into five IMFs, which are enough to depict the evolution of the characteristic left side band (LSB) frequency component during the startup transient of a motor with a broken bar, as can be seen in Figure 3 where the evolution of the LSB is highlighted by a dashed red line for each treated condition. These results are consistent with the ones obtained by the analytic and finite element (FE) models [15,38]. Evidently, there is no frequency information in the IMFs for an HLT condition. After calculating the first five IMFs, their energy and entropy (EIMF_K and eIMF_K, respectively) are calculated and, then, they are used as inputs for the FFNN, which automatically will classify the induction motor condition. IMF1 is discarded as it contains the information associated to the fundamental component (see Figure 3).
To test the FPGA implementation, an experimental setup was carried out, which was composed by a 1-hp three-phase induction motor (model WEG00136APE48T) with induced fault conditions. The in-test motor is constituted by 28 bars, two poles and an ordinary alternator to provide the mechanical load. It received a power supply of 220 Vac, 60 Hz. One phase of the stator current is acquired with an i200 Fluke current clamp. The DAS has a sampling frequency of 375 samples/s (enough to acquire the LSB component), resulting in 1024 samples during the startup transient monitoring. The measured data is sent to the FPGA processor for assessing the motor condition. To generate the broken bar conditions, the motor bar was gradually broken by drilling a hole of 5 mm  Firstly, the input current signal is decomposed by the CEEMD method into five IMFs, which are enough to depict the evolution of the characteristic left side band (LSB) frequency component during the startup transient of a motor with a broken bar, as can be seen in Figure 3 where the evolution of the LSB is highlighted by a dashed red line for each treated condition. These results are consistent with the ones obtained by the analytic and finite element (FE) models [15,38]. Evidently, there is no frequency information in the IMFs for an HLT condition. After calculating the first five IMFs, their energy and entropy (E IMF_K and e IMF_K , respectively) are calculated and, then, they are used as inputs for the FFNN, which automatically will classify the induction motor condition. IMF1 is discarded as it contains the information associated to the fundamental component (see Figure 3).
To test the FPGA implementation, an experimental setup was carried out, which was composed by a 1-hp three-phase induction motor (model WEG00136APE48T) with induced fault conditions. The in-test motor is constituted by 28 bars, two poles and an ordinary alternator to provide the mechanical load. It received a power supply of 220 Vac, 60 Hz. One phase of the stator current is acquired with an i200 Fluke current clamp. The DAS has a sampling frequency of 375 samples/s (enough to acquire the LSB component), resulting in 1024 samples during the startup transient monitoring. The measured data is sent to the FPGA processor for assessing the motor condition. To generate the broken bar conditions, the motor bar was gradually broken by drilling a hole of 5 mm for the HBB condition, a hole of 10 mm for the 1BB condition, and two holes of 10 mm for the 2BB condition (see Figure 4).    for the HBB condition, a hole of 10 mm for the 1BB condition, and two holes of 10 mm for the 2BB condition (see Figure 4).      In general, the flowchart is as follows: firstly, the measured signal is analyzed by the CEEMD module for obtaining the first five IMFs. As above-mentioned, the IMF1 in this application contains only the fundamental frequency component referent to the supply system (60 Hz); therefore, IMF1 is discarded from the analysis. IMF2, IMF2, IMF4, and IMF5 contain the information about the evolution of the LSB related to the broken rotor bar faults (see Figure 3). The signals Start and End supervise the incoming data to the CEEMD unit that computes the IMFs sequentially, and then transfers the result to the Feature Extraction module, where the energy and entropy of each IMF are calculated. These results are storage in Reg_FE. After that, the Classification FFNN module takes the feature values (energy and entropy) of the four IMFs (E_IMF and e_IMF, respectively) as inputs and performs the automatic diagnosis, indicating through four outputs the motor condition, i.e., HLT, HBB, 1BB, or 2BB.

FPGA Processor
The next subsections describe in detail the above-mentioned modules.     In general, the flowchart is as follows: firstly, the measured signal is analyzed by the CEEMD module for obtaining the first five IMFs. As above-mentioned, the IMF1 in this application contains only the fundamental frequency component referent to the supply system (60 Hz); therefore, IMF1 is discarded from the analysis. IMF2, IMF2, IMF4, and IMF5 contain the information about the evolution of the LSB related to the broken rotor bar faults (see Figure 3). The signals Start and End supervise the incoming data to the CEEMD unit that computes the IMFs sequentially, and then transfers the result to the Feature Extraction module, where the energy and entropy of each IMF are calculated. These results are storage in Reg_FE. After that, the Classification FFNN module takes the feature values (energy and entropy) of the four IMFs (E_IMF and e_IMF, respectively) as inputs and performs the automatic diagnosis, indicating through four outputs the motor condition, i.e., HLT, HBB, 1BB, or 2BB.

FPGA Processor
The next subsections describe in detail the above-mentioned modules. In general, the flowchart is as follows: firstly, the measured signal is analyzed by the CEEMD module for obtaining the first five IMFs. As above-mentioned, the IMF1 in this application contains only the fundamental frequency component referent to the supply system (60 Hz); therefore, IMF1 is discarded from the analysis. IMF2, IMF2, IMF4, and IMF5 contain the information about the evolution of the LSB related to the broken rotor bar faults (see Figure 3). The signals Start and End supervise the incoming data to the CEEMD unit that computes the IMFs sequentially, and then transfers the result to the Feature Extraction module, where the energy and entropy of each IMF are calculated. These results are storage in Reg_FE. After that, the Classification FFNN module takes the feature values (energy and entropy) of the four IMFs (E_IMF and e_IMF, respectively) as inputs and performs the automatic diagnosis, indicating through four outputs the motor condition, i.e., HLT, HBB, 1BB, or 2BB.
The next subsections describe in detail the above-mentioned modules.

CEEMD Module
The CEEMD module is described in Figure 6. The process begins adding a pseudo-aleatory noise w i from a look up table (LUT), which was previously generated in Matlab with a normal distribution of N(0, 0.1), to the input signal x. For a new value of i, a new direction of the LUT is chosen to select a new sequence of noise data. The addition of the input signal and noise is defined as x + w i . Simultaneously, x is stored in RAM_X and RAM_Xt, and x + n i is stored in RAM_Xa. Mux 1 selects from two different signals, x + n i or X aux ; the first time x + n i is selected as input to the Sifting Process module, which has two outputs, c i and Is_IMF. The output c i represents a possible IMF and the signal Is_IMF is used with two purposes: (1) to know is c i is an IMF and (2) to know how many realizations have been carried out. Counter_IMFs registers the number of realizations and triggers the signal Num_IMF to the control unit (CEEMD FSM Master) in order to continue with the iterative process. Mux A and Mux B play an important role. They choose from three different cases: case 0 is selected if the signal c i is not an IMF, case 1 is selected if the signal c i is an IMF, and case 2 is selected if the number of realizations is over. If the case 0 is selected, the output Y 1 takes the values of c i . These values are stored in the RAM Xa, then they are sent to Mux 5 . In this multiplexor, if the first case is selected (c i is not an IMF), Xa i is sent directly through the overall system; but if the second case is selected (c i is an IMF), a new realization begins. For the case 1, i.e., c i is an IMF, the output Y 1 takes the value of X i to be stored as Xa i ; then, a new noise is added to Xa i and the Sifting process module starts again the decomposition of a new realization; on the other hand, the output Y 2 from Mux B takes the values of c i (an IMF). This signal is sent to an adder to be combined with a previous IMF, which is stored in IMF k i . Mux S selects the zero input when a new "true IMF" is being calculated; thus, the RAM block of the respective current "true IMF" is initialized. After the RAM block is initialized, the output IMF aux is divided by the number of realizations as (5), N = 512, and stored in the block RAM of the current IMF to be combined with the next IMF. This procedure is repeated until the number of realizations is over with a true IMF stored in the RAM. In the last case, case 2, it means both the number of realizations is over and the calculation of a new "true IMF" is started. Mux A selects the signal R i (the difference between Xt i and the previous true IMF k i (8)) which is sent to be stored as X, Xa, and Xt. The whole process to calculate a new true IMF starts again by selecting in Mux 5 the values of Xa i + w i . Finally, the CEEMD FSM Master module provides the overall synchronization to write in the RAM blocks, control the multiplexors, and load the registers of the system. Standard Deviation Criterion. This block computes the Equation (3) to know if ci is an IMF. The output of the Sifting Process module is ci, the "possible IMF", and Is_IMF to indicate if ci is an IMF.

Sifting Module
The sifting process is the key step for EMD methodologies. The CEEMD method needs several iterations of this module to carry out a correct decomposition. Figure 7 shows the three required steps to implement this algorithm. The first step is the extrema identification, where a similar process is performed to find either the minima or maxima of the input signal; therefore, the input x i (where i is 1, 2, 3, . . . , 1024 and represents the number of sample) is sent and processed into a 2-level pipeline register, to store x i−1 in RegA, and x i−2 in RegB. The signal x i−1 is compared with x i and x i−2 using four comparators to know if x i−1 is greater or lower than x i and x i−2 . If x i−1 is the greatest value, it is taken as a maximum and stored in Reg M as Max j (j represents the number of maxima); similarly, if x i−1 is the lowest value, it is defined as a minimum and stored in Reg m as min k . (k represents the number of minima). The AND gates help to verify if the comparison condition is satisfied. Its output habilitates the registers Reg M, Reg RM, and Reg PM for the maxima values and the registers Reg m, Reg Rm, and Reg Pm form the minima values. The output of Register R (RDMax) specifies the appearance of a new maximum. In parallel, a Counter increases by one in every incoming sample, when the output of the AND gate in Maxima block enables Reg PM, the position of the maximum value as PM j is stored. The same process occurs in the minima block where the AND gate enables Reg Pm to store the position of the minimum value as Pm k . The second step is to calculate the upper and lower envelopes (S u and S l ) of the input signal, through spline cubic interpolation. The structure of this block is described in [23]. The last step is to calculate a "possible IMF"; to perform this, the mean m i of the two envelopes is calculated, then m i is subtracted from x i and the result is defined as h i , which is used in the block Standard Deviation Criterion. This block computes the Equation (3) to know if c i is an IMF. The output of the Sifting Process module is c i , the "possible IMF", and Is_IMF to indicate if c i is an IMF.

Feature Extraction Module
This module calculates the features that help to identify each of the treated conditions in this work. That is, these indices provide a quantity (number) associated to the shape of each IMF; therefore, if the shape of the IMF changes according to the induction motor condition, these indices could change their value, leading to a pattern recognition problem. The features used in this work are Shannon entropy and the energy for each IMF.

Entropy
In this module, the Shannon entropy for the IMF2, IMF3, IMF4, and IMF5, where the evolution of LSB appears (see Figure 3), are calculated. The Shannon entropy, a nonlinear feature, measures the amount of randomness found in a time signal. Hence, the information entropy H(X) of a random event X, with n possible outcomes x 1 , x 2 , x 3 , . . . , x n , and every x i with a probability p(x i ), is denoted by [39,40]: The probability p(x i ) of a random event X with N samples is defined by: where r i is the incidence rate of each possible data x i . The total number of samples, N, is computed using: Re-writing (12) to an expression more adequate for hardware implementation, the H(X) can be computed through: The entropy defined in (15) provides an appropriated and simplified mathematical expression for being implemented in an FPGA, which uses a base-2 logarithm because the entropy for binary information is considered. For estimating the base-2 logarithm, the Mitchell algorithm is employed due to its advantages during hardware implementation. Figure 8 shows a schematic diagram of the architecture proposed for entropy calculation according to (15).
Re-writing (12) to an expression more adequate for hardware implementation, the H(X) can be computed through: The entropy defined in (15) provides an appropriated and simplified mathematical expression for being implemented in an FPGA, which uses a base-2 logarithm because the entropy for binary information is considered. For estimating the base-2 logarithm, the Mitchell algorithm is employed due to its advantages during hardware implementation. Figure 8 shows a schematic diagram of the architecture proposed for entropy calculation according to (15).

Energy
The energy, E(x), of a discrete-time signal x(i) for i = 1, …, n is defined as:

Energy
The energy, E(x), of a discrete-time signal x(i) for i = 1, . . . , n is defined as: The Energy module for PFGA implementation is shown in Figure 9. The Reg module represents an accumulator register. The Energy module for PFGA implementation is shown in Figure 9. The Reg module represents an accumulator register.

FFNN Module
In the literature, different artificial intelligence-based methods such as artificial neural networks (ANNs), fuzzy logic systems (FLSs), and support vector machines (SVMs), among others, for detecting broken rotor bars have been reported [41][42][43], with the ANNs being one of the most widely used methods [41]. ANNs are considered computing systems or models capable of simulating the neurological structure of the human brain for learning, classifying, and solving problems. From a great variety of architectures for an ANN, the feed forward neural network (FFNN) is the most employed for classification problems [39]; hence, this architecture is employed in this work. Figure  10 illustrates the architecture of a FFNN, where it is possible to observe that it is based on a layered architecture with single or multiple neurons in each layer.

FFNN Module
In the literature, different artificial intelligence-based methods such as artificial neural networks (ANNs), fuzzy logic systems (FLSs), and support vector machines (SVMs), among others, for detecting broken rotor bars have been reported [41][42][43], with the ANNs being one of the most widely used methods [41]. ANNs are considered computing systems or models capable of simulating the neurological structure of the human brain for learning, classifying, and solving problems. From a great variety of architectures for an ANN, the feed forward neural network (FFNN) is the most employed for classification problems [39]; hence, this architecture is employed in this work. Figure 10 illustrates the architecture of a FFNN, where it is possible to observe that it is based on a layered architecture with single or multiple neurons in each layer.
FFNN architecture is based on the sum of products between the inputs and their associated weights, plus a bias, which are evaluated by means of a non-linear function for providing the capability of modeling non-linear relationships. To find the network weights, pairs of input-output data are presented; then, a training algorithm is employed to adjust these weights until the error between the desired output and the calculated output is considered acceptable.
In this paper the digital structure for a FFNN is previously developed and trained in Matlab and then is implemented on the FPGA. In order to do so, twenty real signals are acquired for each motor condition as described in Section 3. In order to train and validate the FFNN, a dataset of 100 values (70% for training and 30% for validation) for each condition is synthetically constructed (400 values in total, 100 for each condition: HLT, HBB, 1BB, and 2BB). The dynamic range of these values is [µ − σ, µ + σ], where µ and σ are the mean and the standard deviation, respectively, for the twenty real signals. The testing set is composed by the real signals only (see later in Section 5.1). The overfitting problem is avoided through the use of both the k-fold cross validation process and three different datasets (one for training, one for validation and one for testing).
In the literature, different artificial intelligence-based methods such as artificial neural networks (ANNs), fuzzy logic systems (FLSs), and support vector machines (SVMs), among others, for detecting broken rotor bars have been reported [41][42][43], with the ANNs being one of the most widely used methods [41]. ANNs are considered computing systems or models capable of simulating the neurological structure of the human brain for learning, classifying, and solving problems. From a great variety of architectures for an ANN, the feed forward neural network (FFNN) is the most employed for classification problems [39]; hence, this architecture is employed in this work. Figure  10 illustrates the architecture of a FFNN, where it is possible to observe that it is based on a layered architecture with single or multiple neurons in each layer. FFNN architecture is based on the sum of products between the inputs and their associated weights, plus a bias, which are evaluated by means of a non-linear function for providing the capability of modeling non-linear relationships. To find the network weights, pairs of input-output data are presented; then, a training algorithm is employed to adjust these weights until the error between the desired output and the calculated output is considered acceptable.
In this paper the digital structure for a FFNN is previously developed and trained in Matlab and then is implemented on the FPGA. In order to do so, twenty real signals are acquired for each motor condition as described in Section 3. In order to train and validate the FFNN, a dataset of 100 values (70% for training and 30% for validation) for each condition is synthetically constructed (400 values in total, 100 for each condition: HLT, HBB, 1BB, and 2BB). The dynamic range of these values is [µ − σ, µ + σ], where µ and σ are the mean and the standard deviation, respectively, for the twenty real signals. The testing set is composed by the real signals only (see later in Section 5.1). The overfitting problem is avoided through the use of both the k-fold cross validation process and three different datasets (one for training, one for validation and one for testing). Following the FFNN structure shown in Figure 10, the proposed FFNN architecture has eight inputs (four energy values and four Shannon entropy values from the IMF2 to IMF5), 15 neurons in the hidden layer, which are selected by means of trial and error for obtaining the error minimum of classification, and four outputs, which are employed as flags to specify the induction motor condition (HLT, HBB, 1BB, and 2BB). Once trained and validated the FFNN, its final weights and biases for each layer neuron are employed for FPGA implementation based on the digital structure presented in Figure 11, which calculates (17) for each neuron.
Observing Figure 11, the information exchange synchronization between the hidden and output layers is provided by both control units called "Control Unit Hidden Layer" and "Control Unit Output Layer", through StartH/EndH and StartO/EndO, respectively. The registers load and multiplexers are controlled by the signals Ii and Li for i = 1 and 2. The hidden layer shown in Figure 11a receives the two features computed for each IMF (eighth values in total). Then, they are weighted by the corresponding values W i . The W i registers contains eight different weighted values, one for each input. The weighted values for each input value are summed up and added sequentially to a bias value stored in a LUT (LUT Bias). The result obtained by the previous operation is employed to activate the respective output Y i by means of a log-sigmoid (LS) transfer function, implemented as a LUT (LUT log-sig). Similarly, the output layer shown in Figure 11b repeats the same process, which employs the previous outputs Y 1 , Y 2 , . . . , Y 15 provided by the hidden layer as inputs to its four outputs or neurons, estimating the outputs Z 1 , Z 2 , . . . , Z 4 that define HLT, HBB, 1BB and 2BB conditions through a threshold comparison of 0.5. Thus, the display module shows the induction motor condition according to the activated output neuron.
where y is the output, ωi are the weights, xi represents the inputs, b is the bias, f (·) is the activation function, and i stands for the total number of inputs, respectively. In Figure 11, the proposed FFNN structure can be seen: eight inputs (E_IMF2, E_IMF3, E_IMF3, E_IMF4, e_IMF2, e_IMF3, e_IMF4, E_IMF5), 15 neurons in the hidden layer (RegY1, RegY2,..., RegY15) and 4 outputs (HLT, HBB, 1BB, and 2BB). The FFNN processor follows and takes advantage of the digital structure presented previously by the authors in [44]. Observing Figure 11, the information exchange synchronization between the hidden and output layers is provided by both control units called "Control Unit Hidden Layer" and "Control Unit Output Layer", through StartH/EndH and StartO/EndO, respectively. The registers load and multiplexers are controlled by the signals Ii and Li for i = 1 and 2. The hidden layer shown in Figure  11a receives the two features computed for each IMF (eighth values in total). Then, they are weighted by the corresponding values Wi. The Wi registers contains eight different weighted values, one for each input. The weighted values for each input value are summed up and added sequentially to a bias value stored in a LUT (LUT Bias). The result obtained by the previous operation is employed to activate the respective output Yi by means of a log-sigmoid (LS) transfer function, implemented as a LUT (LUT log-sig). Similarly, the output layer shown in Figure 11b repeats the same process, which employs the previous outputs Y1, Y2, …, Y15 provided by the hidden layer as inputs to its four outputs or neurons, estimating the outputs Z1, Z2, …, Z4 that define HLT, HBB, 1BB and 2BB conditions through a threshold comparison of 0.5. Thus, the display module shows the induction motor condition according to the activated output neuron.

Results
This section presents the performance results for the CEEMD processor and the results obtained for the detection and classification of the treated faults into the induction motor.

Results
This section presents the performance results for the CEEMD processor and the results obtained for the detection and classification of the treated faults into the induction motor.

FPGA Results
The proposed FPGA implementation for monitoring the induction motor condition employs 18-bit fixed-point arithmetic. This type of numeration produces truncation and rounding errors. Hence, for evaluating and comparing its performance, the results obtained by using the proposal (fixed-point) and Matlab software (floating-point), respectively, are computed by using the same measured data sets. Table 1 presents the results obtained of the comparison between the FPGA-based proposal (fixed-point) and Matlab software (floating-point), where the mean, the standard deviation, and the maximum value for the relative errors of the 20 tested for each condition are presented, resulting that the worst values are obtained for the 1BB condition (highlighted in bold). In all the cases, the 1% of error is never exceeded, demonstrating its accuracy and effectiveness.  Table 2 resumes the resources employed by the FPGA-based monitoring system as well as the number of clock cycles required by the main structures to carry out their calculation. It is important to mention that the time or duration employed by the CEEMD depends on the signal characteristics; hence, the number of cycles presented for the CEEMD corresponds to an average of the performed tests. The employed platform is the ALTERA DE2 CYCLONE IV E running at 50 MHz.  Figure 12a shows the FPGA results for the extracted IMFs using the CEEMD processor. As can be observed, the IMFs extracted show the evolution of the characteristic LSB frequency component during the startup transient of a motor with a broken rotor bar. The effectiveness in this step facilitates the application of any artificial intelligence-based method. The software used for the VHSIC Hardware Description Language (VHDL) coding, where VHSIC stands for very high speed integrated circuit, and its simulation is in ModelSim-Intel FPGA. This language is standardized by the IEEE, which allows its implementation and portability in different FPGA platforms such as Altera Quartus and Xilinx ISE, among others. Further, VHDL code allows the development of IP cores (IP stands for intellectual property). Figure 12b shows the FPGA platform and a result of "One Broken Bar 1BB".  Table 2 indicate the viability of implementing the CEEMD structure as a lowcost SoC solution for condition monitoring of induction motors since the resources used in the FPGA do not exceed the 25% of the available ones; in fact, a smaller FPGA could be used. Furthermore, the FPGA-based proposed methodology takes 5,391,415,057 clock cycles for estimating the induction motor condition, which means that the implementation is 1.4 times faster than the Matlab software implementation, which takes 151.8 s on a 2.2 GHz Intel Core i7 processor.

Fault Diagnosis
The testing set composed by 80 real trials, i.e., 20 trials for each induction motor condition (HLT, HBB, 1BB, and 2BB), was analyzed using the proposed methodology. Once the five IMFs are obtained (see Figure 3), the Shannon entropy and energy are computed. Tables 3 and 4 show the statistic values, mean (µ) and standard deviation (s), for the trials of each induction motor condition, respectively. These values are used to train and validate the FFNN as described in Section 4.4. After training, the FFNN is tested with the dataset composed by the 80 real tests, the obtained results are An important parameter to know the performance of the CEEMD implementation is the computation time required to compute a full input data set with N samples. Therefore, remembering that the sifting process uses the spline cubic to calculate the envelope of the signal, the spline cubic module needs that the data set is fully acquired to avoid edge errors that affect the effectiveness of the decomposition. Hence, once the dataset is fully acquired, the N points of the envelope are obtained, resulting in 2NT m clock cycles for calculating a candidate IMF, where T m represents the number of clock cycles necessary for calculating each sample. The time required by T m is limited by two consecutive sequential division operations, which take 168 clock cycles, indicating that for its hardware implementation the sampling frequency can reach a peak of 297,619 samples/s for a 50 MHz master clock. For the designed sifting process, the measured signal has a log of 1024 samples, requiring 173,132 clock cycles or 3.46 ms at 50 MHz to complete a sifting process iteration. The number of interactions of the sifting process used by the CEEMD method depends on the complexity of the signal; for the signals treated in this work, the average number of iterations was 31,140, requiring 107.74 s to calculate five true IMFs.
Results shown in Table 2 indicate the viability of implementing the CEEMD structure as a low-cost SoC solution for condition monitoring of induction motors since the resources used in the FPGA do not exceed the 25% of the available ones; in fact, a smaller FPGA could be used. Furthermore, the FPGA-based proposed methodology takes 5,391,415,057 clock cycles for estimating the induction motor condition, which means that the implementation is 1.4 times faster than the Matlab software implementation, which takes 151.8 s on a 2.2 GHz Intel Core i7 processor.

Fault Diagnosis
The testing set composed by 80 real trials, i.e., 20 trials for each induction motor condition (HLT, HBB, 1BB, and 2BB), was analyzed using the proposed methodology. Once the five IMFs are obtained (see Figure 3), the Shannon entropy and energy are computed. Tables 3 and 4 show the statistic values, mean (µ) and standard deviation (s), for the trials of each induction motor condition, respectively. These values are used to train and validate the FFNN as described in Section 4.4. After training, the FFNN is tested with the dataset composed by the 80 real tests, the obtained results are shown in Table 5 as a confusion matrix. It is observed that 20 trials of the HLT condition are classified as 20 trials of the HLT condition; therefore, it has an effectiveness of 100%. On the other hand, for the 20 trials of the HBB condition, the system classifies two trials as 1BB and 18 trials as HBB; so, it has an effectiveness of 90%. For the 1BB condition, 19 trials are classified as 1BB and one trial as HBB, which represents an effectiveness of 95%. It is important to mention if any false positive is obtained. With the above-mentioned results, a total average effectiveness of 96.25% is obtained, indicating that the proposed methodology and its FPGA implementation can be a reliable condition monitoring system.

Conclusions
This paper presents the FPGA implementation for the CEEMD method and its use as a SoC solution for condition monitoring of broken bars (HBB, 1BB, and 2BB) in induction motors. The overall fault detection system consists of the CEEMD method, the feature extraction module to calculate the entropy and energy of each IMF, and the FFNN to perform an automatic diagnosis.
Classification results show an average effectiveness superior to 96%, indicating that the proposal is a reliable solution for broken bar detection in induction motors, even in an early fault stage since the HBB condition can be diagnosed with an effectiveness of 100%.
Regarding the proposed FPGA structure, obtained results shown a high accuracy (relative error < 1% between floating-point and fixed-point formats) and a minimum resource usage (<25%), which makes it a suitable and attractive SoC solution for condition monitoring systems; in fact, a smaller FPGA can be used, reducing costs and power consumption. As VHDL code is used, the hardware structures are portable between FPGA platforms and vendor-independent since they are completely developed by the authors.
It is important to mention that the sifting module implements the spline cubic interpolation, i.e., no simplification in the CEEMD method is carried out; therefore, the proposed implementation can be used for the analysis of any signal in many other applications. It should be pointed out that the IP core developed can be integrated into other methodologies and systems with the aim to develop SoC solutions for different applications.