f-x反褶积(链接)
Canales, 1984, Random noise reduction, 54.th. Ann. Internat. Mtg., Soc. Expl. Geophys., Expanded Abstracts, pp. 525-527
f − x f-x f−x 反卷积是一种地震数据去噪方法,其基本假设是具有线性同向轴的地震数据在 f − x f-x f−x域中的每个频率切片都可以进行自回归表示。 f − x f-x f−x反卷积方法是很多算法的基础,因此理论推导写的比较详细。之所以称为反卷积,可以理解为求卷积系数,也可以理解为求降噪数据。(一般反卷积是指求数据,而不是系数)。
含有线性同向轴的二维地震数据在 t − x t-x t−x域可以标示成如下形式:
u ( t , x ) = ∑ i = 1 n v ( t i + t − p i x ) u(t,x)=\sum_{i=1}^nv(t_i+t-p_ix) u(t,x)=i=1∑nv(ti+t−pix)
其中 n n n为同向轴个数, t i t_i ti为初至, p i p_i pi为斜率, v v v为地震子波。在两侧分别对时间进行傅里叶变换,根据傅里叶变换的性质:
F ( f ( x − a ) ) = e − i a ω F ( f ( x ) ) F(f(x-a))=e^{-ia\omega}F(f(x)) F(f(x−a))=e−iaωF(f(x))
得到(注意,上标 i i i表示虚数单位,下标 i i i表示索引):
u ^ ( ω , x ) = ∑ i = 1 n v ^ ( ω ) e i ( t i − p i x ) ω \hat u(\omega,x)=\sum_{i=1}^n\hat v(\omega)e^{i(t_i-p_ix)\omega} u^(ω,x)=i=1∑nv^(ω)ei(ti−pix)ω
对于简单的情况,同向轴只有一条,并且经过原点,上式可以简化为:
u ^ ( ω , x ) = v ^ ( ω ) e − i p x ω \hat u(\omega,x)=\hat v(\omega)e^{-ipx\omega} u^(ω,x)=v^(ω)e−ipxω
在 x x x方向上进行离散化, x = n Δ x x=n\Delta x x=nΔx,得到:
u ^ ( ω , i Δ x ) = v ^ ( ω ) e − i p n Δ x ω \hat u(\omega,i\Delta x)=\hat v(\omega)e^{-ipn\Delta x \omega} u^(ω,iΔx)=v^(ω)e−ipnΔxω
令 U i = u ^ ( ω , i Δ x ) U_i=\hat u(\omega,i\Delta x) Ui=u^(ω,iΔx), K = e − i p Δ x ω K=e^{-ip\Delta x\omega} K=e−ipΔxω则:
U i = U i − 1 K U_i=U_{i-1}K Ui=Ui−1K
则频率切片的自回归形式为:
U i − K U i − 1 = 0 U_i-KU_{i-1}=0 Ui−KUi−1=0
将所有关系式写到一起,形成一个线性方程组,然后通过最小二乘方法可以得到对所有 i i i最优的 K K K(注意 p p p最开始是未知的, K K K也是未知的,所以需要通过最小二乘来求)。得到 K K K之后,为了实现去噪,虽然自回归滤波器的长度为2,但我们可以利用更多的相邻到来实现叠加去噪,即:
U i = 1 m ∑ j = i − m j = i − 1 K j U j U_i=\frac 1 m \sum_{j=i-m}^{j=i-1}K^jU_{j} Ui=m1j=i−m∑j=i−1KjUj
事实上,由于数据中含有噪声, U i = U i − 1 K U_i=U_{i-1}K Ui=Ui−1K并不严格成立,此时可以利用更多的相邻道实现更长(长度为 m m m)的自回归滤波器:
U i = ∑ j = i − m j = i − 1 K j U j U_i=\sum_{j=i-m}^{j=i-1}K_jU_{j} Ui=j=i−m∑j=i−1KjUj
同理,可以根据最小二乘法求取 K j K_j Kj,得到 K j K_j Kj之后再利用相同的公式进行自回归去噪,即 f − x f-x f−x反卷积的一般形式。
此部分推导相对复杂一些,之前一直没整明白,这次写文档算是整明白了。假设数据中含有多个线性同向轴(并且都通过原点 t i = 0 t_i=0 ti=0),则频率域的关系式为:
u ^ ( ω , k Δ x ) = v ^ ( ω ) ∑ j = 1 n e − i p j k Δ x ω \hat u(\omega,k\Delta x)=\hat v(\omega)\sum_{j=1}^ne^{-ip_jk\Delta x \omega} u^(ω,kΔx)=v^(ω)j=1∑ne−ipjkΔxω
令 U k = u ^ ( ω , k Δ x ) U_k=\hat u(\omega,k\Delta x) Uk=u^(ω,kΔx), K j = e − i p j Δ x ω K_j=e^{-ip_j\Delta x\omega} Kj=e−ipjΔxω, V = v ^ ( ω ) V=\hat v(\omega) V=v^(ω)则:
U k = V ( ∑ j = 1 n K j k ) U_k=V(\sum_{j=1}^n K_j^k) Uk=V(j=1∑nKjk)
需要证明在 p j p_j pj任意取值的时候, U k , U k + 1 , . . . , U k + n − 1 U_k,U_{k+1},...,U_{k+n-1} Uk,Uk+1,...,Uk+n−1线性相关。首先假设它们线性相关,即下面方程存在解:
∑ j = k k + n − 1 a j − k U j = 0 \sum_{j=k}^{k+n-1}a_{j-k}U_j=0 j=k∑k+n−1aj−kUj=0
将 U j U_j Uj带入可以得到:
∑ j = k k + n − 1 a j − k ∑ i = 1 n K i j = 0 \sum_{j=k}^{k+n-1}a_{j-k} \sum_{i=1}^n K_i^j=0 j=k∑k+n−1aj−ki=1∑nKij=0
由于对于任意 p j p_j pj成立,即对任意 K j K_j Kj成立,因此我们按 K K K对上式进行整理。由于后面的求和下标与 j j j无关,所以可以把 a j a_j aj放进去,得到:
∑ j = k k + n − 1 ∑ i = 1 n a j − k K i j = 0 \sum_{j=k}^{k+n-1}\sum_{i=1}^n a_{j-k} K_i^j=0 j=k∑k+n−1i=1∑naj−kKij=0
两组求和下标之间也没有关系,因此求和可以交换顺序:
∑ i = 1 n ∑ j = k k + n − 1 a j − k K i j = 0 \sum_{i=1}^n \sum_{j=k}^{k+n-1}\ a_{j-k} K_i^j=0 i=1∑nj=k∑k+n−1 aj−kKij=0
由于上式对于任意 K i K_i Ki成立,所以令(对于所有 i i i):
∑ j = k k + n − 1 a j − k K i j = 0 \sum_{j=k}^{k+n-1}\ a_{j-k} K_i^j=0 j=k∑k+n−1 aj−kKij=0
两边再除以 K i k K_i^k Kik得到:
∑ j = 0 n − 1 a j K i j = 0 \sum_{j=0}^{n-1}\ a_j K_i^j=0 j=0∑n−1 ajKij=0
可以得到一个具有 n n n个未知数的方程,对于所有的 i i i,共有 n n n个方程,因此可以解出来 a j a_j aj。
此时可知 U k U_k Uk是线性自回归的,并且回归系数与 p i p_i pi有关。解出来回归系数之后,可以通过某一道与相邻道之间的线性回归关系来进行去噪。
同 n = 1 n=1 n=1的情况类似,在含有噪声的情况下,我们通常会选择更长的自回归滤波器,以达到更好的去噪效果。
n = 2 n=2 n=2时的方程组为:
a 0 + a 1 K 1 + K 1 2 = 0 a 0 + a 1 K 2 + K 2 2 = 0 \begin{aligned} a_0+a_1K_1+K_1^2=&0\\ a_0+a_1K_2+K_2^2=&0 \end{aligned} a0+a1K1+K12=a0+a1K2+K22=00
可以得到:
a 0 = K 1 K 2 a 1 = − K 1 − K 2 \begin{aligned} a_0&=K_1K_2 \\ a_1&=-K_1-K_2 \end{aligned} a0a1=K1K2=−K1−K2
对于加入初至的情况,直接令 K j = e i ( t j − p j Δ x ) ω K_j=e^{i(t_j-p_j\Delta x)\omega} Kj=ei(tj−pjΔx)ω即可。
一般情况也存在通解,只不过表达式比较复杂,并且并没有在算法中使用,所以就不推导了。
基本算法是:
如果数据非线性很强,需要分窗口处理。
代码源自SeismicLab工具包,fx_decon程序,只摘录其核心部分。
aux_in = DATA_FX(k,:)'; %提取一个频率切片
[aux_out_f,aux_out_b] = ar_modeling(aux_in,lf,mu); %自回归函数,lf为回归滤波器长度,mu应该是最二乘添加的约束项权重。
ar_modeling的核心代码为:
% backward ar-modeling 此部分为向后ar回归,同时可以再次进行向前ar回归,将两次结果作平均作为最后结果。
y = x(1:nx-lf,1); %输出
C = x(2:nx-lf+1,1);
R = x(nx-lf+1:nx,1);
M = hankel(C,R); %输入,M*ab=y结构如下
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x_2 x_3 ... x_lf+1 a_1 x_1
x_3 x_4 ... x_lf+2 * a_2 = x_2
...
x_nx-lf+1 x_nx-lf+2 ... x_nx a_lf x_nx-lf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
B = M'*M; beta = B(1,1)*mu/100; %两边同时乘以M',M'*M*ab=M'*y
ab = (B + beta*eye(lf))\M'*y; %ab=(M'M+mu*I)^-1*M'y 加入权重
yb = M*ab; %重新做滤波得到去噪后数据
在分析多线性同向轴的自回归模型是所用理论虽不困难,但也需要一些技巧,通过分别将含有 K j i K_j^i Kji(对任意 i i i)的项组合然后分别另其为零即可推导出自回归性质。这篇短文给出了所有的推导细节,作为之后的理论基础,在Spitz f − x f-x f−x插值(据作者所知,去噪称为 f − x f-x f−x反褶(卷)积,插值称为 f − x f-x f−x预测滤波,因为包含一步预测)、MSSA、降秩方法中都用到类似的推导。