Source code for denspp.offline.data_process.common_referencing
import numpy as np
from scipy.signal import convolve2d
[docs]
def calculate_reference_car_1d(mea_signal: np.ndarray) -> np.ndarray:
"""Performing the CAR algorithm (Common Average Referencing) on 1D signals"""
if not len(mea_signal.shape) == 2:
raise NotImplementedError("The input numpy array has wrong size - Please check!")
else:
data_out = np.mean(mea_signal, 0)
return data_out
[docs]
def calculate_reference_car_2d(mea_signal: np.ndarray, mapp_used: np.ndarray, kernel_size: int) -> np.ndarray:
"""Performing the CAR algorithm (Common Average Referencing) on 2D signals
Args:
mea_signal: Input signal of transient analysis
mapp_used: Overview of active mapping activation function
kernel_size: Kernel size for convolution (must be odd-numbered)
Returns:
Numpy array with convolved signal for doing common average referencing"""
if not len(mea_signal.shape) == 3:
raise NotImplementedError("The input numpy array has wrong size - Please check!")
else:
# --- Generating the kernel
if kernel_size % 2 == 0:
raise ValueError("Value for building the kernel in CAR algorithm must be odd-numbered!")
else:
kernel = np.ones((kernel_size, kernel_size), dtype=float)
mid_number = int(np.floor(kernel_size / 2))
kernel[mid_number, mid_number] = 0.0
kernel = kernel / np.sum(kernel)
# --- Do the convolution
data_out = np.zeros(mea_signal.shape, dtype=float)
for idx in range(0, mea_signal.shape[-1]):
data_in = mea_signal[:, :, idx]
conv_out = convolve2d(data_in, kernel, mode='same')
data_out[:, :, idx] = conv_out
# --- Correction of not available channels
for row in range(0, mea_signal.shape[0]):
for col in range(0, mea_signal.shape[1]):
if not mapp_used[row, col]:
data_out[row, col, :] = np.zeros((mea_signal.shape[-1], ), dtype=float)
return data_out