grdfft

贡献者

周茂

最近更新日期

2022-06-29


官方文档

grdfft

简介

在谱域中对网格进行数学运算

grdfft 将会对输入网格实施 2-D FFT 并在频域中进行一种或多种数学运算。在将新的数值写入到输出文件前,可以使用选项对数据进行缩放。网格的水平维度单位假定为米。地理坐标网格可以使用 -fflags 选项来将单位从度缩放为米。如果输入网格的单位为千米,可以使用 grdedit 转换为米,或使用 grdmath 缩放结果。

备注

如果输入文件为netCDF 格式,另一种更加方便的方法是使用 +s[scale] 对网格文件进行缩放。

语法

gmt grdfft ingrid [ ingrid2 ] [ -Goutfile|table ] [ -Aazimuth ] [ -Czlevel ] [ -D[scale|g] ] [ -E[r|x|y][+w[k]][+n] ] [ -F[r|x|y]params ] [ -I[scale|g] ] [ -Nparams ] [ -Q] [ -Sscale ] [ -V[level] ] [ -fflags ] [ --PAR=value ]

必选选项

ingrid

输入网格。对于交叉谱计算,必须同时给定第二个网格文件 ingrid2

-Goutfile|table

输出网格文件名或一维谱的表数据文件名(见 -E )。该选项对 -E 选项是可选的,因为其默认输出到标准输出。但如果输出网格,则该选项是必须的。

可选选项

-Aazimuth

计算方位角为 azimuth 方向的导数。方位角单位为度,从北向顺时针度量

-Czlevel

将数据向上(zlevel > 0)或向下(zlevel < 0)延拓 zlevel

-D[scale|g]

对场求垂直梯度,即 d(field)/dz,等价于在频域中乘以 kr(kr 为径向波数)。若指定 scale 参数,则用 (kr * scale )代替 kr。可选的 g 参数表明输入数据为大地水准面,单位为米,输出结果为重力异常,单位为毫伽 [默认没有 scale]。

-E[r|x|y][+w[k]][+n]

计算径向[r]谱。将 x 或者 y 直接跟在 -E 后表示计算 x 或者 y 方向的谱。该选项不产生网格文件。如果输入网格文件数为 1,则 f(即频率或波数),power[f],以及 power[f] 的 1 倍标准差将通过 -G 选项写到输出文件中 [默认为标准输出]。如果输入网格数为 2,f 和其他 8 个量将被写入到文件中,分别为 Xpower[f],Ypower[f],coherent power[f],noise power[f],phase[f],admittance[f],gain[f],coherency[f]。每个量后面还包括其 1 倍标准差估计值,因此最终的输出将有 17 列。+w 参数将输出波长而不是频率。如果输入格网为地理坐标, k 参数将波长单位从米 [默认] 缩放到千米。+n 参数用来对谱进行归一化。

-F[r|x|y]params

对输入网格滤波。xy 表示分别只在 xy 方向滤波,默认为 r ,即网格具有各向同性,在 xy 方向同时滤波。滤波方法包括:

Cosin-taper 滤波:

指定 4 个波长 lc/lp/hp/hc (单位设置见 -fflags ) 设计一个带通滤波:大于 lc 以及小于 hc 波长的部分将被截断;大于 lp 以及小于 hp 波长的部分则会通过,波长位于中间的部分则被 cos tapering。例如: -F1000000/250000/50000/10000 -fflags 将会滤掉波长大于 1000 km 以及小于 10 km 的部分;大于 50 km 以及小于 250 km 波长的部分则会被留下。如果想设计为高通或者低通滤波,则分别将 hp/hc 或者 lc/lp 中的值设置为 (-)。例如:-Fx-/-/50/10 将会对 x 方向进行低通滤波,其中大于 50 的部分将保持不变,小于 10 的部分被滤除,10~50 中间的部分则被 taper。-Fy1000/250/-/- 将会对 y 方向进行高通滤波,小于 250 的部分将被保留,大于 1000 的部分被滤除。

高斯滤波:

包含两个参数 lo/hi ,波长的单位见 -fflags 。在给定的波长处,高斯滤波的权重为 0.5。设计高通或者低通滤波即将对应的参数设置为 (-)。例如:-F-/30 将对数据进行低通滤波,在 30 处权重设置为 0.5。 -F400/- 为高通滤波。

巴特沃斯滤波:

包含三个参数 lo/hi/order ,波长单位见 -fflagsorder 为滤波的阶数,必须为整数。在给定的截止频率处,权重设置为 0.707 (the power spectrum will therefore be reduced by 0.5)。设计高通或者低通滤波即将对应的参数设置为 (-)。例如:-F-/30/2 将会使用 2 阶巴特沃斯低通滤波,在波长为 30 处设置为一般权重,-F400/-/2 为 2阶巴特沃斯高通滤波。

-I[scale|g]

对场进行积分,即(field * dz)。该操作相当于在频域中除以 kr (kr 为径向波数)。追加 scale 时则会除以(kr * scale)。g 选项表明输入数据为以 mGal 为单位的重力异常,并且输出结果为以米为单位的大地水准面。

-N[a|f|m|r|s|nx/ny][+a|d|h|l][+e|n|m][+twidth][+v][+w[suffix]][+z[p]]

选择或查询适合 FFT 的网格尺寸并设置可选参数。FFT 维度选取:

-Na 以得到最准确的结果来选择 FFT 的维度

-Nf 将 FFT 维度设置为数据实际长度

