浅水声信道模型的建立(2)----只考虑海面海底一次散射,多亮点研究

这次试着处理一下多亮点。

首先把直达,海面反射一次,海底反射一次的程序弄成一个function的函数,进行调用,不然代码太多了,看着很头疼。。

%=================================================================================================================

function receive_signal = Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num)

%**********************************通信声呐水听器数据生成函数************************************

%几点假设:

%(1)基于射线声学理论

%(2)几何衰减按球面波传播衰减规律衰减,不考虑吸收衰减

%(3)考虑水面和水底的反射(浅海声信道?)

%(4)考虑在高斯白噪声背景下

%(5)整个空间声速分布均匀

%***************************************输入参数说明******************************************

% c                  声速             Unit:m/s

% fs                 采样率           Unit:Hz

% f0                 信号频率         Unit:Hz

% Tao                信号脉宽         Unit:s

% Sample_time        采样时长         Unit:s      假设信号发射的时刻为零时刻

% SNR                信噪比           Unit:dB

% H                  水深                    Unit:m

% H1                 发射换能器水深           Unit:m

% H2                 接收换能器水深           Unit:m

% D                  接收与发射换能器水平距离  Unit:m

% Re_coef_surf       水面反射系数  % Re_coef_bottom     水底反射系数  存在半波损失

% Reflex_num         考虑最大的反射次数

%***************************************输出参数说明******************************************

% receive_signal     以信号发射为起始采样点的水听器接收信号

%==================================================

Ts = 1/fs;      %采样时间间隔

sample_num = fix(Sample_time*fs);       %采样总点数 FIX:让x向0靠近取整  %

nTs = (0:sample_num-1)/fs;              %离散的采样时刻   

sample_num1 = fix(Tao*fs);              %信号的采样点数 

nTs1 = (0:sample_num1-1)/fs;            %信号的离散的采样时刻 

receive_signal = zeros(size(nTs));      %用于存储水听器接收的信号 

d0 = sqrt((H1-H2)^2+D^2);     %两个换能器的直线距离

S0 = 1/d0;                    %直达波的声压幅值

Noise_var = 10^(-SNR/20)*S0;  %白噪声的方差

%==========================================================

%% 计算到达回波信号

real_time = d0/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)) = S0*sin(2*pi*f0*nTs1+phase); %模拟采样 1*50050

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  

%======================================================================================================================

%=========================================================================================================================

clc;close all;clear all;

% r=0;z=10;%发射信号的位置。

% r1=5000;z1=15;%1号亮点

% r2=5010;z2=15;%2号亮点

% r3=5050;z3=15;%3号亮点

% rr=0;zz=20:30;%接收信号

c = 1500;            %声速             Unit:m/s

SNR = 60;            %信噪比           Unit:dB

H = 100;       %水深                    Unit:m

Sample_time = 0.1;   %采样时长         Unit:s      假设信号发射的时刻为零时刻

Re_coef_surf = -1;      %水面反射系数 

Re_coef_bottom = 0.8;   %水底反射系数 

Reflex_num = 1;         %考虑最大的反射次数

%=====================================  

for temp=1:200  %频率循环    

f0=1400+temp;           %信号频率         Unit:Hz    

fs=16000;          %采样率          Unit:Hz    

Tao=5/f0;         %信号脉宽         Unit:s    

%阵要每一次循环完初始化一下,不然运行不成功    

signal_12=[];     signal_12_fft=[];     signal_22=[];     signal_22_fft=[];     signal_32=[];     signal_32_fft=[];    

%============================亮点1===========================================    

%第一过程:发射换能器到亮点1   % r=0;z=10;%发射信号的位置。    

H1 = 10;       %发射点水深           Unit:m    

H2 = 15;       %接收点水深           Unit:m    

D = 5000;       %接收与发射水平距离  Unit:m    

signal_11=Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num);    

signal_11_fft=fft(signal_11);    

%======================================================================    

%第二过程:亮点1到接收阵列    % r1=5000;z1=15;%1号亮点   % rr=0;zz=20:30;%接收信号    

H1 = 15;       %发射点水深           Unit:m    

D = 5000;       %接收与发射水平距离  Unit:m       

for kkk=1:10;       %接收点水深           Unit:m        

