web-dev-qa-db-ja.com

信号をゼロ平均と単位分散に正規化する方法は?

私はMATLABを初めて使用し、MATLABを使用して音声モーフィングシステムを構築しようとしています。

したがって、MATLABを使用して信号をゼロ平均と単位分散に正規化する方法を知りたいですか?

42
geeti

信号が行列Xにある場合は、平均を削除することでゼロ平均にします。

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

および標準偏差で割ることによる単位分散:

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

統計ツールボックスがあれば、計算できます

Z = zscore(S);
12
jon

信号の平均を決定し、すべてのエントリからその値を差し引くことができます。これにより、平均値はゼロになります。

単位分散を取得するには、信号の標準偏差を決定し、すべてのエントリをその値で除算します。

8
user334856

本質的には、データのz-scoreまたはstandard scoreの計算を検討しているようです。これは、次の式で計算されます。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)
4
Kavka

ゼロによる除算を避けるために!

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
1
Yas