地震记录数值模拟的褶积模型法
- 格式:doc
- 大小:315.50 KB
- 文档页数:22
地震盲源反褶积方法及其应用摘要:反褶积是地震信号处理中的重要环节之一。
本文采用的地震盲源反褶积方法将独立分量分析这一信号处理工具引入到地震信号处理中,可以实现地震子波和反射系数的同时估计,消除传统反褶积方法受假设条件的限制。
实际资料的处理结果表明,方法能较好地适应非最小相位系统,得到原始反射系数的最优估计,算法稳定,收敛速度快,是提高地震资料分辨率的有效手段。
关键词:反射系数非最小相位盲源反褶积独立分量分析1 引言反褶积技术是地震信号处理中提高分辨率的主要手段。
传统的反褶积方法对地震子波和反射系数序列做了一定的限制,即假设反射系数是白噪序列,地震子波是最小相位的,从而用地震记录的自相关代替地震子波的自相关来估计子波特性,进而进行子波压缩处理。
基于这些假设条件的反褶积方法在实际应用中取得了一定的效果,但是往往不符合地下介质的实际情况。
近几十年来,很多学者把注意力集中在反射系数序列的随机性上[1],反射系数序列的非高斯性使反射系数和地震子波在一定条件下具备独立分量分析褶积混合模型的特点,从而可以利用独立分量分析进行盲源反褶积处理[2]。
与传统反褶积方法相比,盲源反褶积方法弱化了对子波和反射系数的先验条件,克服了传统反褶积方法对最小相位子波和高斯白噪反射系数假设的依赖[3]。
2 地震盲源反褶积方法的基本理论和实现过程作为信号非高斯程度的度量,负熵是任意概率密度函数和具有同样方差的高斯型概率密度函数间的KL散度,负熵值越大表示信号距离高斯分布越远。
3 实际资料应用从图2到图4实际资料处理的对比看,盲源反褶积处理有效提高了地震记录的分辨率,微构造信息更加清晰,同时较好的保持了地震资料的振幅相对关系。
从剖面窗口部位的频谱分析看,相较于传统反褶积方法,盲反褶积能更有效的拓宽地震资料的频带。
4 结论从盲源反褶积方法的实际应用看,方法能够有效的拓宽地震资料的频带,突出细节部位的地质信息,在地震资料处理中有很好的应用前景。
地震资料处理中串联组合反褶积方法及效果分析作者:王博睿张雪纯来源:《中国科技纵横》2018年第19期摘要:地震资料处理过程中,反褶积是一种常用的提高地震资料分辨率的处理方法。
但由于提高分辨率处理是一个多次试验和逐步提高的过程,因此经常采用串联组合反褶积的处理方式。
由于各种反褶积都有一定的假设前提和各自的适用范围,所以必须根据数据的特点和不同反褶积的使用前提,经过详细而充分的试验以便选取最合理的参数,才能最终得到较好的处理效果。
采用哪种反褶积,怎样组合,才能达到搭配合理、纵向分辨率高的处理结果,常常需要通过细致的多种组合试验来确定。
本文叙述了实际资料处理中的反褶积串联组合的基本流程和实际资料的处理效果,并对一些反褶积方法组合方式及参数选择应注意的问题进行了探讨。
关键词:反褶积;分辨率;信噪比中图分类号:P631.4 文献标识码:A 文章编号:1671-2064(2018)19-0185-031 引言反褶积是通过压缩地震子波来提高地震记录纵向分辨率的主要方法,是处理流程中不可或缺的一部分。
反褶积前应对数据做好野外静校正、折射波静校正、尽可能地压制各种干扰、做好振幅补偿。
比较常用的反褶积方法有预测反褶积、俞氏子波反褶积、两步法统计子波反褶积、地表一致性反褶积、逐点反褶积等。
选用地表一致性反褶积、预测反褶积和统计子波反褶积作为此次组合试验的三种反褶积方法,试验了各种反褶积方法的参数选择以及它们不同串联组合方式下的效果,对结果进行频谱分析与自相关分析并结合剖面上的对比,最后选出频带宽、纵向分辨率高等综合效果好的串联组合方式,并在中国东部某地的实际资料处理中得到了比较好的效果,从而证明了本次处理采用的串联组合反褶积方法的正确性和实用性。
2 反褶积的原理2.1 地表一致性反褶积地表一致性反褶积主要用于消除由于激发、接收等因素引起的地震记录间子波的差异,采用自回归谱分析方法,以对数方式计算每个输入道的对数功率谱[1]:(1)自回归过程的功率谱为:(2)其中:(3)以地表一致性方式分解对数功率谱成为震源、检波点、炮检距中点和偏移距分量。
地表一致性反褶积方法浅析及应用佚名【摘要】提高地震资料分辨率的重要手段是采用反褶积技术。
反褶积方法很多,如子波反褶积、脉冲反褶积和预测反褶积等。
这些方法各有优缺点,在高分辨率资料处理中应用受到许多条件制约,不能有效地提高资料的分辨率,其效果不能满足解释人员的要求。
作地表一致性反褶积需要对记录进行频谱分析和频谱分解,同时要设计反褶积算子,然后在共炮点域和共接收点域分两步对资料进行褶积。
这种方法能够展宽频谱,压缩地震子波,并能校正地震信号的相位谱,输出零相位子波,较大程度地提高地震资料的分辨率。
该方法在高邮西部地区地震资料处理中取得较好效果。
【期刊名称】《内蒙古石油化工》【年(卷),期】2012(000)010【总页数】4页(P126-129)【关键词】地表一致性反褶积;提高信躁比;设计反褶积算子【正文语种】中文【中图分类】P631.4高分辨率地震勘探技术是一个系统工程。
在高分辨率地震资料处理的系统工程中,关键问题是新的噪音衰减技术、反褶积方法、动静校正方法和叠加成像方法四大环节和贯穿各种新技术于一体的处理流程。
反褶积方法是地震资料处理过程中的重要手段。
资料分辨率主要取决于地震波的频谱,它包括两方面的含义,即频带宽度和相位一致性。
高分辨率的地震资料应当有宽频带和零相位的频谱,改善地震波频谱的有效手段之一是反褶积技术[1]。
资料处理中应用的反褶积方法很多,每一种反褶积方法都是建立在一定假设条件下的地震褶积模型之上。
所以,反褶积的效果大都取决于所采用的褶积模型与实际地震记录的符合程度。
地表一致性反褶积是基于经过噪音衰减、速度滤波和真振幅恢复后的地震记录,对记录进行反褶积的频谱分析、反褶积频谱分解、反褶积算子设计以及对记录进行反褶积算子的应用来完成。
处理过程中在共炮点域和共接收点域进行两次反褶积,能展宽频谱,压缩地震子波,校正地震信号的相位谱,输出零相位子波,较大程度地提高地震资料分辨率[2]。
1.1 反褶积应用公式经过噪音衰减、速度滤波和真振幅恢复后的地震记录可以表示为[3]:式中,S(t,x)为偏移距为X的地震道,r(t)为反射系数序列,T 1(t,τ)为时变传输和多次波效应,M (t,x)为与偏移距有关的时差效应,SL(t)为排列损失和球面发散损失,T2(t,τ)为时变吸收或非弹性衰减效应,R 1(t,x)为与偏移距有关的浅层混响记录系统响应,W(t)为震源子波,N(t)为噪音。
本科生实验报告实验课程数值模型模拟学院名称地球物理学院专业名称勘测技术与工程学生姓名学生学号指导教师熊高君实验地点5417实验成绩2015年5月成都理工大学《地震数值模拟》实验报告实验报告一、实验题目:地震记录数值模拟的褶积模型法二、实验目的:掌握褶积模型基本理论、实现方法与程序编制,由褶积模型初步分析地震信号的分辨率问题。
三、原理公式1、褶积原理地震勘探的震源往往是带宽很宽的脉冲,在地下传播、反射、绕射到测线,传播经过中高频衰减,能量被吸收。
吸收过程可以看成滤波的过程,滤波可以用褶积完成。
在滤波中,反射系数与震源强弱关联,吸收作用与子波关联。
最简单的地震记录数值模拟,可以看成反射系数与子波的褶积。
通常,反射系数是脉冲,子波取雷克子波。
(1)雷克子波:wave(t)=cos(2ft)*(2)反射系数:(3)褶积公式:数值模拟地震记录trace(t): trace(t) =rflct(t)*wave(t);反射系数的参数由 z 变成了 t,怎么实现?在简单水平层介质,分垂直和非垂直入射两种实现,分别如图 1 和图 2 所示。
图1 图21)垂直入射:t=2h/v;2)非垂直入射:t=2、褶积方法(1)离散化(数值化)计算机数值模拟要求首先必须针对连续信号离散化处理。
反射系数在空间模型中存在,不同深度反射系数不同,是深度的函数。
子波是在时间记录上一延续定时间的信号,是时间的概念。
在离散化时,通过深度采样完成反射系数的离散化,通过时间采样完成子波的离散化。
如果记录是 Trace(t),则记录是时间的函数,以时间采样离散化。
时间采样间距以Δt 表示,深度采样间距以Δz 表示。
在做多道的数值模拟时,还有横向Δx 的概念,横向采样间隔以Δx 表示。
离散化的实现:t=It×Δt;x=Ix×Δx;z=Iz×Δz;或:It=t/Δt; Ix=x/Δx; Iz=z/Δz(2)离散序列的褶积trace(It)=四、实验内容1、垂直入射地震记录数值模拟的褶积模型;2、非垂直入射地震记录数值模拟的褶积模型。
包 . 1 球 , 物理字 , 2 报 3 , . 2 二根据经验和具体情况给定一个 P 可自动选取 P 值 . 1 5 , 如 p一 l . 或区间 [ 5 0 ] 5 上某个实数 p 值。
. 2 l 上某个子区间由大量的实际计算例子表明在区间【 . . : 。
以了优选准则为 0 犷一 1 州 ! / 11 州 1 越大越好】 . 对 P < 2 当 ly 一。
时。
一 c o 为避免此种情况发生 , 2 , , . 0 【 5 . 如用 06 8优选法 1 . , 均分优选法等 , 被选区间可为区间 . 1 2 ] 上优选夕就足可 , , , , , 1 要进行如下数值处理 : }y 6 , } , 户一 , , 夕一2 当 }夕当 }y 】蕊, } > ‘ 6 。
. 这里 s 为当小的实适正数表 2 及其相应的图 2一图 4 是 L 。
, 模反褶积与最小平方反褶积对各相位信号处理结 s 相似度 (, 比较最 L _ 樟斤褶积 ._ 相位性质表 2 、 . _ _ _ , _ } 茹故囚士长及小相位零相位混相位—卉, “ 2 0 { — }一一・ , 、 l 平卞津二二二二二二二二兰一 6 6 2 2一“ , ”, ” ・一一 } 一一二一一一卜一卜。
, , , ‘ ・・} l } l { ” o “ ! “ ”3 7 0 ・ l a ( f ( } —‘ ‘ ’ l 。
, 33‘ } } —— { z 二 { U ・ - ・” ・9 5 6 0 ‘ ・ 6 0 干 1 1 , l : l [ . !二翩 . l 。
1 !. , , … . h l , , , 卜1… 扭. l 1 … , . 1 匕 { 图 ( a 3 c eeon 结果 ; 零相位子波 ; ( b 合成地震道 ; ( 已知反射系数 ; ( d D e L , 模反褶积结果 ; (f L , 模滤波因子 . (, 期 p 李凤林等 : L 模反褶积及其在地震勘探中的应用 * ( 作 ( f 汗皿, , , ; } 1 . ‘ 韭土 } ! } _ 11 止 . 1 l } . ! 一 . l 1 : } } 二以日 { } , 一 , 上‘ 图 ( 混合相位子波; a ( b 合成地震道 ; ., e ( Z 模反褶积结果 ; c4 f ( 已知反射系数 ; L , 模滤波因子 econ 结果 ; (d D . a ( 人工剖面 ; , , ( b L 模反褶积处理剖面 . , , 模反褶积结果也比最小平方法好这是因果之比较从中看出即使对小相位信号 . , 为反射序列分布并非高斯分布图 5 是 L 模反褶积对 1 道混合相位人工地震道处 0 b . 。
本科生实验报告实验课程数值模型模拟学院名称地球物理学院专业名称勘查技术与工程学生姓名ZRY学生学号指导教师实验地点624实验成绩二〇一五年4月二〇一五年5月成都理工大学《地震数值模拟》实验报告实验二叠加地震记录的相移波动模拟实方程正演验摘要利用C语言编制地质模型的相移波动方程正演模拟,改变绕射点位置、速度,再做正演模拟。
关键字:地震模型;正演记录1.1实验目的掌握各向同性介质任意构造、水平层状速度结构地质模型的相移波动方程正演模拟基本理论、实现方法与程序编制,由正演记录初步分析地震信号的分辨率。
1.2实验内容1、基本要求:(1)点绕射构造和水平层状速度模型(参数如图1 所示)的正演数值模拟;1)削波的正演;2)无削波的震正演;(2)计算中点和两个边界的信号位置,分析实验结果的正确性;(3)做同样模型的褶积模型数值模拟,对比分析分析两者的异同。
(4)改变绕射点位置、速度,再做正演模拟。
2、较高要求:(1)使用雷克子波做爆炸源,对三个不同的主频:25hz、50hz 和75hz 分别做点绕射模型的正演模拟;(2)设计复杂反射构造模型,再做正演模拟。
1.3实验原理1、地震波传播的波动方程设(x,z)为空间坐标,t 为时间,地震波传播速度为v(x,z),则二位介质中任意位置、任意时刻的地震波场为p(z,x,t):压缩波——纵波。
则二维各向同性均匀介质中地震波传播的遵循声波方程为()2、傅里叶变换的微分性质p(t)与其傅里叶变换的P(ω)的关系:则有时间微分性质ω 为频率,ω=2π/T,T 为周期。
同理有空间微分性质:k 为频率,k=2π/λ,λ为波长。
3、地震波传播的相移外推公式令速度v 不随x 变化,只随z 变化,则利用傅里叶变换微分性质(3)和(4)式,把波动方程(1)式变换到频率-波数域,得:或:令:则(5)式的解为:包括上行波和下行波两项。
正演模拟取上行波:若和间隔为△Z ,速度v(z) 在此间隔内不随Z 变的常数,(7)式实现波场从到的延拓,即:在深度Zj+1 开始向上延拓到Zj,若延拓深度为零,即:∆Z= Z j+1-Z j=0,则对于任意深度Z j+1 到Z j 的延拓,可得正演模拟中地震波的传播方程(延拓公式)4、初始条件和边界条件按照爆炸界面理论,反射界面震源在t=0 时刻同时起爆,此时刻的波场就是震源。
勘探地震学数据处理中的三种反褶积技术于平,赵震宇(吉林大学地球探测科学与技术学院,吉林长春 130026)摘要:在地震数据处理中,反褶积是用来提高分辨率的必要手段,但同时往往会降低资料的信噪比。
当地震资料不满足最小相位和白噪声约束条件时,常规的反褶积方法也将不再适用。
从这两个问题出发,混合相位未知脉冲最小平方反褶积、多分辨率地震信号反褶积、神经网络子波反褶积等三种改进的方法分别运用多次迭代、二进小波变换和神经网络技术,对常规方法的不足予以改善。
关键词:反褶积;混合相位;多分辨率;神经网络中图分类号:P631.4 文献标识码:A 文章编号:10045589(2002)02018103收稿日期:20011029作者简介:于平(1978),女,辽宁省盖县人,硕士生,主要从事勘探地震学方面的研究1在勘探地震学的数据处理系统中,反褶积是一项重要技术。
它是广义的地震反演的一部分;严格的反演是要提取地震参数,而反褶积企图提取反射系数,实际只能压缩子波。
提高纵向分辨率是数据处理的一个主要任务,也是反褶积方法的主要用途[1]。
但在实施过程中往往达不到理想效果,这其中包含有以下几点原因:(1)各种常规反褶积方法都必须有一定的假设条件,而在实际工作中有些条件又是不可实现的,限制了反褶积方法的应用。
所以,研究反褶积的一个努力方向就是要发展和应用其假设,尽可能接近实际的反褶积方法。
(2)反射地震记录的褶积模型不可靠。
褶积模型中的地震子波是大地滤波器的脉冲响应,然而,大地滤波的作用十分复杂,所以,为了发展提高分辨率的反滤波方法,应努力研究大地滤波的机制。
(3)反褶积在提高纵向分辨率的同时,往往会降低信噪比,提高记录噪声水平,给信号的提取带来困难。
只要能发展一种方法,使之在强噪声下提取弱信号,这样就可以在一定程度上缓解信噪比降低带来的困难[2]。
(4)各种反褶积方法的前提大多是地震子波已知,而实际恰恰相反。
因此,反滤波发展的另一个方向是子波提取技术[3]。
本科生实验报告实验课程数值模型模拟学院名称地球物理学院专业名称勘测技术与工程学生姓名学生学号指导教师熊高君实验地点5417实验成绩2015年5月成都理工大学《地震数值模拟》实验报告实验报告一、实验题目:地震记录数值模拟的褶积模型法二、实验目的:掌握褶积模型基本理论、实现方法与程序编制,由褶积模型初步分析地震信号的分辨率问题。
三、原理公式1、褶积原理地震勘探的震源往往是带宽很宽的脉冲,在地下传播、反射、绕射到测线,传播经过中高频衰减,能量被吸收。
吸收过程可以看成滤波的过程,滤波可以用褶积完成。
在滤波中,反射系数与震源强弱关联,吸收作用与子波关联。
最简单的地震记录数值模拟,可以看成反射系数与子波的褶积。
通常,反射系数是脉冲,子波取雷克子波。
(1)雷克子波:wave(t)=cos(2ft)*(2)反射系数:(3)褶积公式:数值模拟地震记录trace(t): trace(t) =rflct(t)*wave(t);反射系数的参数由 z 变成了 t,怎么实现?在简单水平层介质,分垂直和非垂直入射两种实现,分别如图 1 和图 2 所示。
图1 图21)垂直入射:t=2h/v;2)非垂直入射:t=2、褶积方法(1)离散化(数值化)计算机数值模拟要求首先必须针对连续信号离散化处理。
反射系数在空间模型中存在,不同深度反射系数不同,是深度的函数。
子波是在时间记录上一延续定时间的信号,是时间的概念。
在离散化时,通过深度采样完成反射系数的离散化,通过时间采样完成子波的离散化。
如果记录是 Trace(t),则记录是时间的函数,以时间采样离散化。
时间采样间距以Δt 表示,深度采样间距以Δz 表示。
在做多道的数值模拟时,还有横向Δx 的概念,横向采样间隔以Δx 表示。
离散化的实现:t=It×Δt;x=Ix×Δx;z=Iz×Δz;或:It=t/Δt; Ix=x/Δx; Iz=z/Δz(2)离散序列的褶积trace(It)=四、实验内容1、垂直入射地震记录数值模拟的褶积模型;2、非垂直入射地震记录数值模拟的褶积模型。
五、方法路线1、根据垂直入射褶积模型理论算法,填充程序(附后)的下划线部分,使程序完整,调试程序,算出结果,用“Fimage”显示软件显示褶积结果;2、根据非零偏移距算法,编制非零偏移距褶积模型程序,算出结果,用“Fimage”显示软件显示褶积结果。
(参考垂直入射褶积模型理论算法和程序,子波与反射层不变);3、变换子波的主频:fm(10hz到300hz范围),重复1和2;4、变换子波的长度:Nw(80ms到160ms范围),重复1和2;5、改变反射层深度:h(800m到1600m范围),重复1和2;6、改变介质速度:v(2000m/s到7000m/s 范围),重复1和2。
六、实验结果1、结果显示1)垂直入射图3—1 Nw=32,h=1000,v=3000,fm=100地震记录数值模拟的褶积模型(左)和子波(右)图3—2 Nw=32,h=1000,v=3000,fm=200地震记录数值模拟的褶积模型(左)和子波(右)图3—3 Nw=32,h=1000,v=3000,fm=300地震记录数值模拟的褶积模型(左)和子波(右)图3—4 h=1000,v=3000,fm=25,Nw=20地震记录数值模拟的褶积模型(左)和子波(右)图3—5 h=1000,v=3000,fm=25,Nw=30地震记录数值模拟的褶积模型(左)和子波(右)图3—6 h=1000,v=3000,fm=25,Nw=40地震记录数值模拟的褶积模型(左)和子波(右)图3—7 Nw=32,v=3000,fm=25,h=1000地震记录数值模拟的褶积模型图3—8 Nw=32,v=3000,fm=25,h=1200地震记录数值模拟的褶积模型图3—9 Nw=32,v=3000,fm=25,h=1400地震记录数值模拟的褶积模型图3—10 Nw=32, h=1000,fm=25,v=2000地震记录数值模拟的褶积模型图3—11 Nw=32, h=1000,fm=25,v=4000地震记录数值模拟的褶积模型图3—12 Nw=32, h=1000,fm=25,v=6000地震记录数值模拟的褶积模型2)非垂直入射图4—1 Nw=32,h=1000,v=3000,fm=100地震记录数值模拟的褶积模型(左)和子波(右)图4—2 Nw=32,h=1000,v=3000,fm=200地震记录数值模拟的褶积模型(左)和子波(右)图4—3 Nw=32,h=1000,v=3000,fm=300地震记录数值模拟的褶积模型(左)和子波(右)图4—4 h=1000,v=3000,fm=25,Nw=20地震记录数值模拟的褶积模型(左)和子波(右)图4—5 h=1000,v=3000,fm=25,Nw=30地震记录数值模拟的褶积模型(左)和子波(右)图4—6 h=1000,v=3000,fm=25,Nw=40地震记录数值模拟的褶积模型(左)和子波(右)图4—7 Nw=32,v=3000,fm=25,h=1000地震记录数值模拟的褶积模型图4—8 Nw=32,v=3000,fm=25,h=1200地震记录数值模拟的褶积模型图4—9 Nw=32,v=3000,fm=25,h=1400地震记录数值模拟的褶积模型图4—10 Nw=32, h=1000,fm=25,v=2000地震记录数值模拟的褶积模型图4—11 Nw=32, h=1000,fm=25,v=4000地震记录数值模拟的褶积模型图4—12 Nw=32, h=1000,fm=25,v=6000地震记录数值模拟的褶积模型子波振幅谱:图5—1 fm=100的子波振幅谱图5—2 fm=100的子波振幅谱2、对比分析a)由图3—1、图3—2、图3—3(或图4—1、图4—2、图4—3)可知,当子波长度(Nw=32)、深度(h=1000)、速度(v=3000)不变,子波频率变化时,褶积模型不变,且均在0.5到1s之间;b)由图3—4、图3—5、图3—6可知,当深度(h=1000)、速度(v=3000)、子波频率(fm=25)不变, 子波长度变化,且垂直入射时,褶积模型为直线模型,是因为垂直入射时,时间与深度为线性关系;c)由图4—4、图4—5、图4—6可知,当深度(h=1000)、速度(v=3000)、子波频率(fm=25)不变, 子波长度变化,且非垂直入射时,褶积模型前半部分为双曲线模型,后半部分为直线模型,是由于计算的褶积结果的实际长度小于所取的长度,计算机赋的随机数所致,所以,非垂直入射时的褶积模型只有图件上显示的前半部分的双曲线,是由于非垂直入射时,时间与深度为双曲线关系;d)由图3—7、图3—8、图3—9,当子波长度(Nw=32)、速度(v=3000)、子波频率(fm=25)不变,深度变大时,垂直入射时,图件上显示的褶积模型的位置逐渐向下移,即地震波的旅行路程变大,旅行时变长;e)由图4—7、图4—8、图4—9可知,当子波长度(Nw=32)、速度(v=3000)、子波频率(fm=25)不变,深度变大时,非垂直入射时,图件上显示的褶积模型的位置不变,这是由于非垂直入射时,相当于地下有一半圆形界面,在圆心处自激自收;f)由图3—10、图3—11、图3—12(或图4—10、图4—11、图4—12)可知,当子波长度(Nw=32)、深度(h=1000)、子波频率(fm=25)不变,速度变大时,图件上显示的褶积模型的位置逐渐向上移,这是由于随着速度变大,地震波的旅行时变小;g)由图5—1与图5—2可知,当子波频率变化时,其振幅谱不变。
七、讨论建议1、实验收获通过此次试验,初步掌握了褶积模型基本理论、实现方法与程序编制,由褶积模型初步分析地震信号的分辨率问题,掌握了褶积模型与子波主频、子波长度、界面深度、介质中地震波速度的关系。
2、存在问题对褶积模型的理论实现过程不是十分清楚,对结果的物理含义理解不够深入。
3、其他问题由于不同的计算机,计算精度不一样,计算得到的数据结果可能会有部分差异,但总体趋势不变。
4、心得体会在此次试验中,应特别注意褶积模型的理论实现过程的理解,以及程序调试时,要特别仔细地去检查每一个错误,每修改一处错误,就重新运行一次程序。
附程序代码://=================1. 预处理部分==============//#include<math.h>#include<stdio.h>#include<string.h>float Cnltn(float,float);float Rflct(float,float,float);float Wave(float,float);#define Nx 128#define Nt 256#define Nw 32#define PI 3.1415926//==================2. 主程序波分==============//void main(){float dt=0.004,dx=20,fm=25,h=1000,v=3000;int iflag_Co,iflag_Re,iflag_Wv;if(iflag_Wv=Wave(fm,dt)!=1)printf("Wave is error");if(iflag_Re=Rflct(dt,h,v)!=1)printf("Reflection is error");if(iflag_Co=Cnltn(dt,dx)!=1)printf("Convosion is error");}// =================3.函数实现部分===============//// ==============3.1 Wave Formaing function=============// float Wave(float fm,float dt){FILE *fpw;int It;float Wa[Nw],t;if((fpw=fopen("wave.dat","wb"))==NULL)printf("Connot open file ""wave""");for(It=0;It<Nw;It++){t=It*dt;Wa[It]=cos(2*PI*fm*t)*exp(-2*PI*PI*fm*fm*t);//形成子波fwrite(&Wa[It],sizeof(Wa[It]),1,fpw);}fclose(fpw);return(1);}// ============3.2 Reflect Formaing function==============// float Rflct(float dt,float h,float v){FILE *fpr;int It,Ix,J,Ltdpth;float t,dx=20,x;float Re[Nt];printf("请输入J:\n");scanf("%d",&J);if((fpr=fopen("Reflect.dat","wb"))==NULL)printf("Connot open file ""Reflect""");for(Ix=0;Ix<Nx;Ix++){for(It=0;It<Nt;It++){Re[It]=0.;}if(J==1)t=2*h/v;//垂直入射反射界面由深度转换为自激自收时间if(J==2){x=Ix*dx;t=2*sqrt(h*h+x*x)/v;//非垂直入射反射界面由深度转换为自激自收时间}if((J!=1)&&(J!=2))printf("输入错误\n");Ltdpth=(int)(t/dt);Re[Ltdpth]=1;for(It=0;It<Nt;It++){fwrite(&Re[It],sizeof(Re[It]),1,fpr);}}fclose(fpr);return(1);}// =============3.3 Convolution function=============//float Cnltn(float dt,float dx){FILE *fpc,*fpw,*fpr;int It,Ix,Itao;float Wa1[Nw],Wa[Nw],Re[Nt+Nw+Nw],Re1[Nt],t;float Con[Nt+Nw];if((fpc=fopen("Convosion.dat","wb"))==NULL) printf("Connot open file ""Convosion"""); if((fpw =fopen("wave.dat","rb"))==NULL)printf("Connot open file ""wave""");if((fpr =fopen("Reflect.dat","rb"))==NULL) printf("Connot open file ""Reflect""");for(Ix=1;Ix<2;Ix++){for(It=0;It<Nw;It++){fread(&Wa1[It],sizeof(Wa1[It]),1,fpw);}for(It=0;It<Nw;It++)Wa[It]=Wa1[Nw-It-1];//褶积前子波准备}fclose(fpw);for(Ix=0;Ix<Nx;Ix++){for(It=0;It<Nt;It++){fread(&Re1[It],sizeof(&Re1[It]),1,fpr);}for(It=0;It<Nt+2*Nw;It++){Re[It]=0;}for(It=0;It<Nt;It++){Re[It+Nw]=Re1[It];//反射系数准备}for(It=0;It<Nt+Nw;It++){Con[It]=0;t=0;for(Itao=0;Itao<Nw;Itao++){t+=Re[It+Itao]*Wa[Itao];//褶积运算}Con[It]=t;}for(It=Nw/2;It<Nt+Nw/2;It++){fwrite(&Con[It],sizeof(Con[It]),1,fpc);}}.fclose(fpw); fclose(fpr); fclose(fpc); return(1); }.。