H2=20+1*kkk;        

signal_12(kkk,:)=Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num);         %         temp:16,50053         signal_12_fft(kkk,:)=fft(signal_12(kkk,:));    

end        

zhenlie1_fft=zeros(1,length(signal_12_fft(1,:)));            

%把该频率下,所有阵元接收到的信号加在一起    

for kkk=1:10        

K=signal_12_fft(kkk,:);        

zhenlie1_fft=K+zhenlie1_fft;    

end

%     zhenlie1_fft=zhenlie1_fft.;    

%=============================================================================    

%从发射器到亮点1的频谱*亮点到阵列的信号频谱    

signal_1_fft=signal_11_fft.*zhenlie1_fft;      

%============================================================================    

%============================亮点2===========================================    

%第一过程:发射换能器到亮点2        % r=0;z=10;%发射信号的位置。         % r2=5010;z2=15;%2号亮点    

H1 = 10;       %发射点水深           Unit:m    

H2 = 15;       %接收点水深           Unit:m    

D = 5010;       %接收与发射水平距离  Unit:m    

signal_21=Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num);    

signal_21_fft=fft(signal_21);    

%======================================================================    

%第二过程:亮点2到接收阵列    % r1=5010;z1=15;%2号亮点   % rr=0;zz=20:30;%接收信号    

H1=15;       %发射点水深           Unit:m    

D=5010;       %接收与发射水平距离  Unit:m    

for kkk=1:10        

H2=20+1*kkk;       %接收点水深           Unit:m        

signal_22(kkk,:)=Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num);        

signal_22_fft(kkk,:)=fft(signal_22(kkk,:));    

end    

zhenlie2_fft=zeros(1,length(signal_22_fft(1,:)));        

for kkk=1:10        

K=signal_22_fft(kkk,:);        

zhenlie2_fft=K+zhenlie2_fft;    

end    

%==================================================    

% 该频率下,发射器到亮点2的频谱*亮点2到阵元的频谱    

signal_2_fft=signal_21_fft.*zhenlie2_fft;    

%===========================================================     

%============================亮点3===========================================    

%第一过程:发射换能器到亮点3        % r=0;z=10;%发射信号的位置。         % r3=5050;z3=15;%3号亮点    

H1 = 10;       %发射点水深           Unit:m    

H2 = 15;       %接收点水深           Unit:m    

D = 5050;       %接收与发射水平距离  Unit:m    

signal_31=Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num);    

signal_31_fft=fft(signal_31);    

%======================================================================    

%第二过程:亮点3到接收阵列    % r1=5020;z1=15;%3号亮点   % rr=0;zz=20:30;%接收信号    

H1=15;       %发射点水深           Unit:m    

D=5050;       %接收与发射水平距离  Unit:m    

for kkk=1:10       

  H2=20+1*kkk;       %接收点水深           Unit:m        

signal_32(kkk,:)=Com_Sonar_data_generation(c,fs,f0,Tao,Sample_time,SNR,H,H1,H2,D,Re_coef_surf,Re_coef_bottom,Reflex_num);        

signal_32_fft(kkk,:)=fft(signal_32(kkk,:));    

end    

zhenlie3_fft=zeros(1,length(signal_32_fft(1,:)));        

for kkk=1:10        

K=signal_32_fft(kkk,:);        

zhenlie3_fft=K+zhenlie3_fft;    

end    

%==================================================    

% 该频率下,发射器到亮点3的频谱*亮点3到阵元的频谱    

signal_3_fft=signal_31_fft.*zhenlie3_fft;    

%===========================================================    

%把该频率下返回的声压全部加在一起    

signal_fft(temp,:)=[signal_1_fft zeros(1,55000-length(signal_1_fft))]+[signal_2_fft zeros(1,55000-length(signal_2_fft))]+[signal_3_fft zeros(1,55000-length(signal_3_fft))];

 end    

 %====================================================================================================  

total_fft=signal_fft(1,:);  for temp=1:200     

total_fft =signal_fft(temp,:)+total_fft;    

end  

figure;

plot(1:length(total_fft),total_fft);  total=ifft(total_fft);

 

figure;

plot(1:length(total),total);

原文地址:https://www.cnblogs.com/kiki--xiunai/p/10784352.html