Диагностируйте проблемы идентификации моделей передаточных функций в частотном диапазоне

В этом примере показано, как выполнить и решить проблему идентификации системы SISO с помощью данных частотной характеристики (FRD). Методы, объясненные здесь, могут также применяться к моделям MIMO и входным-выходным данным частотного диапазона.

Когда вы используете tfest команда для оценки модели передаточной функции SISO из данных частотной характеристики, алгоритм оценки минимизирует следующую функцию потерь (затрат) методом наименьших квадратов:

minimizeG(ω)k=1Nf|W(ωk)(G(ωk)-f(ωk))|2

Вот W - частотно-зависимый вес, который вы задаете, G - передаточная функция, которая должна быть оценена, f являются измеренными данными частотной характеристики, и w - частота. Nf - количество частот, на которых данные доступны. G(w)-f(w) - ошибка частотной характеристики.

В этом примере вы сначала оцениваете модель, не обрабатывая данные и не используя опции оценки для определения весового фильтра. Затем вы применяете эти методы поиска и устранения проблем, чтобы улучшить оценку модели.

Оцените модель без предварительной обработки и фильтрации

Загрузите измеренные данные частотной характеристики в непрерывном времени.

load troubleshooting_example_data Gfrd;

Gfrd является idfrd объект, который хранит данные.

Оцените начальную модель передаточной функции с 11 полюсами и 10 нулями при помощи данных оценки.

Gfit = tfest(Gfrd,11,10);

Постройте график величины частотной характеристики предполагаемой модели и измеренных данных частотной характеристики.

bodemag(Gfrd,Gfit);
ylim([-100 0])
legend('Measured','Estimated')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Measured, Estimated.

Предполагаемая модель содержит ложную динамику. Алгоритм оценки пропускает овраг со скоростью 60 рад/с, и резонансный peaks после этого. Поэтому модель не является хорошей подгонкой к данным.

Алгоритм минимизирует квадратичную невязку величины, |W(w)(G(w)-f(w))|2, в функции потерь. Постройте график этой величины как функции частоты. Этот график ошибки предоставляет представление, какие точки данных вносят наибольший вклад в функцию потерь, и также являются вероятными ограничивающими факторами во время оценки. График может помочь вам определить, почему существует ложная или неупорядоченная динамика.

Поскольку вы не задали частотно-зависимый вес, W(w) равен 1.

w = Gfrd.Frequency;
r1 = squeeze(freqresp(Gfit,w));
r2 = squeeze(freqresp(Gfrd,w));
fitError = r1-r2;
semilogx(w,abs(fitError).^2)
title('Weighted Estimation Error');
xlabel('Frequency (rad/s)');
ylabel('Magnitude (abs)')

Figure contains an axes. The axes with title Weighted Estimation Error contains an object of type line.

Из данных, модели и графиков ошибок можно увидеть, что:

  • Самые большие ошибки аппроксимации ниже 10 рад/с.

  • Алгоритм фокусируется на подборе кривой шумных точек данных высокой величины ниже 10 рад/с, которые имеют большой вклад в функцию потерь оптимизации. В результате алгоритм присваивает ложные полюсы и нули этой области данных. Чтобы решить эту проблему, можно предварительно обработать данные для улучшения отношения сигнал/шум в этой области. Можно также использовать зависящие от частоты веса, чтобы алгоритм уделял меньше особое внимание этой области.

  • Ниже приблизительно 40 рад/с большинство изменений в данных происходит из-за шума. В данных отсутствуют существенные системные режимы (овраги или peaks). Чтобы решить эту проблему, можно использовать фильтр скользящего среднего по данным для сглаживания измеренного отклика.

  • Алгоритм игнорирует овраг около 60 рад/с и три слегка демпфированных резонансных peaks, которые следуют за ней. Эти функции мало способствуют функции потерь, потому что ошибка аппроксимации мала на этих частотах. Чтобы решить эту проблему, можно задать частотно-зависимые веса, чтобы алгоритм обратил больше внимания на эти частоты.

Предварительная обработка данных

