Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Análisis de ruido del sensor inercial utilizando la varianza de Allan

Este ejemplo muestra cómo utilizar la varianza de Allan para determinar los parámetros de ruido de un giroscopio MEMS. Estos parámetros se pueden utilizar para modelar el giroscopio en simulación. La medida del giroscopio se modela como:

Los tres parámetros de ruido N (ángulo de caminata aleatoria), K (tasa de caminata aleatoria) y B (inestabilidad de sesgo) se estiman utilizando datos registrados desde un giroscopio estacionario.

Fondo

La varianza de Allan fue desarrollada originalmente por David W. Allan para medir la estabilidad de frecuencia de osciladores de precisión. También se puede utilizar para identificar diversas fuentes de ruido presentes en mediciones de giroscopio estacionario. Considere L muestras de datos de un giroscopio con un tiempo de muestra de . Forme grupos de datos de duraciones , , ..., y obtenga los promedios de la suma de los puntos de datos contenidos en cada grupo a lo largo de la longitud del grupo. La varianza de Allan se define como la varianza de dos muestras de los promedios del grupo de datos en función del tiempo del grupo. Este ejemplo utiliza el estimador de varianza de Allan superpuesto. Esto significa que los grupos calculados se superponen. El estimador funciona mejor que los estimadores no superpuestos para valores mayores de L.

Cálculo de la varianza de Allan

La varianza de Allan se calcula de la siguiente manera:

Registre muestras de giroscopio estacionario L con un período de muestra . Sean las muestras registradas.

% Load logged data from one axis of a three-axis gyroscope. This recording
% was done over a six hour period with a 100 Hz sampling rate.
load('LoggedSingleAxisGyroscope', 'omega', 'Fs')
t0 = 1/Fs;

Para cada muestra, calcule el ángulo de salida :

Para muestras discretas, se puede utilizar la suma acumulada multiplicada por .

theta = cumsum(omega, 1)*t0;

A continuación, calcule la varianza de Allan:

donde y es el promedio del ensemble .

El promedio del ensemble se puede ampliar a:

maxNumM = 100;
L = size(theta, 1);
maxM = 2.^floor(log2(L/2));
m = logspace(log10(1), log10(maxM), maxNumM).';
m = ceil(m); % m must be an integer.
m = unique(m); % Remove duplicates.

tau = m*t0;

avar = zeros(numel(m), 1);
for i = 1:numel(m)
    mi = m(i);
    avar(i,:) = sum( ...
        (theta(1+2*mi:L) - 2*theta(1+mi:L-mi) + theta(1:L-2*mi)).^2, 1);
end
avar = avar ./ (2*tau.^2 .* (L - 2*m));

Finalmente, la desviación de Allan se utiliza para determinar los parámetros de ruido del giroscopio.

adev = sqrt(avar);

figure
loglog(tau, adev)
title('Allan Deviation')
xlabel('\tau');
ylabel('\sigma(\tau)')
grid on
axis equal

La varianza de Allan también se puede calcular usando la función allanvar .

[avarFromFunc, tauFromFunc] = allanvar(omega, m, Fs);
adevFromFunc = sqrt(avarFromFunc);

figure
loglog(tau, adev, tauFromFunc, adevFromFunc);
title('Allan Deviations')
xlabel('\tau')
ylabel('\sigma(\tau)')
legend('Manual Calculation', 'allanvar Function')
grid on
axis equal

Identificación de parámetros de ruido

Para obtener los parámetros de ruido para el giroscopio, utilice la siguiente relación entre la varianza de Allan y la densidad espectral de potencia (PSD) bilateral de los parámetros de ruido en el conjunto de datos original . La relación es:

De la ecuación anterior, la varianza de Allan es proporcional a la potencia de ruido total del giroscopio cuando pasa a través de un filtro con una función de transferencia de . Esta función de transferencia surge de las operaciones realizadas para crear y operar sobre los clusters.

Usando esta interpretación de la función de transferencia, el paso banda del filtro depende de . Esto significa que se pueden identificar diferentes parámetros de ruido cambiando el paso banda del filtro o variando .

Paseo aleatorio en ángulo

La caminata aleatoria en ángulo se caracteriza por el espectro de ruido blanco de la salida del giroscopio. El PSD está representado por:

dónde

N = coeficiente de recorrido aleatorio del ángulo

Sustituyendo en la ecuación PSD original y realizando la integración se obtiene:

La ecuación anterior es una línea con una pendiente de -1/2 cuando se traza en un gráfico log-log de versus . El valor de N se puede leer directamente en esta línea en . Las unidades de N son .

% Find the index where the slope of the log-scaled Allan deviation is equal
% to the slope specified.
slope = -0.5;
logtau = log10(tau);
logadev = log10(adev);
dlogadev = diff(logadev) ./ diff(logtau);
[~, i] = min(abs(dlogadev - slope));

% Find the y-intercept of the line.
b = logadev(i) - slope*logtau(i);

% Determine the angle random walk coefficient from the line.
logN = slope*log(1) + b;
N = 10^logN

% Plot the results.
tauN = 1;
lineN = N ./ sqrt(tau);
figure
loglog(tau, adev, tau, lineN, '--', tauN, N, 'o')
title('Allan Deviation with Angle Random Walk')
xlabel('\tau')
ylabel('\sigma(\tau)')
legend('\sigma', '\sigma_N')
text(tauN, N, 'N')
grid on
axis equal
N =

    0.0126

Calificar paseo aleatorio

La velocidad de caminata aleatoria se caracteriza por el espectro de ruido rojo (ruido browniano) de la salida del giroscopio. El PSD está representado por:

dónde

