如何从带有高斯噪声的输出中找到变换矩阵



对于以下给定的输入和输出,矩阵A可以在MATLAB中通过伪逆或mrdivision求出。类似地,我现在想知道,如果我的输出信号Y矩阵包含加性零均值、不相关的高斯噪声,如何确定A

x1 = [1 1 1]';
x2 = [0 1 1]';
x3 = [0 0 1]';
x4 = [1 0 1]';
y1 = [1 2 0]';
y2 = [-1 0 3]';
y3 = [3 1 1]';
y4 = [5 3 -2]';
X = [x1 x2 x3 x4];
Y = [y1 y2 y3 y4];
A = Y/X

此外,我对未知噪声输出建模如下:

y1_n = y1 + sqrt(var(y1))*randn(size(y1));
y2_n = y2 + sqrt(var(y2))*randn(size(y2));
y3_n = y3 + sqrt(var(y3))*randn(size(y3));
y4_n = y4 + sqrt(var(y4))*randn(size(y4));
Y = [y1_n y2_n y3_n y4_n];

语句A = Y/X求解线性方程组A*X = Y。如果系统是超定的,就像在你的情况下,给出的解是最小二乘解。因此,如果你在Y上有加性的、零均值的、不相关的高斯噪声,那么A = Y/X将给你最好的、无偏的A估计。

请注意,添加到Y矩阵中的噪声相当大,因此A的估计值与理想值相去甚远。如果你加上更少的噪音,估计会更接近:

x1 = [1 1 1]';
x2 = [0 1 1]';
x3 = [0 0 1]';
x4 = [1 0 1]';
X = [x1 x2 x3 x4];
y1 = [1 2 0]';
y2 = [-1 0 3]';
y3 = [3 1 1]';
y4 = [5 3 -2]';
Y = [y1 y2 y3 y4];
for n = [1,0.1,0.01,0]
Y_n = Y + n*randn(size(Y));
A = Y_n/X;
fprintf('n = %f, A = n',n)
disp(A)
end

输出:

n = 1.000000, A = 
2.9728   -5.5407    2.8011
2.6563   -1.3166    0.6596
-3.3366    1.1349    1.5342
n = 0.100000, A = 
2.0011   -4.0256    2.9402
1.9223   -1.0029    1.0921
-3.1383    1.9874    1.0913
n = 0.010000, A = 
1.9903   -3.9912    2.9987
1.9941   -1.0001    1.0108
-3.0015    2.0001    1.0032
n = 0.000000, A = 
2.0000   -4.0000    3.0000
2.0000   -1.0000    1.0000
-3.0000    2.0000    1.0000

当然,如果你通过添加更多的矢量来增大XY,你也会得到更好的估计,并且能够补偿更多的噪声数据。

相关内容

  • 没有找到相关文章