diff --git a/+misc/+ss/discreteDifferentiationSs.m b/+misc/+ss/discreteDifferentiationSs.m
new file mode 100644
index 0000000000000000000000000000000000000000..fc1255e54e5098c1520c871dd8d6e75c1e5cc908
--- /dev/null
+++ b/+misc/+ss/discreteDifferentiationSs.m
@@ -0,0 +1,52 @@
+function myStateSpace = discreteDifferentiationSs(numberSignal, inputName, ...
+															stepSize, varargin)
+% misc.ss.discreteDifferentiationSs implements numerical differentiation for run time
+% use in simulations by implementing the differentiation
+%	y_t = (y(t) - y(t-)) / stepSize
+% via a time-discrete state-space (see >> doc ss ).
+%
+% Inputs:
+%	numberSignal	number of differentiation signals
+%	inputName		name of signal to be differentiated
+%	stepSize		spacing between time steps of simulation
+% Optional Input:
+%	outputName		name of differentiated signal
+%
+% Outputs:
+%	myStateSpace	the state space that differentiates input of signalName
+%
+% Example:
+% -------------------------------------------------------------------------
+% exampleSs = ss(0.8, 1, 1, [], 1e-3, 'OutputName', 'y', 'InputName', 'u');
+% diffSs = misc.ss.discreteDifferentiationSs(1, 'y', 1e-3, ...
+%			'outputName', 'dydt');
+% simSs = misc.ss.connect({'u'}, {'y', 'dydt'}, exampleSs, diffSs);
+% [simOutput, t, ~] = initial(simSs, [1; 1], 0:1e-3:50*1e-3);
+% simData = misc.ss.simulationOutput2Quantity(simOutput, t, simSs.OutputName);
+% plot([simData.y.diff(1, 't'); simData.dydt])
+% -------------------------------------------------------------------------
+
+% input reading
+myParser = misc.Parser();
+myParser.addParameter('outputName', [inputName, '_t'], @(v) ischar(v));
+myParser.parse(varargin{:});
+
+% input checks
+assert(isnumeric(numberSignal));
+assert(isnumeric(stepSize) && isscalar(stepSize));
+assert(ischar(inputName), 'inputName must be a character-array or string');
+
+% create time discrete signal model that represents the time derivative described
+% above
+myStateSpace = ss(...
+	zeros(numberSignal), ...			% A
+	eye(numberSignal), ...				% B
+	- eye(numberSignal)/stepSize, ...	% C
+	eye(numberSignal)/stepSize, ...		% D
+	stepSize);							% Ts
+
+% set signal names
+myStateSpace = misc.ss.setSignalName(myStateSpace, 'input', {inputName}, {numberSignal});
+myStateSpace = misc.ss.setSignalName(myStateSpace, 'output', ...
+		{myParser.Results.outputName}, {numberSignal});
+end
\ No newline at end of file