Модель фильтра Калмана 2 порядка

Материал из SRNS
Перейти к: навигация, поиск
Список всех моделей
Crystal Clear action run.png
Модель фильтра Калмана 2 порядка
Описание Модель фильтра Калмана 2 порядка на примере ФАП
Автор(ы) Korogodin (Korogodinобсуждение)
Последняя версия 1.0 (12.10.2011)
Загрузить no link
Хранилище no link
Категории Статистическая радиотехника, Оценивание частоты, Оценивание задержки


Содержание

Описание модели

Модель фильтра Калмана 2 порядка, например, используемого в ЧАП. В данный момент приведен листинг только для коэффициентов установившегося режима. Следует привести пример с уравнениями Рикатти.

Листинг

Ниже приведен листинг при использовании коэффициентов установившегося режима. Изложение следует дополнить уравнениями Рикатти - для честного соответствия заголовку.

Коэффициенты передачи непрерывных следящих систем второго и третьего порядка

Без моделирования фазы (первообразной от главного оцениваемого параметра)

Tmod = 300; % Время моделирования
Tc = 0.001; % Период работы фильтров
K = fix(Tmod/Tc);

Xextr = [0; 0]; % Вектор экстраполяций

F = [1 Tc
     0 1  ]; % Переходная матрица

H = 20; % Hz, полоса

Ko = nan(2,1); % Вектор-столбец коэффициентов фильтра
Ko(2) = 2*16/9*H^2; % Коэффициенты непрерывной системы в установившемся режиме
Ko(1) = sqrt(2*Ko(2));

Ko = Ko*Tc; % Переход к коэффициентам дискретной системы

Xist = [0; 0]; % Истинный вектор состояния
stdIst = 10; nIst = randn(1,K);
for k = 1:K
    Ud = f(Xextr, Xist);  % Дискриминатор
    Sd = f(A_IQ);      % Крутизна дискриминационной характеристики
    Xest = Xextr + Ko*Ud/Sd; % Вектор оценок на k-й интервал
    Xextr = F*Xest;         % Экстраполяция на интервал k+1

    Xist = F*Xist + [0; 1]*nIst(k)*stdIst; % Здесь может быть любая другая модель изменения истинного вектора состояния
end

С моделью фазы

Для моделирования ЧАП с статистическими эквивалентами корреляторов необходимо учитывать разность набегов фазы приходящего сигнала и фазы опорного колебания в корреляторе. Тогда удобно использовать следующую модель:

Tmod = 300; % Время моделирования
Tf = 0.005; % Период работы фильтров
Tc = 0.001; % Период интегрирования в корреляторе
K = fix(Tmod/Tc);

qcno_ist = 45*ones(1,K); % // SNR

H = 3; % Hz, полоса

Xextr = [0; 0; 0]; % Вектор экстраполяций

Ff = [1 0  0
      0 1  Tf
      0 0  1]; % Переходная матрица для модели частоты (в темпе фильтра)
 
Fc = [1 Tc Tc^2/2
      0 1  Tc
      0 0  1]; % Переходная матрица для модели частоты (в темпе коррелятора)
 
Fincorr =  [1 Tc 0
            0 1  0
            0 0  1]; % Переходная матрица набега фазы в корреляторе

Ko = nan(3,1); % Вектор-столбец коэффициентов фильтра
Ko(3) = 2*16/9*H^2; % Коэффициенты непрерывной системы в установившемся режиме
Ko(2) = sqrt(2*Ko(3));
Ko(1) = 0;    % Это не баг, это фича! Из-за этого нуля система, на самом деле, - второго порядка

Ko = Ko*Tf; % Переход к коэффициентам дискретной системы

Xist = [0; 0; 0]; % Истинный вектор состояния
stdIst = 10; nIst = randn(1,K);

stdn_IQ = ones(1,K)*8; % СКО шума квадратурных сумм

A_IQ = nan(1,K); % // Memory allocation
A_IQ_eff = nan(1,K);

I = nan(1,K); % // Memory allocation
Q = nan(1,K);

EpsPhi = nan(1, K); % // Memory allocation
EpsW = nan(1, K);
EpsTau = nan(1, K);

nI = stdn_IQ.*randn(1,K); % // I-comp noise
nQ = stdn_IQ.*randn(1,K); % // Q-comp noise

w = 0; Isum = 0; Qsum = 0; Iold = 1; Qold = 0;
for k = 1:K

    % // Расчет стат.эквивалентов корреляционных сумм
    EpsPhi(k) = mod(Xist(1) - Xextr(1),2*pi);
    EpsW(k) = Xist(2) - Xextr(2);
    EpsTau(k) = 0;

    qcno = 10.^(qcno_ist(k)/10);
    A_IQ(k) = stdn_IQ(k) .* sqrt(2 * qcno * Tc);

    A_IQ_eff(k) = A_IQ(k)*sinc(EpsW(k)*Tc/2 /pi)*ro(EpsTau(k));
    mI = A_IQ_eff(k) * cos(EpsW(k)*Tc/2 + EpsPhi(k));
    mQ = - A_IQ_eff(k) * sin(EpsW(k)*Tc/2 + EpsPhi(k));
    I(k) = mI + nI(k);
    Q(k) = mQ + nQ(k);
    Isum = Isum + I(k);
    Qsum = Qsum + Q(k);

    Xextr = Fincorr * Xextr; % Набег фазы в корреляторе к концу накопления    
   
    w = w + 1;
    if w == fix(Tf/Tc)                  
        %     Ud = f(I(k), Q(k), I(k-1), Q(k-1), ...);      % Дискриминатор
        Ud = (I(k)*Qold - Q(k)*Iold);
        %     Sd = f(A_IQ);             % Крутизна дискриминационной характеристики
        Sd = Tc*(A_IQ(k)*Tf/Tc)^2 * 1.3;
        Xest = Xextr + Ko*Ud/Sd;                 % Вектор оценок на очередной интервал фильтра
        Xextr = Ff*Xest;                         % Экстраполяция на следующий интервал
        w = 0;
        Iold = Isum; Isum = 0;
        Qold = Qsum; Qsum = 0;
    end

    Xist = Fc*Xist + [0; 0; 1]*nIst(k)*stdIst; % Здесь может быть любая другая модель изменения истинного вектора состояния
    if ~mod(k,fix(K/10))
        fprintf('Progress: %.0f%%\n', 100*k/K);
    end
end

Результаты моделирования при параметрах по-умолчанию

См. также

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

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