2012-01-03 15 views
39

Jestem nowy w firmie MATLAB i próbuję stworzyć system do przekształcania głosu za pomocą MATLAB.Jak znormalizować sygnał do wartości średniej zerowej i jednostkowej?

Więc chciałbym wiedzieć, jak znormalizować sygnał do zerowej średniej i jednostkowej wariancji za pomocą MATLAB?

+0

możliwe duplikat [normalizuje plik macie w Matlab] (http://stackoverflow.com/questions/7729880/normalize-mat-file-in-matlab) – Jonas

Odpowiedz

64

jeśli sygnał jest w matrycy X, robisz to zerową średnią usuwając Średnia:

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

i jednostkowej wariancji przez podzielenie przez odchylenie standardowe:

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

jedna uwaga/pytanie @Oli, w kodzie , faktycznie obliczasz 'std' z wyrównanych/zero-średnich danych (x-mu), tj .:' std (x-mu) ', ale powinno to być:' std (x) ', prawda? – Tin

+11

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

6

Możesz określić średnią sygnału i po prostu odjąć tę wartość od wszystkich wpisów. To da ci zerowy wynik średni.

Aby uzyskać wariancję jednostki, należy określić odchylenie standardowe sygnału i podzielić wszystkie wpisy według tej wartości.

4

To wydaje tak jakbyś zasadniczo zajmował się obliczaniem z-score lub standardowej oceny twoich danych, która jest obliczana poprzez formułę: z = (x-średnia (x))/std (x)

To powinno działać:

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

Jeśli masz statystyki przybornik, a następnie można obliczyć

Z = zscore(S); 
0

Aby uniknąć dzielenie przez 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 
Powiązane problemy