LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

How to group spectral peaks into families? K-Means doesn't do a good job.

I have an application I am working on where I need to analyze many spectrums of vibration test results from a common group of motors. Typically, we see families of spectral peaks that are common from motor to motor. I want to identify the frequency peaks and the standard deviations of these peaks over the entire spectrum. For example I may see families of peaks clustered around 1.2 kHz that are separated by say 50 Hz. Depending on the characteristics of the motor the given frequency may shift up or down in frequency by the same 50 Hz. Therefore, I may have a spectral peak family that for the majority of the motors occurs at 1250Hz. However, for some part of the population that peak is
shifted down to 1200 Hz where for the majority of the motors another family occurs. I am trying to come up with an intelligent method to separate the individual peaks into families in a way that I can calculate the means and standard deviations for each spectral peak family in the overall spectrum.

Our statisticians have recommended using K-Means Clustering for this type of application. I found a routine for doing K_Means Clustering. While it does a fair job of identifying the families it can not always seperate out all of the peaks into the appropreate family. I am looking for a better means of determining which family the peaks belong to. The attached files shows a spectrum of 10 motors. Three have spectrums that are shifted downward by approximately 30-50 Hz. I have no problem identifying the peak's frequency or amplitude. The problem is deciding which family it belongs to.
Download All
0 Kudos
Message 1 of 4
(2,911 Views)
I am not sure I completely understand your problem, but it seems like you need a way to identify how much a spectrum is shifted relative to the other spectra, or to a reference spectrum. Have you tried using cross correlation between one spectrum and another to first compute the shift? You could use the shifted spectrum to group the peaks into families, but use the original location of the peak to compute your statistics.
0 Kudos
Message 2 of 4
(2,911 Views)
You might consider using a zoom FFT to create the desired frequency resolution around the frequency range of interest, say 1k to 1.4k. With this result, you can then search the zoom FFT results for peaks, and get the result of peak amplitudes and frequencies. Simple math on the frequencies shows their distance from the center frequency. You can also calculate ratios between each of the "sideband" amplitudes, and the center frequency. This is common in detecting bearing faults and gear faults.

The easiest tools to use are LabVIEW with the Sound and Vibration Toolset which has a zoom FT and a Peak Detection function.

Preston Johnson
National Instruments
Industrial Measurements and Control
Preston Johnson
Solutions Manager, Industrial IoT: Condition Monitoring and Predictive Analytics
cbt
512 431 2371
preston.johnson@cbtechinc
0 Kudos
Message 3 of 4
(2,911 Views)
Thanks Preston for your input. Actually, I have adequate resolutions in my FFT's bin The bin widths are 1/2 Hz wide so I can easily detect peaks that are 50 Hz apart and determine their Frequency & Amplitude.

The problem I am having is determining which group they belong. K-Means works by determining the distance from center frequency. I find center frequencies by averaging all the spectrums together and doing my peak detection on the averaged spectrum. The peaks detected in the averaged spectrum become my centers. I have also considered some means of determining the delta (ratio) to adjacent peaks. In my vi I calculate the frequency spacing between peaks. I am trying to come up with an intellegent way to use this spacing information.
0 Kudos
Message 4 of 4
(2,911 Views)