День 4: Фільтрація даних — очищення сигналів з усмішкою

Лектор: Андрій Ніколаєв, кандидат технічних наук, старший науковий співробітник, лабораторія навігаційних систем

Дата: березень 2003 року


Вступ до фільтрації: дані теж люблять порядок

Уявіть, що ви на кухні готуєте навігаційний суп — так, суп, який допоможе вашому супутнику не загубитися в космосі! У День 3 студенти прийшли вчасно, і Андрій провів коротку лекцію, де ми зібрали інгредієнти: взяли сирі дані, очистили їх, додали псевдодальності й навіть легенько присмачили корекціями Саньяка. Натхненний цим успіхом, Андрій продовжив у День 4, показуючи, як зробити дані ще кращими. Сьогодні ми зануримося у фільтрацію: видалимо весь шум, щоб дані стали гладкими, як шовк, і обчислимо, наскільки вони «шумні». Час брати космічні ополоники — починаємо!

Метафорична ілюстрація фільтрації навігаційних даних як приготування гладкого супу з сирих інгредієнтів
Навігаційний суп: фільтрація робить його гладким і смачним!

Фільтрація даних: математична швабра

1. Що ми фільтруємо і чому? Рятуємо псевдодальності

Беремо наші улюблені псевдодальності (\(S_{C/A}\), \(S_{L1}\), \(S_{L2}\)) та їхні швидкості (\(\dot{S}_{C/A}\), \(\dot{S}_{L1}\), \(\dot{S}_{L2}\)), а також фазові псевдодальності (\(\varphi_{L1}\), \(\varphi_{L2}\)) і їхні похідні. Це «космічні мірки», що допомагають нам зрозуміти, де перебуває супутник і з якою швидкістю він рухається. Деталі того, що саме ми фільтруємо, наведені в розділі 6.1. Але дані поводяться як норовлива дитина: вони стрибають або потрапляють у розриви першого порядку. Наприклад, \(S_{C/A}\) може раптово «впасти зі скелі», і нам потрібно це вловити.

Для цього у нас є спеціальний детектор — «Ой, щось пішло не так»:

\[ \lfloor \frac{\Delta S}{\delta t \cdot c} + 0.5 \rfloor = 0 \]

де:

  • \(\Delta S\) — різниця між поточним значенням і очікуваним
  • \(\delta t\) — інтервал часу
  • \(c\) — швидкість світла
  • Функція округлення вниз \(\lfloor \cdot \rfloor\) повертає цілу частину

Якщо виявлено розрив, ми його латаємо, щоб сигнали не сіпались, як кіт, що випив кави на дискотеці. А якщо дані недостовірні (flag = 1), ми обнуляємо їх — жодного сміття в нашому супі!

2. Згладжування: робимо дані шовковисто гладкими

Тепер виймаємо нашу чарівну математичну швабру — фільтр, що згладжує дані. Беремо кожну пару (наприклад, \(S_{C/A}\) і \(\dot{S}_{C/A}\)) і починаємо їх «вичісувати». Матриця \(R\) показує нам, наскільки шумні дані — її значення задаються оператором, як шеф-кухар, що додає сіль:

\[ R = \begin{pmatrix} D_{\eta}^{2} & 0 \\ 0 & D_{\dot{\eta}}^{2} \end{pmatrix} \]

Потім ми використовуємо поліном із коефіцієнтами \(a_0, a_1, \ldots\), щоб дані поводилися добре. Результат: \(\eta = a_0\), \(\dot{\eta} = a_1\). Ми уточнюємо рецепт із надходженням нових даних!

3. Уточнення коефіцієнтів: «Усе під контролем!»

На початку ми встановлюємо \(a_0\) рівним поточній псевдодальності, \(a_1\) — швидкості, а решту (\(a_2, \ldots\)) — нулю — «не будемо поки ускладнювати». Потім перевіряємо достовірність:

\[ \varepsilon_0^{2} + \varepsilon_1^{2} < \varepsilon_{\max}^{2} \]

де \(\varepsilon\) — різниця між вимірюванням і прогнозом. Якщо різниця велика, ми позначаємо це (flag = 1) і пропускаємо. Якщо все гаразд, оновлюємо коефіцієнти за допомогою матриць — наш фільтр не дозволить супутнику брехати!

4. Вимірюємо шум: статистика на сторожі

Вишенька на торті — обчислення того, наскільки шумні дані. Середньоквадратичне відхилення (СКВ):

\[ \sigma_{\eta} = \sqrt{P_{0,0}}, \qquad \sigma_{\dot{\eta}} = \sqrt{P_{1,1}} \]

Чим менше СКВ, тим спокійніший наш суп — і точніший шлях супутника!

Епілог: «Чистота — основа навігації!»

Завдяки фільтрації ми перетворили шумні дані на гладкий навігаційний бульйон. Розриви залатані, нерівності згладжені, а шум вимірений — деталі в розділі 6.4. Супутник летить упевнено, а Андрій і я по-справжньому заслужили чашку чаю — чи супу? 😄


Технічні деталі фільтрації

6.1. Фільтрація вимірюваних параметрів

Фільтрація вимірюваних параметрів виконується окремо для кожного приймача GNSS і кожного космічного апарата. Згладжені оцінки формуються на опорний час останнього кадру \(t\).

Фільтрація застосовується до таких груп параметрів:

