Spitz 插值

參考文獻 (鏈接) Spitz S . Seismic trace interpolation in the F-X domain[J]. Geophysics, 1991, 56(6):785-794.

簡介

Spitz插值是最經典的插值方法,它利用了上一篇博客中提到的具有線性同相軸的地震數據可以在頻率–空間域進行線性迴歸的理論。(回顧:線性迴歸濾波器的長度等於同相軸(不同斜率)的數目加一,實際應用中會採用更長的自迴歸濾波器,可以使算法更穩定。自迴歸的好處在於其只用到了地震數據到本身,而不需要知道斜率信息)

Spitz插值的思路是,首先利用低頻無假頻部分計算出自迴歸係數(迴歸),根據道加密後相鄰道之間的相移爲原來一半,可以推導出加密後數據的自迴歸係數,然後在利用自迴歸關係從已知數據推導出未知數據(預測)。回顧和預測都通過最小二乘實現,因此算法比較穩定。缺點是:1,只能用於線性同相軸;2,只能用於規則網格。

理論

以下符號與Spitz論文中一致。

包含LL個同相軸和NN道的地震數據在頻率域可以表示成:

gk(f)=j=1Laj(f)zjk1(f),k=1,...,Ng_k(f)=\sum_{j=1}^La_j(f)z_j^{k-1}(f),k=1,...,N

其中gk(f)g_k(f)表示第kk道數據,aj(f)a_j(f)爲第jj個同相軸對應的子波頻譜(第一道數據),zj(f)=exp(2πifpj)z_j(f)=exp(2\pi i f p_j)對應於第jj個同相軸相鄰道之間的相移pjp_j(對應於斜率)。根據上一篇博客介紹的Canales方法,向前–向後單步預測濾波可以寫成如下形式:
gk(f)=j=1LPj(f)gkj(f),k=L+1,...,Ng_k(f)=\sum_{j=1}^L P_j(f)g_{k-j}(f),k=L+1,...,N
gk(f)=j=1LPj(f)gk+j(f),k=1,...,NLg_k^*(f)=\sum_{j=1}^L P_j(f)g_{k+j}^*(f),k=1,...,N-L
其中Pj(f)P_j(f)爲預測濾波器的係數。(向前–向後濾波的共軛關係可以從附錄中得到)

