Как нормализовать сигнал до нулевого среднего и единичной дисперсии?

38

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

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

Теги:
signal-processing

5 ответов

59
Лучший ответ

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

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

и единичной дисперсии путем деления на стандартное отклонение:

X=X/std(X(:));
  • 2
    одно замечание / вопрос @Oli, в вашем коде, вы на самом деле вычисления std выровненной / с нулевым средним данным (х-му), то есть: std(x-mu) , но оно должно быть: std(x) , право?
  • 15
    \ скалярное а, стандартное (x) == стандартное (x + a)
10

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

Z = zscore(S);
6

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

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

4

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню