什么是 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
在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 vectorsf1
andf2
for an n-by-n matrix.For
n
odd, bothf1
andf2
are[-n+1:2:n-1]/n
.For
n
even, bothf1
andf2
are[-n:2:n-2]/n
.
[f1,f2] = freqspace([m n])
returns the two-dimensional frequency vectorsf1
andf2
for anm
-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 vectorf
assumingN
evenly spaced points around the unit circle. ForN
even or odd,f
is(0:2/N:1)
. ForN
even, freqspace therefore returns(N+2)/2
points. ForN
odd, it returns(N+1)/2
points.
f = freqspace(N,'whole')
returnsN
evenly spaced points around the whole unit circle. In this case,f
is0: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