Title:
From:
Date:
Rev:
Source Level Calibration
Chris Jones
Nov 9, 2012
1.0
Summary
This document describes the measurement of the maximum transmit source level (SL) as a
function of azimuthal angle (horizontal) for the P900/2250-45 and P450-130 sonars using the
APL Acoustic Test Facility (ATF) on Nov 9, 2012. The calibration setup consisted of the sonar
mounted on a rotator and a reference hydrophone mounted on a pole at the same depth and a
distance of 3.17 meters (the distance corresponds to 10 dB transmission loss). SL
measurements were made by rotating the sonar through 360 degrees at 1 degree increments
around the horizontal plane of the sonar. At each rotator position, the sonar was triggered to
ping (using a hardware trigger) and the transmitted signal was recorded at the reference
hydrophone.
Source level is calculated by recording the transmitted pulse at the E37 hydrophone and
comparing the RMS signal voltage with a table of calibrated receive sensitivities (RS) with units
of dB re 1 uPa/V for the E37 hydrophone. The RMS voltage at the reference hydrophone is
found by windowing the received signal around the recorded transmit pulse with a time window
that corresponds to the duration of the transmit pulse. The Source level in dB is then found as:
SL = 20*log10(RMS_volts) + 20*log10(3.17) – RS.
Data was collected for the 450, 900, and 2250 sonars. The reference hydrophone was an E37
Navy standard with a preamp. The hydrophone preamp cutoff frequency was 2 MHz, therefore
we could not record data using the 2250 sonar. Figure 1 shows the test setup with the sonar
mounted on the rotator and the reference hydrophone.
Figure 1: The P900 sonar mounted on the APL ATF rotator (left) and the E37 reference
hydrophone (right).
Title: 12 Sept 2011
RESULTS
Figure 2: The measured maximum SL as a function of horizontal angle for the P900-45 head.
Title: 12 Sept 2011
Figure 3: The measured maximum SL as a function of horizontal angle for the P450-130 head.
Title: 12 Sept 2011
Matlab code to find SL as a function of angle for the P900 sonar:
%
% P900 SL calibration
%
clear all;
freq_min = 500000;
freq_max = 1300000;
pathname = '.\P900_SL_CAL\';
base_filename = 'P900_SL_CAL';
file = './P900_SL_CAL/P900_SL_CAL.txt';
angle = load(file);
angle = angle(:,1);
offset = -8.89;
% receive sensitivity of the E37 hydrophone
cal_data = load('E37006RwPreamp.txt');
RS_dB_V_uPa = cal_data(:,3);
RS_freq = 1000 * cal_data(:,2);
TL = 20*log10(3.17);
Gain = 0; % no gain
% transmission loss
num_seqs = length(angle);
fs = 10000000; % sampling freq
pings_per_step = 2;
num_steps = num_seqs / pings_per_step;
seq_num = 0;
nfft = 1024;
M = 12;
win = 30000 + (1:(M*nfft));
for ns = 1:num_steps
S_max(ns) = 0;
RMS_volts(ns) = 0;
for np = 1:pings_per_step
[data, time, hdr] = atf_data(pathname, base_filename, seq_num, np);
if(angle(seq_num+1) > 180)
theta = (angle(seq_num+1)) - 360;
else
theta = angle(seq_num+1);
end
azimuth(ns)= theta - offset;
sig = data(3,win);
sig = sig - mean(sig);
time = time(win);
% find RMS voltage in a window around the peak
[vmax,vind] = max(sig.^2);
rms_win = vind + (-900:900);
rms_win(find(rms_win > length(sig))) = length(sig);
rms_win(find(rms_win < 1)) = 1;
rms_sig = sig(rms_win);
rms_time = time(rms_win);
RMS_volts(ns) = RMS_volts(ns) + sqrt(mean(rms_sig.^2))/pings_per_step;
% perform fft spectrum to find the center frequency of the received signal
F = fft(reshape(sig, nfft, M));
N = ceil((nfft+1)/2);
S = F(1:N,:) / nfft; % truncate and scale the fft
S = (abs(mean(S, 2))).^2;
% Since we dropped half the FFT, we multiply mx by 2 to keep the same energy.
% The DC component and Nyquist components are not be multiplied by 2.
S(2:end) = 2*S(2:end);
Title: 12 Sept 2011
freq = (0:N-1)*fs/nfft;
dfreq = freq(2); %fs/(nfft-1);
ind = find((freq >= freq_min) & (freq <= freq_max));
freq = freq(ind);
[smax, sind] = max(S(ind));
S_max(ns) = S_max(ns) + smax/pings_per_step;
S_freq(ns) = freq(sind);
fprintf('azimuth: %f\n', theta - offset);
seq_num = seq_num + 1;
end
% find RS at the peak freq
RS = interp1(RS_freq, RS_dB_V_uPa, S_freq);
% SL using sonar equation
SL = 20*log10(RMS_volts) + TL - RS - Gain;
% plot each step
figure(1); clf;
subplot(2,1,1);
plot(time, sig, 'b', rms_time, rms_sig, 'r');
xlabel('Time');
ylabel('Volts');
subplot(2,1,2);
plot(azimuth, SL);
xlabel('Angle');
ylabel('SL dB');
pause;
end
% patch some missing data
SL(find((azimuth>69)&(azimuth<102))) = flipud(SL(find((azimuth > -102)&(azimuth < -69))));
% plot raw data curve
figure(2); clf;
polar(azimuth(2:end)*pi/180, SL(2:end) - (max(SL(2:end))-60));
str = sprintf('BlueView P900/2250-45\n Transmit Source Level (dB re 1 uPa @ 1 m) vs. Horizontal
Angle \nMaximun Source Level = %d dB',round(max(SL(2:end))));
title(str)
% plot smoothed curve
b = fir1(10, 0.2);
SLf = filtfilt(b, 1, SL(2:end));
figure(3); clf;
h = polar(azimuth(2:end)*pi/180, SLf - max(SLf) + 60);
str = sprintf('BlueView P900/2250-45\n Transmit Source Level (dB re 1 uPa @ 1 m) vs. Horizontal
Angle \nMaximum Source Level = %d dB',round(max(SLf)));
title(str)
% save data in a text file
fp = fopen('SL-P900-2250-45.txt', 'w');
fprintf(fp, '%%Angle, SL(dB)\n');
for n = 2:length(SLf)
fprintf(fp, '%0.3f, %0.1f\n', azimuth(n), SLf(n));
end
fclose(fp);
Title: 12 Sept 2011
© Copyright 2026 Paperzz