Создайте объект Composite System

В этом примере показано, как создать системную object™, состоящую из других системных объектов. Этот системный объект использует два системных объектов скользящего среднего, чтобы найти перекрестную корреляцию двух независимых выборок. Пример объекта Create Moving Average System подробно объясняет, как создать системный объект. Этот пример особого внимания на том, как использовать Системный объект в другом Системном объекте.

Системные объекты как частная собственность

Возможность создать более одного образцы объекта System и иметь каждый образец управлять своим собственным состоянием является одним из самых больших преимуществ использования системных объектов над функциями. Область частной собственности MovingAverageFilter1 и MovingAverageFilter2 используются для хранения двух объектов фильтра скользящего среднего.

properties (Access=private)
    % This example class contains two moving average filters (more can be added
    % in the same way)
    MovingAverageFilter1
    MovingAverageFilter2
end

Настройка фильтра скользящего среднего

В setupImpl метод, создайте два Системных объектов скользящего среднего и инициализируйте их общественную собственность.

function setupImpl(obj,~)
    % Set up moving average objects with default values
    obj.MovingAverageFilter1 = movingAverageFilter('WindowLength',obj.WindowLength1);
    obj.MovingAverageFilter2 = movingAverageFilter('WindowLength',obj.WindowLength2);
end

Работа с зависимыми свойствами

The WindowLength общественная собственность из Filter movingAverage Системный объект реализован как зависимое свойство в этом примере.

properties(Nontunable,Dependent)
    % WindowLength Moving window length
    WindowLength1;
    WindowLength2;
end

Каждый раз, когда вы присваиваете значение одному из зависимых свойств, значение устанавливается в соответствующий фильтр скользящего среднего. Когда вы читаете одно из зависимых свойств, значение считывается с соответствующего фильтра скользящего среднего.

function set.WindowLength1(obj,WindowLength1)
    % Set the window length of one moving average filter
    obj.MovingAverageFilter1.WindowLength = WindowLength1;
end
function WindowLength = get.WindowLength1(obj)
    % Read window length from one of the moving average filters
    WindowLength = obj.MovingAverageFilter1.WindowLength;
end
function set.WindowLength2(obj,WindowLength2)
    % Set the window length of one moving average filter
    obj.MovingAverageFilter2.WindowLength = WindowLength2;
end
function WindowLength = get.WindowLength2(obj)
    % Read window length from one of the moving average filters
    WindowLength = obj.MovingAverageFilter2.WindowLength;
end

Используйте объект перекрестной корреляции в MATLAB

Создайте случайные переменные, чтобы вычислить перекрестную корреляцию их движущихся средних значений, а затем просмотрите результаты в диаграмму лист-ствол.

x = rand(20,1);
y = rand(20,1);
crossCorr = crossCorrelationMovingAverages('WindowLength1',1,'WindowLength2',5);

for iter = 1:100
    x = rand(20,1);
    y = rand(20,1);
    [corr,lags] = crossCorr(x,y);
    stem(lags,corr)
end

Figure contains an axes. The axes contains an object of type stem.