diff --git a/Transceiver52M/Channelizer.cpp b/Transceiver52M/Channelizer.cpp
index a18dd03..1e4d7d4 100644
--- a/Transceiver52M/Channelizer.cpp
+++ b/Transceiver52M/Channelizer.cpp
@@ -1,6 +1,6 @@
 /*
  * Polyphase channelizer
- * 
+ *
  * Copyright (C) 2012-2014 Tom Tsou <tom@tsou.cc>
  * Copyright (C) 2015 Ettus Research LLC
  *
@@ -63,7 +63,7 @@
 	return hInputs[chan];
 }
 
-/* 
+/*
  * Implementation based on material found in:
  *
  * "harris, fred, Multirate Signal Processing, Upper Saddle River, NJ,
@@ -78,8 +78,8 @@
 
 	deinterleave(in, len, hInputs, blockLen, m);
 
-	/* 
-	 * Convolve through filterbank while applying and saving sample history 
+	/*
+	 * Convolve through filterbank while applying and saving sample history
 	 */
 	for (size_t i = 0; i < m; i++) {
 		memcpy(&hInputs[i][2 * -hLen], hist[i], hSize);
diff --git a/Transceiver52M/ChannelizerBase.cpp b/Transceiver52M/ChannelizerBase.cpp
index f5b3ed4..96f76a9 100644
--- a/Transceiver52M/ChannelizerBase.cpp
+++ b/Transceiver52M/ChannelizerBase.cpp
@@ -1,8 +1,8 @@
 /*
  * Polyphase channelizer
- * 
+ *
  * Copyright (C) 2012-2014 Tom Tsou <tom@tsou.cc>
- * Copyright (C) 2015 Ettus Research LLC 
+ * Copyright (C) 2015 Ettus Research LLC
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -55,10 +55,10 @@
 	}
 }
 
-/* 
+/*
  * Create polyphase filterbank
  *
- * Implementation based material found in, 
+ * Implementation based material found in,
  *
  * "harris, fred, Multirate Signal Processing, Upper Saddle River, NJ,
  *     Prentice Hall, 2006."
@@ -70,7 +70,7 @@
 	float sum = 0.0f, scale = 0.0f;
 	float midpt = (float) (protoLen - 1.0) / 2.0;
 
-	/* 
+	/*
 	 * Allocate 'M' partition filters and the temporary prototype
 	 * filter. Coefficients are real only and must be 16-byte memory
 	 * aligned for SSE usage.
@@ -90,7 +90,7 @@
 				memalign(16, hLen * 2 * sizeof(float));
 	}
 
-	/* 
+	/*
 	 * Generate the prototype filter with a Blackman-harris window.
 	 * Scale coefficients with DC filter gain set to unity divided
 	 * by the number of channels.
@@ -110,7 +110,7 @@
 	}
 	scale = (float) m / sum;
 
-	/* 
+	/*
 	 * Populate partition filters and reverse the coefficients per
 	 * convolution requirements.
 	 */
@@ -174,7 +174,7 @@
 	return true;
 }
 
-/* 
+/*
  * Setup filterbank internals
  */
 bool ChannelizerBase::init()
@@ -222,7 +222,7 @@
 	return true;
 }
 
-/* 
+/*
  * Setup channelizer paramaters
  */
 ChannelizerBase::ChannelizerBase(size_t m, size_t blockLen, size_t hLen)
diff --git a/Transceiver52M/Resampler.cpp b/Transceiver52M/Resampler.cpp
index ecd8865..f545db8 100644
--- a/Transceiver52M/Resampler.cpp
+++ b/Transceiver52M/Resampler.cpp
@@ -51,7 +51,7 @@
 	float cutoff;
 	float sum = 0.0f, scale = 0.0f;
 
-	/* 
+	/*
 	 * Allocate partition filters and the temporary prototype filter
 	 * according to numerator of the rational rate. Coefficients are
 	 * real only and must be 16-byte memory aligned for SSE usage.
@@ -60,10 +60,10 @@
 	for (auto &part : partitions)
 		part = (complex<float> *) memalign(16, filt_len * sizeof(complex<float>));
 
-	/* 
+	/*
 	 * Generate the prototype filter with a Blackman-harris window.
 	 * Scale coefficients with DC filter gain set to unity divided
-	 * by the number of filter partitions. 
+	 * by the number of filter partitions.
 	 */
 	float a0 = 0.35875;
 	float a1 = 0.48829;
