參考文獻 (鏈接 ) Spitz S . Seismic trace interpolation in the F-X domain[J]. Geophysics, 1991, 56(6):785-794.
簡介
Spitz插值是最經典的插值方法,它利用了上一篇博客中提到的具有線性同相軸的地震數據可以在頻率–空間域進行線性迴歸的理論。(回顧:線性迴歸濾波器的長度等於同相軸(不同斜率)的數目加一,實際應用中會採用更長的自迴歸濾波器,可以使算法更穩定。自迴歸的好處在於其只用到了地震數據到本身,而不需要知道斜率信息)
Spitz插值的思路是,首先利用低頻無假頻部分計算出自迴歸係數(迴歸),根據道加密後相鄰道之間的相移爲原來一半,可以推導出加密後數據的自迴歸係數,然後在利用自迴歸關係從已知數據推導出未知數據(預測)。回顧和預測都通過最小二乘實現,因此算法比較穩定。缺點是:1,只能用於線性同相軸;2,只能用於規則網格。
理論
以下符號與Spitz論文中一致。
包含L L L 個同相軸和N N N 道的地震數據在頻率域可以表示成:
g k ( f ) = ∑ j = 1 L a j ( f ) z j k − 1 ( f ) , k = 1 , . . . , N g_k(f)=\sum_{j=1}^La_j(f)z_j^{k-1}(f),k=1,...,N g k ( f ) = j = 1 ∑ L a j ( f ) z j k − 1 ( f ) , k = 1 , . . . , N
其中g k ( f ) g_k(f) g k ( f ) 表示第k k k 道數據,a j ( f ) a_j(f) a j ( f ) 爲第j j j 個同相軸對應的子波頻譜(第一道數據),z j ( f ) = e x p ( 2 π i f p j ) z_j(f)=exp(2\pi i f p_j) z j ( f ) = e x p ( 2 π i f p j ) 對應於第j j j 個同相軸相鄰道之間的相移p j p_j p j (對應於斜率)。根據上一篇博客介紹的Canales方法,向前–向後單步預測濾波可以寫成如下形式:
g k ( f ) = ∑ j = 1 L P j ( f ) g k − j ( f ) , k = L + 1 , . . . , N g_k(f)=\sum_{j=1}^L P_j(f)g_{k-j}(f),k=L+1,...,N g k ( f ) = j = 1 ∑ L P j ( f ) g k − j ( f ) , k = L + 1 , . . . , N
g k ∗ ( f ) = ∑ j = 1 L P j ( f ) g k + j ∗ ( f ) , k = 1 , . . . , N − L g_k^*(f)=\sum_{j=1}^L P_j(f)g_{k+j}^*(f),k=1,...,N-L g k ∗ ( f ) = j = 1 ∑ L P j ( f ) g k + j ∗ ( f ) , k = 1 , . . . , N − L
其中P j ( f ) P_j(f) P j ( f ) 爲預測濾波器的係數。(向前–向後濾波的共軛關係可以從附錄中得到)
Spitz方法在原來的地震道中兩道中間插入新的地震道,因此插值後的地震數據滿足:
g k ′ ( f ) = ∑ j = 1 L a j ( f ) z ′ j k − 1 ( f ) , k = 1 , . . . , 2 N − 1 g_k'(f)=\sum_{j=1}^La_j(f){z'}_j^{k-1}(f),k=1,...,2N-1 g k ′ ( f ) = j = 1 ∑ L a j ( f ) z ′ j k − 1 ( f ) , k = 1 , . . . , 2 N − 1
可以再一次寫出向前–向後單步預測濾波形式:
g k ′ ( f ) = ∑ j = 1 L P j ′ ( f ) g ′ k − j ( f ) , k = L + 1 , . . . , 2 N − 1 g'_k(f)=\sum_{j=1}^L P'_j(f){g'}_{k-j}(f),k=L+1,...,2N-1 g k ′ ( f ) = j = 1 ∑ L P j ′ ( f ) g ′ k − j ( f ) , k = L + 1 , . . . , 2 N − 1
g k ′ ( f ) = ∑ j = 1 L P ′ j ∗ ( f ) g ′ k + j ( f ) , k = 1 , . . . , 2 N − L − 1 g'_k(f)=\sum_{j=1}^L {P'}^*_j(f){g'}_{k+j}(f),k=1,...,2N-L-1 g k ′ ( f ) = j = 1 ∑ L P ′ j ∗ ( f ) g ′ k + j ( f ) , k = 1 , . . . , 2 N − L − 1
上述方程爲關於g j ′ g'_j g j ′ 的線性方程組,係數爲P j ′ P'_j P j ′ 將已知值和未知值分別放到一塊,整理得到:
A ( P ′ ( f ) ) [ g 2 ′ ( f ) g 4 ′ ( f ) . . . g 2 N − 2 ′ ( f ) ] T = B ( P ′ ( f ) ) [ g 1 ′ ( f ) g 3 ′ ( f ) . . . g 2 N − 1 ′ ( f ) ] T A(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 A ( P ′ ( f ) ) [ g 2 ′ ( f ) g 4 ′ ( f ) . . . g 2 N − 2 ′ ( f ) ] T = B ( P ′ ( f ) ) [ g 1 ′ ( f ) g 3 ′ ( f ) . . . g 2 N − 1 ′ ( f ) ] T
如果P ′ P' P ′ 已知的話,以上表達式包含2 ( 2 N − L − 1 ) 2(2N-L-1) 2 ( 2 N − L − 1 ) 個方程(向前向後濾波等式的個數)和N − 1 N-1 N − 1 個未知數(文獻中寫成2 N − 1 2N-1 2 N − 1 ,不知道是寫錯了,還是包括了所有道),可以用最小平方方法求解(等價於一個從已知到未知的濾波器):
( A + A ) − 1 A + B (A^+A)^{-1}A^+B ( A + A ) − 1 A + B
其中A + A^+ A + 爲A A A 的複共軛轉置。
雖然實際上P ′ P' P ′ 未知,但是可以用P P P 來推導。注意輸出(包括已知點)和輸入剖面的相移關係爲z j ′ ( f ) = z j ( f / 2 ) z'_j(f)=z_j(f/2) z j ′ ( f ) = z j ( f / 2 ) (注:z j ′ ( f ) = e x p ( 2 π i f p j / 2 ) = z j ( f / 2 ) z'_j(f)=exp(2\pi i f p_j/2)=z_j(f/2) z j ′ ( f ) = e x p ( 2 π i f p j / 2 ) = z j ( f / 2 ) ,插值後相鄰道之間的相移爲原來的一半)。
由P P P 與z z z 的關係可以得到:
P j ′ ( f ) = P j ( f / 2 ) P'_j(f)=P_j(f/2) P j ′ ( f ) = P j ( f / 2 )
可以看到,只利用了無假頻的低頻部分。
以上推導由一些細節沒有給出,待續。
附錄:自迴歸的另外一種推導
Spitz用另外一種方法進行了Canales文章的推導。
附推導過程
對於地震數據x T ( f ) = [ x 1 ( f ) , . . . , x N ( f ) ] x^T(f)=[x_1(f),...,x_N(f)] x T ( f ) = [ x 1 ( f ) , . . . , x N ( f ) ] ,假設x ( f ) = g ( f ) + n ( f ) x(f)=g(f)+n(f) x ( f ) = g ( f ) + n ( f ) 。定義z變換S j T ( f ) = [ 1 , z j ( f ) , . . . , z j N − 1 ( f ) ] S_j^T(f)=[1,z_j(f),...,z_j^{N-1}(f)] S j T ( f ) = [ 1 , z j ( f ) , . . . , z j N − 1 ( f ) ] ,其中,z j ( f ) = e x p ( 2 π i f p i ) z_j(f)=exp(2\pi ifp_i) z j ( f ) = e x p ( 2 π i f p i ) ,則:
g ( f ) = ∑ j = 1 L a j ( f ) S j ( f ) g(f)=\sum_{j=1}^La_j(f)S_j(f) g ( f ) = j = 1 ∑ L a j ( f ) S j ( f )
其中a j ( f ) a_j(f) a j ( f ) 爲第j j j 個同向軸對應的子波的傅里葉變換。分開寫爲:
g 1 = ∑ j = 1 L a j ⋅ 1 g 2 = ∑ j = 1 L a j ⋅ z j ⋯ g N = ∑ j = 1 L a j ⋅ z j N − 1 \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} g 1 g 2 g N = = ⋯ = j = 1 ∑ L a j ⋅ 1 j = 1 ∑ L a j ⋅ z j j = 1 ∑ L a j ⋅ z j N − 1
寫成矩陣的形式爲:
(3) [ g 1 g 2 ⋮ g n ] = [ 1 1 ⋯ 1 z 1 z 2 ⋯ z L ⋮ z 1 N − 1 z 2 N − 1 ⋯ z L N − 1 ] × [ a 1 a 2 ⋮ a n ]
\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}
⎣ ⎢ ⎢ ⎢ ⎡ g 1 g 2 ⋮ g n ⎦ ⎥ ⎥ ⎥ ⎤ = ⎣ ⎢ ⎢ ⎢ ⎡ 1 z 1 ⋮ z 1 N − 1 1 z 2 z 2 N − 1 ⋯ ⋯ ⋯ 1 z L z L N − 1 ⎦ ⎥ ⎥ ⎥ ⎤ × ⎣ ⎢ ⎢ ⎢ ⎡ a 1 a 2 ⋮ a n ⎦ ⎥ ⎥ ⎥ ⎤ ( 3 )
令其中的矩陣爲S S S ,即S = [ S 1 , ⋯  , S L ] S=[S_1, \cdots, S_L] S = [ S 1 , ⋯ , S L ] 。將(3)記爲矩陣形式:
x = S a + n x=Sa+n x = S a + n
形爲S S S 的矩陣稱爲範德蒙矩陣,S j S_j S j 之間是線性無關的,則S S S 的秩爲L L L (N > = L N>=L N > = L )。S S S 的任意一行都可以表示爲其它L L L 行的線性組合。例如,第L + 1 L+1 L + 1 行可以表示爲前L L L 行的線性組合。寫成如下形式:
(4) ( z 1 L , ⋯  , z L L ) = ( P L , ⋯  , P 1 ) × [ 1 1 ⋯ 1 z 1 z 2 ⋯ z L ⋮ z 1 L − 1 z 2 L − 1 ⋯ z L L − 1 ]
(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}
( z 1 L , ⋯ , z L L ) = ( P L , ⋯ , P 1 ) × ⎣ ⎢ ⎢ ⎢ ⎡ 1 z 1 ⋮ z 1 L − 1 1 z 2 z 2 L − 1 ⋯ ⋯ ⋯ 1 z L z L L − 1 ⎦ ⎥ ⎥ ⎥ ⎤ ( 4 )
將上式右側移到左側,整理成關於z j z_j z j 的方程,發現對任意z j z_j z j 形式都一樣,爲:
Z L = z L − P 1 z L − 1 − ⋯ − P L = 0 Z_L=z^L-P_1z^{L-1}-\cdots-P_L=0 Z L = z L − P 1 z L − 1 − ⋯ − P L = 0
又因爲z j z_j z j 各不相同,上述方程有L L L 個解(零點),所以z j z_j z j 爲上述方程的K K K 個零點,即可以寫成如下形式:
Z L = ( z − z 1 ) ( z − z 2 ) ⋯ ( z − z L ) Z_L=(z-z_1)(z-z_2)\cdots(z-z_L) Z L = ( z − z 1 ) ( z − z 2 ) ⋯ ( z − z L )
對比上述兩式可以得到
P 1 = z 1 + ⋯ + z L P 2 = − ( z 1 z 2 + ⋯ + z L − 1 z L ) ⋯ P L = ( − 1 ) L + 1 z 1 z 2 ⋯ z L \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} P 1 P 2 P L = = ⋯ = z 1 + ⋯ + z L − ( z 1 z 2 + ⋯ + z L − 1 z L ) ( − 1 ) L + 1 z 1 z 2 ⋯ z L
上式即爲我們之前沒有推出來的通解。
代碼解釋:
核心代碼:
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.';