Portrait of Zheng MaHome

什么是全波反演

介绍全波反演的基本数学模型和常用方法 · 9 min read

核心数学公式

  1. 波动方程:
2p1c22pt2=s\nabla^2p-\frac{1}{c^2}\frac{\partial^2p}{\partial t^2}=s

其中

  • p=p(x,y,z,t)p=p(x,y,z,t):压力场 (pressure field)。代表地震波在某点某时刻的压力值。接收器记录到的就是地表上特定位置的压力场随时间的变化 (也即我们所说的波长)
  • c=c(x,y,z)c = c(x, y, z)速度模型 (velocity map)。它只与空间位置有关,表示地震波在地下不同位置的传播速度。这是FWI最终要求解的目标
  • s=s(x,y,z,t)s=s(x,y,z,t): 震源项 (source term)。描述了人工震源的性质,包括其位置、激发时间和波形。在主动源地震勘探中,这是一个已知量。

实际的FWI即我们在给定的位置设置了一系列震源和接收器(通常都在表面,若能在地表之下,问题的求解会简单很多),然后通过接收器的波场数据pp来反演速度场cc,也即我们的反问题目标为

uΩc.u|_{\partial \Omega}\rightarrow c.
  1. 实际正演过程即给定速度场cc和源项ss,通过数学离散格式将上述方程(1)离散化求解得到波长pp
  2. 边界条件:在实际计算中,为了地震波在地下传播的无限性和计算区域的有限性这一对矛盾,必须人为截断边界,这会引入人为边界反射问题,目标都是消除或削弱反射。例如,对openfwi数据集,速度场大小为(70,70),但上下左右均会加上边界层,最后大小为 (310, 310)。在以下讨论中,我们均考虑二维波动方程
2u1c22ut2=0u(x,0)=0\begin{aligned} \nabla^2u-\frac{1}{c^2}\frac{\partial^2u}{\partial t^2}&=0\\ u(x,0)&=0 \end{aligned}
  • abc边界吸收层(openfwi数据集使用该边界条件): 对于上下左右边界层,我们分别使用如下的方程
2uxt1c2ut2+c22uy2=02uxt1c2ut2c22uy2=02uyt1c2ut2+c22uy2=02uyt1c2ut2c22uy2=0\begin{aligned} \frac{\partial^{2} u}{\partial x \partial t} - \frac{1}{c} \frac{\partial^{2} u}{\partial t^{2}} + \frac{c}{2} \frac{\partial^{2} u}{\partial y^{2}} = 0 \\ \frac{\partial^{2} u}{\partial x \partial t} - \frac{1}{c} \frac{\partial^{2} u}{\partial t^{2}} - \frac{c}{2} \frac{\partial^{2} u}{\partial y^{2}} = 0 \\ \frac{\partial^{2} u}{\partial y \partial t} - \frac{1}{c} \frac{\partial^{2} u}{\partial t^{2}} + \frac{c}{2} \frac{\partial^{2} u}{\partial y^{2}} = 0 \\ \frac{\partial^{2} u}{\partial y \partial t} - \frac{1}{c} \frac{\partial^{2} u}{\partial t^{2}} - \frac{c}{2} \frac{\partial^{2} u}{\partial y^{2}} = 0 \\ \end{aligned}
  • pml边界(deepwave中的scaler函数所用的边界层):我们首先引入中间变量qx,qy,ψx,ψyq_x,q_y,\psi_x,\psi_y,我们将波动方程(2)改写为如下方程组
ut=1c2(ψx+ψy)qxt+dx(x)qx=xutψxt+dx(x)ψx=xqxt\begin{aligned} \frac{\partial u}{\partial t}=\frac{1}{c^2}(\psi_x+\psi_y) \\ \frac{\partial q_x}{\partial t}+d_x(x)q_x=\frac{\partial}{\partial x}\frac{\partial u}{\partial t} \\ \frac{\partial \psi_x}{\partial t}+d_x(x)\psi_x=\frac{\partial}{\partial x}\frac{\partial q_x}{\partial t} \end{aligned}

此处qy,ψyq_y,\psi_yqx,ψxq_x,\psi_x同理。dx(x)d_x(x)为衰减系数,在内部计算区域(对openfwi来说就是上面的(70,70))为0,在pml边界层,dx(x)d_x(x)平滑增加,例如使用多项式函数等

  1. 源项:通常采用点源的形式
s(x,t)=f(t)δ(xxs).s(x,t)=f(t)\cdot\delta(x-x_s).

f(t)f(t)为源时间函数,在fwi中我们常使用ricker子波(Ricker Wavelet):

f(t)=(12π2fp(tt0)2)exp(π2fp(tt0)2)f(t)=(1-2\pi^2f_p(t-t_0)^2)\cdot\exp(-\pi^2f_p(t-t_0)^2)

其中fpf_p为峰值频率。

离散格式正演过程

直接调包

