Resonance Ultrasound Spectroscopy (RUS) can be used to estimate the elastic properties of solid samples from their resonant frequencies. This non-destructive technique can provide important attenuation information, as well.

The actual measurement is quite straightforward. A source signal, swept in frequency at one end of the sample, is measured on the other end:

A resonant frequency is one where the response on the receiving transducer is large:

The resonant frequencies are defined by the shape, size and elastic parameters of the sample. This is the forward problem. The inverse problem is quite a bit more involved: given a set of resonant peaks, what range of elastic parameters explain these observations?

In addition, the full width at half max of the peaks determines the quality factor Q, which is a measure of attenuation.


RUS has been applied to many materials, including bones, but our applications have (thus far) focused on rocks and ice.


While RUS deals with frequencies at the higher end of field geophysics (comparable to sonic logging, for example), it fills an experimental gap between low frequency stress-strain measurements as made in the poro lab and high frequency laser ultrasound. For example, we explored the anisotropic elastic properties of shales with RUS:

and extended the existing RUS code to properly deal with samples with vertical and horizontal transverse isotropy (VTI and HTI, respectively) in this paper.


Together with collaborators at the University of Otago, we explored the resonant modes of ice samples. As temperature increases, resonant peaks decrease in amplitude, and shift to lower frequency:

The full report on the potential of RUS on ice was published in The Cryosphere, but the variability in attenuation as a function of temperature is shown below:

We observe that the quality factor Q of ice generally decreases (i.e., attenuation increases) with increasing temperature. More subtly, the absolute value of Q and the change in Q as a function of temperature is greater for extensional modes, than for transverse, or flexural modes.

Work in Progress

Several improvements to RUS are currently in development. To explore the bleeding edge code please visit our RUS GitHub page.

Speed and optimisation

RUS is computationally very expensive and execution can take several minutes, even on high-end computers. For this reason, we are exploring several methods for improving RUS performance. Converting high-level code (Python) into faster languages (C) is currently being explored. Additionally, there is potential for parallelisation in the future.

Graphical user interface

To assist users unfamiliar with command-line linux commands, we are developing a GUI for RUS which will serve to validate execution parameters and increase accessibility to a larger number of users. We are currently investigating Python GUI libraries (Kivy, wxPython) and web-based (Elm) GUI solutions.

Inverse algorithm

Our current RUS inversion implementation includes a fair amount of user interaction, but the solution space for the problem is too large to be explored exhaustively. To improve performance, we are currently discussing a number of innovative search methods, such as Bayesian Statistics,  which was suggested for RUS here.