Signal Conditioning

cancel
Showing results for 
Search instead for 
Did you mean: 

time averaging of blocks of data per turbinenrevolution

Hello,

 

I have been thinking very hard without getting anywhere about a signal processing aspect of a DAQ measurement. I will describe the problem first as below.

 

Measurement system: a small DC motor driven turbine (24 blades) running up to speeds of several tens of thousands of RPM.

 

DAQ device: PXI6251 through BNC2120 connector block.

 

Problem decription: I am acquiring data for passage of each turbine blade past a sensor. I am able to collect a periodic waveform suggesting the rotation of the turbine. This is a noisy signal. I want to perform rotational averaging so that noise can be reduced. There are plenty of exmaples available discussing synchronous averaging which makes sense (recovering noise buried periodic waves such as a sine wave). However, in may case, I must average so that each cycle of averaging line up with the same blade.

[I can do this by collecting a stream of data. slice it into blocks of consecutive 24 peaks corresponding to each blade, and line the sets up to do the averaging. I am struggling to do this in LabVIEW, elegantly. Mind you, if the speed is varied this will be more complex, so I think it will be best to start by considering the turbine is running at constant speed and then think about variable speed situation. ]

Can anyone get me started on this, please? I can try to be more clear if anything requires further clarification.

 

[I am not familiar with producer-collector loop in LabVIEW, in case this is a standard approach for this type of signal processing task]

0 Kudos
Message 1 of 10
(6,667 Views)

Hi,

If I've understood, you want to do an ensemble average, that is, in your case, an average among all the values corresponding to the same shaft position ( the same angular position of the turbine's shaft); this for all angular positions. is it riight?

I've attached an example of an ensemble average of the cycles of an i.c. engine. Let me know if i grabbed the concept...

 

0 Kudos
Message 2 of 10
(6,661 Views)

Hi c.fish,

 

You describe the problem better. If I understand correctly, the figure you have attache, suggest averaging being done for a particular shaft at different cycles, and each cycle correspond to 7800 samples?

 

I was using a USB DAQ (NI-5133) before but I have now chaged to a PXI-6251 device, purely because it has twice as much resolution and more channels (Although it isn't as fast but that's ok for now.)

I have one of the AI configured as voltage input which is contunuously acquiring stream of data. I have to come up with a system that takes 24-consecutive peaks of the streams, align them, average and display/ save.

 

 

0 Kudos
Message 3 of 10
(6,642 Views)

Just to add to my previous post, the waveform I am getting which I would like to average by blad position.

0 Kudos
Message 4 of 10
(6,634 Views)

For blade index: Do you also get a index signal per revolution?

 

However assuming that you capture n revolutions and the speed isn't changing that much:

Use extract single tone detection to find the actual blade frequency f_b,   samplelength per revolution is  SPS x <n_blade> / f_b 

slice your data and add it up

 

capture some data (20 revolutions) and post data (array constant) in a vi.

Greetings from Germany
Henrik

LV since v3.1

“ground” is a convenient fantasy

'˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ'


0 Kudos
Message 5 of 10
(6,621 Views)

Thanks, I will try to implement that in a VI. Although, could you please tell me how do I 'slice' the data? I have been thinking along similar lines but struggling with my graphical programming limitations!

 

There one more frustrating problem that I am dealing with:

I am having the following problem which is kind of annoying since I am trying to achieve something seemigly simple: save the continuous stream of data at simplest possible manner.

The DAQ is configured as follows: Sample rate: 400KS/s

Mode of acquisition: Continuous

No. of samples: 5k

 

The VI runs fine when the data saving disabled. As soon I enable the data saving, it crashes with the following error:

Attempted to read samples that are no longer available. The requested sample was previously available, but has since been overwritten.

Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.

Property: RelativeTo
Corresponding Value: Current Read Position
Property: Offset
Corresponding Value: 0

Task Name: _unnamedTask<116>

 

 

Please, lend me a hand understand this. Will be grateful!

 

0 Kudos
Message 6 of 10
(6,613 Views)

certaintly, the math described above, with the appropriate lining up of the edges can work. 

 

However, if you are able to use the Sound and Vibration Measurement Suite, it is able to resample the sensory data into angular position.  Then, all data is "even-angle" and performing time syncrhonous averaging is easy.  The data is already lined up. 

 

 

Preston Johnson
Solutions Manager, Industrial IoT: Condition Monitoring and Predictive Analytics
cbt
512 431 2371
preston.johnson@cbtechinc
0 Kudos
Message 7 of 10
(6,601 Views)

Hi preston_johnson,

I don't have Sound and Vibration Measurement Suite included in my LabVIEW package.

However, I think there is waveform align and resampling blocks in Signal Processing-> Waveform Conditioning. Will these do similar tricks?

0 Kudos
Message 8 of 10
(6,593 Views)

 


Henrik_Volkers wrote:

For blade index: Do you also get a index signal per revolution?

I would like to but I am not getting one right now.

 

However assuming that you capture n revolutions and the speed isn't changing that much:

Use extract single tone detection to find the actual blade frequency f_b,   samplelength per revolution is  SPS x <n_blade> / f_b 

slice your data and add it up

 

capture some data (20 revolutions) and post data (array constant) in a vi.

 


I was thinking along similar lines too. However, if I want to do this on the run, the number of samples per revolution is not a static value. I think this would be a problem? (I might have it in such a way that I see a delayed average by storing few revolution in static variable, possibly).

For simplicity, Could you please suggest how best to implement this on a simulated vi, please? For example, if I were to average 'Waveform1' considering 10 peaks to a revolution(see attached VI). My limited LV fluency is getting in my way big time.

 

 


 

0 Kudos
Message 9 of 10
(6,560 Views)

here is something to play with 😉

It's a crude lock in ... blades.png

Greetings from Germany
Henrik

LV since v3.1

“ground” is a convenient fantasy

'˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ'


0 Kudos
Message 10 of 10
(6,531 Views)