Documentation

Vibration Post-Processing Module

vibEngine.framework© for iOS®/iPadOS®


  • Created: 11 Jun, 2021
  • Update: 16 Nov, 2021

If you have any questions that are beyond the scope of this help file, Please feel free to email via info@rotovibes.com


Description

vibEngine© framework is an iOS®/iPadOS® library that contains experienced methods for vibration analysis. The framework includes modules for data post-processing, vibration evaluation, etc. with the following functionalities:

  • Time-Domain Filtering
  • Fast-Fourier Transform
  • Frequency-Domain integration
  • Windowing functions
  • DC Removal Filter
  • Time-Domain Overall Calculation
  • Frequency-Domain Overall Calculation
  • Frequecny Bands Overall Calculation
  • Time-Domain Higher Peaks
  • Frequency-Domain Higher Peaks
  • Rotor speed estimator
  • Bearing Damage Indicator
  • Fault Frequency Damage Indicator
  • Frequency-Domain Cross-Phase Calculation
  • FRF Calculations
  • Vibration Evaluation based on Industrial Standards, etc

  • Installation

    Follow the steps below to install the vibeAV.framework

    1. Drag and drop the vibeAV.framework file into your Xcode project
    2. Select the "Embed & Sign" option in the Framworks, Libraries and Embedded Content menu

    Framework Anatomy

    1. Signal Post-Processing Module (vibePostProc module)
    2. 
      ...
      
      //Time-Domain Overall
      +(double)timeDomainOverall:(NSArray*)signalArray withSize:(NSInteger)dataSize;
         
      //Time-Domain Max Peak
      +(double)timeDomainPeak:(NSArray*)signalArray withSize:(NSInteger)dataSize;
        
      //Crest-Factor
      +(double)crestFactor:(NSArray*)signalArray withSize:(NSInteger)dataSize;
        
      //Frequency-Domain Overall
      +(double)frequencyDomainOverall:(NSArray*)spectrumArray withSize:(NSInteger)spectrumSize;
                      
      //Frequency-Domain Overall (bins)
      +(double)frequencyDomainBandOverall:(NSArray*)spectrumArray startFreqBin:(int)startBin endFreqBin:(int)endBin;
                      
      //Frequency-Domain Overall (Hz)
      +(double)frequencyHzDomainBandOverall:(NSArray*)spectrumArray withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples startFreq:(int)startFreq endFreq:(int)endFreq;
                      
      //FFT for Acceleration raw data
      //integrationType: 0->Acceleration, 1->Velocity, 2->Displacement
      +(NSArray*)fft_calc:(NSArray*)rawData withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples integrationType: (int)integrationType;
                      
      //Frequency-Domain Windowing
      //windowType: 0->None, 1->Hanning, 2->Hamming, 3->Blackman, 4->Nutall, 5->Flat-Top
      +(NSArray*)spectrumWindowing:(NSArray*)spectrumArray withSize:(NSInteger)spectrumSize withType:(int)windowType;
                      
      //Time-Domain Filters
      //filterType: 0->None, 1->Low-Pass, 2->High-Pass
      +(NSArray*)filteredSignal:(NSArray*)signalArray withSize:(NSInteger)dataSize withType:(int)filterType;
                      
      //Time-Domain DC-removal
      +(NSArray*)dcRemoval:(NSArray*)signalArray withSize:(NSInteger)dataSize;
                      
      //Overall Velocity from Acceleration raw data
      //unitsMetric: true->Metric (mm/s), false->Imperial (ips)
      //isRms: true->rms, false->peak
      +(double)overallVelocityFromAccTWF:(NSArray*)rawData withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples unitsMetric:(bool)isMetric isRms:(bool)isRms;
                      
      //Overall Displacement from Acceleration raw data
      //unitsMetric: true->Metric (microns), false->Imperial (mils)
      //isRms: true->rms, false->peak
      +(double)overallDisplacementFromAccTWF:(NSArray*)rawData withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples unitsMetric:(bool)isMetric isRms:(bool)isRms;
                      
      //Running-Speed (RS) estimator (RPM)
      +(double)rsEstimator:(NSArray*)rawData withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples;
      
      //Bearing Damage Indicator 0-10
      +(int)bd_indicator:(NSArray*)rawData withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples;
      
      //Fault Frequency Damage Indicator 0-10
      +(int)ff_indicator:(NSArray*)rawData withSamplingRate:(int)sampRate withNumberOfSamples:(int)numSamples withDiscreteFreqHz:(double)fault_freq withAccThreshold:(double)accLimit withVelThreshold:(double)velLimit;
      
      ...
        

      In your project import vibEngine/vibePostProc.h and use as follow:

      
      #import "vibEngine/vibePostProc.h"
      ...
      
      // **** Time-Domain Filtering Sample ****
      //filterType = 0 -> no filter
      //filterType = 1 -> low pass-band filter
      //filterType = 2 -> high pass-band filter
      
      filteredSignalArray = [vibePostProc filteredSignal:signalArray withSize:dataSize withType:filterType];
      
      ...
      

    3. Vibration Evaluation Standards (vibeStds module)
    4. 
      ...
      
      //-------------------------------------------------------------
      //ISO-10816-3/20816 condition evaluation for velocity vibration
      //measurement of non-rotating parts
      //-------------------------------------------------------------
      // group: 1, 2, 3, 4 per ISO specs
      // isFlexible: true->flexible foundation, false->rigid foundation
      // isMetric: true->mm/s, false->ips
      // returns: A->Newly commisioned machines
      //          B->Acceptable for unrestricted long-term operation
      //          C->Unsatisfactory for long-term continuous operation
      //          D->Sufficient severity to cause damage to the machine
      
      +(NSString*)iso10816conditionWithVelocityVibration:(double)vibrationValue withMachineGroup:(int)group isFoundationFlexible:(bool)isFlexible isUnitsMetric:(bool)isMetric;
      
      
      //-----------------------------------------------------------------
      //ISO-10816-3/20816 condition evaluation for displacement vibration
      //measurement of non-rotating parts
      //-----------------------------------------------------------------
      // group: 1, 2, 3, 4 per ISO specs
      // isFlexible: true->flexible foundation, false->rigid foundation
      // isMetric: true->microns, false->mils
      // returns: A->Newly commisioned machines
      //          B->Acceptable for unrestricted long-term operation
      //          C->Unsatisfactory for long-term continuous operation
      //          D->Sufficient severity to cause damage to the machine
      
      +(NSString*)iso10816conditionWithDisplacementVibration:(double)vibrationValue withMachineGroup:(int)group isFoundationFlexible:(bool)isFlexible isUnitsMetric:(bool)isMetric;
      
      
      //---------------------------------------------------------
      //ISO-10816-3/20816 allowable values for velocity vibration
      //measurement of non-rotating parts
      //---------------------------------------------------------
      // group: 1, 2, 3, 4 per ISO specs
      // isFlexible: true->flexible foundation, false->rigid foundation
      // isMetric: true->mm/s, false->ips
      // returns an array with in the form [alert,danger]
      
      +(NSArray*)iso10816allowableVibrationWithGroup:(int)group isFoundationFlexible:(bool)isFlexible isUnitsMetric:(bool)isMetric;
      
      
      //-------------------------------------------------------------
      //ISO-10816-3/20816 allowable values for displacement vibration
      //measurement of non-rotating parts
      //-------------------------------------------------------------
      // group: 1, 2, 3, 4 per ISO specs
      // isFlexible: true->flexible foundation, false->rigid foundation
      // isMetric: true->microns, false->mils
      // returns an array with in the form [alert,danger]
      
      +(NSArray*)iso10816allowableVibrationDispWithGroup:(int)group isFoundationFlexible:(bool)isFlexible isUnitsMetric:(bool)isMetric;
      
      
      //------------------------------------------------------------------
      //ANSI/HI 9.6.4 Std allowable vibration values for Rotodynamic Pumps
      //------------------------------------------------------------------
      // pumpPowerBHP: machines BHP
      // isVsPump: true->pumps type VS1, VS2, VS3, VS4, VS5, VS6, VS7, VS8;
      //           false->pumps type BB1, BB2, BB3, BB4, BB5, OH1, OH2, OH3, OH4, OH5, OH7
      // isMetric: true->mm/s, false->ips
      // returns: allowable velocity vibration value
      
      +(double)ansiHI964AllowableWithMachineBHP:(double)pumpPowerBHP isVsPump:(bool)isVsPump isUnitsMetric:(bool)isMetric;
      
      
      //-----------------------------------------------------------------------
      //ISO/TR 17243-1 Std allowable vibration values for Machine Tool Spindles
      //-----------------------------------------------------------------------
      // ratedPower: machines rated power in kW
      // speedRPM: machine rpm
      // isRollerBearing: true->Roller Bearing (line Contact), false->Ball Bearing (point vontact)
      // isLTSC: true->Long Term Spindle Condition (vel) false->Short Term Spindle Condition (acc)
      // isMetric: true->mm/s, false->ips
      // returns an array with the theesholds in the form [alert,danger]
      
      +(NSArray*)iso_tr_17243_allowableVibrationWithPower:(double)ratedPower speedRPM:(int)rpm isRollerBearing:(bool)isRollerBearing isLTSC:(bool)isLongTermCondition isMetric:(bool)isUnitsMetric;
      
      
      //------------------------------------------------------------
      //NEMA MG-1 Std allowable vibration values for Electric Motors
      //------------------------------------------------------------
      // speedRPM: machines rpm
      // isMetric: true->mm/s, false->ips
      // returns: allowable velocity vibration value
      
      +(double)nema_mg1_allowableVibrationWithRpm:(int)speedRpm isUnitsMetric:(bool)isMetric;
      
      ...
      

      In your project import vibEngine/vibeStds.h and use as follow:

      
      #import "vibEngine/vibeStds.h"
      ...
      
      //sample using 0.15 ips velocity reading with a flexible foundation group 2 machine
      
      double vibrationVelocity = 0.15; //ips
      
      NSString *condition = [vibeStds iso10816conditionWithVelocityVibration:vibrationVelocity withMachineGroup:2 isFoundationFlexible:true isUnitsMetric:false];
      
      NSLog(@"machine condition: %@", condition);
      ...
      

      For this sample the response in the console log will show:

      An example to calculate the allowable vibration value for pumps based on ANSI/HI 9.6.4 is shown below:

      
      #import "vibEngine/vibeStds.h"
      ...
      //sample for horizontal rotodynamic pump with 50 BHP
      double allowableValue = [vibeStds ansiHI964AllowableWithMachineBHP:50 isVerticalPump:false isUnitsMetric:false];
      NSLog(@"allowable velocity value in ips: %.2f", allowableValue);
      ...
      

      For this sample the console log will display:


    Changelog

    See what's new added, changed, fixed, improved or updated in the latest versions.

    Version 1.02 (16 Nov, 2021)

    • Updated Vibration standards updated

    Version 1.01 (29 Oct, 2021)

    • Updated Optimized for iOS®15

    Version 1.0 (11 Jun, 2021)

    Initial Release for iOS® based on previous developments: vibeAV© for iOS® and C++ for Windows