声波作为目前已知在水下能够远距离传播的媒介,因此其在水下的通信、导航、探测等领域得到了广泛的应用。虽然电磁波在水下也能传播,但是其在水下衰减非常的严重,一般只能传播几米远,但是声波却可以传播几百甚至是上千公里。因此可以使用声波在水下进行通信,然而在水下通信时的信道要远比电磁波在空气中通信是的信道复杂的多,为了有效的在水下进行通信需要对水下的信道进行建模。
声波在水下传播时一般会受到来自水面和水底的反射,这就导致多途效应非常的明显,此外如果是在河道或者是水库里通信其还会受到来自河道岸边和水库堤坝的反射声波影响。为了有效的对这一现象进行建模,我们只考虑水面和水底的反射,并假设声源(也即发射换能器)的位置距离水面为H1,接收处(也即水听器)的位置距离水面距离为H2,水深为H,两者的水平距离为D,如下图所示:
为了得到切确的结果我们还做了如下假设:
(1)基于射线声学理论
(2)几何衰减按球面波衰减规律衰减,不考虑吸收衰减
(3)考虑水面和水底的反射
(4)考虑在高斯白噪声背景下
(5)整个空间声速分布均匀
%==============================================================================
clc;close all;clear all;
% r=0;z=10;%发射信号的位置。
% r1=5000;z1=15;%1号亮点
% r2=5010;z2=15;%2号亮点
% rr=0;zz=20:30;%接收信号
% 参数=====================================================
c = 1500; %声速 Unit:m/s
SNR = 60; %信噪比 Unit:dB
H = 100; %水深 Unit:m
Sample_time = 0.1; %采样时长 Unit:s 假设信号发射的时刻为零时刻
f0 = 1600; %信号频率 Unit:Hz
fs = 16000; %采样率 Unit:Hz
Tao = 5/f0; %信号脉宽 Unit:s
Re_coef_surf = -1; %水面反射系数
Re_coef_bottom = 0.8; %水底反射系数
Reflex_num = 1; %考虑最大的反射次数
%============================================================
%第一过程:发射换能器到亮点1
H1 = 10; %发射换能器水深 Unit:m
H2 = 15; %接收换能器水深 Unit:m
D = 5000; %接收与发射换能器水平距离 Unit:m
%==================================================
Ts = 1/fs; %采样时间间隔 6.2500e-05
sample_num = fix(Sample_time*fs); %采样总点数 FIX:让x向0靠近取整 %1600
nTs = (0:sample_num-1)/fs; %离散的采样时刻 1*1600
sample_num1 = fix(Tao*fs); %信号的采样点数 50
nTs1 = (0:sample_num1-1)/fs; %信号的离散的采样时刻 1*50
receive_signal = zeros(size(nTs)); %用于存储水听器接收的信号 1*1600
d0 = sqrt((H1-H2)^2+D^2); %两个换能器的直线距离 5.0000e+03
S0 = 1/d0; %直达波的声压幅值 2.0000e-04
Noise_var = 10^(-SNR/20)*S0; %白噪声的方差 2.0000e-07
%==========================================================
%% 计算到达回波信号
real_time = d0/c; %3.3333 %信号的实际到达时刻
signal_start_time = fix(real_time*fs)+1; %信号第一个采样点的时刻 53334
phase = (signal_start_time*Ts-real_time)/Ts*2*pi; %得到信号的第一个采样点的相位 4.0212
receive_signal(signal_start_time:(signal_start_time+sample_num1-1)) = S0*sin(2*pi*f0*nTs1+phase); %模拟采样 1*53383
receive_signal = receive_signal + Noise_var*randn(size(receive_signal)); %加入噪声
%----------------------------------------------------------------------------------------------------------------------------------
if Reflex_num>0 %考虑反射时
i = 1 ; %考虑1次反射的情况
%---------------------------------------------------第一次从水面反射时---------------------------------------------------
% 只考虑一次反射,海底和海面各一个反射点
d1=sqrt(D/(H1+H2)^2+1)*H1;
d2=sqrt(D/(H1+H2)^2+1)*H2; %从海面反射一次后到达的总路程:d1+d2
di=d1+d2;
Si = 1/di*Re_coef_surf; %反射波的声压幅值
real_time = di/c; %信号的实际到达时刻
signal_start_time = fix(real_time*fs)+1; %信号第一个采样点的时刻
phase = (signal_start_time*Ts-real_time)/Ts*2*pi; %得到信号的第一个采样点的相位
receive_signal(signal_start_time:(signal_start_time+sample_num1-1)) =receive_signal(signal_start_time:(signal_start_time+sample_num1-1)) + Si*sin(2*pi*f0*nTs1 + phase);
%模拟采样
%---------------------------------------------------第一次从水底反射时---------------------------------------------------
d3=sqrt(D/(2*H-H1-H2)^2+1)*(H-H1);
d4=sqrt(D/(2*H-H1-H2)^2+1)*(H-H2);
dib = d3+d4; %反射波总路程
Sib = 1/dib*Re_coef_bottom; %反射波的声压幅值
real_time = dib/c; %信号的实际到达时刻
signal_start_time = fix(real_time*fs)+1; %信号第一个采样点的时刻
phase = (signal_start_time*Ts-real_time)/Ts*2*pi; %得到信号的第一个采样点的相位
receive_signal(signal_start_time:(signal_start_time+sample_num1-1)) =receive_signal(signal_start_time:(signal_start_time+sample_num1-1)) + Sib*sin(2*pi*f0*nTs1 + phase);
%模拟采样
end
signal1=receive_signal;
signal1_fft=fft(signal1);
%==============================================================================================================
figure(1);
plot(signal1);
xlabel('时间s');
ylabel('幅度');
string = ['信号发生器—亮点1,信噪比SNR=',num2str(SNR),'dB,考虑的最大反射次数',num2str(Reflex_num),'时域'];
title(string);
figure(2);
plot(1:length(signal1_fft),signal1_fft);
string = ['信号发生器—亮点1,信噪比SNR=',num2str(SNR),'dB,考虑的最大反射次数',num2str(Reflex_num),'频域'];
title(string);
%============================================================================================================================
分析:
%==========================================================================================================
首先屏蔽掉从海底反射的信号,运行一次程序,得到的图像如下:
%=======================================================================================================
再屏蔽掉海面的部分,看海底的部分,运行一遍程序:
所以声波到达的顺序是:直达,海面,海底。。。
直达和海面混一块了,所以也看不出来分开。。