基于MSFM算法与最速下降法的射线追踪技术

文章目录

  • 基于MSFM算法与最速下降法的射线追踪技术
    • 1、射线追踪效果
    • 2、技术原理
    • 3、代码
  • 上面的代码是是主程序代码,包含的两个子函数在网上可以找到,代码较长,我整理成文件夹上传到CSDN资源,欢迎感兴趣的读者下载学习交流。
  • 搬砖不易,走过路过的,点个赞支持一下,谢谢!

1、射线追踪效果

为了方便展示射线追踪的过程,用matlab将射线追踪过程做成了gif动图的形式,直观的展示一下跨孔方式的射线追踪效果,如下图所示,左图是波前走时等值线图(波前走时场),右图是射线路径图。

上图对应的速度场如下图

(上图用matlab画的较粗糙,没做调整,但速度场形态和位置都是正确的)

2、技术原理

具体的原理可以看文献,比如‘基于HAFMM的无射线追踪跨孔雷达走时层析成像’及其相关的文献,讲的很详细,我也是看的这些文献学习的。

3、代码

close all
clear
clcformat long;% 此程序是运行MSFM算法
% 用最速下降法得到接收点的走时与路径disp('开始MSFM算法计算程函方程得到走时场...')
pause(1);% 保存数据的文件名
outfile = '模型正演数据v03.dat';% 初始化参数
% 网格单元个数
nex = 201;
ney = 301;% 网格间距,单位为米。
dx = 0.1;
dy = 0.1;% 总的网格单元个数
nexy = nex*ney;% 给定初始速度模型
vp2d = zeros(ney,nex);% 背景的速度
vp2d(1:ney,1:nex) = 2000;
% 异常体的速度
vp2d(120:200,50:90) = 4500;vp2d(20:50,150:170) = 500;% 显示速度模型
figure(1),pcolor(vp2d);shading flat;axis equal% 发射点的坐标
% 发射点占横向网格单元的个数为X坐标。
% 发射点占纵向网格单元的个数为Y坐标。
% 钻孔两边设置30个发射点,T代表发射点,R代表接受点。nPoint = 30;
xt = 1*ones(1,nPoint);
yt = linspace(6,296,nPoint);xr = 201*ones(1,nPoint);
yr = linspace(6,296,nPoint);tic
nRay = nPoint*nPoint;
Vmean = vp2d/dx;% 发射点组成的矩阵
SourcePoints = [yt;xt];
% 接收点组成的矩阵
ReceivePoints = [yr;xr];% 运行msfm2d程序,得到走时场,并提取接收点处的走时值。
% 每条射线的网格坐标及走时
TRpoints_firstTime = zeros(nRay,5);tbegin = cputime;
for i = 1:30% i = 20;fprintf('\n');pause(0.5);  % 等待一秒,观察图像SourcePoint = SourcePoints(:,i);Traveltime = msfm2d(Vmean,SourcePoint,true,true);figure(2);set(gcf,'position',[100 100 1150 600]);subplot(1,2,1),contourf(Traveltime*1e3,20);colormap(jet),h = colorbar;h.Label.String  = 'Time(ms)';h.Label.FontWeight = 'bold';axis([-.5 202.5 -.5 302.5]);xlabel('Distance(m)','FontWeight','bold');ylabel('Depth(m)','FontWeight','bold');nx = linspace(0,201,5);ny = linspace(0,301,7);set(gca,'ydir','reverse','ytick',ny);set(gca,'yticklabel',{'0','-5','-10','-15','-20','-25','-30'});set(gca,'xtick',nx,'xticklabel',{'0','5','10','15','20'});set(gca,'xaxislocation','top');set(gca,'fontsize',16,'fontname','times new roman');firstTime(1+(i-1)*nPoint:i*nPoint) = Traveltime(yr,nex);jieshou = [xr',yr'];fashe_reverse = fliplr(SourcePoint');fashe = repmat(fashe_reverse,nPoint,1);TRtime = Traveltime(yr,nex);TRpoints_firstTime(1+(i-1)*nPoint:i*nPoint,:) = [fashe,jieshou,TRtime];tran = SourcePoint;% rec = [301,201];T = Traveltime;x_begin = 0;y_begin = -0.05;di = 0.1;for j = 1:30aaa = ReceivePoints(:,j);rec = aaa';[raylength,raypath] =steepest_descent_raytracing(T,tran,rec,x_begin,y_begin,di);subplot(1,2,2),hold onplot(raypath(1,:),raypath(2,:),'r-');xlabel('Distance(m)','FontWeight','bold');ylabel('Depth(m)','FontWeight','bold');set(gca,'xaxislocation','top');axis([-.3 20.3 -30.1 .1]);box ongrid onset(gca,'fontsize',16,'fontname','times new roman');end%     outputfile = strcat('CT',num2str(i),'.png');
% %     disp(outputfile);
%     print(outputfile,'-dpng');tend = cputime - tbegin;%     if i == 1
%         tend = tend1;
%     else
%         tend = tend - tend1;
%     endfprintf('第 %d 个发射点计算时间为 %g 秒\n',i,tend);
%     fprintf('运行 %d 个发射点计算时间为 %g 秒\n',i,tend1);
end% 将网格数据转化为坐标数据
TRpoints_firstTime(:,1:4) = TRpoints_firstTime(:,1:4)*dx - dx;
% 保存数据
dlmwrite(outfile,TRpoints_firstTime,...'delimiter',' ','precision','%.6f');
toc
fprintf('\n');
tend = cputime;
stime = tend - tbegin;
sout = sprintf('总耗时 %g 秒',stime);
disp(sout);

这段程序计算的结果不是很准确,但是我还未发现问题出在哪里,希望感兴趣的读者帮忙指出问题,我再修改一下。

上面的代码是是主程序代码,包含的两个子函数在网上可以找到,代码较长,我整理成文件夹上传到CSDN资源,欢迎感兴趣的读者下载学习交流。

搬砖不易,走过路过的,点个赞支持一下,谢谢!

基于MSFM算法与最速下降法的射线追踪技术相关推荐

  1. [当人工智能遇上安全] 5.基于机器学习算法的主机恶意代码识别研究

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

  2. em算法 图像模糊检测_基于EM算法的眼底OCT图像反卷积去模糊技术

    引言 光学相干层析成像技术(Optical coherence tomography, OCT)作为一种发展迅速的视网膜检查手段,具有分辨率高.灵敏性强.成像速度快.检查方便以及对眼睛无伤害等特点[. ...

  3. 【WSN通信】基于注水算法实现宽带无线通信资源分配附matlab代码

    1 简介 功率分配技术能有效提高认知网络传输链路的信道容量,而注水算法利用凸优化的思想能实现功率分配最优化.针对认知网络中使用注水算法分配信道功率时未考虑邻近认知信道干扰的情况,对认知网络中邻近认知信 ...

  4. 【计算机毕业设计】009基于推荐算法的电影推荐系统

    一.系统截图(需要演示视频可以私聊) 摘  要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式.本基于推荐算法的电影推荐系统就是在 ...

  5. 光学定位与追踪技术_光学追踪技术

    该项目研发了一种全新的光学传感器并为其配套设计了一套算法,实现了光学追踪技术速度和精度的突破,且集低成本.低延迟和低功率等优点于一体.该技术采用了光学预处理技术,将数据量和计算复杂度减少了约3个数量级 ...

  6. 基于Matlab的三维胖射线追踪算法

    基于Matlab的三维胖射线追踪算法(1) 三维CT更有利于对构造的精细识别,三维CT本质上与二维CT无较大区别,但计算量增加,占用电脑内存大,计算时间更长. 文章目录 基于Matlab的三维胖射线追 ...

  7. 基于Matlab的跨孔CT胖射线追踪算法(五)

    基于Matlab的跨孔CT胖射线追踪算法(五) CT技术是一种无损的工程物探检测技术,因其方法简单.分辨率高.理论上更可靠.结果更直观,被广泛的应用于各种工程.胖射线追踪是CT技术的一种正演算法,本文 ...

  8. 基于Matlab的跨孔CT胖射线追踪算法(四)

    基于Matlab的跨孔CT胖射线追踪算法(四) CT技术是一种无损的工程物探检测技术,因其方法简单.分辨率高.理论上更可靠.结果更直观,被广泛的应用于各种工程.胖射线追踪是CT技术的一种正演算法,本文 ...

  9. 基于Matlab的跨孔CT胖射线追踪算法(三)

    基于Matlab的跨孔CT胖射线追踪算法(三) CT技术是一种无损的工程物探检测技术,因其方法简单.分辨率高.理论上更可靠.结果更直观,被广泛的应用于各种工程.胖射线追踪是CT技术的一种正演算法,本文 ...

最新文章

  1. linux系统硬盘表识
  2. QN8027输出调频分裂的频谱
  3. Intellij IDEA 的使用
  4. 自定义JSP中的Taglib标签之四自定义标签中的Function函数
  5. 硬件:选购CPU和显卡需了解的参数,TDP、SDP、ACP、GCP、TBP是什么?
  6. 方法之输出星型及其调用
  7. 网络(8)-HTTP、Socket、TCP、UDP的区别和联系
  8. 利用Markdown编写美妙的数学公式
  9. js正则替换html字符串,js正则找出字符串的内容,并替换内容
  10. java图片自动盖章,一种自动盖章装置的制作方法
  11. [origin ‘http://xxx.xxx.com:xxxx‘ has been blocked by CORS policy: The request client is not a secur
  12. cocos2dx 学习笔记之摄像头与3D精灵的移动
  13. Git版本管理工具使用知识汇总
  14. 用canvas实现九宫格切图之手把手教学(uniapp+ts)
  15. Verilog 中signed和$signed()的用法
  16. [动态规划] leetcode 416. 分割等和子集
  17. Android响应式编程(一)RxJava前篇[入门基础]
  18. git cherry-pick --strategy=recursive -X theirs
  19. Android Kotlin Paging3 Flow完整教程
  20. Matlab基本函数-fix函数

热门文章

  1. win 二进制门安装mysql_MySQL5.7 windows二进制安装
  2. Linux内核原理与分析-第二周作业
  3. beeline连接hive
  4. 【Tools】ubuntu16.04升级Python2.7到3.5
  5. HTML JQuery 技巧总结
  6. 0-10不断循环的js
  7. 春秋时期被误解的人才。
  8. leetcode 1164 python
  9. numberformatexception是什么异常_处理Java异常的9个最佳实践
  10. MySQL 开源工具集合