From: <par...@us...> - 2012-04-03 13:55:28
|
Revision: 10137 http://octave.svn.sourceforge.net/octave/?rev=10137&view=rev Author: paramaniac Date: 2012-04-03 13:55:17 +0000 (Tue, 03 Apr 2012) Log Message: ----------- control-devel: add early draft file for fft method Added Paths: ----------- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m Added: trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m (rev 0) +++ trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-04-03 13:55:17 UTC (rev 10137) @@ -0,0 +1,59 @@ +## Copyright (C) 2012 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope 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 General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{dat} =} fft (@var{dat}) +## @deftypefnx {Function File} {@var{dat} =} fft (@var{dat}, @var{ord}) +## Detrend outputs and inputs of dataset @var{dat} by +## removing the best fit of a polynomial of order @var{ord}. +## If @var{ord} is not specified, default value 0 is taken. +## This corresponds to removing a constant. +## @end deftypefn + +## Author: Lukas Reichlin <luk...@gm...> +## Created: April 2012 +## Version: 0.1 + +function dat = fft (dat, n) + + if (nargin > 2) # no need to test nargin == 0, this is handled by built-in fft + print_usage (); + endif + +% if ((! is_real_scalar (ord) || fix (ord) != ord) && ! ischar (ord)) # chars are handled by built-in detrend +% error ("iddata: detrend: second argument must be a positve integer"); +% endif + + dat.y = cellfun (@fft, dat.y, "uniformoutput", false); + dat.u = cellfun (@fft, dat.u, "uniformoutput", false); + + dat.timedomain = false; + +% dat.y = cellfun (@(y) fft (y, n), dat.y, "uniformoutput", false); +% dat.u = cellfun (@(u) fft (u, n), dat.u, "uniformoutput", false); + +endfunction + + +%!shared DATD, Z +%! DAT = iddata ({[(1:10).', (1:2:20).'], [(10:-1:1).', (20:-2:1).']}, {[(41:50).', (46:55).'], [(61:70).', (-66:-1:-75).']}); +%! DATD = detrend (DAT, "linear"); +%! Z = zeros (10, 2); +%!assert (DATD.y{1}, Z, 1e-10); +%!assert (DATD.y{2}, Z, 1e-10); +%!assert (DATD.u{1}, Z, 1e-10); +%!assert (DATD.u{2}, Z, 1e-10); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2012-04-04 08:36:24
|
Revision: 10140 http://octave.svn.sourceforge.net/octave/?rev=10140&view=rev Author: paramaniac Date: 2012-04-04 08:36:18 +0000 (Wed, 04 Apr 2012) Log Message: ----------- control-devel: touch up fft method Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m Modified: trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-04-03 20:53:27 UTC (rev 10139) +++ trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-04-04 08:36:18 UTC (rev 10140) @@ -28,18 +28,27 @@ ## Created: April 2012 ## Version: 0.1 -function dat = fft (dat, n) +function dat = fft (dat, n = []) if (nargin > 2) # no need to test nargin == 0, this is handled by built-in fft print_usage (); endif + + if (isempty (n)) + n = num2cell (size (dat, 1)); + else + + endif % if ((! is_real_scalar (ord) || fix (ord) != ord) && ! ischar (ord)) # chars are handled by built-in detrend % error ("iddata: detrend: second argument must be a positve integer"); % endif - dat.y = cellfun (@fft, dat.y, "uniformoutput", false); - dat.u = cellfun (@fft, dat.u, "uniformoutput", false); +% dat.y = cellfun (@fft, dat.y, "uniformoutput", false); +% dat.u = cellfun (@fft, dat.u, "uniformoutput", false); + + dat.y = cellfun (@(y, n) fft (y, n) / sqrt (n), dat.y, n, "uniformoutput", false); + dat.u = cellfun (@(u, n) fft (u, n) / sqrt (n), dat.u, n, "uniformoutput", false); dat.timedomain = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2012-04-04 09:09:56
|
Revision: 10142 http://octave.svn.sourceforge.net/octave/?rev=10142&view=rev Author: paramaniac Date: 2012-04-04 09:09:45 +0000 (Wed, 04 Apr 2012) Log Message: ----------- control-devel: touch up fft method (2) Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m Modified: trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-04-04 08:45:53 UTC (rev 10141) +++ trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-04-04 09:09:45 UTC (rev 10142) @@ -47,8 +47,11 @@ % dat.y = cellfun (@fft, dat.y, "uniformoutput", false); % dat.u = cellfun (@fft, dat.u, "uniformoutput", false); - dat.y = cellfun (@(y, n) fft (y, n) / sqrt (n), dat.y, n, "uniformoutput", false); - dat.u = cellfun (@(u, n) fft (u, n) / sqrt (n), dat.u, n, "uniformoutput", false); +% dat.y = cellfun (@(y, n) fft (y, n) / sqrt (n), dat.y, n, "uniformoutput", false); +% dat.u = cellfun (@(u, n) fft (u, n) / sqrt (n), dat.u, n, "uniformoutput", false); + + dat.y = cellfun (@(y, n) fft (y, n)(1:fix(n/2)+1, :) / sqrt (n), dat.y, n, "uniformoutput", false); + dat.u = cellfun (@(u, n) fft (u, n)(1:fix(n/2)+1, :) / sqrt (n), dat.u, n, "uniformoutput", false); dat.timedomain = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2012-06-22 11:06:18
|
Revision: 10659 http://octave.svn.sourceforge.net/octave/?rev=10659&view=rev Author: paramaniac Date: 2012-06-22 11:06:07 +0000 (Fri, 22 Jun 2012) Log Message: ----------- control-devel: finish doc of fft method Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m Modified: trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-06-22 09:17:22 UTC (rev 10658) +++ trunk/octave-forge/extra/control-devel/inst/@iddata/fft.m 2012-06-22 11:06:07 UTC (rev 10659) @@ -17,11 +17,35 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {@var{dat} =} fft (@var{dat}) -## @deftypefnx {Function File} {@var{dat} =} fft (@var{dat}, @var{ord}) -## Detrend outputs and inputs of dataset @var{dat} by -## removing the best fit of a polynomial of order @var{ord}. -## If @var{ord} is not specified, default value 0 is taken. -## This corresponds to removing a constant. +## @deftypefnx {Function File} {@var{dat} =} fft (@var{dat}, @var{n}) +## Compute the discrete Fourier transform of @var{dat} using a Fast Fourier +## Transform (FFT) algorithm. +## +## @strong{Inputs} +## @table @var +## @item dat +## iddata set containing signals in time-domain. +## @item n +## Length of the FFT transformations. If @var{n} does not match +## the signal length, the signals in @var{dat} are shortened or +## padded with zeros. @var{n} is a vector with as many elements +## as there are experiments in @var{dat} or a scalar with a common +## length for all experiments. +## If not specified, the signal lengths are taken as default values. +## @end table +## +## @strong{Outputs} +## @table @var +## @item dat +## iddata identification dataset in frequency-domain. +## In order to preserve signal power and noise level, +## the FFTs are normalized by dividing each transform +## by the square root of the signal length. +## The frequency values are distributed equally from 0 +## to the Nyquist frequency. The Nyquist frequency is +## only included for even signal lengths. +## @end table +## ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |