Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将信号标准化为零均值和单位方差?_Matlab_Signal Processing - Fatal编程技术网

Matlab 如何将信号标准化为零均值和单位方差?

Matlab 如何将信号标准化为零均值和单位方差?,matlab,signal-processing,Matlab,Signal Processing,我是MATLAB新手,我正在尝试使用MATLAB构建一个语音变形系统 因此,我想知道如何使用MATLAB将信号归一化为零平均值和单位方差?您可以确定信号的平均值,然后从所有条目中减去该值。这将给你一个零均值的结果 要获得单位方差,请确定信号的标准偏差,并将所有条目除以该值。如果信号位于矩阵X中,则通过删除平均值使其为零: X=X-mean(X(:)); 单位方差除以标准差: X=X/std(X(:)); 看起来您实际上是在计算数据的z分数或标准分数,这是通过以下公式计算的:z=(x-mean

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


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

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


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

如果信号位于矩阵
X
中,则通过删除平均值使其为零:

X=X-mean(X(:));
单位方差除以标准差:

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

看起来您实际上是在计算数据的z分数或标准分数,这是通过以下公式计算的:z=(x-mean(x))/std(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)

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

Z = zscore(S);

避免被零除

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
function x=normalize(x,eps)
%规范化向量“x”(零均值,单位方差)
%默认值
如果(~exist('eps','var'))
eps=1e-6;
结束
mu=平均值(x(:);
sigma=std(x(:);
如果σ
一个备注/问题的可能重复@Oli,在您的代码中,您实际上在计算对齐/零均值数据(x-mu)的
std
,即:
std(x-mu)
,但它应该是:
std(x)
,对吗?\n对于所有标量a,std(x)==std(x+a)