46 votes

Comment normaliser un signal à une moyenne nulle et à une variance unitaire ?

Je suis nouveau sur MATLAB et j'essaie de créer un système de morphing vocal à l'aide de MATLAB.

J'aimerais donc savoir comment normaliser un signal à une moyenne nulle et à une variance unitaire à l'aide de MATLAB ?

87voto

Oli Points 9566

si votre signal est dans la matrice X , vous le rendez à zéro en supprimant la moyenne :

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

et la variance unitaire en divisant par l'écart type :

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

13voto

jon Points 131

Si vous disposez de la boîte à outils de statistiques, vous pouvez calculer

 Z = zscore(S);

6voto

Kavka Points 2851

Il semble que vous cherchiez essentiellement à calculer le score z ou le score standard de vos données, qui est calculé à l'aide de la formule : z = (x-mean(x))/std(x)

Cela devrait fonctionner :

 %% 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)

1voto

Yas Points 53

Pour éviter la division par zéro !

 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X