AI ESP Failure Prediction: Read the Current Signature

Motor current signature analysis frequency spectrum showing line frequency and broken rotor bar sidebands for ESP failure prediction

By Saad Iqbal

An ESP doesn’t fail on the day it trips. It fails weeks earlier, one degraded rotor bar or one worn bearing at a time, and it tells you about it the whole way through — in the one signal every switchboard already records for free: the current the motor is pulling. Most operators never look at that signal as anything more than an amps gauge. Read it the right way, though, and it becomes an early-warning system for a piece of equipment that fails at an industry-wide rate north of 80% and costs real money every time a rig or wireline unit has to be mobilized to pull one.

Why ESPs Fail, and Why You Usually Find Out Too Late

An electrical submersible pump system is a stack of things that can go wrong a mile or two underground: a three-phase induction motor, a seal section, a multistage centrifugal pump, and a power cable running back to a variable-speed drive (VSD) at surface. Traditional surveillance leans on SCADA trends — intake pressure, discharge pressure, motor temperature, vibration — and on run-life statistics borrowed from similar wells. That works, until it doesn’t: many of these signals only move once the failure is already well underway, which is why unplanned ESP trips remain common even on wells with decent surveillance.

Motor current signature analysis (MCSA) takes a different, more direct path. Instead of waiting for pressure or temperature to react to a mechanical fault, it looks straight at the electrical footprint of the fault itself, in the current the motor draws every second it runs.

The Physics: Why a Cracked Rotor Bar Shows Up in the Amps

A healthy three-phase induction motor draws current that is, to a good approximation, a clean sinusoid at the line frequency. Introduce a mechanical asymmetry — a broken or cracked rotor bar, air-gap eccentricity, a bad bearing — and that asymmetry modulates the current at a frequency tied to the motor’s slip. The result is a pair of small sidebands straddling the line frequency in the current spectrum. For broken rotor bars, the classic and well-established relationship is:

fsb = fline × (1 ± 2·s·k), for k = 1, 2, 3…

where fline is the supply frequency and s is the per-unit slip, s = (Ns − Nr) / Ns, with Ns the synchronous speed (Ns = 120·fline / p, p = number of poles) and Nr the actual rotor speed.

Worked example: a standard 60 Hz, 2-pole ESP motor has a synchronous speed of Ns = 120 × 60 / 2 = 3,600 rpm. If the VSD or an encoder shows the motor actually running at 3,550 rpm under load, the slip is s = (3,600 − 3,550) / 3,600 = 0.0139. The first-order (k = 1) sidebands then sit at:

  • Upper sideband: 60 × (1 + 2 × 0.0139) = 61.67 Hz
  • Lower sideband: 60 × (1 − 2 × 0.0139) = 58.33 Hz

Those two peaks are tiny on a healthy motor — often 45 to 55 dB below the fundamental — but their amplitude climbs, gradually and then not so gradually, as rotor bars crack and fail. Track that amplitude over weeks, and you have a run-life indicator instead of a snapshot.

Motor current signature analysis frequency spectrum showing line frequency and broken rotor bar sidebands for ESP failure prediction

What MCSA Catches Well, and What It Doesn’t

MCSA isn’t a universal ESP diagnostic, and treating it like one is how surveillance programs lose credibility. It’s strongest on faults that leave an electromagnetic fingerprint — broken rotor bars, air-gap eccentricity, and stator winding faults all produce well-characterized sideband or harmonic patterns. It’s weaker on purely mechanical wear like bearing degradation, where vibration or dynamometer-style diagnostics still carry more of the signal, and it needs to be paired with intake pressure and discharge pressure trends to reliably separate gas lock or gas slugging from an electrical fault.

Bar chart of ESP failure modes detectable via motor current signature analysis including broken rotor bar, air gap eccentricity, stator winding fault, bearing wear, and gas lock

From a Single Spectrum to a Remaining-Useful-Life Trend

One FFT snapshot tells you a fault signature exists. It’s the trend in that signature’s amplitude over days and weeks that turns into a remaining-useful-life (RUL) estimate an operations team can actually schedule a workover against. In one documented deployment, this kind of AI-driven predictive analytics reliably flagged failures early enough to cut downtime and was credited with saving an operator $8.9 million in a single program — the value isn’t in the spectrum itself, it’s in catching the trend weeks before the trip.

import numpy as np
import pandas as pd

