Моделирование коррелированных гауссовых СВ

Материал из SRNS
Перейти к: навигация, поиск

При моделировании следящих систем НАП, а так же сигналов многоантенных НАП, возникает задача создания нормальных случайных величин с заданным коэффициентом корреляции.

Рассмотрим решение данной задачи на примере модели шумов статистического эквивалента корреляционных сумм I_p, I_e и I_l.

Содержание

Статистический эквивалент коррелятора

Статистический эквивалент коррелятора синфазных корреляционных сумм в отсутствии помех можно описать выражениями:

I_p = A_{IQ} \rho\left(\delta \tau\right) sinc\left(\frac{\delta \omega T}{2}\right) cos\left(\frac {\delta \omega T}{2} + \delta\varphi\right) + n_{Ip},

I_{e} = A_{IQ} \rho\left(\delta \tau - \frac{\Delta \tau}{2}\right) sinc\left(\frac{\delta \omega T}{2}\right) cos\left(\frac {\delta \omega T}{2} + \delta\varphi\right) + n_{Ie},

I_{l} = A_{IQ} \rho\left(\delta \tau + \frac{\Delta \tau}{2}\right) sinc\left(\frac{\delta \omega T}{2}\right) cos\left(\frac {\delta \omega T}{2} + \delta\varphi\right) + n_{Il},

которые для полной картины необходимо дополнить определениями A_{IQ}, \rho() и т.д., а так же описанием шумов n_{Ip}, n_{Ie}, n_{Il}.

Математические ожидания СВ n_{Ip}, n_{Ie}, n_{Il} равны нулю, их дисперсии есть

\sigma_{IQ}^2 = \frac{\sigma_n^2 N}{2},

где \sigma_n^2 - дисперсия шумов на выходе АЦП, N - число суммируемых отсчетов в корреляторе, эти величины считаются известными.

Нетрудно рассчитать попарные взаимные дисперсии:

M\left[n_{Ip} n_{Ie}\right] = M\left[n_{Ip} n_{Il}\right]  = \rho \left( \frac{\Delta \tau}{2} \right) \sigma_{IQ}^2,

M\left[n_{Ie} n_{Il}\right] = \rho \left( \Delta \tau \right) \sigma_{IQ}^2,

Требуется на ЭВМ, имея генератор случайных нормальных чисел, формировать реализации СВ n_{Ip}, n_{Ie}, n_{Il}.

Примечание. Задача формирования шумов квадратурных сумм - абсолютно аналогична и независима, т.к. шумы между I и Q компонентами не коррелируют и независимы.

Многомерная нормальная СВ или вектор случайных величин?

При синтезе радиотехнических систем часто используются модели, оперирующие с многомерными нормальными случайными величинами. Определение из Википедии:

Случайный вектор \mathbf{X} = (X_1,\ldots, X_n)^{\top}: \Omega \to \mathbb{R}^n имеет многомерное нормальное распределение, если выполняется одно из следующих эквивалентных условий:
  • Произвольная линейная комбинация компонентов вектора \sum\limits_{i=1}^n a_i X_i имеет нормальное распределение или является константой.
  • Существует вектор независимых стандартных нормальных случайных величин \mathbf{Z}=(Z_1,\ldots, Z_m)^{\top}, вещественный вектор \mathbf{\mu} = (\mu_1,\ldots, \mu_n)^{\top} и матрица \mathbf{A} размерности n \times m, такие что:
\mathbf{X} = \mathbf{A} \mathbf{Z} + \mathbf{\mu}.
  • Существует вектор \mathbf{\mu} \in \mathbb{R}^n и неотрицательно определённая симметричная матрица \mathbf{\Sigma} размерности n \times n, такие что характеристическая функция вектора \mathbf{X} имеет вид:
\phi_{\mathbf{X}}(\mathbf{u}) = e^{i \mathbf{\mu}^{\top} \mathbf{u} - \frac{1}{2}\mathbf{u}^{\top} \Sigma \mathbf{u}},\; \mathbf{u} \in \mathbb{R}^n.

Из первого условия следует, что каждая из компонент нормальной векторной СВ имеет нормальное распределение (для компоненты i это вытекает при a_i = 1 и остальных коэффициентах комбинации, равных 0). Отсюда часто возникает иллюзия, что нормальность распределений компонент влечет нормальность совместного распределения. Этот тезис не выполняется, на контрпример можно взглянуть тут.

