Programming |

**Fast Fourier Transform Example**

The `fftshift`

function swaps the left and right halves of each dimension of an array. For a simple vector such as `[0 2 4 6 8 10]`

the output would be `[6 8 10 0 2 4]`

. For a multidimensional array, `fftshift`

performs this swap along each dimension.

`fftshift`

uses vectors of indices to perform the swap. For the vector shown above, the index `[1 2 3 4 5 6]`

is rearranged to form a new index `[4 5 6 1 2 3]`

. The function then uses this index vector to reposition the elements. For a multidimensional array, `fftshift`

must construct an index vector for each dimension. A comma-separated list makes this task much simpler.

Here is the `fftshift`

function:

function y = fftshift(x) numDims = ndims(x); idx = cell(1, numDims); for k = 1:numDims m = size(x, k); p = ceil(m/2); idx{k} = [p+1:m 1:p]; end y = x(idx{:});

The function stores the index vectors in cell array `idx`

. Building this cell array is relatively simple. For each of the `N`

dimensions, determine the size of that dimension and find the integer index nearest the midpoint. Then, construct a vector that swaps the two halves of that dimension.

By using a cell array to store the index vectors and a comma-separated list for the indexing operation, `fftshift`

shifts arrays of any dimension using just a single operation: `y = x(idx{:})`

. If you were to use explicit indexing, you would need to write one `if`

statement for each dimension you want the function to handle:

Another way to handle this without a comma-separated list would be to loop over each dimension, converting one dimension at a time and moving data each time. With a comma-separated list, you move the data just once. A comma-separated list makes it very easy to generalize the swapping operation to an arbitrary number of dimensions.

How to Use the Comma-Separated List | Program Control Statements |

© 1994-2005 The MathWorks, Inc.