0
$\begingroup$

I am currently working with vibration measurements in structures. In the netherlands there is a guideline for verifying vibration measurements for damage to machinery. This is the so-called "SBR Trillingsrichtlijn". In this guideline a frequency weighting function is specified to modify the time series from vibration measurements:

Frequency weight function

with small f being the frequency in Hz, f_0 a constant frequency of 5.6 Hz and v_0 a predefined constant velocity of 1 mm/s. To illustrate the filter behaviour i show it graphically here as well (axes are linear):

filter response with linear axes

In post-processing this is fine as i can perform an FFT on the time series data, apply this weighing function in the frequency domain (through multiplication with the FFT transformed time series) and then do an inverse FFT to get the adjusted time signal data.

My question is the following: the equipment we use to measure vibrations does this weighing internally using a digital filtering on the time series in real-time. To verify the data i would like to design a digital filter corresponding to the weighing function above, can anyone point me to a resource how to approach this? From what i have looked up so far on IIR / FIR filter design usaully the examples start from a transfer function in the s-domain or z-domain (which correspond to a laplace transform in discrete or continuous time) but now i only have a frequency response in the fourier / frequency domain.

EDIT: Based on suggestion of @Hilmar it appears a simple first order high pass function. i made a python implementation to check the method of FFT and the highpass filter. shown in the graph here. Strangely the frequency response of the highpass filter and SBR specified response match exactly but the implementation using the highpass has some artefacts whereby non existant frequencies are generated with non-zero amplitudes:

graph showing comparison of implementation using fft and highpass filtering in python.

this can be seen in the green dotted line which is a mock signal filtered in python using the scipy package.

$\endgroup$
  • $\begingroup$ That appears to be a simple first order highpass with a cutoff frequency of 5.6 Hz $\endgroup$ – Hilmar Feb 5 at 13:51
  • $\begingroup$ @Hilmar Thanks for the comment. This shows my inexperience with the topic. Indeed upon further inspection this appears to be correct. $\endgroup$ – AxelK Feb 8 at 14:40
1
$\begingroup$

This is the classical problem of filter design:

You've got a frequency response that you want, how to implement it using a FIR?

I'm not going to lay out all the theory here, because it can easily be found by looking for Fourier approximation methods for FIR design or windowing methods, but the idea is easy enough:

  • Take your frequency response. Sample it at many points.
  • Take the inverse FT. You get something long, which, when convolved with a signal, would have the sampled frequency response (because of the convolution theory of the Fourier Transform).
  • Because the result is a very long filter and exhibits undesirable fringe behaviour, apply a window function to cut off some of the coefficients. The result is your filter taps.

There's iterative methods of increasing the match between desired and actual response given a limited amount of freedom by a limited number of taps; but this would exceed the scope of the question.

$\endgroup$
  • 1
    $\begingroup$ Seems a bit overkill for a simple first order highpass $\endgroup$ – Hilmar Feb 5 at 13:50
  • 1
    $\begingroup$ That's kinda true :) but it is universally applicable, not only to the example problem $\endgroup$ – Marcus Müller Feb 5 at 14:09
  • $\begingroup$ Thank you for the suggestion i looked into the suggested topics and they appear applicable. But as @Hilmar mentioned it appears a simple first order highpass is specified. $\endgroup$ – AxelK Feb 8 at 14:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.