Matlab:从谱密度到方差

Matlab:从谱密度到方差,matlab,variance,spectral,Matlab,Variance,Spectral,我试图理解时间序列的谱密度与其方差之间的关系。据我所知,光谱密度的积分应该等于方差。至少根据大多数课堂讲稿,如 然而,我正在努力复制这一发现。假设我生成一个自回归系数为0.9的简单AR(1)序列 T = 1000; rho = 0.9; dat = zeros(T,1); for ii = 2:T dat(ii) = rho*dat(ii-1)+randn; end 我接着计算谱密度(AutoCo在信号工具箱中做与XCOV相同的事情,我没有,这是被贬的序列的协方差,向量中间的方

我试图理解时间序列的谱密度与其方差之间的关系。据我所知,光谱密度的积分应该等于方差。至少根据大多数课堂讲稿,如

然而,我正在努力复制这一发现。假设我生成一个自回归系数为0.9的简单AR(1)序列

    T = 1000;
rho = 0.9;
dat = zeros(T,1);
for ii = 2:T
    dat(ii) = rho*dat(ii-1)+randn;
end

我接着计算谱密度(AutoCo在信号工具箱中做与XCOV相同的事情,我没有,这是被贬的序列的协方差,向量中间的方差)

sdb是功率密度函数,当然是AR(1)的正确形状,向低频方向加权: . 但功率谱之和为54.5,而模拟AR(1)序列的方差约为5

我错过了什么?我理解光谱密度是指序列的方差在整个光谱中的分布。我不确定我是否误解了理论或犯了编码错误。任何好的推荐人都将不胜感激

编辑:我意识到对“sdb”级数求和显然不是取积分。为了在{pi,pi}之间积分,我应该求sdb*(2*pi/130)或等价的sdb*(pi/65),因为我只看{+pi}段,sdb对于负值是对称的。然而,我似乎仍然得到了一个大于方差的数字(甚至多次重新计算)。。。我还缺什么吗?上面的sdb行变为

sdb(j) = real(sum(autocovs'.*weight.*exp(-i*wb(j).*lags)))/(65);
sdb(j) = real(sum(autocovs'.*weight.*exp(-i*wb(j).*lags)))/(65);