在Matlab中,我们可以编写
[u, v] = freqspace(size(I),'meshgrid');
Octave与Matlab的“ freqspace”函数等效吗?
答案 0 :(得分:2)
您已经发现,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.
查看documentation page的MATLAB函数,您将得到:
语法
[f1,f2] = freqspace(n) [f1,f2] = freqspace([m n]) [x1,y1] = freqspace(...,'meshgrid') f = freqspace(N) f = freqspace(N,'whole')
说明
freqspace
返回等距频率响应的隐含频率范围。 freqspace在创建时很有用 各种一维和二维所需的频率响应 应用程序。
[f1,f2] = freqspace(n)
返回二维频率向量f1
和f2
表示n×n矩阵。对于
n
为奇数,f1
和f2
均为[-n+1:2:n-1]/n
。对于
n
,f1
和f2
均为[-n:2:n-2]/n
。
[f1,f2] = freqspace([m n])
返回二维频率f1
乘f2
矩阵的向量m
和n
。
[x1,y1] = freqspace(...,'meshgrid')
等同于[f1,f2] = freqspace(...); [x1,y1] = meshgrid(f1,f2);
f = freqspace(N)
返回一维频率向量f
假设N
围绕单位圆均匀分布。甚至N
或奇数,f
是(0:2/N:1)
。因此,即使对于N
,freqspace也会返回(N+2)/2
分。对于N
个奇数,它将返回(N+1)/2
分。
f = freqspace(N,'whole')
返回N
在点周围均匀分布的点 整个单位圆。在这种情况下,f
是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