В релизе 2018b появилась очень классная штука - Sensor Fusion and Tracking Toolbox. В его составе есть imuSensor и gyroparams, при помощи которых можно смоделировать сигнал гироскопа с заданными характеристиками.
Пытаюсь смоделировать сигнал реально существующего датчика по параметрам в его спецификации и у меня возникают вопросы.
Датчик VG103LN фирмы Физоптика. В спецификации указан параметр bias instability = 1 deg/hour.
Вот что я пытаюсь сделать:
Код: Выделить всё
% Frequency = 100Hz
F = 100;
dT = 1/F;
% 1 hour of data
N = 3600*F;
% VG103LN
bias_instability = 1.0; % deg/h
bias = 0.0; % deg/s
B = degtorad(bias); % rad/s
BI = degtorad(bias_instability/3600.0); % convert to rad/s
VG103LN_params = gyroparams;
acc = zeros(N, 3);
angvel = zeros(N, 3);
VG103LN_params.ConstantBias(1) = B;
VG103LN_params.ConstantBias(2) = B;
VG103LN_params.ConstantBias(3) = B;
VG103LN_params.BiasInstability(1) = BI;
VG103LN_params.BiasInstability(2) = BI;
VG103LN_params.BiasInstability(3) = BI;
imu = imuSensor('SampleRate', F, 'Gyroscope', VG103LN_params);
[~, gyroData] = imu(acc, angvel);
Wx = radtodeg(gyroData(:, 1));
Wy = radtodeg(gyroData(:, 2));
Wz = radtodeg(gyroData(:, 3));
Получаю сигнал. Затем пытаюсь оценить параметр Bias Instability. Использую методику, предложенную производителем датчика.
Код: Выделить всё
% Bias InStability Estimation
% Fizoptika Method
% 20 minutes of data
Wx_20min = Wx(1:120000);
Wy_20min = Wy(1:120000);
Wz_20min = Wz(1:120000);
N = 1000;
% Calc mean of every 10 sec interval
WxSamples = accumarray(ceil((1:numel(Wx_20min))/N)',Wx_20min(:),[],@mean);
WySamples = accumarray(ceil((1:numel(Wy_20min))/N)',Wy_20min(:),[],@mean);
WzSamples = accumarray(ceil((1:numel(Wz_20min))/N)',Wz_20min(:),[],@mean);
WxBIEstimated = std(WxSamples)*3600.0;
WyBIEstimated = std(WySamples)*3600.0;
WzBIEstimated = std(WzSamples)*3600.0;
Я полагаю, что должен получить что-то похожее на 1 градус в час. Однако я получаю что-то около 0.06 град/час. Понимаю, что модель есть модель, но как-то слишком далеко от ожидаемого.
Я что-то не так делаю? Вроде бы с единицами измерения всё нормально. Градусы в час для Bias instability перевожу в радианы в секунду как того требует документация на gyroparams. Далее получаю угловую скорость в радианах/сек и перевожу её в градусы/сек.
Вопросы следующие:
1. Я корректно задаю параметр bias instability для моего сенсора?
2. Можно ли задавать только один параметр или нужно задать что-то ещё?
3. Подходит ли используемый мной метод для оценки bias instability?