可直接使用deepwave库,具体文档见 deepwave,设定好相应的参数,会自动使用pml边界条件,求解速度极快(注意,使用scalar的时候官方文档给的深度位置坐标是错误的,源项和接收器项的[:,:,0]对应的才是深度。

具体的数值求解过程(abc边界条件)

在openfwi中,采用如下的方式进行离散求解:考虑波动方程

2pt2=v22p+s\frac{\partial^2 p}{\partial t^2}=v^2\nabla^2 p+s

加入衰减项有

2pt2+κpt=v22p+s\frac{\partial^2 p}{\partial t^2}+\kappa\frac{\partial p}{\partial t}=v^2\nabla^2 p+s

原始的速度场大小为(nx, nz),速度场的上下左右均加入nbc层,值均为用边界值填充,最后得到的shape为(nx+2nbc,nz+2nbc)

  1. 时间离散:
2pt2=pn+12pn+pn1Δt2\frac{\partial^2 p}{\partial t^2}=\frac{p^{n+1}-2p^n+p^{n-1}}{\Delta t^2}
  1. 空间离散:
2p43pi+1,j+pi1,j+pi,j+1+pi,j14pi,jΔx2112pi+2,j+pi2,j+pi,j+2+pi,j24pi,jΔx2\nabla^2p \approx \frac{4}{3}\frac{p_{i+1,j}+p_{i-1,j}+p_{i,j+1}+p_{i,j-1}-4p_{i,j}}{\Delta x^2}-\frac{1}{12}\frac{p_{i+2,j}+p_{i-2,j}+p_{i,j+2}+p_{i,j-2}-4p_{i,j}}{\Delta x^2}
  1. 衰减项:使用一阶近似
pt=pnpn1Δt\frac{\partial p}{\partial t}=\frac{p^n-p^{n-1}}{\Delta t}

边界层基础衰减系数为κc=3vminlog(107)2a,a=(nbc1)dx\kappa_c=\frac{3v_{min}\log(10^7)}{2a},a=(nbc-1)*\text{dx}。一维衰减系数为κc(iΔxa)2,i=0,1,,nbc1\kappa_c(\frac{i\Delta x}{a})^2,i=0,1,\cdots,nbc-1,即边界内部为0,边界外部衰减最大。相应的可以计算上下左右边界的衰减项,例如,左边的衰减项为κi,j=κc((nbc1j)Δxa)2\kappa_{i,j}=\kappa_c(\frac{(nbc-1-j)\Delta x}{a})^2 4. 在波源的位置会注入波场fijf_{ij} 5. 最后得到如下格式:

pn+1=(2κ)pn(1κ)pn1+α2pn+βΔt2fnp^{n+1}=(2-\kappa)p^n-(1-\kappa)p^{n-1}+\alpha\nabla^2p^n+\beta \Delta t^2f^n

其中α=(vΔt/Δx)2,β=v2\alpha=(v\Delta t/\Delta x)^2,\beta=v^2

伴随状态法求梯度

具体算法流程

  1. 正演模拟:给定当前速度场cc和源ss,通过上面的正演过程得到波场u(x,t)u(x,t)
  2. 计算残差:在接收点位置xr\mathbf{x}_r计算残差:
δd(xr,t)=u(xr,t)dobs(xr,t)\delta d(\mathbf{x}_r, t) = u(\mathbf{x}_r, t) - d_{obs}(\mathbf{x}_r, t)
  1. 把上面的残差在时间反转后作为源项注入接收器的位置
sadj(x,t)=rδd(xr,Tt)δ(xxr)s_{adj}(\mathbf{x}, t) = \sum_r \delta d(\mathbf{x}_r, T-t) \delta(\mathbf{x} - \mathbf{x}_r)

初始时伴随波场在终端时间t=Tt=T设置为λ(x,T)=0\lambda(\mathbf{x},T)=0,然后从t=Tt=T开始,反向积分t=0t=0,此处可以设置τ=Tt\tau=T-t。进行上面的正演过程,得到伴随波场λ(x,t)\lambda(\mathbf{x},t) 4. 计算梯度:Jc(x)=2c3(x)0T2u(x,t)t2λ(x,t)dt \frac{\partial J}{\partial c(\mathbf{x})} = -\frac{2}{c^3(\mathbf{x})} \int_0^T \frac{\partial^2 u(\mathbf{x}, t)}{\partial t^2} \lambda(\mathbf{x}, t) dt

算法推导过程

  1. 物理约束方程为
F(m,p)=1c2(x)2pt22ps(x,t)=0\mathcal{F}(\mathbf{m}, p) = \frac{1}{c^2(\mathbf{x})} \frac{\partial^2 p}{\partial t^2} - \nabla^2 p - s(\mathbf{x}, t) = 0

这里m=1c2(x)\mathbf{m}=\frac{1}{c^2(\mathbf{x})}表示要优化的参数,目标为最小化如下loss funcition

J(m)=120TΩ[u(x,t)dobs(x,t)]2δ(xxr)dxdt J(\mathbf{m}) = \frac{1}{2} \int_0^T \int_{\Omega} [u(\mathbf{x}, t) - d_{obs}(\mathbf{x}, t)]^2 \delta(\mathbf{x} - \mathbf{x}_r) d\mathbf{x} dt

其中xrx_r为接收器的位置。我们想要求解J(m)J(\mathbf{m})关于m\mathbf{m}的梯度 2. 引入拉格朗日乘子λ(x,t)\lambda(\mathbf{x},t)(即未来的伴随场),构造如下的拉格朗日函数

L(m,p,λ)=120TΩ(pdobs)2δ(xxr)dxdt0TΩλ(x,t)[1c22pt22ps]dxdt\mathcal{L}(\mathbf{m},p,\lambda) = \frac{1}{2} \int_0^T \int_{\Omega} (p - d_{obs})^2 \delta(\mathbf{x} - \mathbf{x}_r) d\mathbf{x} dt - \int_0^T \int_{\Omega} \lambda(\mathbf{x}, t) \left[ \frac{1}{c^2} \frac{\partial^2 p}{\partial t^2} - \nabla^2 p - s \right] d\mathbf{x} dt

L\mathcal{L}分别对λ,p,m\lambda,p,\mathbf{m}求解一阶变分,并令其为0。我们可以得到如下的方程

δLδλ=0    F(m,u)=0\frac{\delta \mathcal{L}}{\delta \lambda} = 0 \implies \mathcal{F}(\mathbf{m}, u) = 0

也即上面的物理约束方程。

δLδp=δJδpλ,δFδp=0δJδp=(pdobs)δ(xxr)λ,δFδp=0TΩλ(x,t)[1c22t22]δpdxdt\begin{aligned} \frac{\delta \mathcal{L}}{\delta p} = \frac{\delta J}{\delta p} - \langle \lambda, \frac{\delta \mathcal{F}}{\delta p} \rangle = 0 \\ \frac{\delta J}{\delta p} = (p - d_{obs}) \delta(\mathbf{x} - \mathbf{x}_r) \\ \langle \lambda, \frac{\delta \mathcal{F}}{\delta p} \rangle = \int_0^T \int_{\Omega} \lambda(\mathbf{x}, t) \left[ \frac{1}{c^2} \frac{\partial^2}{\partial t^2} - \nabla^2 \right] \delta pd\mathbf{x} dt \\ \end{aligned}

为了将算子从 δp\delta p 转移到 λ\lambda 上,我们进行两次分部积分(这里假设波场初始时刻是静止的,伴随场终止时刻是静止的)

0Tλ1c22(δp)t2dt=...=0T1c22λt2δpdt+[边界项]0T\int_0^T \lambda \frac{1}{c^2} \frac{\partial^2 (\delta p)}{\partial t^2} dt = ... = \int_0^T \frac{1}{c^2} \frac{\partial^2 \lambda}{\partial t^2} \delta p dt + [\text{边界项}]_0^T Ωλ2(δp)dx=...=Ω(2λ)δpdx+[表面积分]\int_{\Omega} \lambda \nabla^2 (\delta p) d\mathbf{x} = ... = \int_{\Omega} (\nabla^2 \lambda) \delta p d\mathbf{x} + [\text{表面积分}]

由此我们可以得到

δLδp=0TΩ[(pdobs)δ(xxr)(1c22λt22λ)]δpdxdt=0\frac{\delta \mathcal{L}}{\delta p} = \int_0^T \int_{\Omega} \left[ (p - d_{obs}) \delta(\mathbf{x} - \mathbf{x}_r) - \left( \frac{1}{c^2} \frac{\partial^2 \lambda}{\partial t^2} - \nabla^2 \lambda \right) \right] \delta p d\mathbf{x} dt = 0

由于δp\delta p的任意性,方括号中的项必须恒为0,由此我们可以得到伴随方程

1c2(x)2λt22λ=(udobs)δ(xxr)\frac{1}{c^2(\mathbf{x})} \frac{\partial^2 \lambda}{\partial t^2} - \nabla^2 \lambda = (u - d_{obs}) \delta(\mathbf{x} - \mathbf{x}_r)

最后我们可以得到梯度表达式:

δJδm=δLδm=λ,δFδm\frac{\delta J}{\delta \mathbf{m}} = \frac{\delta \mathcal{L}}{\delta \mathbf{m}} = \langle \lambda, \frac{\delta \mathcal{F}}{\delta \mathbf{m}} \rangle

代入δFδm\frac{\delta F}{\delta \mathbf{m}},可以得到

δJδm(x)=0Tλ(x,t)2u(x,t)t2dt\frac{\delta J}{\delta m(\mathbf{x})} = \int_0^T \lambda(\mathbf{x}, t) \frac{\partial^2 u(\mathbf{x}, t)}{\partial t^2} dt

求解关于c的梯度,只需使用链式法则:

δJδc(x)=δJδmδmδc=(0Tλ2ut2dt)(2c3)\frac{\delta J}{\delta c(\mathbf{x})} = \frac{\delta J}{\delta m} \frac{\delta m}{\delta c} = \left( \int_0^T \lambda \frac{\partial^2 u}{\partial t^2} dt \right) \cdot \left( -\frac{2}{c^3} \right)

主要难点与某些取巧操作

可参考 FWI传统方法

Last updated on

On this page