web-dev-qa-db-fra.com

Comment normaliser un signal à zéro moyenne et variance d'unité?

Je suis nouveau sur MATLAB et j'essaie de construire un système de morphing vocal utilisant MATLAB.

Je voudrais donc savoir comment normaliser un signal à une moyenne et une variance d'unités nulles à l'aide de MATLAB?

39
geeti

si votre signal est dans la matrice X, vous le rendez nul en supprimant la moyenne:

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

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

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

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

Z = zscore(S);
12
jon

Vous pouvez déterminer la moyenne du signal et soustraire cette valeur de toutes les entrées. Cela vous donnera un résultat moyen nul.

Pour obtenir la variance d'unité, déterminez l'écart type du signal et divisez toutes les entrées par cette valeur.

8
user334856

Il semble que vous cherchiez essentiellement à calculer le z-score ou le score standard de vos données, 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)
4
Kavka

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