Шумы корреляционных сумм n_{Ip}, n_{Ie}, n_{Il} получены сворачиванием входного шума n с тремя опорными сигналами. Таким образом, выполняется второе необходимое и достаточное условие того, что тройка n_{Ip}, n_{Ie}, n_{Il} имеет многомерное нормальное распределение (если выборку n обозначить как \mathbf{Z}, опорные сигналы записать в виде трех строк матрицы \mathbf{A}, \mathbf{\mu} - вектор-столбец из трех нулей)

Итого, компоненты \left| {\begin{array}{*{20}{c}}
n_{Ip}&n_{Ie}&n_{Il}\\
\end{array}} \right|^T образуют многомерную нормальную СВ с нулевым мат. ожиданием и ковариационной матрицей:

D = \left| {\begin{array}{*{20}{c}}
\sigma_{IQ}^2&\rho \left( \frac{\Delta \tau}{2} \right) \sigma_{IQ}^2&\rho \left( \frac{\Delta \tau}{2} \right) \sigma_{IQ}^2\\
\rho \left( \frac{\Delta \tau}{2} \right) \sigma_{IQ}^2&\sigma_{IQ}^2&\rho \left( \Delta \tau \right) \sigma_{IQ}^2\\
\rho \left( \frac{\Delta \tau}{2} \right) \sigma_{IQ}^2&\rho \left( \Delta \tau \right) \sigma_{IQ}^2&\sigma_{IQ}^2
\end{array}} \right|.

Разложение Холецкого

Существует разложение матрицы A в виде A = LL^T, где L — нижняя треугольная матрица со строго положительными элементами на диагонали. Данное представление называется разложением Холецкого и относительно легко рассчитывается. Разложение Холецкого всегда существует и единственно для любой симметричной положительно-определённой матрицы.

Применим разложение Холецкого к ковариационной матрице:

L = chol(D), D = LL^T.

Умножим полученную матрицу на вектор-столбец r из трех независимых нормальных стандартных СВ:

n_I = L r.

Компоненты вектора n_I образуют многомерную нормальную случайную величину, т.к. выполняется второе необходимое и достаточное условие.

Нетрудно показать, что вектор математических ожиданий n_I - нулевой, а ковариационная матрица D = LL^T. Таким образом, n_I - требуемая многомерная СВ.

Реализация в MATLAB

Пример использования:

qcno_dB = 45;
N = 10000;
stdn = 8;

stdn_IQ = sqrt(stdn^2 * N /2);

ro1 = 0.75;
ro2 = 0.5;
Dp=stdn_IQ^2; Dpe=ro1*stdn_IQ^2; Del=ro2*stdn_IQ^2;

L=chol([Dp  Dpe Dpe;
        Dpe Dp  Del;
        Dpe Del Dp])';

Nj = 1000000;
nIp = nan(1,Nj);
nIe = nan(1,Nj);
nIl = nan(1,Nj);
for j = 1:Nj
    nI = L*randn(3,1);
   
    nIp(j) = nI(1);
    nIe(j) = nI(2);
    nIl(j) = nI(3);
end

fprintf('Corrcoeff nIp nIe = %f\n', mean(nIp.*nIe / std(nIp) / std(nIe) ));
fprintf('Corrcoeff nIl nIe = %f\n', mean(nIl.*nIe / std(nIl) / std(nIe) ));

Вывод:

Corrcoeff nIp nIe = 0.750737
Corrcoeff nIl nIe = 0.500801

Реализация в виде функции (не стоит использовать в цикле, т.к. каждый раз будет вычисляться разложение):

function [X, L] = getCorrelatedRV( D, m )
%GETCORRELATEDRV Returns gaussian corralated random vector

sizeD = size(D);

if (sizeD(1) ~= sizeD(2))
    error('Covariance matrix must be square.')
end
   
if (nargin == 1)
    m = zeros(sizeD(1), 1);
elseif ((nargin < 1) || (nargin > 2))
    error('Incorrect number of inputs.');
end

if nargin == 2
    sizem = size(m);
    if sizem(1) == 1
        m = m';
        sizem = size(m);
    end
    if sizem(2) > 1
        error('Second argument must be vector.');
    end
    if (sizem(1) ~= sizeD(1))
        error('Dimensions of D and m are not consistent.');
    end
end

L = chol(D)';

X = L * randn(sizeD(1), 1) + m;

end
Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты