你已经派生过 gpr-sidl-inv
镜像自地址
https://gitee.com/sduem/gpr-sidl-inv.git
已同步 2025-08-02 18:36:51 +08:00
69 行
2.4 KiB
Python
69 行
2.4 KiB
Python
import numpy as np
|
|
import pandas as pd
|
|
import matplotlib.pyplot as plt
|
|
import scipy.ndimage
|
|
from readgssi.dzt import readdzt
|
|
from scipy.signal import tukey
|
|
from config import Field_data_test_Config as cfg
|
|
from config import Path_Config as pcfg
|
|
from utils.plot import plot_BSCAN_data
|
|
|
|
def dewow_windowed(in_array, window_size=40):
|
|
"""
|
|
Apply a sliding window mean subtraction (dewowing) to remove low-frequency noise.
|
|
"""
|
|
if len(in_array) < window_size:
|
|
return in_array - np.mean(in_array)
|
|
|
|
cumsum = np.cumsum(np.insert(in_array, 0, 0))
|
|
mean_vals = (cumsum[window_size:] - cumsum[:-window_size]) / window_size
|
|
mean_vals = np.concatenate((
|
|
np.full(window_size // 2, mean_vals[0]),
|
|
mean_vals,
|
|
np.full(len(in_array) - len(mean_vals) - window_size // 2, mean_vals[-1])
|
|
))
|
|
|
|
return in_array - mean_vals
|
|
|
|
def remove_bad_channels(data, remove_start, remove_end):
|
|
"""
|
|
Remove unwanted channels (columns) from a 2D array.
|
|
"""
|
|
remove_start = max(0, remove_start)
|
|
remove_end = min(data.shape[1], remove_end)
|
|
return np.delete(data, np.s_[remove_start:remove_end], axis=1)
|
|
|
|
def taper_field(in_array):
|
|
"""
|
|
Apply a tapering window to smooth signal edges and reduce artifacts.
|
|
"""
|
|
length = len(in_array)
|
|
window = np.ones(length)
|
|
taper_length = in_array.shape[0] // 2
|
|
taper = tukey(2 * taper_length, 0.7)[:taper_length]
|
|
window[:taper_length] = taper
|
|
window = window ** 3
|
|
return in_array * window
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
TEST_FILE = pcfg.CONVERTED_TEST_FILE
|
|
bad_trace=cfg.bad_trace
|
|
detection_distance=cfg.detection_distance
|
|
time_window_length=cfg.time_window_length
|
|
|
|
data = np.loadtxt(TEST_FILE, delimiter=",", skiprows=0)[1:, :] # Remove first row
|
|
data = remove_bad_channels(data, bad_trace[0], bad_trace[1])
|
|
data = np.apply_along_axis(dewow_windowed, 0, data)
|
|
data = scipy.ndimage.zoom(data, (time_window_length/data.shape[0],detection_distance/data.shape[1]), order=1)
|
|
data = np.apply_along_axis(taper_field, 0, data)
|
|
data = np.apply_along_axis(taper_field, 0, data)
|
|
data = data / np.max(np.abs(data))
|
|
|
|
# Save processed data
|
|
plot_BSCAN_data(data, pcfg.PROCESSED_TEST_FILE_img, line_length=100, time_length=200, ratio=0.5)
|
|
pd.DataFrame(data).to_csv(pcfg.PROCESSED_TEST_FILE, index=False)
|
|
|