• 浅水声信道模型的建立(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);

  • 相关阅读:
    2073: [POI2004]PRZ
    BZOJ 3669: [Noi2014]魔法森林
    Dominator Tree & Lengauer-Tarjan Algorithm
    BZOJ 3526: [Poi2014]Card
    BZOJ 2733: [HNOI2012]永无乡
    BZOJ 2929: [Poi1999]洞穴攀行
    BZOJ 3730: 震波
    BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
    BZOJ 1195: [HNOI2006]最短母串
    BZOJ 4030: [HEOI2015]小L的白日梦
  • 原文地址:https://www.cnblogs.com/kiki--xiunai/p/10784352.html
Copyright © 2020-2023  润新知