Live Drilling
  • Introduction
  • FAQ
  • what's new
    • Latest releases
      • Wells 5
      • LiveRig 5
      • LiveRig 4
      • WITSML Store
    • Operations in Time by Depth Chart
    • Unit Sets
      • Per-Asset Units
      • Unit Conversion
      • Dashboard Configuration
      • Force Follow Asset Units
    • Well casing shoe schematic
    • Wells correlation
    • FFT spectrum
    • Pressure Tests
      • Configuration
      • Automated Standard Pressure Tests
      • Manual Pressure Test
      • LOT/FIT
    • Rig State detection
    • BOP Schematic
      • BOP status register
    • Signal Processing
      • Moving Average
  • Data Flow
    • Introduction
    • Data Ingestion
    • Data Normalization
      • Clock Synchronization
      • Normalized events schema
      • Data indexes and enrichment
      • Unit conversion
      • Auto-Switch
  • Physical Models
    • Introduction
      • Structure of the functions
      • Validation
    • General Equations
      • Static Data Dependencies
      • Pipes Functions
    • Trajectory
      • Introduction
      • Static Data Dependencies
      • Pipes Functions
    • Hydraulic
      • Introduction
      • Static Data Dependencies
      • Pipes Functions
    • Torque and Drag
      • Introduction
      • Static Data Dependencies
      • Pipes Functions
    • Hole Cleaning
      • Introduction
      • Static Data Dependencies
      • Pipes Functions
    • Surge and Swab
      • Introduction
      • Static Data Dependencies
      • Pipes Functions
    • Thermal
      • Introduction
    • Volume Tracker
      • Introduction
      • Pipes Functions
  • Basic Features
    • Charts
      • Channels Charts
        • Temporal Channels Chart
        • Channel Value Chart
        • Depth Channels Chart
        • Data navigation
          • Span Control
      • Rig Allocation Gantt Chart
    • Unit sets
      • Configuration changes on unit sets
      • Depth unit changes
      • Personal units sets
    • Permission schema
    • Import/Export Well
    • Add-ons
  • Static Data
    • Assets
      • Assets Structure
    • Well
      • Introduction
      • Well Schema
      • Well Units
      • Regions, fields and countries
      • Well Design Overview
      • Objectives
    • Intervention
      • Introduction
      • Intervention Schema
      • Intervention Types
      • Scenarios
      • Runs
      • Completion and Abandonment
      • Drilling Section Schema
    • Rig
      • Introduction
      • Rig Schema
      • Physical models configuration
    • Pipes functions
    • REST API Examples
  • Administration
    • High Frequency Data
      • WITSML Null Values
      • Unit Management Tools
      • WITS Custom Mapping
    • Data Normalization
      • Data Management
        • Event Settings
        • Channels Management
      • Data normalization templates
      • Data normalization templates prioritization
      • Auto-Switch
    • Standard Identifiers
    • Static Data
      • Regions, fields and countries
      • Intervention Types
  • LiveRig Collector
    • Introduction
    • Getting Started
    • Connecting to Intelie Live
    • Security
    • Local data storage
    • Data transmission and recovery
    • Monitoring
    • Remote Control
      • APIs
        • /testSourceEndpoint
        • /storeConfiguration
        • /getFromStore
        • /backlog-sync
      • Sources
        • MQTT Topics
        • OPC Requests
        • WITSML Backlog Sync
        • WITSML Object Explorer
        • WITSML Requests
      • Properties
    • HA Deployment
    • Protocols
      • WITSML
      • WITS
      • OPC-DA
      • OPC-UA
      • MODBUS
      • MQTT
      • CSV
      • RAW
    • Protocol conversion
    • Configuration
      • liverig.properties
      • sources.xml
      • store.json
      • modbus.json
      • mqtt.json
      • Configuring an OPC-UA source
      • Multiple event types for WITSML sources
      • Certificate-based authentication for WITSML HTTPS sources
    • LiveRig Collector Appliance
    • Command line Interface (CLI)
  • LIVE EDGE
    • Collector Reader
  • Integrations
    • Introduction
    • WITSML Store
    • REST Output
    • REST Input
    • WellView
    • OpenWells
    • Python
  • DEVELOPER
    • Identified Curves
    • Hidden Units
  • DEPRECATED
    • WITSML Output
    • LiveRig 3.x / 2.x
      • 3.5.0
      • 3.4.0
      • 3.3.0
      • 3.2.0
      • 3.1.0
      • 3.0.0
      • 2.29.0
Powered by GitBook
On this page
  • Introduction
  • Live FFT

Was this helpful?

  1. what's new

FFT spectrum

Live plugin-spectrum provides pipes functions to calculate the FFT of a time-domain signal helping to identify problems that are better seen in the frequency domain

PreviousWells correlationNextPressure Tests

Last updated 2 years ago

Was this helpful?

Introduction

The plugin-spectrum it is a Live plugin that provides pipes functions to analyse signals in the frequency domain using FFT (Fast Fourier Transform).