\[ S_{C/A} \text{ і } \dot{S}_{C/A}; \quad S_{L1} \text{ і } \dot{S}_{L1}; \quad S_{L2} \text{ і } \dot{S}_{L2}; \quad \varphi_{L1} \text{ і } \dot{\varphi}_{L1}; \quad \varphi_{L2} \text{ і } \dot{\varphi}_{L2} \]

Для стислості індекси, що вказують номер приймача, номер супутника та тип, опущено. Використовується таке позначення:

\[ \begin{pmatrix} \eta \\ \dot{\eta} \end{pmatrix} = \begin{pmatrix} S_{C/A} \\ \dot{S}_{C/A} \end{pmatrix}, \quad \begin{pmatrix} S_{L1} \\ \dot{S}_{L1} \end{pmatrix}, \quad \begin{pmatrix} S_{L2} \\ \dot{S}_{L2} \end{pmatrix}, \quad \begin{pmatrix} \varphi_{L1} \\ \dot{\varphi}_{L1} \end{pmatrix} \quad \text{або} \quad \begin{pmatrix} \varphi_{L2} \\ \dot{\varphi}_{L2} \end{pmatrix} \]

Для вимірювань, позначених як недостовірні (flag = 1), відповідні значення псевдодальності та швидкості встановлюються в нуль.

Під час згладжування усуваються розриви першого порядку \(S_{C/A}\).

Для виявлення розривів використовується:

\[ \lfloor \frac{\Delta S}{\delta t \cdot c} + 0.5 \rfloor = 0 \]

де

\[ \Delta S = S_{C/A} - \left( \tilde{S}_{C/A} + 0.5 \cdot \bigl( \tilde{\dot{S}}_{L1} + \dot{S}_{L1} \bigr) \cdot (t - \tilde{\tau}) \right) \]

Тильда (~) позначає останню попередню точку з достовірними значеннями \(S_{C/A}\) та \(\dot{S}_{L1}\).

6.2. Параметри згладжування

\[ R = \begin{pmatrix} D_{\eta}^{2} & 0 \\ 0 & D_{\dot{\eta}}^{2} \end{pmatrix} \]

— апріорна матриця коваріації шуму (значення \(D_{\eta}\) та \(D_{\dot{\eta}}\) задаються оператором).

Згладжені значення \((\eta_{i,j,k,1}\) та \(\dot{\eta}_{i,j,k,1})\), отримані приймачем \(i\) для космічного апарата \(j\) на поточний момент часу, дорівнюють:

\[ \eta_{i,j,k,2} = a_0, \qquad \dot{\eta}_{i,j,k,2} = a_1 \]

Обернена матриця \(2 \times 2\) обчислюється як:

\[ R^{-1} = \frac{1}{r_{11} \cdot r_{22} - r_{12} \cdot r_{21}} \begin{pmatrix} r_{22} & -r_{12} \\ -r_{21} & r_{11} \end{pmatrix} \]

6.3. Початкові оцінки та уточнення коефіцієнтів

Наведені нижче рівняння коваріації та уточнення коефіцієнтів слідують класичній традиції фільтра Калмана, запровадженій Рудольфом Е. Калманом у 1960 році — загальновідомим математичним методом, який згодом широко використовувався в аерокосмічній навігації та добре документований в алгоритмах приймачів GPS/GNSS.

Початкові коефіцієнти встановлюються рівними вимірюваним значенням на початковий момент часу:

\[ a_0 = \eta_{i,j,k,1}; \qquad a_1 = \dot{\eta}_{i,j,k,1}; \qquad a_2 = \dots = a_M = 0 \]

Коефіцієнти уточнюються з надходженням достовірних даних відповідно до:

a) Перевірка достовірності:

\[ \varepsilon_0^2 + \varepsilon_1^2 < \varepsilon_{\max}^2 \]

де

\[ \varepsilon = \begin{pmatrix} \eta_n \\ \dot{\eta}_n \end{pmatrix} - H \cdot \Phi (t_n - \tilde{\tau}) \cdot A \]

Якщо умова не виконується, точка відхиляється (прапорці \(\text{Pr}_{\eta_{i,j,k}}\), \(\text{Pr}_{\dot{\eta}_{i,j,k}}\) = 1). Кроки b) і c) пропускаються.

b) Оновлення коваріації:

\[ P = \Phi (t_n - \tilde{\tau}) \cdot P \cdot \Phi (t_n - \tilde{\tau}) \] \[ P = P - P \cdot H^T \cdot (H \cdot P \cdot H^T + R)^{-1} \cdot H \cdot P \]

c) Уточнення вектора коефіцієнтів:

\[ A = \Phi (t_n - \tilde{\tau}) \cdot A + P \cdot H^T \cdot R^{-1} \cdot \left( \begin{pmatrix} \eta_n \\ \dot{\eta}_n \end{pmatrix} - H \cdot \Phi (t_n - \tilde{\tau}) \cdot A \right) \]

6.4. Обчислення СКВ флуктуаційних похибок

Значення СКВ флуктуаційних похибок параметрів вимірювань обчислюються як:

\[ \sigma_{\eta_{i,j,k,2}} = \sqrt{P_{0,0}}, \qquad \sigma_{\dot{\eta}_{i,j,k,2}} = \sqrt{P_{1,1}} \]

Ці значення дають кількісну оцінку якості фільтрації та залишкового шуму в згладжених параметрах.