Этот пример показывает, как выполнить онлайн-оценку параметра для линейной подгонки с помощью рекурсивных алгоритмов оценки в командной строке MATLAB. Вы захватываете изменяющееся во времени поведение вход-выход гидравлического клапана непрерывно переменной трансмиссии.
Система является непрерывно переменной коробкой передач (CVT), управляемой гидравлическим клапаном, вдохновленной ссылкой [1]. Давление клапана соединяется с CVT, что позволяет ему изменять отношение скоростей и передавать крутящий момент от двигателя к колесам. Поведение клапана на входе-выходе может быть аппроксимировано:
Здесь t - текущее время, y (t) - давление клапана в баре, u (t) - бесчисленный вход в области значений [0, 1]. Условие - мертвая полоса клапана.
Наклон, k (t) и смещение, b (t), зависят от температуры системы. Они варьируются при прогреве системы от холодной до обычной рабочей температуры. Вы хотите оценить k (t) и b (t) на основе шумных измерений u (t) и y (t).
Истинные параметры наклона и смещения k (0) = 70 и b (0) = -15 в момент t = 0s. В t = 50s запускается двигатель. Параметры изменяются со временем, пока они не достигнут k (950) = 50 и b (950) = -13 в t = 950-х годах. Время дискретизации Ts = 0.1s
Содержимое входного сигнала u критически важно для оценки параметра. Рассмотрим случай, когда u, и, следовательно, y, является постоянным. Тогда существует бесконечно много значений k и b, которые удовлетворяют y = k u + b. u (t) должна постоянно возбуждать систему для успешной оценки k (t) и b (t). В этом примере вход u:
равен нулю от t = 0s до t = 50s.
имеет изменения шага 0,40, 0,45, 0,50, 0,55, 0,60, 0,55, 0,50, 0,45, 0,40 каждые 100, от t = 50 до t = 950.
Гауссову случайную переменную с нулевым средним, 0,02 стандартного отклонения добавляли на каждом временном шаге от t = 50 до t = 950 для обеспечения дополнительного возбуждения динамики системы в целях идентификации.
Выход генерируется с вышеупомянутыми истинными значениями k (t), b (t) вместе с входным сигналом u (t), используя y (t) = k (t) u (t) + b (t) + e (t). e (t), измерение шум, является Гауссовой случайной переменной с нулем средним и стандартным отклонением 0,05.
load LineFittingRLSExample u y k b t; figure(); subplot(2,1,1); plot(t,u); ylabel('Input signal, u, [unitless]'); subplot(2,1,2); plot(t,y); ylabel('Valve pressure, y, [bar]'); xlabel('Time [s]');
Запишите модель вход-выход клапана с помощью векторного обозначения:
где является регрессорами и - параметры, которые будут оценены. e (t) - неизвестный шум. Вы используете команду recursiveLS estimation, чтобы создать Системный объект для онлайн-оценки параметра. Затем вы используете команду step, чтобы обновить оценки параметров x (t) на каждом временном шаге, основанном на H (t) и y (t).
Вы задаете следующие свойства recursiveLS Системный Объект:
Количество параметров: 2.
EstimationMethod: 'FormettingFactor' (по умолчанию). Этот метод имеет только один скалярный параметр, FormettingFactor, который требует ограниченной предварительной информации относительно значений параметров.
FormettingFactor: 0.95. Ожидается, что параметры изменятся с течением времени, следовательно, менее 1. количество прошлых выборок данных, которые больше всего влияют на оценки.
InitialParameters: [70; -15], начальное предположение для значений параметров. Необязательно, но рекомендуется для уменьшения начальных переходных процессов.
InitialParameterCovariation: Ваша оценка неопределенности в исходном параметре угадает. Установите его на небольшое значение, 1% от абсолютного значения начальных параметров, если у вас есть доверие в начальных предположениях параметра. Необязательно, но рекомендуемо, особенно когда вы задаете InitialParameters. Это используется только с методами оценки FormettingFactor и KalmanFilter.
X = recursiveLS(2,... % 2=number of estimated parameters 'EstimationMethod','ForgettingFactor',... 'ForgettingFactor',0.95,... 'InitialParameters',[70; -15],... 'InitialParameterCovariance',[0.7 0.15]);
Этот пример моделирует оперативную операцию оценщика путем предоставления одной (y (t), H (t)) пары в оценщик за раз. Вызовите команду step, чтобы обновить параметры каждой новой пары. Адаптация параметра включена только, когда вход u находится вне мертвой полосы (u > 0,3).
theta = zeros(numel(u),2); yHat = zeros(numel(u),1); PHat = zeros(numel(u),2,2); for kk=1:numel(u) % enable parameter estimation only when u is outside the dead-band if u(kk)>=0.3 X.EnableAdaptation = true(); else X.EnableAdaptation = false(); end [theta(kk,:),yHat(kk)] = step(X,y(kk),[u(kk) 1]); % get estimated parameters and output PHat(kk,:,:) = X.ParameterCovariance; % get estimated uncertainty in parameters % perform any desired tasks with the parameters end
Истинное и оцененное значения параметров:
figure(); subplot(2,1,1); plot(t,theta(:,1),t,k); % Estimated and real slope, respectively ylabel('Slope'); xlabel('Time'); ylim([49 71]); legend('Estimated','Real','Location','Best'); subplot(2,1,2); plot(t,theta(:,2),t,b); % Estimated and real offset, respectively ylabel('Offset'); xlabel('Time'); ylim([-15.25 -12.75]);
Оценщик предоставляет следующие два инструмента для оценки качества оценок параметра:
Оценка выхода : Второй выходной аргумент метода step: . Относительная и абсолютная ошибка между и - меры качества подгонки.
Оценка параметра ковариации : Это доступно с помощью алгоритмов FormettingFactor и KalmanFilter. Он хранится в свойстве ParameterCovariationMatrix оценщика. Диагонали - предполагаемые отклонения параметров. Чем ниже, тем лучше.
Выходное измерение и его оценка, а также связанные абсолютные и относительные погрешности, когда двигатель включен:
engineOn = t>50 & t<950; figure(); subplot(2,1,1); absoluteError = y-yHat; plot(t(engineOn),absoluteError(engineOn)); ylim([-0.15 0.15]); ylabel('Abs. Error [bar]'); subplot(2,1,2); relativeError = (y-yHat)./y; plot(t(engineOn),relativeError(engineOn)); ylim([-0.025 0.025]); ylabel('Rel. Error [unitless]'); xlabel('Time [s]');
Абсолютные ошибки составляют около 0,1 бар. Относительные погрешности ниже 2%. Обе величины малы.
Диагонали матрицы параметра ковариации, масштабированные отклонением невязок , захватывайте отклонения оценок параметров. Квадратный корень дисперсий является стандартными отклонениями от оценок параметра.
noiseVariance = var(y(engineOn)-yHat(engineOn)); figure(); subplot(2,1,1); hold on; plot(t,sqrt(PHat(:,1,1)*noiseVariance)); ylim([0 1]); ylabel('Std. dev. of slope k'); subplot(2,1,2); plot(t,sqrt(PHat(:,2,2)*noiseVariance)); ylim([0 1]); ylabel('Std. dev. of offset b'); xlabel('Time [s]'); hold on;
Стандартное отклонение наклона k колеблется около 0,7. Это мало относительно области значений значений k [50, 70]. Это дает доверие в оценках параметров. Аналогичная ситуация и со смещением b, которое находится в области значений [-15 -13].
Обратите внимание, что стандартные отклонения параметра также являются оценочными. Они основаны на предположении, что невязки белые. Это зависит от способа оценки, связанных с ним параметров, структуры оценочной модели и входного сигнала u. Различия между предполагаемой и фактической структурой модели, отсутствие стойкого входного возбуждения или нереалистичные настройки метода оценки могут привести к чрезмерно оптимистичным или пессимистичным оценкам неопределенности.
Вы выполнили подгонку линии, используя рекурсивные наименьшие квадраты, чтобы захватить изменяющееся во времени поведение гидравлического клапана на входе и выходе. Вы оценили качество подгонки, рассмотрев два сигнала: ошибку между оцененным и измеренным выходом системы и ковариацией оценок.
[1] Готье, Жан-Филипп и Филипп Мишо. «Регулируемые RLS и DHOBE: адаптивный Feedforward для электромагнитного клапана». Технология систем управления, транзакции IEEE на 20.5 (2012): 1311-1318
clone
| isLocked
| recursiveAR
| recursiveARMA
| recursiveARMAX
| recursiveARX
| recursiveBJ
| recursiveLS
| recursiveOE
| release
| reset
| step