В этом примере показано использование блока «Фильтр частиц» в Toolbox™ идентификации системы. Задача оценки параметра функции передачи дискретного времени переформулируется и рекурсивно решается как задача оценки состояния.
Панель инструментов идентификации системы содержит три блока Simulink для нелинейной оценки состояния:
Фильтр частиц: реализует алгоритм фильтра частиц дискретного времени.
Расширенный фильтр Калмана: реализует алгоритм дискретно-временного расширенного фильтра Калмана первого порядка.
Фильтр Калмана без запаха: реализует алгоритм фильтра Калмана без запаха.
Эти блоки поддерживают оценку состояния с использованием множества датчиков, работающих с различной частотой дискретизации. Типичный рабочий процесс для использования этих блоков выглядит следующим образом:
Моделирование поведения завода и датчика с помощью функций MATLAB или Simulink.
Сконфигурируйте параметры блока.
Моделирование фильтра и анализ результатов для получения уверенности в производительности фильтра.
Разверните фильтр на своем оборудовании. Можно создать код для этих фильтров с помощью программы Simulink Coder™.
В этом примере блок «Фильтр частиц» используется для демонстрации первых двух шагов этого рабочего процесса. Последние два шага кратко рассматриваются в разделе «Следующие шаги». Цель в этом примере состоит в том, чтобы оценить параметры дискретной временной передаточной функции (модель с ошибкой вывода) рекурсивно, где параметры модели обновляются на каждом временном шаге по мере поступления новой информации.
Если вас интересует расширенный фильтр Калмана, см. пример «Оценка состояния нелинейной системы с несколькими многоскоростными датчиками». Использование фильтра Калмана без запаха соответствует шагам расширенного фильтра Калмана.
Добавьте папку файла примера к пути MATLAB.
addpath(fullfile(matlabroot,'examples','ident','main'));
Большинство алгоритмов оценки состояния основаны на модели растения (функция перехода состояния), которые описывают эволюцию состояний растения от одного временного шага к следующему. Эта функция обычно обозначается как
где x - состояния, w - шум процесса, u - необязательные дополнительные входы, например, системные входы или параметры. Блок фильтра частиц требует предоставления этой функции в несколько ином синтаксисе,.
Различия заключаются в следующем:
Фильтр частиц работает, следуя траекториям многих гипотез состояния (частиц), и блок передает все гипотезы состояния вашей функции сразу. Конкретно, если вектор состояния
имеет
элементы и вы выбираете
частицы для использования, имеет
размеры
, где каждый столбец является гипотезой состояния.
Вы рассчитываете влияние шума процесса
на гипотезы состояния
в вашей функции.
Блок не делает никаких предположений о распределении вероятности технологического шума
и не нуждается
в качестве входного сигнала.
Функция
может быть функцией MATLAB, соответствующей ограничениям Coder™ MATLAB, или блоком функции Simulink. После создания
необходимо указать имя функции в блоке «Фильтр частиц».
В этом примере задача оценки параметров функции передачи дискретного времени переформулируется как задача оценки состояния. Эта передаточная функция может представлять динамику процесса дискретного времени или может представлять некоторую динамику непрерывного времени, связанную с блоком восстановления сигнала, таким как удержание нулевого порядка. Предположим, что вы заинтересованы в оценке параметров функции дискретного переноса времени первого порядка:
![$$ y[k] = \frac{20q^{-1}}{1-0.7q^{-1}} u[k] + e[k] $$](../../examples/ident/win64/ParameterAndStateEstimationUsingParticleFilterBlockExample_eq18322676640877057295.png)
Здесь
выход установки
, вход установки
, шум измерения
, оператор временной задержки.
Параметризуйте передаточную функцию как,
где и
являются
параметрами для оценки. Передаточная функция и параметры могут быть представлены в необходимой форме state-space несколькими способами, посредством выбора вектора состояния. Один из вариантов заключается
в том, что второе и третье состояния представляют оценки параметров. Тогда передаточная функция может быть эквивалентно записана как
![$$ x[k+1] = \left[
 \begin{array}{c}
 -x_2[k] x_1[k] + x_3[k] u[k] \\
 x_2[k] \\
 x_3[k] \\
 \end{array}
 \right] $$](../../examples/ident/win64/ParameterAndStateEstimationUsingParticleFilterBlockExample_eq13996313180658475330.png)
