diff --git a/src/postprocessor/core/processes/dsignal.py b/src/postprocessor/core/processes/dsignal.py
index 26575b59439447b6f49b8880e1c27ee5f9b0e346..1263195888fe6cf76e7e021864d02f07ce17370c 100644
--- a/src/postprocessor/core/processes/dsignal.py
+++ b/src/postprocessor/core/processes/dsignal.py
@@ -1,6 +1,8 @@
+import bottleneck as bn
+import numpy as np
 import pandas as pd
-from agora.abc import ParametersABC
 
+from agora.abc import ParametersABC
 from postprocessor.core.abc import PostProcessABC
 
 
@@ -9,20 +11,28 @@ class dsignalParameters(ParametersABC):
     :window: Number of timepoints to consider for signal.
     """
 
-    _defaults = {"window": 3}
+    _defaults = {"window": 10, "min_count": 5}
 
 
 class dsignal(PostProcessABC):
     """
-    Calculate the change in a signal depending on a window
+    Calculate the change in a signal using the mean of a moving window.
     """
 
     def __init__(self, parameters: dsignalParameters):
         super().__init__(parameters)
 
     def run(self, signal: pd.DataFrame):
-        return (
-            signal.rolling(window=self.parameters.window, axis=1)
-            .mean()
-            .diff(axis=1)
+        matrix = np.diff(
+            bn.move_mean(
+                signal,
+                window=self.parameters.window,
+                min_count=self.parameters.min_count,
+                axis=1,
+            ),
+            axis=1,
         )
+
+        # Pad values to keep the same signal shape
+        matrix = np.pad(matrix, ((0, 0), (0, 1)), constant_values=np.nan)
+        return pd.DataFrame(matrix, index=signal.index, columns=signal.columns)