计算从正态分布创建的时间序列的自相关
Calculate the autocorrelation of a time series created from a normal distribution
我根据正态分布生成时间序列,然后尝试使用以下代码片段绘制自相关图:
ts1 = normrnd(0,0.25,1,100);
autocorrelation_ts1 = xcorr(ts1);
我原以为 x=0 的自相关会显示 1,其余值几乎显示 0,但我在轴位置 100 处得到值 6。
我认为这个问题同时适用于 Matlab 和 Octave,但我不确定。
首先是你的第二行代码是错误的。我想你的意思是
autocorrelation_ts1 = xcorr(ts1);
除此之外,我认为您的解决方案是正确的。最大值为 100 而不是 0 的原因是因为自相关中 0 的时间偏移实际上发生在相关函数的第 100 次迭代中。换句话说,X轴上的数字不对应时间。
要在 X 轴上获取时间,请将您的代码更改为
[autocorrelation_ts1, shifts] = xcorr(ts1);
然后
plot(shifts, autocorrelation_ts1)
关于最大值,matlab documentation for xcorr
表示在不带归一化参数调用时,1不是函数的最大输出值。如果你想标准化使得所有值都为 1 或更小,请使用
[autocorrelation_ts1, shifts] = xcorr(ts1, 'normalized');
作为对 Scott 回答的补充参考,这是完整的代码片段,包括可显示多达 20 个的主干图缩放 shifts/lags。
[auto_ts1, lags] = xcorr(ts1);
ts_begin = ceil(size(lags,2)/2);
ts_end = ts_begin + 20;
stem(lags(ts_begin:ts_end),auto_ts1(ts_begin:ts_end)/max(auto_ts1), 'linewidth', 4.0, 'filled')
我根据正态分布生成时间序列,然后尝试使用以下代码片段绘制自相关图:
ts1 = normrnd(0,0.25,1,100);
autocorrelation_ts1 = xcorr(ts1);
我原以为 x=0 的自相关会显示 1,其余值几乎显示 0,但我在轴位置 100 处得到值 6。
我认为这个问题同时适用于 Matlab 和 Octave,但我不确定。
首先是你的第二行代码是错误的。我想你的意思是
autocorrelation_ts1 = xcorr(ts1);
除此之外,我认为您的解决方案是正确的。最大值为 100 而不是 0 的原因是因为自相关中 0 的时间偏移实际上发生在相关函数的第 100 次迭代中。换句话说,X轴上的数字不对应时间。
要在 X 轴上获取时间,请将您的代码更改为
[autocorrelation_ts1, shifts] = xcorr(ts1);
然后
plot(shifts, autocorrelation_ts1)
关于最大值,matlab documentation for xcorr
表示在不带归一化参数调用时,1不是函数的最大输出值。如果你想标准化使得所有值都为 1 或更小,请使用
[autocorrelation_ts1, shifts] = xcorr(ts1, 'normalized');
作为对 Scott 回答的补充参考,这是完整的代码片段,包括可显示多达 20 个的主干图缩放 shifts/lags。
[auto_ts1, lags] = xcorr(ts1);
ts_begin = ceil(size(lags,2)/2);
ts_end = ts_begin + 20;
stem(lags(ts_begin:ts_end),auto_ts1(ts_begin:ts_end)/max(auto_ts1), 'linewidth', 4.0, 'filled')