代码之家  ›  专栏  ›  技术社区  ›  user366312

matlab的“freqspace”函数的八度当量是多少?

  •  -2
  • user366312  · 技术社区  · 6 年前

    在matlab中我们可以写,

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

    matlab的“freqspace”函数的八度等效值是多少?

    1 回复  |  直到 6 年前
        1
  •  2
  •   am304    6 年前

    正如你所发现的, 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