Spitz方法在原來的地震道中兩道中間插入新的地震道,因此插值後的地震數據滿足:
gk(f)=j=1Laj(f)zjk1(f),k=1,...,2N1g_k'(f)=\sum_{j=1}^La_j(f){z'}_j^{k-1}(f),k=1,...,2N-1
可以再一次寫出向前–向後單步預測濾波形式:
gk(f)=j=1LPj(f)gkj(f),k=L+1,...,2N1g'_k(f)=\sum_{j=1}^L P'_j(f){g'}_{k-j}(f),k=L+1,...,2N-1
gk(f)=j=1LPj(f)gk+j(f),k=1,...,2NL1g'_k(f)=\sum_{j=1}^L {P'}^*_j(f){g'}_{k+j}(f),k=1,...,2N-L-1

上述方程爲關於gjg'_j的線性方程組,係數爲PjP'_j將已知值和未知值分別放到一塊,整理得到:
A(P(f))[g2(f) g4(f) ... g2N2(f)]T=B(P(f))[g1(f) g3(f) ... g2N1(f)]TA(P'(f))[g'_2(f)\text{ }g'_4(f) \text{ }... \text{ }g'_{2N-2}(f)]^T=B(P'(f))[g'_1(f)\text{ }g'_3(f) \text{ }... \text{ }g'_{2N-1}(f)]^T

如果PP'已知的話,以上表達式包含2(2NL1)2(2N-L-1)個方程(向前向後濾波等式的個數)和N1N-1個未知數(文獻中寫成2N12N-1,不知道是寫錯了,還是包括了所有道),可以用最小平方方法求解(等價於一個從已知到未知的濾波器):

(A+A)1A+B(A^+A)^{-1}A^+B

其中A+A^+AA的複共軛轉置。

雖然實際上PP'未知,但是可以用PP來推導。注意輸出(包括已知點)和輸入剖面的相移關係爲zj(f)=zj(f/2)z'_j(f)=z_j(f/2)(注:zj(f)=exp(2πifpj/2)=zj(f/2)z'_j(f)=exp(2\pi i f p_j/2)=z_j(f/2),插值後相鄰道之間的相移爲原來的一半)。

PPzz的關係可以得到:

Pj(f)=Pj(f/2)P'_j(f)=P_j(f/2)

可以看到,只利用了無假頻的低頻部分。

以上推導由一些細節沒有給出,待續。

附錄:自迴歸的另外一種推導

Spitz用另外一種方法進行了Canales文章的推導。
附推導過程
對於地震數據xT(f)=[x1(f),...,xN(f)]x^T(f)=[x_1(f),...,x_N(f)],假設x(f)=g(f)+n(f)x(f)=g(f)+n(f)。定義z變換SjT(f)=[1,zj(f),...,zjN1(f)]S_j^T(f)=[1,z_j(f),...,z_j^{N-1}(f)],其中,zj(f)=exp(2πifpi)z_j(f)=exp(2\pi ifp_i),則:
g(f)=j=1Laj(f)Sj(f)g(f)=\sum_{j=1}^La_j(f)S_j(f)
其中aj(f)a_j(f)爲第jj個同向軸對應的子波的傅里葉變換。分開寫爲:
g1=j=1Laj1g2=j=1LajzjgN=j=1LajzjN1\begin{aligned} g_1&=&\sum_{j=1}^La_j\cdot 1 \\ g_2&=&\sum_{j=1}^La_j\cdot z_j \\ &\cdots& \\ g_N&=&\sum_{j=1}^La_j\cdot z_j^{N-1} \end{aligned}
寫成矩陣的形式爲:
(3)[g1g2gn]=[111z1z2zLz1N1z2N1zLN1]×[a1a2an] \left[ \begin{matrix} g_1 \\ g_2 \\ \vdots \\ g_n \end{matrix} \right]= \left[ \begin{matrix} 1 & 1& \cdots & 1 \\ z_1 & z_2& \cdots & z_L \\ \vdots \\ z_1^{N-1} & z_2^{N-1}& \cdots & z_L^{N-1} \end{matrix} \right] \times \left[ \begin{matrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{matrix} \right] \tag{3}
令其中的矩陣爲SS,即S=[S1, ,SL]S=[S_1, \cdots, S_L]。將(3)記爲矩陣形式:
x=Sa+nx=Sa+n
形爲SS的矩陣稱爲範德蒙矩陣,SjS_j之間是線性無關的,則SS的秩爲LLN>=LN>=L)。SS的任意一行都可以表示爲其它LL行的線性組合。例如,第L+1L+1行可以表示爲前LL行的線性組合。寫成如下形式:
(4)(z1L, ,zLL)=(PL, ,P1)×[111z1z2zLz1L1z2L1zLL1] (z_1^L,\cdots,z_L^L)=(P_L,\cdots,P_1)\times \left[ \begin{matrix} 1 & 1& \cdots & 1 \\ z_1 & z_2& \cdots & z_L \\ \vdots \\ z_1^{L-1} & z_2^{L-1}& \cdots & z_L^{L-1} \end{matrix} \right] \tag{4}
將上式右側移到左側,整理成關於zjz_j的方程,發現對任意zjz_j形式都一樣,爲:
ZL=zLP1zL1PL=0Z_L=z^L-P_1z^{L-1}-\cdots-P_L=0
又因爲zjz_j各不相同,上述方程有LL個解(零點),所以zjz_j爲上述方程的KK個零點,即可以寫成如下形式:
ZL=(zz1)(zz2)(zzL)Z_L=(z-z_1)(z-z_2)\cdots(z-z_L)
對比上述兩式可以得到
P1=z1++zLP2=(z1z2++zL1zL)PL=(1)L+1z1z2zL\begin{aligned} P_1&=&z_1+\cdots+z_L \\ P_2&=&-(z_1z_2+\cdots+z_{L-1}z_L)\\ &\cdots& \\ P_L&=&(-1)^{L+1}z_1z_2\cdots z_L \end{aligned}
上式即爲我們之前沒有推出來的通解。

代碼解釋:

核心代碼:

  PF = prediction_filter(x1,npf,pre1); #計算預測濾波器
  [y] = interpolate_freq(x2,PF,pre2); # 插值

自迴歸代碼:

 for j=1:ns-np  
    C(j,:)=VEC(j+np:-1:j);
 end  
 A = [C(:,2:np+1);conj(fliplr(C(:,1:np)))];  #向前向後(共軛)預測的輸入
 B = [C(:,1);conj(C(:,np+1))];# 向前向後預測的輸出
 R = A'*A; 
 g = A'*B;
 mu = (pre/100.)*trace(R)/np;
 PF =  (R+mu*eye(np))\g; #最小平方求解

插值代碼:

 TMPF1 = [fliplr(PF.'),-1];  #向前預測
 W1 = convmtx(TMPF1,ny-np);
 TMPF2 = conj(fliplr(TMPF1)); # 向後預測
 W2 = convmtx(TMPF2,ny-np);
 WT = [W1;W2];
 A = WT(:,2:2:ny); #未知數據
 B = -1*WT(:,1:2:ny)*x.'; #已知數據,這裏可以看到,是用已知數據預測未知數據
 R= A'*A;
 g = A'*B;
 mu = (pre/100.)*trace(R)/(nx-1);
 y1 =  (R+mu*eye(nx-1))\g; #最小平方反演
 y = zeros(1,ny);
 y(1:2:ny)=x;
 y(2:2:ny)=y1.';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章