<<home  <<previous  next>>

Phase Decomposition





Sometimes you need to split a signal in two or more phases and keep (one of) these in seperate shorter arrays. That process is equivalent to downsampling. From a matrix perspective, it can be considered a row permutation. I want to illustrate phase decomposition as a matrix operation here.


I will start from the identity matrix, and later convert that to a downsampling matrix. The input vector is a series from 0 to 7, so we can track where they go. Multiplication with the identity matrix, of course, gives an output identical to the input.




identity
identityout




We can remove the entries from the odd rows in the identity matrix. This is not yet a downsampling matrix. It only removes the odd phase from the signal.




matrix
output




The empty rows themselves have to be removed as well. Now there are four rows instead of eight, and also four output rows. There is a 'double shift' in the rows: the identities do not move rightward one cell, but two cells at a time.




down2.
downout




Of course it is also interesting to check what downsampling does to a waveshape. I plotted a simple 8-point cosine to illustrate that. Downsampling basically doubles the frequency, in contrast to the suggestion of the word.




downsampled




However, double frequencies can not always be represented. When they go over the Nyquist frequency, we get the alias. In the case below, I started with the Nyquist frequency as the input. The output vector represents DC.




alias




Two such rectangular downsample matrices can be combined. They split the input vector in two phase vectors of length N/2. This is even-odd phase decomposition. It is an ingredient of radix 2 Fast Fourier Transform. And because I want to know how FFT works, I am exploring phase decomposition here.




even_odd1
2phasesout




Below is a plot of a cosine example, now downsampled into an even and odd vector. Notice that the odd output represents the same doubled frequency, but with a phase shift. That originates from the one-sample shift of the odd phase in the original frequency.




decomposed





The two N/2 vectors can be further decomposed. The NxN matrix must then contain two square N/2xN/2 matrices with two rectangular downsample matrices each. Although the matrix looks different, the underlying process is the same: downsampling by a factor 2.




even_odd2
even_odd2out




After downsampling the eight-point vector two times with factor 2, we now have four two-point vectors. Theoretically, these can be downsampled one more time, in order to get one-point vectors. Although the operation is trivial, I have done the illustrations of it, to complete the pattern. There is 8 small rectangular downsample matrices here. But it looks and works exactly like the identity matrix. That's funny eh.




even_odd3
even_odd3out





By the time all stages of phase decomposition are done, most frequencies will have been pushed over the Nyquist edge in one direction or the other. For the Fast Fourier Transform, that does no harm. An FFT must be done with complex vectors and complex multiplication anyway. Any real input is converted to complex immediately. Then you have no aliases, but conjugates which keep all positive and negative frequencies neatly separated.





When we compare the binary values of input and output numbers, we see the famous bit-reversal which is typical for an N-point vector decomposed into one-point vectors. This is not coincidence, nor magic.

bits




Sorting samples into 2 phases, is sorting to low and high bits actually. In the first stage, the even and odd input was sorted to the most significant output bit. In the second stage, to the second-most significant bit. This system would work for any N=2x. Below, I indexed the row and column numbers in binary, to illustrate the idea without further comments.



binaryIndex
binaryIndex2




Row permutations can also be utilised for upsampling. Start from an identity matrix again. Instead of deleting rows from the identity matrix, we now insert empty rows. Look what such an upsampling matrix does: an input vector is stretched to twice it's length. The empty places between the samples in the stretched vector are supposed to be filled with zero's.




up2
up2out




We can combine upsample matrices to interleave two N/2 length vectors into one N length vector:




interleave
interleavebOut




Or we can interleave four N=2 vectors into two N=4 vectors, like here:




interleave2
interleave2bOut



But this matrix is, apart from my colours and dotted lines, exactly the same as the 2nd stage decomposition matrix earlier on this page. I will copy it for comparison:



even_odd2
even_odd2out





What is happening? Are these processes the same? Not precisely, in general. It took me a while to perceive the pattern, but after all it is damn logical: the interleaving matrix is the transpose of the corresponding decomposition matrix. You can check that in the figure below. The rows of the decomposition matrix become columns in the interleaving matrix. And because there is always unit vectors in each row/column, it is exactly the inverse.




decomposition
interleaving



Downsampling, upsampling, phase decomposition and interleaving can also be done with factors other than two. If only N is an integer multiple of the factor.