Чтобы улучшить предполагаемое качество модели, предварительно обработайте данные. Для этого вы обрезаете низкие фрагменты данных «сигнал-шум» ниже 1 рад/с и выше 2e4 рад/с, которые не интересны. Затем вы используете фильтр скользящего среднего, чтобы сгладить данные в низкочастотной высокозвуковой области ниже 40 рад/с. На этих частотах данные имеют низкое отношение сигнал/шум, но имеют динамику, которую вы заинтересованы в захвате. Не применяйте фильтр на частотах выше 40 рад/с, чтобы избежать сглаживания данных там, где вы видите овраг и три пика, которые следуют за ней.

Сделайте копию оригинала idfrd объект данных.

GfrdProcessed = Gfrd;

Обрезать данные ниже 1 рад/с и выше 2e4 рад/с.

GfrdProcessed = fselect(GfrdProcessed,1,2e4);

Примените трехточечный центрированный фильтр скользящего среднего для сглаживания данных частотной характеристики ниже 40 рад/с, который содержит ложную динамику. Данные отклика хранятся в ResponseData свойство объекта.

w = GfrdProcessed.Frequency;
f = squeeze(GfrdProcessed.ResponseData);
idx = w<40;
f(idx) = movmean(f(idx),3);

Вот f(idx) - данные частотной характеристики на частотах менее 40 рад/с.

Поместите отфильтрованные данные обратно в исходный объект данных.

GfrdProcessed.ResponseData = f;

Постройте график исходных и предварительно обработанных данных.

bodemag(Gfrd,GfrdProcessed);
ylim([-100 0]);
legend('Original data','Preprocessed data');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original data, Preprocessed data.

График показывает, что вся желаемая динамика нетронута после предварительной обработки.

Задайте весовой фильтр

Используйте низкий вес для низкочастотной области под 10 рад/с, где существует паразитная динамика. Этот низкий вес и сглаживание, примененные ранее к этим данным, снижают вероятность ложного peaks в оценочной реакции модели в этой области.

Weight = ones(size(f));
idx = w<10;
Weight(idx) = Weight(idx)/10;

Используйте высокий вес для данных в частотной области значений 40-6e3 рад/с, где вы хотите захватить динамику, но величина данных отклика низкая.

idx = w>40 & w<6e3;
Weight(idx) = Weight(idx)*30;

Задайте веса в WeightingFilter опция набора опций оценки.

tfestOpt = tfestOptions('WeightingFilter',Weight);

Обратите внимание, что Weight - пользовательский фильтр взвешивания. Можно также задать WeightingFilter как 'inv' или 'invsqrt' для данных частотной характеристики. Эти опции задают вес как 1/|f(w)| и 1/|f(w)|, соответственно. Эти опции позволяют вам быстро протестировать эффект использования более высокого веса для областей данных с низкой величиной. 'invsqrt' обычно является хорошим начальным выбором. Если эти веса не дают хороших результатов оценки, можно предоставить пользовательские веса, как показано в этом примере.

Оценка модели с использованием предварительно обработанных и отфильтрованных данных

Оцените модель передаточной функции с 11 полюсами и 10 нулями с помощью предварительно обработанных данных и заданного весового фильтра.

GfitNew = tfest(GfrdProcessed,11,10,tfestOpt);

Постройте график исходных данных, начальной характеристики модели и новой характеристики модели.

bodemag(Gfrd,Gfit,GfitNew);
ylim([-100 0]);
legend('Original Data','Original Model','New Model');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Original Data, Original Model, New Model.

Постройте график ошибки расчета. Вычислите ошибку расчета путем включения взвешивающего фильтра Weight который вы использовали для оценки GfitNew.

w = GfrdProcessed.Frequency;
r1 = squeeze(freqresp(GfitNew,w));
r2 = squeeze(freqresp(GfrdProcessed,w));
fitErrorNew = Weight.*(r1-r2);
semilogx(w,abs(fitErrorNew).^2)
title('Weighted Estimation Error');
xlabel('Frequency (rad/s)');
ylabel('Magnitude (abs)');

Figure contains an axes. The axes with title Weighted Estimation Error contains an object of type line.

Новая модель успешно захватывает всю интересующую динамику системы.

Можно использовать график взвешенной ошибки для дальнейшего поиска и устранения проблем, если первоначальный выбор весов не дает удовлетворительного результата.

См. также

|

Похожие темы