Как нормализовать сигнал до нулевого среднего и единичной дисперсии? - PullRequest
41 голосов
/ 03 января 2012

Я новичок в MATLAB и пытаюсь создать систему преобразования голоса с помощью MATLAB.

Итак, я хотел бы знать, как нормализовать сигнал до нулевого среднего и единичной дисперсии, используя MATLAB?

Ответы [ 5 ]

75 голосов
/ 03 января 2012

если ваш сигнал находится в матрице X, вы устанавливаете его равным нулю, удаляя среднее значение:

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

и дисперсию единицы путем деления на стандартное отклонение:

X=X/std(X(:));
12 голосов
/ 29 декабря 2012

Если у вас есть набор инструментов статистики, вы можете вычислить

Z = zscore(S);
8 голосов
/ 03 января 2012

Вы можете определить среднее значение сигнала и просто вычесть это значение из всех записей. Это даст вам результат с нулевым средним.

Чтобы получить единичную дисперсию, определите стандартное отклонение сигнала и разделите все записи на это значение.

4 голосов
/ 03 января 2012

Кажется, что вы, по сути, изучаете z-показатель или стандартный показатель ваших данных, который рассчитывается по формуле: z = (x-mean (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)
1 голос
/ 21 ноября 2017

Чтобы избежать деления на ноль!

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