Термин «шум измерения
» используется при моделировании датчиков. В этом примере выражение, приведенное выше, реализуется в функции MATLAB в векторизированной форме для эффективности вычислений:
type pfBlockStateTransitionFcnExample
function xNext = pfBlockStateTransitionFcnExample(x,u) % pfBlockStateTransitionFcnExample State transition function for particle % filter, for estimating parameters of a % SISO, first order, discrete-time transfer % function model % % Inputs: % x - Particles, a NumberOfStates-by-NumberOfParticles matrix % u - System input, a scalar % % Outputs: % xNext - Predicted particles, with the same dimensions as input x % Implement the state-transition function % xNext = [x(1)*x(2) + x(3)*u; % x(2); % x(3)]; % in vectorized form (for all particles). xNext = x; xNext(1,:) = bsxfun(@times,x(1,:),-x(2,:)) + x(3,:)*u; % Add a small process noise (relative to expected size of each state), to % increase particle diversity xNext = xNext + bsxfun(@times,[1; 1e-2; 1e-1],randn(size(xNext))); end
Блок «Фильтр частиц» требует предоставления функции правдоподобия измерения, которая вычисляет правдоподобие (вероятность) каждой гипотезы состояния. Эта функция имеет вид. ![$L[k] = h_{pf}(X[k],y[k],u[k])$](../../examples/ident/win64/ParameterAndStateEstimationUsingParticleFilterBlockExample_eq15657698646121618398.png)
-
вектор элемента, где -
количество выбранных частиц.
элемент в -
вероятность
частицы (колонки) в. - ![$X[k]$](../../examples/ident/win64/ParameterAndStateEstimationUsingParticleFilterBlockExample_eq13550328332973796844.png)
измерение датчика. -
необязательный входной аргумент, который может отличаться от входов функции перехода состояния.
Датчик измеряет первое состояние в этом примере. В этом примере предполагается, что ошибки между фактическими и прогнозируемыми измерениями распределяются в соответствии с гауссовым распределением, но для вычисления вероятностей можно использовать любое произвольное распределение вероятностей или какой-либо другой метод. Создается
и указывается имя функции в блоке «Фильтр частиц».
type pfBlockMeasurementLikelihoodFcnExample;
function likelihood = pfBlockMeasurementLikelihoodFcnExample(particles, measurement) % pfBlockMeasurementLikelihoodFcnExample Measurement likelihood function for particle filter % % The measurement is the first state % % Inputs: % particles - A NumberOfStates-by-NumberOfParticles matrix % measurement - System output, a scalar % % Outputs: % likelihood - A vector with NumberOfParticles elements whose n-th % element is the likelihood of the n-th particle %#codegen % Predicted measurement yHat = particles(1,:); % Calculate likelihood of each particle based on the error between actual % and predicted measurement % % Assume error is distributed per multivariate normal distribution with % mean value of zero, variance 1. Evaluate the corresponding probability % density function e = bsxfun(@minus, yHat, measurement(:)'); % Error numberOfMeasurements = 1; mu = 0; % Mean Sigma = eye(numberOfMeasurements); % Variance measurementErrorProd = dot((e-mu), Sigma \ (e-mu), 1); c = 1/sqrt((2*pi)^numberOfMeasurements * det(Sigma)); likelihood = c * exp(-0.5 * measurementErrorProd); end
Сконфигурируйте блок фильтра частиц для оценки. Указываются имена функций перехода состояния и правдоподобия измерения, количество частиц и начальное распределение этих частиц.
На вкладке «Системная модель» диалогового окна блока задайте следующие параметры:
Переход к состоянию
Укажите функцию перехода состояния, pfBlockStateTransitionFcnExample, в функции. При вводе имени функции и нажатии кнопки «Применить» блок обнаруживает, что функция имеет дополнительный вход,
и создает входной порт StateTransiveFcnInputs. Системный вход подключается к этому порту.
Инициализация
Определить 10000 В количестве частиц. Большее количество частиц обычно соответствует лучшей оценке при повышенных вычислительных затратах.
Определить Gaussian В распределении, чтобы получить начальный набор частиц из многомерного гауссова распределения. Затем укажите [0; 0; 0] в среднем, потому что у вас есть три состояния, и это ваше лучшее предположение. Определить diag([10 5 100]) в ковариации, чтобы указать большую дисперсию (неопределенность) в вашем предположении для третьего состояния, и меньшую дисперсию для первых двух. Очень важно, чтобы этот начальный набор частиц распространялся достаточно широко (большая дисперсия), чтобы покрыть потенциальное истинное состояние.
Измерение 1
Укажите имя функции правдоподобия измерения, pfBlockMeasurementLikelihoodFcnExample, в функции.
Время выборки
В нижней части диалогового окна блока введите 1 в поле «Время образца». Если имеется различное время выборки между функциями перехода состояния и правдоподобия измерения, или если имеется несколько датчиков с разным временем выборки, их можно настроить на вкладке Block outputs, Multirate.

