В этом примере показано, как использовать отклонение Аллана, чтобы определить шумовые параметры гироскопа MEMS. Эти параметры могут использоваться, чтобы смоделировать гироскоп в симуляции. Измерение гироскопа моделируется как:
Три шумовых параметра N (угол случайный обход), K (случайное блуждание по скорости) и B (нестабильность смещения) оцениваются данные об использовании, регистрируемые от стационарного гироскопа.
Отклонение Аллана было первоначально разработано Дэвидом В. Алланом, чтобы измерить устойчивость частоты генераторов точности. Это может также использоваться, чтобы идентифицировать различные источники шума, существующие в стационарных измерениях гироскопа. Рассмотрите выборки L данных из гироскопа с шагом расчета. Сформируйте кластеры данных длительности..., и получите средние значения суммы точек данных, содержавшихся в каждом кластере по длине кластера. Отклонение Аллана задано как 2D демонстрационное отклонение средних значений кластера данных в зависимости от кластерного времени. Этот пример использует перекрывающееся средство оценки отклонения Аллана. Это означает, что расчетные кластеры перекрываются. Средство оценки выполняет лучше, чем неперекрывающиеся средства оценки для больших значений L.
Отклонение Аллана вычисляется можно следующим образом:
Регистрируйте стационарные выборки гироскопа L с периодом расчета. Позвольте быть регистрируемыми выборками.
% 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;
Для каждой выборки вычислите выходной угол:
Для дискретных выборок может использоваться совокупная сумма, умноженная на.
theta = cumsum(omega, 1)*t0;
Затем вычислите отклонение Аллана:
где и среднее значение ансамбля.
Среднее значение ансамбля может быть расширено до:
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));
Наконец, отклонение Аллана используется, чтобы определить параметры шума гироскопа.
adev = sqrt(avar); figure loglog(tau, adev) title('Allan Deviation') xlabel('\tau'); ylabel('\sigma(\tau)') grid on axis equal
Отклонение Аллана может также быть вычислено с помощью 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
Чтобы получить шумовые параметры для гироскопа, используйте следующее отношение между отклонением Аллана и двухсторонней степенью спектральной плотностью (PSD) шумовых параметров в исходном наборе данных. Отношение:
От вышеупомянутого уравнения отклонение Аллана пропорционально общей шумовой степени гироскопа, когда прошли фильтр с передаточной функцией. Эта передаточная функция является результатом операций, сделанных, чтобы создать и работать с кластерами.
Используя эту интерпретацию передаточной функции, полоса пропускания фильтра зависит от. Это означает, что различные шумовые параметры могут быть идентифицированы путем изменения полосы пропускания фильтра или варьирования.
Угол случайный обход характеризуется белым шумовым спектром гироскопа выход. PSD представлен:
где
N = угол случайный коэффициент обхода
Замена в исходное уравнение PSD и выполнение выражений интегрирования:
Вышеупомянутое уравнение является линией с наклоном-1/2, когда построено на графике логарифмического журнала по сравнению с. Значение N может быть считано непосредственно прочь этой линии в.
% 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
Случайное блуждание по скорости характеризуется красным шумом (Броуновский шум) спектр гироскопа выход. PSD представлен:
где
K = коэффициент случайного блуждания по скорости
Замена в исходное уравнение PSD и выполнение выражений интегрирования:
Вышеупомянутое уравнение является линией с наклоном 1/2, когда построено на графике логарифмического журнала по сравнению с. Значение K может быть считано непосредственно прочь этой линии в.
% 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
Нестабильность смещения характеризуется розовым шумом (шум мерцания) спектр гироскопа выход. PSD представлен:
где
B = сместите коэффициент нестабильности
= частота среза
Замена в исходное уравнение PSD и выполнение выражений интегрирования:
где
Ci = функция интегрального косинуса
Когда намного более длинно, чем инверсия частоты среза, уравнение PSD:
Вышеупомянутое уравнение является линией с наклоном 0, когда построено на графике логарифмического журнала по сравнению с. Значение B может быть считано непосредственно прочь этой линии с масштабированием.
% 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
Теперь, когда все шумовые параметры были вычислены, постройте отклонение Аллана со всеми линиями, используемыми для определения количества параметров.
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', '\sigma_N', '\sigma_K', '\sigma_B') text(tauParams, params, {'N', 'K', '0.664B'}) grid on axis equal
Используйте imuSensor
объект симулировать измерения гироскопа шумовыми параметрами, идентифицированными выше.
% 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. gyro = gyroparams('NoiseDensity', N, 'RandomWalk', K, ... 'BiasInstability', B); omegaSim = helperAllanVarianceExample(L, Fs, gyro); else load('SimulatedSingleAxisGyroscope', 'omegaSim') end
Вычислите симулированное отклонение Аллана и сравните его с записанными данными.
[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
График показывает, что модель гироскопа создала из imuSensor
генерирует измерения с подобным отклонением Аллана к записанным данным. Измерения модели содержат немного меньше шума начиная с квантования, и связанные с температурой параметры не устанавливаются с помощью gyroparams
. Модель гироскопа может использоваться, чтобы сгенерировать измерения с помощью перемещений, которые легко не получены с оборудованием.
Станд. IEEE 647-2006 руководств формата спецификации стандарта IEEE и процедура тестирования для гироскопов лазера Одно Оси