Frequency Response Functions (FRF) in Julia

You are right, in a continuous structure there is an infinite number of natural frequencies. For a structure supported on soft springs there are 6 rigid body modes. I just chose the 10 Hz one as one being prominent, and not likely affected by signal idiosyncrasies at near zero Hz. I normally like viewing response spectra as sqrt(Gyy). Where the Gyy is averaged over a number of blocks of data, or impacts in your case.

If by line to infinity you mean the high amplitude at zero frequency, it is potentially an accelerometer issue, but I think you are inducing DC offset by subtracting the mean of the whole signal instead of subtracting the mean of the pretrigger portion of the signal, or the samples before they have been influenced by the impact.

I made the adjustment, and it cleared up and flattened the lead-in to the impact, but I guess I need to also start my hammer impulse array after the drawback before the swing where it is in negative g just before the swing:

image

The H1 FRF is not as nice as my first attempt. The X-axis is still the sample number, so does that mean index H1[4] at value 7.47 is my frequency, i.e. 4 Hz?

image

Or because I am using a 512-block at 256 Hz (2 s period), that it is 2 Hz (4 * 0.5 Hz per sample tick on the X-axis) in the H1 graph? Thanks!

1 Like

It is 0.5 Hz per frequency line.

My concern is that the sampling rate is different for the hammer compared to the accelerometer such that the frequency of the 4th frequency bin is different for the impact vs. response, so your cross power and thus H1 calculation is incorrect. Review a plot of the impact Gyy with its correct frequency scaling on the x-axis, and Gff with its correct frequency scaling on the x-axis, now that the mean removal is done in a reasonable fashion.

I upsampled the input (hammer) from 200 Hz to 256 Hz to match the output (response). Perhaps I should try the reverse - downsample the output from 256 Hz to match the input’s 200 Hz and run that instead?

I don’t think that should make a difference. I recollect that you are using wireless sensors? Are you sure that the two channels sample simultaneously? And that there was no overloading?

No, and that is why I will be putting together a “real” system of perhaps those Raspberry Pi HATS!

Another question entirely: If I have 24 taps done along intervals across the structure, is there a way to average all the outputs with no inputs and derive the fundamental or natural frequency? In other words, the hammer was not instrumented for those.

Is the Rice Characteristic Frequency a possible way of determining the natural frequency for these non-instrumented, output-only waveforms?

Lets make a couple of assumptions:

  1. the impact is relatively uniform in frequency domain amplitude
  2. You were very repeatable in your impacts, thus each impact has the same energy.
  3. Your structure has real normal modes.

Then manually take the amplitude of each frequency at each location. Make a sketch of your DUT. Draw an arrow above the location where the measurement was made. Make the length of the arrow proportional to the amplitude of vibration. Voila, you have a mode shape.

Worth doing for the experience. What worries me is that your impact auto spectrum does not look like it matches assumption 1. Assumption 2, is probably not off by more than a factor of 2.

I tried very hard to be consistent with those!

Do you know if feeding all output responses to a Rice Characteristic Frequency function that returns a single peak is close enough to the natural frequency? It gives me 9.69 Hz, and I have estimated 10 Hz from the data via the Pluto notebook.

I am not sure what that is.

It is a distribution I just learned of after finding it being used in the Vibrationdata Toolbox by Tom Irvine. AFAIK, it is a continuous distribution function that is circular-based (I guess that’s why it works well with sinusoidal data). I have read somewhere that it can approach the natural frequency if for the only reason that if you strike something it tends to vibrate around its fundamental frequency.

Tom Irvine wrote the Vibrationdata Toolbox. The rice function is coded in Matlab in the toolbox:

VibrationData Toolbox