简介

Spitz插值是最经典的插值方法,它利用了上一篇博客中提到的具有线性同相轴的地震数据可以在频率–空间域进行线性回归的理论。(回顾:线性回归滤波器的长度等于同相轴(不同斜率)的数目加一,实际应用中会采用更长的自回归滤波器,可以使算法更稳定。自回归的好处在于其只用到了地震数据到本身,而不需要知道斜率信息)

Spitz插值的思路是,首先利用低频无假频部分计算出自回归系数(回归),根据道加密后相邻道之间的相移为原来一半,可以推导出加密后数据的自回归系数,然后在利用自回归关系从已知数据推导出未知数据(预测)。回顾和预测都通过最小二乘实现,因此算法比较稳定。缺点是:1,只能用于线性同相轴;2,只能用于规则网格。

理论

以下符号与Spitz论文中一致。

包含坡面回归插值_机器学习个同相轴和坡面回归插值_算法_02道的地震数据在频率域可以表示成:

坡面回归插值_机器学习_03

其中坡面回归插值_数据_04表示第坡面回归插值_数据_05道数据,坡面回归插值_算法_06为第坡面回归插值_机器学习_07个同相轴对应的子波频谱(第一道数据),坡面回归插值_机器学习_08对应于第坡面回归插值_机器学习_07个同相轴相邻道之间的相移坡面回归插值_坡面回归插值_10(对应于斜率)。根据上一篇博客介绍的Canales方法,向前–向后单步预测滤波可以写成如下形式:
坡面回归插值_坡面回归插值_11
坡面回归插值_机器学习_12
其中坡面回归插值_算法_13为预测滤波器的系数。(向前–向后滤波的共轭关系可以从附录中得到)

Spitz方法在原来的地震道中两道中间插入新的地震道,因此插值后的地震数据满足:
坡面回归插值_机器学习_14
可以再一次写出向前–向后单步预测滤波形式:
坡面回归插值_坡面回归插值_15
坡面回归插值_算法_16

上述方程为关于坡面回归插值_人工智能_17的线性方程组,系数为坡面回归插值_算法_18将已知值和未知值分别放到一块,整理得到:
坡面回归插值_坡面回归插值_19

如果坡面回归插值_机器学习_20已知的话,以上表达式包含坡面回归插值_算法_21个方程(向前向后滤波等式的个数)和坡面回归插值_数据_22个未知数(文献中写成坡面回归插值_人工智能_23,不知道是写错了,还是包括了所有道),可以用最小平方方法求解(等价于一个从已知到未知的滤波器):

坡面回归插值_算法_24

其中坡面回归插值_算法_25坡面回归插值_坡面回归插值_26的复共轭转置。

虽然实际上坡面回归插值_机器学习_20未知,但是可以用坡面回归插值_人工智能_28来推导。注意输出(包括已知点)和输入剖面的相移关系为坡面回归插值_数据_29(注:坡面回归插值_人工智能_30,插值后相邻道之间的相移为原来的一半)。

坡面回归插值_人工智能_28坡面回归插值_数据_32的关系可以得到:

坡面回归插值_人工智能_33

可以看到,只利用了无假频的低频部分。

以上推导由一些细节没有给出,待续。

附录:自回归的另外一种推导

Spitz用另外一种方法进行了Canales文章的推导。
附推导过程
对于地震数据坡面回归插值_机器学习_34,假设坡面回归插值_数据_35。定义z变换坡面回归插值_人工智能_36,其中,坡面回归插值_算法_37,则:
坡面回归插值_机器学习_38
其中坡面回归插值_算法_06为第坡面回归插值_机器学习_07个同向轴对应的子波的傅里叶变换。分开写为:
坡面回归插值_坡面回归插值_41
写成矩阵的形式为:
坡面回归插值_机器学习_42
令其中的矩阵为坡面回归插值_机器学习_43,即坡面回归插值_坡面回归插值_44。将(3)记为矩阵形式:
坡面回归插值_人工智能_45
形为坡面回归插值_机器学习_43的矩阵称为范德蒙矩阵,坡面回归插值_机器学习_47之间是线性无关的,则坡面回归插值_机器学习_43的秩为坡面回归插值_机器学习坡面回归插值_人工智能_50)。坡面回归插值_机器学习_43的任意一行都可以表示为其它坡面回归插值_机器学习行的线性组合。例如,第坡面回归插值_算法_53行可以表示为前坡面回归插值_机器学习行的线性组合。写成如下形式:
坡面回归插值_数据_55
将上式右侧移到左侧,整理成关于坡面回归插值_算法_56的方程,发现对任意坡面回归插值_算法_56形式都一样,为:
坡面回归插值_数据_58
又因为坡面回归插值_算法_56各不相同,上述方程有坡面回归插值_机器学习个解(零点),所以坡面回归插值_算法_56为上述方程的坡面回归插值_机器学习_62个零点,即可以写成如下形式:
坡面回归插值_坡面回归插值_63
对比上述两式可以得到
坡面回归插值_人工智能_64
上式即为我们之前没有推出来的通解。

代码解释:

核心代码:

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.';