Underwater acoustic signal processing of a hydrophone recording of boat noise
(Hydrographic_boat.wav), analyzed in acoustic_sensing.ipynb.
- File:
Hydrographic_boat.wav - Sample rate: 11025 Hz
- Duration: ≈ 125.3 s
- Channels: stereo (only channel 0 is analyzed)
- Load the WAV file (
scipy.io.wavfile). - Preprocess — select one channel, remove DC offset.
- Calibrate raw counts to pressure (Pa) via a hydrophone sensitivity factor.
- Leq — broadband equivalent sound level, referenced to 1 µPa (the underwater acoustics standard, not the 20 µPa airborne standard).
- Spectral analysis:
- Windowed FFT (Hann window, leakage-reduced)
- Welch PSD (averaged periodogram, less noisy than a single long FFT)
- Spectrogram (time-varying spectral content)
- 1/3-octave band levels (standard reporting format for underwater acoustics)
- Denoising — 4th-order Butterworth bandpass filter (20 Hz–5 kHz, zero-phase
filtfilt) to separate boat-band content from low-frequency, likely non-acoustic noise.
- Leq (raw, uncalibrated): ≈ 194.78 dB re 1 µPa → Leq (bandpass-filtered): ≈ 183.23 dB re 1 µPa (≈ 11.55 dB drop). Both values are on an uncalibrated scale — see caveat below.
- ≈ 81% of spectral energy sits below 20 Hz, most likely flow/handling noise or mechanical coupling rather than genuine boat-radiated sound. This dominates the raw broadband level and motivated the bandpass filter.
- Likely boat-machinery tonals at 157.5 Hz, 198.4 Hz, and 396.9 Hz — the strongest 1/3-octave bands once the low-frequency artifact is set aside.
- Transient event at t ≈ 92.5 s — a clear loudness spike in the spectrogram, consistent with a closest-point-of-approach or similar single loud event.
calibration_factor in the notebook is currently a placeholder (1.0). All dB values are
therefore on an uncalibrated scale — valid for relative/spectral comparisons within this dataset,
but not yet true SPL. Substitute the hydrophone's actual sensitivity (from its calibration sheet)
to get physically meaningful sound levels.
- Python 3
numpy,scipy,matplotlib,jupyter
python3 -m jupyter nbconvert --to notebook --execute --inplace acoustic_sensing.ipynb