K = tasa de coeficiente de caminata aleatoria

Sustituyendo en la ecuación PSD original y realizando la integración se obtiene:

La ecuación anterior es una línea con una pendiente de 1/2 cuando se traza en un gráfico log-log de versus . El valor de K se puede leer directamente en esta línea en . Las unidades de K son .

% Find the index where the slope of the log-scaled Allan deviation is equal
% to the slope specified.
slope = 0.5;
logtau = log10(tau);
logadev = log10(adev);
dlogadev = diff(logadev) ./ diff(logtau);
[~, i] = min(abs(dlogadev - slope));

% Find the y-intercept of the line.
b = logadev(i) - slope*logtau(i);

% Determine the rate random walk coefficient from the line.
logK = slope*log10(3) + b;
K = 10^logK

% Plot the results.
tauK = 3;
lineK = K .* sqrt(tau/3);
figure
loglog(tau, adev, tau, lineK, '--', tauK, K, 'o')
title('Allan Deviation with Rate Random Walk')
xlabel('\tau')
ylabel('\sigma(\tau)')
legend('\sigma', '\sigma_K')
text(tauK, K, 'K')
grid on
axis equal
K =

   9.0679e-05

Inestabilidad del sesgo

La inestabilidad del sesgo se caracteriza por el espectro de ruido rosa (ruido de parpadeo) de la salida del giroscopio. El PSD está representado por:

dónde

B = coeficiente de inestabilidad del sesgo

= frecuencia de corte

Sustituyendo en la ecuación PSD original y realizando la integración se obtiene:

dónde

Ci = función coseno-integral

Cuando es mucho más largo que la inversa de la frecuencia de corte, la ecuación PSD es:

La ecuación anterior es una línea con una pendiente de 0 cuando se traza en un gráfico log-log de versus . El valor de B se puede leer directamente en esta línea con una escala de . Las unidades de B son .

% Find the index where the slope of the log-scaled Allan deviation is equal
% to the slope specified.
slope = 0;
logtau = log10(tau);
logadev = log10(adev);
dlogadev = diff(logadev) ./ diff(logtau);
[~, i] = min(abs(dlogadev - slope));

% Find the y-intercept of the line.
b = logadev(i) - slope*logtau(i);

% Determine the bias instability coefficient from the line.
scfB = sqrt(2*log(2)/pi);
logB = b - log10(scfB);
B = 10^logB

% Plot the results.
tauB = tau(i);
lineB = B * scfB * ones(size(tau));
figure
loglog(tau, adev, tau, lineB, '--', tauB, scfB*B, 'o')
title('Allan Deviation with Bias Instability')
xlabel('\tau')
ylabel('\sigma(\tau)')
legend('\sigma', '\sigma_B')
text(tauB, scfB*B, '0.664B')
grid on
axis equal
B =

    0.0020

Ahora que se han calculado todos los parámetros de ruido, trace la desviación de Allan con todas las líneas utilizadas para cuantificar los parámetros.

tauParams = [tauN, tauK, tauB];
params = [N, K, scfB*B];
figure
loglog(tau, adev, tau, [lineN, lineK, lineB], '--', ...
    tauParams, params, 'o')
title('Allan Deviation with Noise Parameters')
xlabel('\tau')
ylabel('\sigma(\tau)')
legend('$\sigma (rad/s)$', '$\sigma_N ((rad/s)/\sqrt{Hz})$', ...
    '$\sigma_K ((rad/s)\sqrt{Hz})$', '$\sigma_B (rad/s)$', 'Interpreter', 'latex')
text(tauParams, params, {'N', 'K', '0.664B'})
grid on
axis equal

Simulación de giroscopio

Utilice el objeto imuSensor para simular mediciones de giroscopio con los parámetros de ruido identificados anteriormente.

% Simulating the gyroscope measurements takes some time. To avoid this, the
% measurements were generated and saved to a MAT-file. By default, this
% example uses the MAT-file. To generate the measurements instead, change
% this logical variable to true.
generateSimulatedData = false;

if generateSimulatedData
    % Set the gyroscope parameters to the noise parameters determined
    % above. Use single-sided noise to match the parameter scaling and 500
    % poles for the bias instability model to match the hardware output.
    numpoles = 500;
    gyro = gyroparams('NoiseDensity', N, 'RandomWalk', K, ...
        'BiasInstability', B, 'NoiseType', 'single-sided', ...
        'BiasInstabilityCoefficients', fractalcoef(numpoles));
    omegaSim = helperAllanVarianceExample(L, Fs, gyro);
else
    load('SimulatedSingleAxisGyroscope', 'omegaSim')
end

Calcule la desviación de Allan simulada y compárela con los datos registrados.

[avarSim, tauSim] = allanvar(omegaSim, 'octave', Fs);
adevSim = sqrt(avarSim);
adevSim = mean(adevSim, 2); % Use the mean of the simulations.

figure
loglog(tau, adev, tauSim, adevSim, '--')
title('Allan Deviation of HW and Simulation')
xlabel('\tau');
ylabel('\sigma(\tau)')
legend('HW', 'SIM')
grid on
axis equal

El gráfico muestra que el modelo de giroscopio creado a partir del imuSensor genera mediciones con una desviación de Allan similar a los datos registrados. Las mediciones del modelo contienen un poco menos de ruido ya que los parámetros relacionados con la temperatura y la cuantificación no se configuran usando gyroparams. El modelo de giroscopio se puede utilizar para generar mediciones utilizando movimientos que no se capturan fácilmente con hardware.

Referencias

  • Estándar IEEE. Guía de formato de especificación estándar IEEE 647-2006 y procedimiento de prueba para giroscopios láser de un solo eje