[Procesamiento de datos GNSS] Análisis de estimación de componentes de varianza de Helmert (helmert) e implementación de código

1. La
estimación del componente de varianza de Helmert de fondo es un caso especial de estimación del componente de varianza-covarianza. En el ajuste moderno de encuestas, los datos que manejamos tienen cambios obvios, incluidos errores brutos en la secuencia de datos, y el tipo de datos ya no es único. Cuando encontramos dos o más tipos de datos, podemos considerar usar la estimación de componentes de varianza de Helmert. El requisito previo para la aplicación es que los diferentes tipos de datos deben ser independientes entre sí, de modo que nuestra matriz de ponderaciones sea una matriz diagonal.
2. Introducción
Primero presentamos el juego de Glory of the King. El Rey es un arma para burlarse de las hermanas, jaja, al igual que tienes dos teléfonos móviles (Android y Apple), usarás Apple cuando traigas a tu hermana, porque la experiencia del juego es Apple Es mejor que Android. No pierde fotogramas, se congela o se bloquea cuando traes a una chica. Necesitas operar y operar, y tener máscaras y máscaras. Esto significa que la evaluación de Apple es mayor. En otras palabras, el poder de Apple es más importante. Es a priori.
Luego, en el campo de la topografía y el mapeo, cuando estamos midiendo (aunque estoy topografiando y mapeando, pero mi topografía y mapeo tradicional es un ladrón), al medir las esquinas de la triangulación, hay dos tipos de datos; en gnss , al procesar datos multimodo Por ejemplo, gps y bds también son dos tipos de datos.
3. Realización del código Matlab Los
datos adoptan el ejemplo de P106 de "Ajuste de levantamiento generalizado" (Segunda edición) Usé código Matlab para realizar una onda.
Creo que todas las personas que han leído la teoría, resumen brevemente el proceso de procesamiento de datos:
(1) Ajuste de peso a priori,
(2) Estimación del componente de varianza,
(3) Ajuste de peso nuevamente,
(4) Después del procesamiento La varianza de peso unitario es igual hasta el umbral o menos.
La fórmula no se publicará, el código se publicará directamente

close all
clear all
clc
% 功能:helmert方差分量估计

% step1:根据误差方程(v=Bx-l)确定常量矩阵
% 测角系数矩阵B1 12*4
B1=[0.5532 -0.8100 0 0;0.2434 0.5528 0 0;-0.7966 0.2572 0 0;-0.2434 -0.5528 0 0;
    0.6298 0.6368 0 0;-0.3864 -0.0840 0 0;0.7966 -0.2572 -0.2244 -0.3379;-0.8350 -0.1523 0.0384 0.4095;
    0.0384 0.4095 0.1860 -0.0716;-0.0384 -0.4095 0.2998 0.1901;-0.3480 0.3255 -0.0384 -0.4095;0.3864 0.0840 -0.2614 0.2194];
% 测边系数矩阵B2 6*4
B2=[0.3072 0.9516 0 0;-0.9152 0.4030 0 0;0.2124 -0.9722 0 0;
    0 0 -0.6429 -0.7660;0 0 -0.8330 0.5532;0.9956 -0.0934 -0.9956 0.0934];
% 系数矩阵B 18*4
B=[B1;B2];

% 测角常数项l1 12*1
l1=[0.18 -0.53 3.15 0.23 -2.44 1.01 2.68 -4.58 2.80 -3.10 8.04 -1.14]';
l1=-l1;
% 测边常数项l2 6*1
l2=[ -0.84 1.54 -3.93 2.15 -12.58 -8.21]';
l2=-l2;
% 常数项l 18*1
l=[l1;l2];

% 测角和测边个数
n1=12;
n2=6;

% step2:按观测值来源分类,定权
cnt=0;
% 初始定权,测角中误差=1.5 测边中误差=2.0,保存测角和测边方差
sita=[1.5*1.5 2.0*2.0];
while(1)
    % 定权,得到权阵
    sita1=sita(1)/sita(1);
    sita2=sita(1)/sita(2);
    %     sita1=1;
    %     sita2=0.56;
    P1=diag(sita1*ones(1,12));
    P2=diag(sita2*ones(1,6));
    P=diag([sita1*ones(1,12) sita2*ones(1,6)]);
    
    % 求N
    N=B'*P*B;
    N1=B1'*P1*B1;
    N2=B2'*P2*B2;
    
    % 求W
    W=B'*P*l;
    W1=B1'*P1*l1;
    W2=B2'*P2*l2;
    
    % 平差
    x=inv(N)*W;
    v1=B1*x-l1;
    v2=B2*x-l2;
    
    % 按照hermet估算公式确定矩阵
    w1=v1'*P1*v1;
    w2=v2'*P2*v2;
    w=[w1 w2]';
    
    S=[n1-2*trace(inv(N)*N1)+trace(inv(N)*N1*inv(N)*N1) trace(inv(N)*N1*inv(N)*N2);
        trace(inv(N)*N1*inv(N)*N2) n2-2*trace(inv(N)*N2)+trace(inv(N)*N2*inv(N)*N2)];
    sita=inv(S)*w;% 重新定权
    cnt=cnt+1;%用于统计helmert执行次数
    disp(['【0】helmet进行次数 ',num2str(cnt),'   【1】测角和测边单位权方差 ',num2str(sita(1)),' ',num2str(sita(2)),'','   【2】单位权方差之比 1:',num2str(sita(2)/sita(1))]);

    if(abs(1-min(sita)/max(sita))<0.01)
        break;
    else
        % 测角方差和测边方差
        sita(1)=sita(1)*inv(sita1);
        sita(2)=sita(2)*inv(sita2);
    end
    
end

disp('finish');

Los comentarios del código son todos, se escribe el proceso y luego pongo los resultados que imprimí
Inserte la descripción de la imagen aquí
. El ejemplo en el libro se itera 3 veces y se sale, el mío es 4 veces. Mi derecha no tomó los dos últimos decimales. Incluso si se toman los dos últimos dígitos, encontraré que hay un error en N en el libro, ¡jajaja!

Supongo que te gusta

Origin blog.csdn.net/weixin_43074576/article/details/108795153
Recomendado
Clasificación