正如你所发现的,
freqspace
不是用八度来实现的:
>> 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
各种一维和二维的期望频率响应
应用。
[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
.
基于此,我将以下函数组合在一起。虽然完成得很快,并没有覆盖所有的案例,但实施的案例似乎在八度音阶中工作良好。希望这能给你一个开始的想法:
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