【问题标题】:How to normalize a signal to zero mean and unit variance?如何将信号归一化为零均值和单位方差?
【发布时间】:2012-02-01 18:43:37
【问题描述】:

我是 MATLAB 新手,我正在尝试使用 MATLAB 构建语音变形系统。

所以我想知道如何使用 MATLAB 将信号归一化为零均值和单位方差?

【问题讨论】:

标签: matlab signal-processing


【解决方案1】:

如果您的信号在矩阵 X 中,则通过移除平均值使其为零均值:

X=X-mean(X(:));

单位方差除以标准差:

X=X/std(X(:));

【讨论】:

  • 一个评论/问题@Oli,在您的代码中,您实际上是在计算对齐/零均值数据(x-mu)的std,即:std(x-mu),但它应该是:std(x),对吧?
  • \forall 标量 a, std(x) == std(x+a)
【解决方案2】:

如果你有统计工具箱,那么你可以计算

Z = zscore(S);

【讨论】:

    【解决方案3】:

    您可以确定信号的平均值,然后从所有条目中减去该值。这会给你一个零均值的结果。

    要获得单位方差,请确定信号的标准差,然后将所有条目除以该值。

    【讨论】:

      【解决方案4】:

      看起来您实际上是在研究计算数据的 z-score标准分,这是通过以下公式计算的:z = (x-mean (x))/标准(x)

      这应该可行:

      %% Original data (Normal with mean 1 and standard deviation 2)
      x = 1 + 2*randn(100,1);
      mean(x)
      var(x)
      std(x)
      
      %% Normalized data with mean 0 and variance 1
      z = (x-mean(x))/std(x);
      mean(z)
      var(z)
      std(z)
      

      【讨论】:

        【解决方案5】:

        为了避免被零除!

        function x = normalize(x, eps)
            % Normalize vector `x` (zero mean, unit variance)
        
            % default values
            if (~exist('eps', 'var'))
                eps = 1e-6;
            end
        
            mu = mean(x(:));
        
            sigma = std(x(:));
            if sigma < eps
                sigma = 1;
            end
        
            x = (x - mu) / sigma;
        end
        

        【讨论】:

          猜你喜欢
          • 2016-10-10
          • 1970-01-01
          • 2014-05-27
          • 2021-12-26
          • 2017-10-28
          • 2018-09-16
          • 1970-01-01
          • 2015-09-18
          • 2017-03-04
          相关资源
          最近更新 更多