-Nm 以最小的运行内存来选择 FFT 的维度

-Nr 以最快的计算速度来选择 FFT 的维度

-Ns 列出所有可选的维度,然后退出

-Nnx/ny 将会设置 FFT 的维度为 nxny (维度必须大于等于网格范围)。默认情况下,-N 同样会选择大于网格范围的维度,在此情况下会对 FFT 的速度和精度进行优化。如果 FFT 的维度大于网格的范围,对网格进行扩展并 taper(两端尖灭)到 0。

设置移去数据的趋势:

+d: 移去趋势,即去除符合程度最好的线性趋势 [默认]

+a: 移去均值

+h: 移去中值,即 0.5 * (max + min).

+l: 不做任何处理

为避免边缘效应,设置对数据边界的处理:

+e 在数据边界使用边界点对称来扩展网格 [默认]

+m 在数据边界使用镜像对称来扩展数据

+n 不使用任何数据扩展

+t 从数据的边界到 FFT 网格边界使用 taper 使数据趋近于 0 [100%]。使用 +twidth 可以修改扩展的范围。当设置了 +n 选项时,不进行数据扩展,且将 taper 用于数据内部,而不是扩展的范围。(译注:100% 的含义为在网格四周分别扩展数据范围的 50%,然后使用 taper 来填充新扩展的区域。Taper 或可译为两端尖灭,是一种加窗方法,且窗为平顶,这里默认使用的 cos 函数形状,即 Tukey 窗。将数据边界上的值逐渐减小到 0 ,以避免谱泄漏 )

+v 在处理中报告适合的维度

中间结果的设置,用来保存中间结果,以便用户可以使用中间结果自行进行某步骤:

+w[suffix] 设置去趋势/数据扩展/taper 的网格后缀,即最终生成 xxx_suffix.ext 的结果。

+z 可用来保存执行 FFT 后的复数结果,包括两个网格,文件名将为 xxx_real.ext 和 xxx_imag.ext。追加 p 可以设置为 polar 形式,即幅度和相位,文件名为 xxx_mag.ext 和 xxx_phase.ext 。

-Q

不进行波数操作。当只需输出二维谱时和 -N 选项同时使用,通常用于输出中间结果。

-Sscale|d

在空间域中将每个元素乘以 scale (频域操作后)[默认值为 1.0]。可选的 d 参数可以将垂线偏差从弧度转换为微弧。

-V[level] (more …)

设置 verbose 等级 [w]

-f[i|o]colinfo (more …)

指定输入或输出列的数据类型

-^-

显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -

-++

显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明

--PAR=value

临时修改GMT参数的值,可重复多次使用。参数列表见 配置参数

网格距离单位

如果网格在水平方向的单位不为米,则使用 +uunit 指定输入单位,并在计算中自动转换为米。如果网格为地理坐标,使用 -fflags 将单位转换为米。

注意事项

NetCDF 网格将被自动识别为地理网格。如果数据靠近极点,则应考虑使用 grdproject 将其投影后再进行本模块操作。

谱归一化

默认情况下,-E 返回的谱只是简单地加和,即对于 x 或 y 方向谱,将另一个方向上的谱相加。对于径向谱,则意味着在二维谱中,将所有方向的对应频率的值相加。这种加和做法对于白噪声过程来说,会得到一个与波数正相关的线性径向谱。通过 +n 选项则计算每个频率的平均结果,这样会保证白噪声过程最终仍能得到一个白化的径向谱(即在谱图中为一条平行于频率轴的直线)。

示例

备注

下面展示了本模块的一些示例。其中使用远程文件(文件名以 @ 开头)的示例可以直接复制并粘贴到终端运行。其他需要输入文件的示例仅用于展示模块用法,由于未提供输入文件,不能执行。

从远程 @white_noise.nc 文件中去均值,并计算归一化后的径向谱:

gmt grdfft @white_noise.nc -Er+n -N+a > spectrum.txt

将文件 mag_0.nc 中位于海平面的磁异常向上延拓到海拔 800 米的面:

gmt grdfft mag_0.nc -C800 -V -Gmag_800.nc

将以米为单位的大地水准面地理网格(geoid.nc)转换到自由空气重力异常,结果单位为毫伽:

gmt grdfft geoid.nc -Dg -V -Ggrav.nc

将重力异常(faa.nc)转换为 38 方位角方向上的垂线偏差,重力异常单位为毫伽,垂线偏差单位为微弧。首先要将重力积分计算大地水准面,然后计算方向梯度,最后缩放弧度到微弧:

gmt grdfft faa.nc -Ig -A38 -S1e6 -V -Gdefl_38.nc

重力异常的二阶导数和重力场的曲率有关,可以通过下面命令得到,结果单位为 mGal/m^2

gmt grdfft gravity.nc -D -D -V -Ggrav_2nd_derivative.nc

计算同样配准方式的海底地形和海洋重力场网格的交叉谱,并将结果以波长(单位:千米)的形式输出:

gmt grdfft bathymetry.nc gravity.grd -E+wk -fg -V > cross_spectra.txt

将 topo.nc 进行去均值,边界点镜像对称 padding 以及 tapering,进行 FFT 后,在 topo.nc 中保存计算的谱的实部和虚部:

gmt grdfft topo.nc -N+w+z -fg -V -Q

接下来可以使用 topo_taper.nc,topo_real.nc 以及 topo_imag.nc 绘图。

相关模块

grdeditgrdfiltergrdmathgrdprojectgravfft