Matlab 如何将信号标准化为零均值和单位方差?
我是MATLAB新手,我正在尝试使用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将信号归一化为零平均值和单位方差?您可以确定信号的平均值,然后从所有条目中减去该值。这将给你一个零均值的结果
要获得单位方差,请确定信号的标准偏差,并将所有条目除以该值。如果信号位于矩阵
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)