python工具读取和绘制dzt格式的地球物理测量系统(gssi)雷达数据
readgssi的Python项目详细描述
readgssi
版权所有2017-2019
readgssi
是一个工具,用作开放源代码阅读器和预处理模块,用于使用地球物理测量系统(gssi)探地雷达(gpr)设备收集地下数据。它能够读取具有相同预扩展名的dzt和dzg文件,并打印这些文件中包含的数据。readgssi
目前还能够将大多数dzt文件转换为csv,并将能够转换为其他输出格式,包括hdf5(请参见future)。Matlab代码由达特茅斯学院地球科学系的Gabe Lewis捐赠。经缅因大学地球与气候科学学院伊恩·奈斯比特(Ian Nesbitt)许可编写的巨蟒改编本。
文件读取参数基于gssi的dzt文件描述,类似于SIR-3000手册的第55-57页。不幸的是,文件结构随时都可能发生变化,尽管我已经能够使用来自多个系统的文件进行测试,但我还没有遇到文件头的每次迭代。如果遇到问题,请创建一个github问题
问题、功能请求和错误:请打开github问题。请提供错误输出,描述您正在尝试执行的操作,并附上引起您麻烦的dzt/dzg文件。
要求
强烈推荐d通过anaconda安装
通过pip安装:
安装
一旦您运行了anaconda,安装需求就非常容易了。
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi
这将允许您运行下面的命令。
从源安装:
如果您选择安装特定的提交,而不是此软件的最新工作版本,则可以下载此软件包,解压缩到主文件夹,打开命令行,然后按以下方式安装:
pip install ~/readgssi
用法
显示帮助文本:
$ readgssi -h usage: readgssi -i input.DZT [OPTIONS] required flags: OPTION | ARGUMENT | FUNCTIONALITY -i, --input | file: /dir/f.DZT | input DZT file optional flags: OPTION | ARGUMENT | FUNCTIONALITY -o, --output | file: /dir/f.ext | output file. if not set, will be named similar to input -f, --format | string, eg. "csv"| output format (csv is the only working format currently) -p, --plot | +integer or "auto"| plot size. will be x inches high or "auto". default: 10. see also -D to set DPI -D, --dpi | positive integer |set the plot DPI for figure making. defaults to 150 -T, --titleoff || turn the plot title off (useful for figure making) -x, --xscale | string, eg. "dist"| x units. will attempt to convert the x-axis to distance, time, or trace units based on header values -z, --zscale | string, eg. "time"| z units. attempt to convert the x-axis to depth, time, or sample units based on header values -e, --zoom | list of +int [LRUD]|set a zoom to automatically jump to. list order is [left,right,up,down] and units are the same as axis -n, --noshow || suppress matplotlib popup window and simply save a figure (useful for multi-file processing) -c, --colormap | string, eg. seismic | specify the colormap (https://matplotlib.org/users/colormaps.html#grayscale-conversion) -g, --gain | positive float | gain constant (higher=greater contrast, default: 1) -r, --bgr | +integer or zero | horizontal background removal (useful to remove ringing). zero=full width;positive=window size (after stacking) -R, --reverse || reverse (flip array horizontally) -w, --dewow || trinomial dewow algorithm -t, --bandpass | +int-+int (MHz)| triangular FIR bandpass filter applied vertically (positive integer range in megahertz; ex. 70-130) -b, --colorbar || add a colorbar to the radar figure -a, --antfreq | positive integer |set antenna frequency. overrides header value -s, --stack | +integer or "auto"|set trace stacking value or "auto" to autostack to ~2.5:1 x:y axis ratio -N, --normalize || distance normalize; reads .DZG NMEA data file if it exists; otherwise tries to read CSV with lat, lon, and time fields -d, --spm | positive float | specify the samples per meter (spm). overrides header value -m, --histogram || produce a histogram of data values -E, --epsr | float > 1.0 | user-defined epsilon sub r (sometimes referred to as "dielectric")if set, ignores value in DZT header -Z, --zero | +int or list of int | timezero: skip samples before direct wave. samples are removed from the top of the trace. use list for multi-channel naming scheme for exports: CHARACTERS | MEANING Ch0 | Profile from channel 0(can range from 0 - 3) Dn | Distance normalization Tz233 | Time zero at 233 samples S8 | Stacked 8times Rv | Profile read in reverse (flipped horizontally) Bgr75 | Background removal filter with window size of 75 Dw | Dewow filter Bp70-130 | triangular FIR filter applied from 70 to 130 MHz G30 | 30x contrast gain Z10.20.7.5 | zoom from 10-20 axis units on the x-axis and 5-7 on the z-axis
从Unix命令行:
readgssi -i DZT__001.DZT
简单地在上面的命令中指定一个输入dzt文件(-i file
)将显示关于该文件的大量数据,包括:
- GSSI控制单元的名称
- 天线型号
- 天线频率
- 每个记录道的样本数
- 每个样本的位数
- 每秒记录道数
- 测量期间输入的L1电介质
- 采样深度
- 给定电介质下的波速
- 记录道数
- 秒数
基本功能
CSV输出
readgssi -i DZT__001.DZT -o test.csv -f CSV
把雷达数据数组转换成csv格式,如果你喜欢的话。可以用这个导出到Matlab。每个频道将写入一个csv。脚本将自动将输出重命名为"test_100MHz.csv"。CSV中不包含标题信息。
readgssi -i DZT__001.DZT -s 8 -w -r 0 -o test.csv -f CSV
在导出到CSV之前,应用8x堆叠、露水和背景移除过滤器。
numpy对象输出
readgssi -i DZT__001.DZT -o test.npy -f numpy
此命令将以numpy二进制格式保存数组。但是,不会保存标题信息。
gprpy
-兼容输出
readgssi -i DZT__001.DZT -o test -f gprpy
此命令以numpy二进制格式保存数组,并将头保存为json文件。gprpy
将很快支持导入此类文件。
绘图
示例1a:无增益
readgssi -i DZT__001.DZT -o 1a.png -p 5 -s auto
上面的命令将导致readgssi
保存并显示一个名为"test_uu001c0tz233s6g1.png"的图,该图的y尺寸为5英寸,速度为150 dpi(-p 5
),自动跟踪算法将把x轴叠加到比原始数据数组短一些倍的位置,以获得最佳效果在监视器上观看,大约2.5*y(-s auto
)。绘图将以灰色
配色方案呈现。
示例1b:增益
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi0
这将导致readgssi
从同一文件创建绘图,但matplotlib会将绘图保存为"1b.png"(-o 1b.png
)。脚本将绘制y轴大小(-p 5
)并自动堆叠x轴to(-s自动
)。脚本将以50的增益值绘制数据(-g 50
),这将使绘制对比度增加50倍。接下来将运行后台删除(-r 0
)过滤器。
示例1c:右增益设置可能略有不同,具体取决于您的颜色映射
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi1
这里,应用水平背景去除,但增益被降低(-g 20
)。该脚本使用matplotlib的"seismic"颜色映射(-c seismic
),该颜色映射是专门为此类瀑布阵列绘制而设计的。即使没有增益,你也能很容易地看到非常轻微的信号扰动。然而,考虑到它使用红色,对于人类最常见的两种色盲中的任何一种来说,它都不是非常友好的色盲,这就是为什么它没有被用作默认的颜色映射。
示例2a:无背景移除
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi2
有时,由于相对于数据平均值的偏差,文件看起来会被"冲掉"。这很容易纠正。在这里,readgssi
将创建一个大小为5、堆栈为5x的图(-p 5-s5
)。matplotlib将使用默认的"gray"colormap并保存图形的png,但是脚本将抑制matplotlib窗口(使用-n
标志,这对于一次处理整个目录中的dzts非常有用)。最后,-m
标志将为每个数据通道绘制直方图。注意应用过滤器时直方图的变化。
示例2b:应用水平平均bgr算法
消除倾斜(或任何水平均匀噪声)的标志是-r
,也称为背景去除或bgr。-r
有两种模式,一种是由-r 0
设置,另一种是当-r
标志后的选项大于零时设置。当这个bgr选项为零时,程序只需从数组中减去每个配置文件行的平均值。当它大于0时,readgssi
将实现一个移动窗口平均值,其大小在堆栈后的记录道中设置(请参见示例2c-moving-window-horizontal-mean rel="nofollow">示例2c)。
下面的命令执行与示例2a相同的操作,不同的是-r 0
对配置文件应用全宽水平平均背景删除。注意示例2a和2b在振铃伪影和倾斜方面的差异。
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi3
示例2c:移动窗口水平平均值
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi4
与上述相同,但具有75道宽移动窗口平均值(-r 75
)。此宽度表示堆栈后跟踪。无论出于何种目的,这都与拉丹的"BoxCar"水平噪声去除方法相同,但速度要快得多。超出左边缘和右边缘的区域被视为零。注意,水柱中的噪声几乎被完全消除,但实际数据是用半个窗口大小的横向光束扩展的,这是这种方法的副作用。请注意,直方图(-m
)在平均值周围具有相当均匀的分布,这通常表示图像应该相当可读。
示例3a:(无)距离归一化
readgssi
的默认行为是以测量时间单位(秒)绘制X轴。这可以使用-x
标志进行更改。要以距离单位显示,您必须使用dzg格式的gps信息,或者使用-d
标志指定每米的雷达道数。-d 24-x米
将标题中每米记录道的值更改为24.0,并显示沿x轴以米为单位的距离剖面。
带有GPS信息的文件处理方式略有不同。首先,readgssi
将读取一个dzg文件,以创建一个与dzt中的标记相关联的距离信息数组。(注意:如果您的项目记录时没有DZG文件,但您有GPX格式的每行GPS标记信息,请在阅读DZG后查看GPX2DZG,以获取为每条测量线创建DZG文件的方法,该程序将根据GPS点之间的地面速度扩展或收缩GPR阵列。然后,它将修改标题中每米记录道的值,并在X轴上显示带有距离的配置文件。
这里处理和显示的文件没有距离规范化:
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi5
示例3b:使用dzg文件的距离规范化
要使用DZG GPS信息对外形进行距离标准化并以米为单位显示行程,请使用-n
和-x meters
标志。readgssi
将以块的形式规范化文件,以减少内存使用。下面是应用了距离规格化的同一文件:
conda config --add channels conda-forge conda create -n readgssi python==3.7 pandas h5py pytz obspy conda activate readgssi pip install readgssi6
高级用法
unix用户有一个明显的优势,那就是可以用一个简单的命令轻松地处理整个充满dzt的文件夹。希望这样做的用户应该阅读关于如何在bash中构造for
循环的或简单地遵循并修改下面的示例。
处理文件夹中的所有文件
此命令使用bash中的 如果您对 最后,使用换行符 通过进一步修改 此命令将只处理集合( 伊恩M.奈斯比特,弗朗索瓦·泽维尔·西蒙,托马斯·保林,2018年。read gssi-一个开源工具,用于读取和绘制gssi探地雷达数据。doi:10.5281/zenodo.1439119ls
函数,该函数列出与特定模式匹配的所有文件。在这种情况下,我们需要模式作为"任何DZT文件",它最终只是ls*.dzt
(符号*
是通配符,意味着它匹配任何字符集,因此在本例中,它将同时匹配文件
测试.dzt
,但不匹配测试01.dzt
,因为.dzt
区分大小写。)
conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
7
for
循环稍有了解,则该命令的结构很容易理解。此命令循环每个扩展名为.dzt
(ls*.dzt
其中*
表示通配符)的文件,并将文件名分配给每个循环上的f
变量。然后,在分号之后,bash为循环的每次传递运行readgssi。在这种情况下,参数为:conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
8
;
和结束标记关闭命令,结束循环。
处理特定的文件集
ls
命令返回的文件集,可以使命令更加具体。例如:conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
9
file_u010.dzt
,file_u011.dzt
,file_u011.dzt
,..
,file_u025.dzt
之间的16个数字序列的文件。bash
也为您处理零填充。很酷。贡献者
引文建议:
已知错误:
未来
标记名称、lon、lat、elev、时间等字段的GPS转录
vista
实现位置感知阵列的三维可视化推荐PyPI第三方库