什么是 Octave 相当于 Matlab 的 "freqspace" 函数?

what is Octave equivalent of "freqspace" function of Matlab?

在Matlab中我们可以写,

[u, v] = freqspace(size(I),'meshgrid');

Octave相当于Matlab的"freqspace"函数是什么?

如您所知,freqspace 未在 Octave 中实现:

>> help freqspace
error: help: the 'freqspace' function is not yet implemented in Octave

Please read <http://www.octave.org/missing.html> to learn how you can
contribute missing functionality.

查看 MATLAB 函数的 documentation page,您会得到:

Syntax

[f1,f2] = freqspace(n)
[f1,f2] = freqspace([m n])
[x1,y1] = freqspace(...,'meshgrid')
f = freqspace(N)
f = freqspace(N,'whole')

Description freqspace returns the implied frequency range for equally spaced frequency responses. freqspace is useful when creating desired frequency responses for various one- and two-dimensional applications.

[f1,f2] = freqspace(n) returns the two-dimensional frequency vectors f1 and f2 for an n-by-n matrix.

For n odd, both f1 and f2 are [-n+1:2:n-1]/n.

For n even, both f1 and f2 are [-n:2:n-2]/n.

[f1,f2] = freqspace([m n]) returns the two-dimensional frequency vectors f1 and f2 for an m-by-n matrix.

[x1,y1] = freqspace(...,'meshgrid') is equivalent to

[f1,f2] = freqspace(...);
[x1,y1] = meshgrid(f1,f2);

f = freqspace(N) returns the one-dimensional frequency vector f assuming N evenly spaced points around the unit circle. For N even or odd, f is (0:2/N:1). For N even, freqspace therefore returns (N+2)/2 points. For N odd, it returns (N+1)/2 points.

f = freqspace(N,'whole') returns N evenly spaced points around the whole unit circle. In this case, f is 0:2/N:2*(N-1)/N.

基于此,我整理了如下功能。虽然它完成得非常快并且没有涵盖所有案例,但是实施的案例似乎在 Octave 中运行良好。希望这会给你一个开始的想法:

function varargout = freqspace(varargin)

  if nargin==1 && nargout==2 % [f1,f2] = freqspace(n)
    n = varargin{1};

    if mod(n,2)==0 % n is even
      varargout{1} = [-n:2:n-2]/n;
      varargout{2} = [-n:2:n-2]/n;
    else % n is odd
      varargout{1} = [-n+1:2:n-1]/n;
      varargout{2} = [-n+1:2:n-1]/n;
    end

  elseif nargin==1 && nargout==1 % f = freqspace(N)
    N = varargin{1};
    varargout{1} = (0:2/N:1);

  elseif nargin==2 && nargout==1 % f = freqspace(N,'whole')
    N = varargin{1};
    if ~ischar(varargin{2}) || ~strcmpi(varargin{2},'whole')      
      error('The correct syntax is f = freqspace(N,''whole'')');
    else
      varargout{1} = 0:2/N:2*(N-1)/N;
    end

  else  
    disp('Case not yet implemented.')
    return

  end