2012-01-03 34 views
39

Sono nuovo in MATLAB e sto cercando di creare un sistema di morphing vocale usando MATLAB.Come normalizzare un segnale a media zero e varianza dell'unità?

Quindi mi piacerebbe sapere come normalizzare un segnale a zero media e varianza unità utilizzando MATLAB?

+0

possibile duplicato del [normalizzare i file di mat in MATLAB] (http://stackoverflow.com/questions/7729880/normalize-mat-file-in-matlab) – Jonas

risposta

64

se il segnale è nella matrice X, si rendono a media nulla rimuovendo media:

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

e varianza unitaria dividendo per la deviazione standard:

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

un'osservazione/domanda @Oli, nel codice , stai effettivamente calcolando lo 'std' dei dati allineati/a media zero (x-mu), cioè:' std (x-mu) ', ma dovrebbe essere:' std (x) ', giusto? – Tin

+11

\ forall scalare a, std (x) == std (x + a) – Oli

6

È possibile determinare la media del segnale e sottrarre tale valore da tutte le voci. Questo ti darà un risultato medio zero.

Per ottenere la varianza dell'unità, determinare la deviazione standard del segnale e dividere tutte le voci per quel valore.

4

Sembra come se stessimo essenzialmente cercando di calcolare lo z-score o punteggio standard dei tuoi dati, che è calcolato attraverso la formula: z = (x-mean (x))/std (x)

Questo dovrebbe funzionare:

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

Se hai la casella degli strumenti statistiche, allora si può calcolare

Z = zscore(S); 
0

Per evitare la divisione per zero!

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 
Problemi correlati