Этот пример показывает моделирование измеренного сигнала. Мы анализируем текущий сигнал от 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.