Mercurial > hg > octave-nkf
annotate scripts/signal/fftshift.m @ 19270:dbe9a11f5dcb
maint: Periodic merge of gui-release to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 10 Sep 2014 14:19:58 -0400 |
parents | d63878346099 |
children | 4197fc428c7d |
rev | line source |
---|---|
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17314
diff
changeset
|
1 ## Copyright (C) 1997-2013 Vincent Cautaerts |
3426 | 2 ## |
3922 | 3 ## This file is part of Octave. |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
3426 | 9 ## |
3922 | 10 ## Octave is distributed in the hope that it will be useful, but |
3191 | 11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
3426 | 13 ## General Public License for more details. |
14 ## | |
3191 | 15 ## You should have received a copy of the GNU General Public License |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
3191 | 18 |
3449 | 19 ## -*- texinfo -*- |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
20 ## @deftypefn {Function File} {} fftshift (@var{x}) |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
21 ## @deftypefnx {Function File} {} fftshift (@var{x}, @var{dim}) |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
22 ## Perform a shift of the vector @var{x}, for use with the @code{fft} |
3449 | 23 ## and @code{ifft} functions, in order the move the frequency 0 to the |
3499 | 24 ## center of the vector or matrix. |
3191 | 25 ## |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
26 ## If @var{x} is a vector of @math{N} elements corresponding to @math{N} |
16826
a4969508008e
doc: Periodic spellcheck of the documentation.
Rik <rik@octave.org>
parents:
14363
diff
changeset
|
27 ## time samples spaced by @nospell{@math{dt}}, then |
13233
914c0b103a3d
fftshift.m: Better explain operation in docstring (Bug #33581).
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
28 ## @code{fftshift (fft (@var{x}))} corresponds to frequencies |
3191 | 29 ## |
3449 | 30 ## @example |
13233
914c0b103a3d
fftshift.m: Better explain operation in docstring (Bug #33581).
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
31 ## f = [ -(ceil((N-1)/2):-1:1)*df 0 (1:floor((N-1)/2))*df ] |
3449 | 32 ## @end example |
3191 | 33 ## |
13929
9cae456085c2
Grammarcheck of documentation before 3.6.0 release.
Rik <octave@nomad.inbox5.com>
parents:
13268
diff
changeset
|
34 ## @noindent |
16826
a4969508008e
doc: Periodic spellcheck of the documentation.
Rik <rik@octave.org>
parents:
14363
diff
changeset
|
35 ## where @nospell{@math{df} = 1 / @math{dt}}. |
13233
914c0b103a3d
fftshift.m: Better explain operation in docstring (Bug #33581).
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
36 ## |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
37 ## If @var{x} is a matrix, the same holds for rows and columns. If |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
38 ## @var{x} is an array, then the same holds along each dimension. |
4844 | 39 ## |
40 ## The optional @var{dim} argument can be used to limit the dimension | |
41 ## along which the permutation occurs. | |
3449 | 42 ## @end deftypefn |
3191 | 43 |
44 ## Author: Vincent Cautaerts <vincent@comf5.comm.eng.osaka-u.ac.jp> | |
45 ## Created: July 1997 | |
46 ## Adapted-By: jwe | |
47 | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
48 function retval = fftshift (x, dim) |
3191 | 49 |
4844 | 50 if (nargin != 1 && nargin != 2) |
6046 | 51 print_usage (); |
3191 | 52 endif |
53 | |
4844 | 54 if (nargin == 2) |
13233
914c0b103a3d
fftshift.m: Better explain operation in docstring (Bug #33581).
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
55 if (! (isscalar (dim) && dim > 0 && dim == fix (dim))) |
914c0b103a3d
fftshift.m: Better explain operation in docstring (Bug #33581).
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
56 error ("fftshift: dimension DIM must be a positive integer"); |
4844 | 57 endif |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
58 nd = ndims (x); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
59 sz = size (x); |
4844 | 60 sz2 = ceil (sz(dim) / 2); |
61 idx = cell (); | |
12676
2783fa95cab7
Use common code idiom for creating cell array for indexing ND-arrays
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
62 idx = repmat ({':'}, nd, 1); |
7208 | 63 idx{dim} = [sz2+1:sz(dim), 1:sz2]; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
64 retval = x(idx{:}); |
3191 | 65 else |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
66 if (isvector (x)) |
12463
189baf055143
fftshift.m: Fix broken function documented in bug 32442
Karsten Trulsen <karstent@math.uio.no>
parents:
11587
diff
changeset
|
67 xl = length (x); |
189baf055143
fftshift.m: Fix broken function documented in bug 32442
Karsten Trulsen <karstent@math.uio.no>
parents:
11587
diff
changeset
|
68 xx = ceil (xl/2); |
189baf055143
fftshift.m: Fix broken function documented in bug 32442
Karsten Trulsen <karstent@math.uio.no>
parents:
11587
diff
changeset
|
69 retval = x([xx+1:xl, 1:xx]); |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
70 elseif (ismatrix (x)) |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
71 nd = ndims (x); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
72 sz = size (x); |
4844 | 73 sz2 = ceil (sz ./ 2); |
74 idx = cell (); | |
8507 | 75 for i = 1:nd |
4844 | 76 idx{i} = [sz2(i)+1:sz(i), 1:sz2(i)]; |
77 endfor | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
78 retval = x(idx{:}); |
4844 | 79 else |
80 error ("fftshift: expecting vector or matrix argument"); | |
81 endif | |
3191 | 82 endif |
83 | |
84 endfunction | |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
85 |
13233
914c0b103a3d
fftshift.m: Better explain operation in docstring (Bug #33581).
Rik <octave@nomad.inbox5.com>
parents:
12540
diff
changeset
|
86 |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
87 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
88 %! x = [0:7]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
89 %! y = fftshift (x); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
90 %! assert (y, [4 5 6 7 0 1 2 3]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
91 %! assert (fftshift (y), x); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
92 |
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
93 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
94 %! x = [0:6]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
95 %! y = fftshift (x); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
96 %! assert (y, [4 5 6 0 1 2 3]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
97 %! assert (fftshift (y), [1 2 3 4 5 6 0]); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
98 |
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
99 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
100 %! x = [0:7]'; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
101 %! y = fftshift (x); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
102 %! assert (y, [4;5;6;7;0;1;2;3]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
103 %! assert (fftshift (y), x); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
104 |
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
105 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
106 %! x = [0:6]'; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
107 %! y = fftshift (x); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
108 %! assert (y, [4;5;6;0;1;2;3]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
109 %! assert (fftshift (y), [1;2;3;4;5;6;0]); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
110 |
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
111 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
112 %! x = [0:3]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
113 %! x = [x;2*x;3*x+1;4*x+1]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
114 %! y = fftshift (x); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
115 %! assert (y, [[7 10 1 4];[9 13 1 5];[2 3 0 1];[4 6 0 2]]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
116 %! assert (fftshift (y), x); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
117 |
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
118 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
119 %! x = [0:3]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
120 %! x = [x;2*x;3*x+1;4*x+1]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
121 %! y = fftshift (x,1); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
122 %! assert (y, [[1 4 7 10];[1 5 9 13];[0 1 2 3];[0 2 4 6]]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
123 %! assert (fftshift (y,1), x); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
124 |
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
125 %!test |
17314
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
126 %! x = [0:3]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
127 %! x = [x;2*x;3*x+1;4*x+1]; |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
128 %! y = fftshift (x,2); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
129 %! assert (y, [[2 3 0 1];[4 6 0 2];[7 10 1 4];[9 13 1 5]]); |
7f27a3cbdb41
Use Octave coding convention of 1 space after '%!' test prefix.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
130 %! assert (fftshift (y,2), x); |
12540
b3c158b8941c
Add tests for fftshift.m.
Robert T. Short <octave@phaselockedsystems.com.com>
parents:
12463
diff
changeset
|
131 |