clear all;close all;clc;

%%%--------------------------------------------------------------------------

%硬质均匀浅海声场的波束传播 (海面绝对软,海底绝对硬)

%参考资料:水声学原理

f=5;         

j=(-1).^(1/2);

w=2*pi*f;          %发射频率

z0=15;             %声源深度

c0=1500;          %海水中的声速

k=w/c0;            %波数

H=1000;             %海深度 N=round(H*w/(pi*c0)+1/2);     %最大简正波阶次

f_min=(N-1/2)*c0/(2*H);  %最小简正频率

r=5000;z=35;             %测试点距离声原的长度以及距水面的深度

fs=300;

T=1;t=1/fs:1/fs:T;

%------------------固定r=500;z=35接收的各号简正波---------------------------- 

for n=1:N An=(k.^2-((n-1/2)*pi/H).^2).^(1/2);       %波数k0的水平分量

Kzn=(k.^2-An.^2).^(1/2);                  %本征值,波数k0的竖直分量

xishu=(-j*2/H*(2*pi/(An*r)).^(1/2))*sin(Kzn*z0)*exp(-j*(An*r-pi/4));%中间系数设置

p(n,:)=xishu*sin(Kzn*z)*exp(j*w*t); %各号简正波信号传播

plot(t,p(n,:));hold on;   %简正波的时域波形

end

legend('各号简正波的时域波形');

%-----------------群速度设置------------------------------------------------

%各阶简正波的方向,波的阶数越高,则偏离z轴的角度越小,则群速度越小,越晚到达同一点

%--------------------------------------------------------------------------

A1=(k.^2-((1-1/2)*pi/H).^2).^(1/2);

theta_1=asin(A1/k);

Cg(1)=c0*A1/k;         %阶数1的群速度

tao(1)=0;

A2=(k.^2-((2-1/2)*pi/H).^2).^(1/2);

theta_2=asin(A2/k);

Cg(2)=c0*A2/k;               %阶数2的群速度

tao(2)=round(fs*abs(r/Cg(1)-r/Cg(2)));   %阶数1,2的时间延迟点数

p2=[p(2,:),zeros(1,tao(2))];         %阶数1的信号波形,因为考虑到矩阵维数相同才可相加

%--------------------------------------------------------------------------

%我其实对接下来这个循环抱有疑问,首先,不同阶数的简正波,阶数越大,时延点数越多,tao=[0,23,76,172,353,767,3498]

%p(n,:)原本是一个7*300的矩阵,代表7个阶数的简正波的传播。后面补零是合理的,因为理论上是n阶简正波,但是我们取了7阶,所以后面是零,补零是合适的

%自己这几天觉得自己好辣鸡,难过。jpg

for n=2:N

 An=(k.^2-((n-1/2)*pi/H).^2).^(1/2);       %波数k0的水平分量

theta_n=asin(An/k);                          %各阶简正波的方向,波的阶数越高,则偏离z轴的角度越小,则群速度越小

Cg(n)=c0*An/k;               %n阶群速度

tao(n)=round(fs*abs(r/Cg(1)-r/Cg(n)));    %n阶波与n-1阶波的时延差

pn=[zeros(1,tao(n)),p(n,:)];

p2=[p2,zeros(1,length(pn)-length(p2))]+pn;  %矩阵相加维数须相同

end

figure;plot(p2);title('各号简正波的时域波形到达同一点延时相加频率相位图');

figure;plot(1:3647,p2);title('各号简正波的时域波形到达同一点延时相加频率相位图');%把上图的x轴设为1:3647,得到不一样的图

 

figure;plot(abs(p2));title('各号简正波的时域波形到达同一点延时相加频率相位图');

 

自己按照这个程序的思路,编写了亮点模型的程序,将亮点看做两个点源,将两个点源的简正波时延后,相同阶数相加,得到结果,不知道对不对。

%水声传播简正波计算程序 %设置两个亮点,一个在(0,15),一个在(10,15),代表一个目标的两个亮点

clear all;close all;clc;

%%%--------------------------------------------------------------------------

%硬质均匀浅海声场的波束传播(海面绝对软海底绝对硬)

f=5;         

w=2*pi*f;          %发射频率

z0=15;             %深度

c0=1500;          %海水中的声速

k=w/c0;            %波数

H=1000;             %海深度

N=round(H*w/(pi*c0)+1/2);     %最大简正波阶次

f_min=(N-1/2)*c0/(2*H);  %最小简正频率

fs=300;T=1;

