RadialVelocityEstimate.java

package org.hammer.audio.experimental.acoustic.doppler;

/** Doppler-derived radial velocity for one microphone channel. */
public record RadialVelocityEstimate(
    int channel,
    double observedFrequencyHz,
    double referenceFrequencyHz,
    double radialVelocityMetersPerSecond,
    double weight) {

  /** Validate fields. */
  public RadialVelocityEstimate {
    if (channel < 0) {
      throw new IllegalArgumentException("channel must be >= 0");
    }
    if (!Double.isFinite(observedFrequencyHz) || observedFrequencyHz < 0.0) {
      throw new IllegalArgumentException("observedFrequencyHz must be finite and >= 0");
    }
    if (!(referenceFrequencyHz > 0.0) || !Double.isFinite(referenceFrequencyHz)) {
      throw new IllegalArgumentException("referenceFrequencyHz must be finite and > 0");
    }
    if (!Double.isFinite(radialVelocityMetersPerSecond)) {
      throw new IllegalArgumentException("radialVelocityMetersPerSecond must be finite");
    }
    if (!Double.isFinite(weight) || weight < 0.0) {
      throw new IllegalArgumentException("weight must be finite and >= 0");
    }
  }
}