Some of the benefits of frequency analysis are improved well safety monitoring and issue prevention:

Drilling systems are subject to torsional, axial, and lateral vibrations that are excited by bit-rock or by drillstring-formation interaction forces. These oscillations can be distinguished by mode shape and frequency. High-frequency torsional oscillations have natural modes reaching 400 Hz. Stick/slip oscillations are characterized by low frequencies usually below 1 Hz and affect the entire drill-string.

The next table shows the frequency ranges of common vibration interaction forces and modes:

Mechanism

Mode of vibration

Frequency range

Stick-Slip

Torsional

0-5Hz

Bit Bounce

Axial

1-10Hz

Bit Chatter

Lateral

50-350Hz+

Bit Whirl

Lateral/Torsional

5-100Hz

BHA Whirl

Lateral/Torsional

5-20Hz

Modal Coupling

Axial/Lateral/Torsional

0-20Hz

The stick-slip phenomenon is most typically related to higher compressive strength formations related to torsional vibration (0-5Hz). When drilling with too low RPM or too high WOB (weight on bit), the drill string may enter the stick-slip window:

Live FFT

The signal.FFT() pipes function receives a double array of timestamp series, a double array of signal, the sampling rate of signal and a boolean convertToDecibel that flags whether or not to convert the output magnitude to decibel:

The example below shows generated sine wave signals in the left charts and their FFTs to the right. The first with one harmonic, the second with three harmonics increasing amplitudes, and the third with noised sine signal.

With a Cartesian chart, it is possible to plot the FFT signal based on the example query below. It is also possible to replace the generated signal with a real signal:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item 
=> times, 20*sin(2/10*pi()*times) as sin every item
=> signal.FFT(times, sin, 1,false) as fftResultData 
over last 20 min every 1 min 

=> fftResultData:json():jsonparse() as result 
=> result->magnitudes:seq as mag, result->frequencies:seq as freq 
=> @for range(freq:len()) as i, mag, freq => mag[i] as y, freq[i] as x
=> @set '#106621' as color => @set 1 as lineWidth
=> @set true as __clear

The next images show each example with its related FFT:

In a temporal chart with the query bellow it is possible to generate a sine signal:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item
=> sin(2/10*pi()*times) as sin every item

In a Cartesian chart with the query bellow it is possible to generate the fft of the sine signal:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item
=> times, sin(2/10*pi()*times) as sin every item
=> signal.FFT(times, sin, 1,false) as fftResultData 
over last 10 min every 1 min

=> fftResultData:json():jsonparse() as result
=> result->magnitudes:seq as mag, result->frequencies:seq as freq
=> @for range(freq:len()) as i, mag, freq
=> mag[i] as y, freq[i] as x

=> @set '#106621' as __color
=> @set 1 as __lineWidth
=> @set true as __clear

In a temporal chart with the query bellow it is possible to generate sine with harmonics:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item
=> sin(2/10*pi()*times) + 2*sin(3/10*pi()*times)  
+ 3*sin(4/10*pi()*times) as sin every item

In a Cartesian chart with the query bellow it is possible to generate the FFT of the harmonics sine signal:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item
=> times, sin(2/10*pi()*times) + 2*sin(3/10*pi()*times)  + 
3*sin(4/10*pi()*times) as sin every item

=> signal.FFT(times, sin, 1,false) as fftResultData over all every 10 min
=> fftResultData:json():jsonparse() as result
=> result->magnitudes:seq as mag, result->frequencies:seq as freq
=> @for range(freq:len()) as i, mag, freq
=> mag[i] as y, freq[i] as x

=> @set '#106621' as __color
=> @set 1 as __lineWidth
=> @set true as __clear

In a temporal chart with the query bellow it is possible to generate sine with noise:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item
=> 20*sin(2/10*pi()*times) +20*random() as sin every item

In a Cartesian chart with the query bellow it is possible to generate the FFT of the noised sine signal:

=> over last 10 min every sec 
=> count() as times, random() as rand over all every item
=> times, 20*sin(2/10*pi()*times) +20*random() as sin every item


=> signal.FFT(times, sin, 1,false) as fftResultData over all every 10 min
=> fftResultData:json():jsonparse() as result
=> result->magnitudes:seq as mag, result->frequencies:seq as freq
=> @for range(freq:len()) as i, mag, freq
=> mag[i] as y, freq[i] as x

=> @set '#106621' as __color
=> @set 1 as __lineWidth
=> @set true as __clear
Left: sine wave with 10 seconds period. Right output with 0.1Hz peak frequency
Signal processing of plugin-spectrum from time domain to frequency domain with FFT
Benefits of analyse signal in frequency domain
Drilling modes of vibration: lateral, longitudinal and torsional
Drilling efficiency diagram and stick slip window
Pipe function to calculate FFT
Generated sine harmonic signals with calculated FFT
Example of generated sine
FFT calculated based on generated sine signal
Sine signal generated with harmonics
FFT calculated with harmonics
Sine signal generated with noise
FFT calculated based on noised sine