Фильтр частиц включает удаление частиц с низкой вероятностью и затравку новых частиц с использованием частиц с более высокой вероятностью. Управление осуществляется с помощью опций в группе Ресамплинг (Resampling). В этом примере используются настройки по умолчанию.
По умолчанию блок выводит только среднее из гипотез состояния, взвешенное по их вероятностям. Чтобы просмотреть все частицы, веса или выбрать другой метод извлечения оценки состояния, просмотрите опции на вкладке Block outputs (Вывод блоков) Multirate (Многоскоростной).
Для простого теста истинная модель установки моделируется с помощью входных сигналов белого шума. Входы и шумовые измерения от установки подаются в блок фильтра частиц. Следующая модель Simulink представляет эту настройку.
open_system('pfBlockExample')

Смоделировать систему и сравнить оцененные и истинные параметры:
sim('pfBlockExample') open_system('pfBlockExample/Parameter Estimates')

На графике показаны истинные параметры числителя и знаменателя, а также их оценки фильтра частиц. Оценки приблизительно сходятся к истинным значениям через 10 временных шагов. Сходимость получается, даже если исходная догадка состояния была далека от истинных значений.
Здесь перечислены некоторые потенциальные проблемы реализации и идеи поиска и устранения неисправностей, если фильтр частиц работает не так, как ожидалось для вашего приложения.
Поиск и устранение неисправностей фильтра частиц обычно выполняется путем просмотра набора частиц и их весов, которые могут быть получены путем выбора «Output all particules» и «Output all weights» в окне «Block outputs», вкладка «Multipate rate» диалогового окна блока.
Первая проверка работоспособности заключается в том, чтобы гарантировать, что функции перехода состояния и правдоподобия измерений достаточно хорошо фиксируют поведение вашей системы. Если для системы имеется расчетная модель (и, следовательно, доступ к истинному состоянию в моделировании), можно попробовать инициализировать фильтр с истинным состоянием. Затем можно проверить, точно ли функция перехода состояния вычисляет распространение истинного состояния во времени и вычисляет ли функция правдоподобия измерения высокую вероятность для этих частиц.
Важен начальный набор частиц. Убедитесь, что хотя бы некоторые частицы имеют высокую вероятность в начале моделирования. Если истинное состояние находится вне начального распространения гипотез состояния, оценки могут быть неточными или даже расходиться.
Если точность оценки состояния изначально является тонкой, но со временем ухудшается, то проблема может заключаться в вырождении частиц или обнищании частиц [2]. Вырождение частиц происходит, когда частицы распределены слишком широко, в то время как обнищание частиц происходит из-за скопления частиц после повторной выборки. Вырожденность частиц приводит к обнищанию частиц в результате прямой повторной выборки. Добавление искусственного шума процесса в функцию «состояние-переход», используемую в этом примере, является одним из практических подходов. Существует большая коллекция литературы по решению этих проблем и на основе вашего приложения могут быть доступны более систематические подходы. [1], [2] - это две ссылки, которые могут быть полезны.
Проверка оценки состояния: Как только фильтр выполняет ожидаемое действие при моделировании, производительность, как правило, дополнительно проверяется с помощью обширного моделирования Монте-Карло. Дополнительные сведения см. в разделе Проверка оценки состояния в режиме онлайн в Simulink. Для упрощения моделирования можно использовать опции в группе Случайность (Randomness) диалогового окна Блок фильтра частиц (Particle Filter).
Генерация кода: Блок фильтра частиц поддерживает генерацию кода C и C++ с помощью программного обеспечения Simulink Coder™. Функции, предоставляемые этому блоку, должны соответствовать ограничениям программного обеспечения MATLAB Coder™ (если для моделирования системы используются функции MATLAB) и программного обеспечения Simulink Coder (если для моделирования системы используются функциональные блоки Simulink).
В этом примере показано, как использовать блок «Фильтр частиц» на панели инструментов идентификации системы. Параметры функции передачи дискретного времени оценивались рекурсивно, при этом параметры обновлялись на каждом шаге времени по мере поступления новой информации.
close_system('pfBlockExample',0)
Удалите папку файла примера из пути MATLAB.
rmpath(fullfile(matlabroot,'examples','ident','main'));
[1] Саймон, Дан. оптимальная оценка состояния: Калман, H бесконечность и нелинейные подходы. John Wiley & Sons, 2006.
[2] Дукет, Арно и Адам М. Йохансен. «Учебное пособие по фильтрации и сглаживанию частиц: Пятнадцать лет спустя». Справочник по нелинейной фильтрации 12.656-704 (2009): 3.
Расширенный фильтр Калмана | Фильтр частиц | Незараженный фильтр Калмана