Этот пример показывает моделирование измеренного сигнала. Мы анализируем текущий сигнал от R-фазы, когда трехфазный преобразователь на 400 кВ включен. Измерения выполнялись AB Sydkraft в Швеции.
Мы описываем использование функционального ar
для моделирования текущего сигнала. Непараметрический анализ сигнала сначала выполняется. Инструменты для выбора разумного порядка модели затем обсуждены, наряду с использованием ar
для моделирования сигнала. Методы для того, чтобы подобрать модель только к выбранной области значений гармоник также обсуждены.
Сигналы могут быть рассмотрены как импульсный ответ авторегрессивной линейной модели и могут таким образом быть смоделированы с помощью инструментов, таких как ar
.
Данные для сигналов могут инкапсулироваться в объекты iddata
путем установки выходных данных объекта к значениям сигналов и оставления входа пустым. Например, если x(t)
представляет сигнал, который будет смоделирован, то соответствующий объект iddata
может быть создан как: data = iddata(x,[],T);
, где T
является шагом расчета x
.
Стандартные идентификационные инструменты, такие как n4sid
, ssest
, ar
и arx
могут использоваться, чтобы оценить характеристики данных "только для вывода". Эти модели оценены для их спектральной возможности оценки, а также их способности предсказать будущие значения сигнала от измерения их прошлых значений.
Мы начинаем это тематическое исследование путем загрузки данных для текущего сигнала от преобразователя:
load current.mat
Теперь, мы группируем текущие данные (i4r
) в объект iddata
. Шаг расчета составляет 0,001 секунды (1 ms
).
i4r = iddata(i4r,[],0.001) % Second argument empty for no input
i4r = Time domain data set with 601 samples. Sample time: 0.001 seconds Outputs Unit (if specified) y1
Давайте теперь анализировать эти данные. Во-первых, смотрите на данные:
plot(i4r)
Завершение представление данных показывают ниже:
plot(i4r(201:250))
Затем, мы вычисляем необработанную периодограмму сигнала:
ge = etfe(i4r) spectrum(ge)
ge = IDFRD model. Contains spectrum of signal in the "SpectrumData" property. Output channels: 'y1' Status: Estimated using ETFE on time domain data "i4r".
Эта периодограмма показывает несколько гармоник, но не очень сглаженна. Сглаживавшая периодограмма получена:
ges = etfe(i4r,size(i4r,1)/4); spectrum(ge,ges); legend({'ge (no smoothing)','ges (with smoothing)'})
Сконфигурируйте график использовать линейную шкалу частоты и модули Гц:
h = spectrumplot(ges); opt = getoptions(h); opt.FreqScale = 'linear'; opt.FreqUnits = 'Hz'; setoptions(h,opt); axis([0 500,-5 40]) grid on, legend('ges')
Мы ясно видим доминирующую частотную составляющую 50 Гц и ее гармоники.
Давайте выполним спектральный анализ данных с помощью spa
, который использует окно Hann, чтобы вычислить спектральные амплитуды (в противоположность etfe
, который только вычисляет необработанную периодограмму). Стандартная оценка (с размером % окна по умолчанию, который не настроен к резонирующим спектрам) дает:
gs = spa(i4r); hold on spectrumplot(gs); legend({'ges (using etfe)','gs (using spa)'}) hold off
Мы видим, что очень большое окно задержки потребуется, чтобы видеть все прекрасные резонансы сигнала. Стандартный спектральный анализ не работает хорошо. Нам нужна более сложная модель, такая как обеспеченные параметрическими авторегрессивными техниками моделирования.
Давайте теперь вычислим спектры параметрическими методами AR. Модели 2-го 4-го и 8-го порядка получены:
t2 = ar(i4r,2); t4 = ar(i4r,4); t8 = ar(i4r,8);
Давайте смотреть на их спектры:
spectrumplot(t2,t4,t8,ges,opt); axis([0 500,-8 40]) legend({'t2 (2nd order AR)','t4 (4th order AR)','t8 (8th order AR)','ges (using spa)'});
Мы видим, что параметрические спектры не способны к взятию гармоник. Причина состоит в том, что модели AR присоединяют слишком много внимания к более высоким частотам, которые являются трудными к модели. (См. Ljung (1999) Пример 8.5).
Мы должны будем перейти к высокого уровня моделям, прежде чем гармоники будут взяты.
Что полезное закажет быть? Мы можем использовать arxstruc
, чтобы определить это.
V = arxstruc(i4r(1:301),i4r(302:601),(1:30)'); % Checking all order up to 30
Выполните следующую команду, чтобы выбрать лучший порядок в интерактивном режиме: nn = selstruc(V,'log');
Как фигура выше показов, существует резкий спад для n=20
. Таким образом давайте выберем тот порядок для следующих обсуждений.
t20 = ar(i4r,20); spectrumplot(ges,t20,opt); axis([0 500 -25 80]) legend({'ges (using spa)','t20 (20th order AR)'});
Все гармоники теперь взяты, но почему уровень понизился? Причина состоит в том, что t20
содержит очень тонкий но высокий peaks. С грубой сеткой точек частоты в t20
мы просто не видим истинных уровней peaks. Мы можем проиллюстрировать это можно следующим образом:
g20c = idfrd(t20,(551:650)/600*150*2*pi); % A frequency region around 150 Hz spectrumplot(ges,t20,g20c,opt) axis([0 500 -25 80]) legend({'ges (using spa)','t20 (20th order AR)','g20c (resp. around 150 Hz)'});
Когда этот график показывает, модель t20
довольно точна; когда построено на прекрасной сетке частоты, это действительно получает гармоники сигнала вполне точно.
Если мы, в основном, интересуемся более низкими гармониками и хотим использовать модели более низкоуровневые, мы должны будем применить предварительную фильтрацию данных. Мы выбираем 5-й порядок Фильтр Баттерворта с частотой среза на уровне 155 Гц. (Это должно покрыть эти 50, режимы на 100 и 150 Гц):
i4rf = idfilt(i4r,5,155/500); % 500 Hz is the Nyquist frequency
t8f = ar(i4rf,8);
Давайте теперь сравним спектр, полученный из отфильтрованных данных (8-я модель порядка) с который для неотфильтрованных данных (8-й порядок) и с периодограммой:
spectrumplot(t8f,t8,ges,opt) axis([0 350 -60 80]) legend({'t8f (8th order AR, filtered data)',... 't8 (8th order AR, unfiltered data)','ges (using spa)'});
Мы видим, что с отфильтрованными данными берем первые три peaks в спектре вполне хорошо.
Мы можем вычислить численные значения резонансов можно следующим образом: корни выбранной синусоиды частоты, скажем om
, расположены на модульном круге в exp(i*om*T)
, T
, являющийся шагом расчета. Мы таким образом продолжаем можно следующим образом:
a = t8f.a % The AR-polynomial omT = angle(roots(a))' freqs = omT/0.001/2/pi'; % show only the positive frequencies for clarity: freqs1 = freqs(freqs>0) % In Hz
a = Columns 1 through 7 1.0000 -5.0312 12.7031 -20.6934 23.7632 -19.6987 11.5651 Columns 8 through 9 -4.4222 0.8619 omT = Columns 1 through 7 1.3591 -1.3591 0.9620 -0.9620 0.3146 -0.3146 0.6314 Column 8 -0.6314 freqs1 = 216.3063 153.1036 50.0665 100.4967
Мы таким образом находим первые три гармоники (50, 100 и 150 Гц) вполне хорошо.
Мы могли также протестировать, как хорошо модель t8f
способна к предсказанию сигнала, скажите 100 мс (100 шагов) вперед и оцените подгонку на выборках 201 - 500:
compare(i4rf,t8f,100,compareOptions('Samples',201:500));
Как наблюдается, модель первых 3 гармоник довольно хороша в предсказании будущих выходных значений, даже 100 шагов вперед.
Если бы мы интересовались только четвертыми и пятыми гармониками (приблизительно 200 и 250 Гц), то мы продолжили бы фильтрацией полосы данные к этому более высокому частотному диапазону:
i4rff = idfilt(i4r,5,[185 275]/500); t8fhigh = ar(i4rff,8); spectrumplot(ges,t8fhigh,opt) axis([0 500 -60 40]) legend({'ges (using spa)','t8fhigh (8th order AR, filtered to high freq. range)'});
Мы таким образом получили хорошую модель в t8fhigh
для описания 4-х и 5-х гармоник. Мы таким образом видим, что с соответствующей предварительной фильтрацией, параметрические модели низкоуровневые могут быть созданы, которые дают хорошие описания сигнала по желаемым частотным диапазонам.
Какая модель является лучшей? В целом модель высшего порядка дала бы более высокую точность. Чтобы анализировать это, мы рассматриваем то, что 20-я модель порядка дала бы с точки зрения ее возможности в оценке гармоник:
a = t20.a % The AR-polynomial omT = angle(roots(a))' freqs = omT/0.001/2/pi'; % show only the positive frequencies for clarity: freqs1 = freqs(freqs>0) %In Hz
a = Columns 1 through 7 1.0000 0.0034 0.0132 0.0012 0.0252 0.0059 0.0095 Columns 8 through 14 0.0038 0.0166 0.0026 0.0197 -0.0013 0.0143 0.0145 Columns 15 through 21 0.0021 0.0241 -0.0119 0.0150 0.0246 -0.0221 -0.9663 omT = Columns 1 through 7 0 0.3146 -0.3146 0.6290 -0.6290 0.9425 -0.9425 Columns 8 through 14 1.2559 -1.2559 1.5726 -1.5726 1.8879 -1.8879 2.2027 Columns 15 through 20 -2.2027 2.5136 -2.5136 3.1416 2.8240 -2.8240 freqs1 = Columns 1 through 7 50.0639 100.1139 149.9964 199.8891 250.2858 300.4738 350.5739 Columns 8 through 10 400.0586 500.0000 449.4611
Мы видим, что эта модель берет гармоники очень хорошо. Эта модель предскажет 100 шагов вперед можно следующим образом:
compare(i4r,t20,100,compareOptions('Samples',201:500));
У нас теперь есть 93%-я подгонка с t20
, в противоположность 80% для t8f
.
Мы таким образом приходим к заключению, что для полной модели сигнала, t20
является естественным выбором, обоими с точки зрения получения гармоник, а также в его поддержке прогноза. Для моделей в определенных частотных диапазонах мы можем однако сделать очень хорошо с моделями более низкоуровневыми, но у нас затем есть к предварительному фильтру данные соответственно.
Для получения дополнительной информации об идентификации динамических систем с System Identification Toolbox посещают страницу информации о продукте System Identification Toolbox.