一些曲线拟合或平滑工具可以受益于对数据的噪声方差的了解。卡尔曼滤波器使用这些信息,还有一些样条拟合工具。所以我写了一个函数从信号向量中提取噪声方差。它也适用于数组的任何指定维度。
下面是一些使用此代码的示例:
简单线性数据,纯加性N(0,1)高斯噪声:
T = 0:10000;
X = t + randn(size(t));
Mv =估计噪声(x)
mv =
1.0166
正弦波加高斯噪声(标称方差= 0.01)
T = linspace(0,1,1000)';
X = sin(t*50) + randn(size(t))/10;
Mv =估计噪声(x)
mv =
0.0096887
纯高斯噪声,标称方差为9。(请注意,对于这种特殊情况,var是一个更好的估计器…)
Mv = estimatenoise(3*randn(2,3,1000),3)
mv =
9.6584 8.2696 8.632
9.2404 8.5346 9.7725
具有多个不连续点的分段常数函数。真实噪声方差应为0.01。
T = linspace(0,1,1000);
X = round(cos(t*6*pi)) + randn(size(t))/10;
情节(t, X)
var(X) % var会有很大的错误
ans =
0.68256
estimatenoise (X)
ans =
0.010882
测试estimatenoise是否能够恢复单位方差的正态分布随机样本的方差。(是的,它会比var慢得多。)
意思是(estimatenoise (randn(1000、1000)))
ans =
1.0002
Estimatenoise现在可以处理非均匀间隔序列(通过请求)。在下一个例子中,
这里的实际噪声方差为1.0。执行1000次操作,然后查看中位数方差估计。我们做得怎么样?
T = sort([randn(1100), randn(1100)+5]);
X = repmat(sin(t*5)*100,1000,1) +…
randn(1000,长度(t));
当忽略间隔时,Estimatenoise显然是错误的。
中位数(estimatenoise (X, 2))
ans =
16.438
提供采样次数,得到了较为合理的结果。
中位数(estimatenoise (X 2 t))
ans =
1.1307
Estimatenoise也适用于有重复的数据。在本例中,每个点将被复制最多3次。实际的噪声方差还是1.0。我还将比较提供t时估计噪声所需时间的增加。
T = sort([0:1:100, 1:2:100, 1:4:100]);
X = repmat(sin(t/10)*100,1000,1)+…
randn(1000,长度(t));
同样,当忽略非均匀间距时,estimatenoise显然是错误的。
抽搐,中位数(estimatenoise (X, 2)), toc
ans =
4.2056
运行时间为2.690135秒。
提供抽样“次数”,我们再次得到了相当合理的结果。时间损失不是2x。
抽搐、中值(estimatenoise (X 2 t)), toc
ans =
1.0116
运行时间为4.864486秒。
引用作为
约翰·迪里科(2022)。Estimatenoise(//www.tianjin-qmedu.com/matlabcentral/fileexchange/16683-estimatenoise), MATLAB中央文件交换。检索.