что такое октавный эквивалент функции freqspace в Matlab? - PullRequest
0 голосов
/ 03 сентября 2018

В Matlab мы можем написать,

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

Что такое октавный эквивалент функции "freqspace" Matlab?

1 Ответ

0 голосов
/ 03 сентября 2018

Как вы узнали, 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
...