def broken_bar_sideband_db(current_waveform, fs, f_line, slip):
    """
    current_waveform: 1D array of a single phase current sample (amps), sampled at fs Hz
    fs: sampling frequency in Hz
    f_line: nominal line frequency (e.g. 60.0)
    slip: per-unit slip, s = (Ns - Nr) / Ns
    Returns the k=1 lower/upper sideband amplitude relative to the fundamental, in dB.
    """
    n = len(current_waveform)
    window = np.hanning(n)
    spectrum = np.abs(np.fft.rfft(current_waveform * window))
    freqs = np.fft.rfftfreq(n, d=1.0 / fs)

    def amp_near(target_freq, tol=0.5):
        idx = np.argmin(np.abs(freqs - target_freq))
        return spectrum[idx]

    fundamental = amp_near(f_line)
    lower_sb = amp_near(f_line * (1 - 2 * slip))
    upper_sb = amp_near(f_line * (1 + 2 * slip))

    lower_db = 20 * np.log10(lower_sb / fundamental)
    upper_db = 20 * np.log10(upper_sb / fundamental)
    return lower_db, upper_db

# Trend the upper sideband over time to project remaining useful life
history = pd.read_csv("esp_current_signature_log.csv", parse_dates=["date"])
# history columns: date, upper_sideband_db (computed daily via broken_bar_sideband_db)
trend = np.polyfit(history["date"].map(pd.Timestamp.toordinal), history["upper_sideband_db"], 1)
slope, intercept = trend
failure_threshold_db = -20.0  # example alarm level from field baselining
days_to_threshold = (failure_threshold_db - intercept) / slope - history["date"].iloc[-1].toordinal()
print(f"Projected days to threshold: {days_to_threshold:.0f}")

The pattern in that second block — fit a trend line to a degrading health indicator and project it forward to an alarm threshold — is the same one underneath most commercial ESP RUL tools; they just replace the straight-line fit with gradient-boosted models trained across thousands of historical run-to-failure records, and they fuse in vibration, temperature, and pressure alongside the current signature.

Chart showing 42 days of early warning from rising broken rotor bar sideband amplitude before an unplanned electrical submersible pump trip

Who’s Building This Into Production Systems

Baker Hughes’ Advanced ESP Predictive Failure Analytics, part of its Leucipa production platform, fuses real-time surface and downhole sensor data with historical failure and mean-time-to-failure statistics to compute remaining useful life and rank wells for intervention. ChampionX’s LOOKOUT Optimization Services takes a similar surveillance-and-optimization approach across its ESP fleet. Neither is magic — both are built on the same signal-processing and trending fundamentals in the code above, just industrialized across thousands of wells with cleaner data pipelines and much larger failure-history datasets than any single field engineer can assemble alone. For teams building their own version, Python with NumPy and pandas is more than capable of the signal processing shown here; the harder engineering problem is usually getting clean, synchronized current and speed data out of the VSD historian in the first place.

Expected Result, Verification, and Common Pitfalls

Done correctly, this workflow turns an unplanned ESP trip into a scheduled workover: the sideband trend crosses an alarm threshold, you plan the intervention on your own timeline, and you pull the unit before it costs you the whole well’s production for an unplanned stretch. To verify a new implementation, run it against a motor with a known, already-diagnosed rotor fault first — you should see sidebands consistently at 2·s·fline offsets, well above the noise floor, before you ever trust it on a healthy-looking well.

  • Slip estimation drift. If you’re estimating slip from nameplate data instead of measuring actual speed, small errors shift where you look for the sideband and you’ll under-read its amplitude — always verify against a speed reference when one is available.
  • VSD switching noise. Variable-speed drives inject their own harmonics; filter or window your FFT carefully, or you’ll chase phantom sidebands that are really switching artifacts.
  • Gas interference masking electrical faults. Gas lock and slugging create their own current fluctuations that can bury a genuine rotor-bar signature — always cross-check against intake pressure before calling a fault electrical.

MCSA is one piece of a broader artificial-lift surveillance picture. If gas interference is a recurring issue on your wells, our look at AI gas lift instability detection covers the casing-heading side of that problem, and if you’re running rod pumps alongside ESPs, AI dynacard diagnostics applies the same “read the signal, not just the alarm” philosophy to a dynamometer card instead of a current spectrum. Either way, the underlying lesson holds: the data that predicts the failure is usually already being recorded — it just needs the right analysis to say something useful.

Saad Iqbal Avatar

About the author

Saad Iqbal

Petroleum Engineer · Well Intervention & Stimulation Specialist

Saad Iqbal is a petroleum engineer and well intervention and stimulation specialist with more than a decade of field experience in hydraulic fracturing, coiled tubing, CSG, tight sandstone and shale developments. He explores practical AI, automation and data-driven engineering for safer, smarter upstream operations.

Discover more from EnergyMindAI

Subscribe now to keep reading and get access to the full archive.

Continue reading