t=1/fs:1/fs:T;

%------------------1号亮点(0,15),固定r=5000;z=35接收的各号简正波---------------------------- 

figure(1); z01=15;             %1号亮点在(r1,z01)=(0,15)

r1=5000;z1=35;             %信号接收点距离声原的长度以及距水面的深度

for n=1:N

An=(k.^2-((n-1/2)*pi/H).^2).^(1/2);       %波数k0的水平分量

Kzn=(k.^2-An.^2).^(1/2);                  %本征值,波数k0的竖直分量

xishu1=(-j*2/H*(2*pi/(An*r1)).^(1/2))*sin(Kzn*z01)*exp(-j*(An*r1-pi/4));%中间系数设置

p1(n,:)=xishu1*sin(Kzn*z1)*exp(j*w*t); %各号简正波信号传播

plot(t,p1(n,:));hold on;   %简正波的时域波形

end

legend('1号亮点(0,15),简正波阶数N=7,各号简正波的时域波形');

%------------------2号亮点(10,15),固定r=5000;z=35接收的各号简正波---------------------------- 

figure(2);

z02=15;             %2号亮点在(r1,z01)=(0,15)

r2=4990;z2=35;             %信号接收点距离声原的长度以及距水面的深度

for n=1:N

An=(k.^2-((n-1/2)*pi/H).^2).^(1/2);       %波数k0的水平分量

Kzn=(k.^2-An.^2).^(1/2);                  %本征值,波数k0的竖直分量

xishu2=(-j*2/H*(2*pi/(An*r2)).^(1/2))*sin(Kzn*z02)*exp(-j*(An*r2-pi/4));%中间系数设置

p2(n,:)=xishu2*sin(Kzn*z2)*exp(j*w*t); %各号简正波信号传播

plot(t,p2(n,:));hold on;   %简正波的时域波形

end

legend('2号亮点(10,15),简正波阶数N=7,各号简正波的时域波形');

%%--求同一时刻的在信号接收点接受到的信号---------------------------------------

%对1号亮点进行处理----------------------------

%群速度设置:各阶简正波的方向,波的阶数越高,则偏离z轴的角度越小,则群速度越小,越晚到达同一点 %--------------------------------------------------------------------------

for n=1:N

 A1(n)=(k.^2-((n-1/2)*pi/H).^2).^(1/2);       %波数k0的水平分量

theta1_(n)=asin(A1(n)/k);                          %各阶简正波的方向,波的阶数越高,则偏离z轴的角度越小,则群速度越小

Cg1(n)=c0*A1(n)/k;               %n阶群速度

tao1(n)=round(fs*abs(r1/Cg1(1)-r1/Cg1(n)));    %n阶波与n-1阶波的时延差

end

for n=1:N    

pp1(n,:)=[zeros(1,tao1(n)) p1(n,:)

zeros(1,tao1(7)-tao1(n))];

end

%对2号亮点进行处理----------------------------

%群速度设置:各阶简正波的方向,波的阶数越高,则偏离z轴的角度越小,则群速度越小,越晚到达同一点 %--------------------------------------------------------------------------

for n=1:N  

A2(n)=(k.^2-((n-1/2)*pi/H).^2).^(1/2);       %波数k0的水平分量

theta2_(n)=asin(A2(n)/k);                          %各阶简正波的方向,波的阶数越高,则偏离z轴的角度越小,则群速度越小

Cg2(n)=c0*A2(n)/k;               %n阶群速度

tao2(n)=round(fs*abs(r2/Cg2(1)-r2/Cg2(n)));    %n阶波与n-1阶波的时延差

end

for n=1:N    

pp2(n,:)=[zeros(1,tao2(n)) p2(n,:) zeros(1,tao2(7)-tao2(n))];

end

%-----------------相同阶数的简正波加在一起。

figure;

for n=1:N  

   pp_2(n,:)=[pp2(n,:)

zeros(1,length(pp1)-length(pp2))];    

ppp(n,:)=pp1(n,:)+pp_2(n,:);  

   plot(1:3798,ppp(n,:));hold on;   %简正波的时域波形

end

legend('两个亮点,简正波阶数N=7,各号简正波的时域波形');

虽然不知道对不对,可喜可贺,忙活了两天,终于懂了一些简正波的知识,去年学水声学原理的时候编写海洋分层的程序,简直要吐血,现在觉得还是很简单的,加油吧。

posted on 2019-04-18 09:27  kiki__xiunai  阅读(2230)  评论(1编辑  收藏  举报