Help avoiding floating point math
As I said in my comment, it is all about computing an approximation of
sqrt(1-x). Assuming the typical resonance frequency is between 175
and 235&nbsp;Hz, then we have


  (4 × 150 µs + 300 µs) 175 Hz ≤ x ≤ (4 × 300 µs + 300 µs) 235 Hz


i.e.


  0.1575 ≤ x ≤ 0.3525


This range is small enough to try a simple polynomial approximation. A
linear approximation is just a bit too crude for 8 bit resolution.
Playing with quadratic polynomials, I found this approximation which is
good to 3.1e-5 in the relevant range:


  √(1−x) ≈ 0.9983795 − x (0.480515 + x 0.1955)


This can be easily implemented in fixed point by scaling everything by a
factor 216&nbsp;=&nbsp;65536. One has to take care that any
product of two such fixed point numbers must be computed in
32&nbsp;bits, and the result subsequently divided by 65536. Which gives
the following implementation:

/*
 * Compute a fixed point approximation of f(x) = sqrt(1-x).
 * Valid for x in [.1575, .3525].
 * Argument and result scaled by 2^16.
 */
uint16_t f(uint16_t x)
{
    return 65430 - x * (31491 + x * 12812UL / 65536) / 65536;
}