Main Content

创建复合的 System object

此示例说明如何创建一个由若干其他 System object 组成的 System object™。此 System object 使用两个移动平均值 System object 求两个独立样本的互相关性。创建移动平均值 System object示例详细说明如何创建 System object。此示例重点介绍如何在一个 System object 中使用另一个 System object。

作为私有属性的 System object

使用 System object 能够创建多个 System object 实例并让每个实例管理其自身的状态,该功能是相较于使用函数的最大优势之一。私有属性 MovingAverageFilter1MovingAverageFilter2 用于存储两个移动平均滤波器对象。

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

设置移动平均滤波器

setupImpl 方法中,创建两个移动平均值 System object 并初始化其公共属性。

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

使用从属属性

在此示例中,movingAverageFilter System object 中的 WindowLength 公共属性实现为从属属性。

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 object. The axes object contains an object of type stem.