创建复合的 System object
此示例说明如何创建一个由若干其他 System object 组成的 System object™。此 System object 使用两个移动平均值 System object 求两个独立样本的互相关性。创建移动平均值 System object示例详细说明如何创建 System object。此示例重点介绍如何在一个 System object 中使用另一个 System object。
作为私有属性的 System object
使用 System object 能够创建多个 System object 实例并让每个实例管理其自身的状态,该功能是相较于使用函数的最大优势之一。私有属性 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
方法中,创建两个移动平均值 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