@@ -137,8 +137,8 @@
 
 	/* Generate output from precomputed input/output paths */
 	for (size_t i = 0; i < out_len; i++) {
-		n = in_index[i]; 
-		path = out_path[i]; 
+		n = in_index[i];
+		path = out_path[i];
 
 		convolve_real(in, in_len,
 			      reinterpret_cast<float *>(partitions[path]),
diff --git a/Transceiver52M/Resampler.h b/Transceiver52M/Resampler.h
index caffc08..bee2436 100644
--- a/Transceiver52M/Resampler.h
+++ b/Transceiver52M/Resampler.h
@@ -28,7 +28,7 @@
 	/* Constructor for rational sample rate conversion
 	 *   @param p numerator of resampling ratio
 	 *   @param q denominator of resampling ratio
-	 *   @param filt_len length of each polyphase subfilter 
+	 *   @param filt_len length of each polyphase subfilter
 	 */
 	Resampler(size_t p, size_t q, size_t filt_len = 16);
 	~Resampler();
@@ -58,7 +58,7 @@
 	int rotate(const float *in, size_t in_len, float *out, size_t out_len);
 
 	/* Get filter length
-	 *   @return number of taps in each filter partition 
+	 *   @return number of taps in each filter partition
 	 */
 	size_t len();
 
diff --git a/Transceiver52M/Synthesis.cpp b/Transceiver52M/Synthesis.cpp
index 6b62156..a117390 100644
--- a/Transceiver52M/Synthesis.cpp
+++ b/Transceiver52M/Synthesis.cpp
@@ -1,6 +1,6 @@
 /*
  * Polyphase synthesis filter
- * 
+ *
  * Copyright (C) 2012-2014 Tom Tsou <tom@tsou.cc>
  * Copyright (C) 2015 Ettus Research LLC
  *
@@ -74,7 +74,7 @@
 	return true;
 }
 
-/* 
+/*
  * Implementation based on material found in:
  *
  * "harris, fred, Multirate Signal Processing, Upper Saddle River, NJ,
@@ -92,8 +92,8 @@
 
 	cxvec_fft(fftHandle);
 
-	/* 
-	 * Convolve through filterbank while applying and saving sample history 
+	/*
+	 * Convolve through filterbank while applying and saving sample history
 	 */
 	for (size_t i = 0; i < m; i++) {
 		memcpy(&hInputs[i][2 * -hLen], hist[i], hSize);
diff --git a/Transceiver52M/arch/arm/mult_neon.S b/Transceiver52M/arch/arm/mult_neon.S
index 162846e..113e227 100644
--- a/Transceiver52M/arch/arm/mult_neon.S
+++ b/Transceiver52M/arch/arm/mult_neon.S
@@ -1,5 +1,5 @@
 /*
- * NEON complex multiplication 
+ * NEON complex multiplication
  * Copyright (C) 2012,2013 Thomas Tsou <tom@tsou.cc>
  *
  * This library is free software; you can redistribute it and/or
diff --git a/Transceiver52M/arch/common/convert_base.c b/Transceiver52M/arch/common/convert_base.c
index 5251fb8..8d29310 100644
--- a/Transceiver52M/arch/common/convert_base.c
+++ b/Transceiver52M/arch/common/convert_base.c
@@ -31,4 +31,3 @@
 	for (int i = 0; i < len; i++)
 		out[i] = in[i];
 }
-
diff --git a/Transceiver52M/arch/common/fft.c b/Transceiver52M/arch/common/fft.c
index 18b2de7..ed79d13 100644
--- a/Transceiver52M/arch/common/fft.c
+++ b/Transceiver52M/arch/common/fft.c
@@ -1,18 +1,18 @@
 /*
- * Fast Fourier transform 
+ * Fast Fourier transform
  *
  * Copyright (C) 2012 Tom Tsou <tom@tsou.cc>
- * 
+ *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU Affero General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  * See the COPYING file in the main directory for details.
@@ -32,9 +32,9 @@
 	fftwf_plan fft_plan;
 };
 
-/*! \brief Initialize FFT backend 
+/*! \brief Initialize FFT backend
  *  \param[in] reverse FFT direction
- *  \param[in] m FFT length 
+ *  \param[in] m FFT length
  *  \param[in] istride input stride count
  *  \param[in] ostride output stride count
  *  \param[in] in input buffer (FFTW aligned)
@@ -92,7 +92,7 @@
 	free(ptr);
 }
 
-/*! \brief Free FFT backend resources 
+/*! \brief Free FFT backend resources
  */
 void free_fft(struct fft_hdl *hdl)
 {
diff --git a/Transceiver52M/radioBuffer.cpp b/Transceiver52M/radioBuffer.cpp
index a2b42c4..57de364 100644
--- a/Transceiver52M/radioBuffer.cpp
+++ b/Transceiver52M/radioBuffer.cpp
@@ -96,7 +96,7 @@
 /*
  * Output direction
  *
- * Write a non-segment length of samples to the buffer. 
+ * Write a non-segment length of samples to the buffer.
  */
 bool RadioBuffer::write(const float *wr, size_t len)
 {
