Documentation
Vibration Post-Processing Module
vibEngine.framework© for iOS®/iPadOS®
- Version: 1.02
- Author: David Bukowitz
- 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:
Installation
Follow the steps below to install the vibeAV.framework
- Drag and drop the vibeAV.framework file into your Xcode project
- Select the "Embed & Sign" option in the Framworks, Libraries and Embedded Content menu
Framework Anatomy
- Signal Post-Processing Module (vibePostProc module)
- Vibration Evaluation Standards (vibeStds module)
...
//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];
...
...
//-------------------------------------------------------------
//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