Estimatenoise

版本1.0.0.0 (5.83 KB) 约翰D 'Errico
从信号矢量或阵列估计噪声方差

7.9 k下载

更新12月10日

查看许可协议

一些曲线拟合或平滑工具可以受益于对数据的噪声方差的了解。卡尔曼滤波器使用这些信息,还有一些样条拟合工具。所以我写了一个函数从信号向量中提取噪声方差。它也适用于数组的任何指定维度。

下面是一些使用此代码的示例:

简单线性数据,纯加性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中央文件交换。检索

MATLAB版本兼容性
使用R2007a创建
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!