def test_mask_single_channel(self): shape = (3, 3) signal = np.arange(np.prod(shape)).reshape(shape).astype(np.float32) mask = lorenz_mask(signal, weight=1) tc.assert_equal( mask, np.asarray([0, 0, 0, 0, 1, 1, 1, 1, 1], dtype=np.float32).reshape(shape))
def test_mask_two_channels(self): shape = (2, 3, 3) signal = np.arange(np.prod(shape)).reshape(shape).astype(np.float32) mask = lorenz_mask(signal, weight=1) tc.assert_equal( mask, np.asarray([[[0, 0, 0], [0, 1, 1], [1, 1, 1]], [[0, 0, 1], [1, 1, 1], [1, 1, 1]]], dtype=np.float32))
def test_in_bound(self, name, sensor_axis=None, lorenz_fraction=0.98, weight=0.999): mask = lorenz_mask(self.signal, sensor_axis=sensor_axis, lorenz_fraction=lorenz_fraction, weight=weight) assert_array_greater_equal(mask, 0.5 * (1 - weight)) assert_array_less_equal(mask, 0.5 * (1 + weight))
def test_shape(self, name, sensor_axis=None, lorenz_fraction=0.98, weight=0.999): mask = lorenz_mask(self.signal, sensor_axis=sensor_axis, lorenz_fraction=lorenz_fraction, weight=weight) tc.assert_equal( mask.shape, tuple(v for i, v in enumerate([K, D, F, T]) if i != sensor_axis))
def beamform_mvdr_souden_with_lorenz_mask( Y, X_hat=None, debug=False, ): if X_hat is None: X_hat = Y X_mask = np.swapaxes(lorenz_mask(np.swapaxes(X_hat, -2, -1)), -2, -1) N_mask = 1 - X_mask return beamform_mvdr_souden_from_masks( Y=Y, X_mask=X_mask, N_mask=N_mask, debug=debug, )
def test_multi_channel(self): signal = self.signal[0][0] mask1 = lorenz_mask(signal) mask2 = lorenz_mask([signal, signal]) tc.assert_equal(mask1, mask2[0]) tc.assert_equal(mask1, mask2[1])
def test_weight_0(self, name, sensor_axis=None, lorenz_fraction=0.98): mask = lorenz_mask(self.signal, sensor_axis=sensor_axis, lorenz_fraction=lorenz_fraction, weight=0) tc.assert_equal(mask, np.ones_like(mask) / 2)