LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

High speed vibration analysis issue

Part of a project I'm working on includes some high speed vibration analysis and I'm trying to basically reproduce the functionality of the Vibration Analysis.VI example, but I can't figure out how to get it to work using more recent components...

Basically I need to sample 3 channels @ ~24kHz for ~30 secs. Then I need to combined these channels into one using an RMS function, then run this through an FFT function. I then need to do some limit checking on the resulting waveform and log this data to file.

Attached is the VI I've been working on and is based on the Cont Acq&Graph Voltage-Int Clk.vi example. I'm using a simulated NI PCI-6250 M series device(as this is the card we will be using)

The problems I'm having are...

1. when acquiring data the way this is set up, I end up with an array of wave form arrays and I'm attempting to convert this into one 3-D array (one for each channel), but I end up with gaps in the resulting set.

2. Once I do get a single array per channel, is this approach to the RMS/FFT process correct?

- Chris
0 Kudos
Message 1 of 18
(4,658 Views)
Good day,
 
there are a number of techniques in reducing vibration waveforms.  The one you describe might be the best one.  What is the unit under test, i.e. what are you measureing vibration from?
 
Are you trying to do RMS averaging to wash out noise in the vibration signal?  We have a excellent FFT with RMS averaging function in our Sound and Vibration toolset. 
 
I look forward to hearing your response about the vibration source. 
 
Preston Johnson
Solutions Manager, Industrial IoT: Condition Monitoring and Predictive Analytics
cbt
512 431 2371
preston.johnson@cbtechinc
Message 2 of 18
(4,652 Views)
This is part of an "End of Line" engine test cell. It's basically a 6-8 minute test that determines if an engine that has just come off the production line has any issues.

There will be a single 3-axis vibration sensor sending 3 channels of data to the card. I need to combined those channels into a single 'channel' using an RMS function then run it through an FFT function to do analysis on it. (basically limit checking.)

If there is a single vi that can take a set of channels, reduce them to one and output the FFT wave form, that would be great. I was under the assumption, that was the one I have in my vi currently, but I really don't have much experience with this so i could be totally off.

- Chris
0 Kudos
Message 3 of 18
(4,648 Views)
BTW - You can see an overview and more details on the project this is fitting into by skimming through the post called: "Help with LabVIEW DAQ application architecture"

- Chris
0 Kudos
Message 4 of 18
(4,648 Views)

Your example is only working with one channel.  Your first loop creates additional "channels" by adding each new reading to the double array.  I would consider changing the build array to cascade in the first loop.  This will put the data end to end - so it will be one long channel covering the duration of the test. 

Knowing the length of the test, you could put the RMS averaging FFT inside the acquire loop and provide the number of averages to be the same as the number of acquisitions.  You will need to have a separate FFT function for each channel that you measure.  At the end you can add three resulting FFTs together and divide by three, or go with the sum, or limit test them individually. 

I would limit test the resulting FFTs individually.  If you are looking at vibration in the X Y and Z directions, you will see a predominate vibration typically in one direction.  If you average the three results, then do limit testing, you may pass a unit that is vibrating in one direction over specification. 

Just some ideas. 

 

Preston Johnson
Solutions Manager, Industrial IoT: Condition Monitoring and Predictive Analytics
cbt
512 431 2371
preston.johnson@cbtechinc
Message 5 of 18
(4,628 Views)
Thanks for your feedback. You've made some excellent points and they make sense, but I have a couple questions on applying them...

1. I understand in concept what you mean about changing the build array to cascade in the DAQ loop, but I'm not sure how that is implemented in LabVIEW. This is the key concept I've been trying to figure out. Can you give me an idea how that is done in LabVIEW?

2. I've had some people tell me it's 'better' to leave the acquisition running during the entire test and try to index just the data needed for testing. In other words, it's not a good idea to stop and start the acquisition function. Is there any truth to this or is it ok to start and stop the acquisition process?

Thanks again for the help 🙂

- Chris
0 Kudos
Message 6 of 18
(4,622 Views)

First, lets change your inputs to read from three channels of the simulated DAQ device. 

Then in the continious read loop (just as you have the DAQ loop set-up now), lets do an RMS averaging FFT on each channel separately.

Once the acquisition and FFT loop is complete, we can then limit test the resulting FFT. 

In this manner we are not buffering up the entire daq process, we are reducing it as it comes in with the RMS averaging FFT. 

Does this make sense?

 

Preston Johnson
Solutions Manager, Industrial IoT: Condition Monitoring and Predictive Analytics
cbt
512 431 2371
preston.johnson@cbtechinc
Message 7 of 18
(4,618 Views)
sounds good.

Attached is an implementation of what I think you're describing. It has 3 channels being acquired and each channel is being run through a separate RMS/FFT function.

I'm not sure how to work with the dynamic data that is coming out of the FFT functions so I don't have the averaging part in place.

Is this the right idea?

- Chris
0 Kudos
Message 8 of 18
(4,610 Views)
Hi Chris,

I hope you're doing well.  It sounds like you want to acquire data for these 3 channels for the time specified (30 seconds), get a 2D array of data (3 channels of about 720,000 points each), compute the RMS of the 3 channels (leaving a 1D array of 720,000 points), and then compute the FFT.  I am not quite sure why would would want a 3D array for each channel, but may be you can clarify this a bit?  What may be throwing you off is the waveform datatype.  You can think of each waveform as a 1D array of its own.  The way you are currently building the array in your while loop, you're creating a 2D array of waveforms, which is the equivilent of a 3D array.  In the end, what I think you will need is either a 1D array of waveforms (one waveform of contiguous data per channel), or a 2D array of scalars (one dimension for the channels and the other for the data that belongs to that channel).

To avoid this confusion, what I would suggest is rather than building off of the Cont Acq&Graph Voltage-Int Clk.vi example, take a look at the Acq&Graph Voltage-Int Clk.vi.  You can set the acquisition rate and number of points needed with this VI, and it will output a 1D array of waveforms or 2D array of scalars.  From here, you may be able to use one of the RMS VIs if you have the LabVIEW Full or Professional packages with the Analysis palletes.  You can find these functions in Functions»Signal Processing»Waveform Measurements.  When you say you want to combine your channels into one using the RMS function, what do you mean by this?  If you can clarify this a bit, we might be able suggest whether the RMS/FFT method you are using is what you are looking for or not.  Let us know if you have further questions!

Thaison V
Applications Engineer
National Instruments


Message 9 of 18
(4,606 Views)

I think your latest implementation is close.  I would suggest you replace the three FFTs that you have in the loop, with the express VI for FFT that does RMS averaging (the compute spectral measurements).  Internally it will take each block of data and average it for the specified number of averages.  The result you get is a single FFT with RMS averaging over your entire measurement duration.  You will then have three FFTs with which you can do your limit testing.  This also removes the requirement to use the shift register, since the RMS averaging function is doing this internally. 

Does this make sense.

 

Preston Johnson
Solutions Manager, Industrial IoT: Condition Monitoring and Predictive Analytics
cbt
512 431 2371
preston.johnson@cbtechinc
Message 10 of 18
(4,600 Views)