diff --git a/suspect/processing/denoising.py b/suspect/processing/denoising.py
index fd49a14..f55b7ae 100644
--- a/suspect/processing/denoising.py
+++ b/suspect/processing/denoising.py
@@ -34,7 +34,7 @@ def sliding_window(input_signal, window_width):
     window /= numpy.sum(window)
     # pad the signal to cover half the window width on each side
     padded_input = _pad(input_signal, len(input_signal) + window_width - 1)
-    result = numpy.zeros(len(input_signal))
+    result = numpy.zeros_like(input_signal)
     for i in range(len(input_signal)):
         result[i] = numpy.dot(window, padded_input[i:(i + window_width)])
     return result
@@ -62,7 +62,7 @@ def sift(input_signal, threshold):
 def svd(input_signal, rank):
     matrix_width = int(len(input_signal) / 2)
     matrix_height = len(input_signal) - matrix_width + 1
-    hankel_matrix = numpy.zeros((matrix_width, matrix_height))
+    hankel_matrix = numpy.zeros((matrix_width, matrix_height), input_signal.dtype)
     for i in range(matrix_height):
         hankel_matrix[:, i] = input_signal[i:(i + matrix_width)]
     # perform the singular value decomposition

diff --git a/tests/test_mrs/test_processing.py b/tests/test_mrs/test_processing.py
index 40ea9c3..9bf35ef 100644
--- a/tests/test_mrs/test_processing.py
+++ b/tests/test_mrs/test_processing.py
@@ -1,6 +1,9 @@
 import suspect
 
 import numpy
+import warnings
+
+warnings.filterwarnings('error')
 
 
 def test_null_transform():
@@ -81,6 +84,24 @@ def test_gaussian_denoising():
     numpy.testing.assert_almost_equal(data, denoised_data)
 
 
+def test_svd_dtype():
+    data = numpy.ones(128, dtype=complex)
+    denoised_data = suspect.processing.denoising.svd(data, 8)
+    assert data.dtype == denoised_data.dtype
+
+
+def test_sliding_window_dtype():
+    data = numpy.ones(128, dtype=complex)
+    denoised_data = suspect.processing.denoising.sliding_window(data, 30)
+    assert data.dtype == denoised_data.dtype
+
+
+def test_sliding_gaussian_dtype():
+    data = numpy.ones(128, dtype=complex)
+    denoised_data = suspect.processing.denoising.sliding_gaussian(data, 30)
+    assert data.dtype == denoised_data.dtype
+
+
 def test_water_suppression():
     data = suspect.io.load_twix("tests/test_data/siemens/twix_vb.dat")
     channel_combined_data = data.inherit(numpy.average(data, axis=1))

BUG: denoising methods cast complex to real
Several of the methods in suspect.processing.denoising return real results from complex inputs.
tests/test_mrs/test_processing.py::test_sliding_window_dtype
tests/test_mrs/test_processing.py::test_null_transform tests/test_mrs/test_processing.py::test_water_peak_alignment_misshape tests/test_mrs/test_processing.py::test_water_peak_alignment tests/test_mrs/test_processing.py::test_spectral_registration tests/test_mrs/test_processing.py::test_compare_frequency_correction tests/test_mrs/test_processing.py::test_frequency_transform tests/test_mrs/test_processing.py::test_apodize tests/test_mrs/test_processing.py::test_gaussian_denoising tests/test_mrs/test_processing.py::test_svd_dtype tests/test_mrs/test_processing.py::test_sliding_gaussian_dtype tests/test_mrs/test_processing.py::test_water_suppression