Как вы узнали, 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.
Глядя на страницу документации для функции 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
by-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