Imu数据均值滤波分析

Imu数据均值滤波分析

GitHub仓库:https://github.com/XinLiGitHub/ImuMeanFilter

PS:博文不再更新,后续更新会在GitHub仓库进行。


1,前言

       Imu数据分析中常用均值滤波,均值滤波后的数据可以直观的看出,传感器的零偏稳定性、零偏和温度的关系、传感器数据和时间的关系。虽然得不到具体的数据指标,但是可以的感觉到传感器的好坏,传感器测试非常有必要。


2,MATLAB程序

       filter_mean.m文件

function [ y ] = filter_mean( x, n )
% filter_mean 均值滤波函数
% x:数据
% n:参数
% 注意:当数据为二维数组时,按列求均值
if (n == floor(n)) && (n > 0)
    if n > 1
        [line, row] = size(x);
        if line > 1
            if line >= n
               for i = 1 : floor(line / n)
                   y(i, :) = mean(x((((i - 1) * n) + 1) : (i * n), :));
               end
            else
                error('“filter_mean”函数调用错误!');
            end
        else
            if row >= n
                for i = 1 : floor(row / n)
                   y(:, i) = mean(x(:, (((i - 1) * n) + 1) : (i * n)));
               end
            else
                error('“filter_mean”函数调用错误!');
            end
        end
    else
        y = x;
    end
else
    error('“filter_mean”函数调用错误!');
end

       imu_data.m文件

clc;    %清空命令行窗口
clear;  %清空工作区

data = dlmread('data.dat');     %从文本中读取数据,速率:100Hz

gyro_original = data(:, 3:5);   %陀螺原始数据,单位:deg/s
acc_original  = data(:, 7:9);   %加计原始数据,单位:g

gyro_mean_1s = filter_mean(gyro_original, 100);     %陀螺1s均值滤波
acc_mean_1s  = filter_mean(acc_original, 100);      %加计1s均值滤波

gyro_mean_10s = filter_mean(gyro_original, 1000);   %陀螺10s均值滤波
acc_mean_10s  = filter_mean(acc_original, 1000);    %加计10s均值滤波

time_original = 0:0.01:(length(gyro_original) - 1) * 0.01;  %生成时间数据,间隔0.01s
time_mean_1s  = 0:1:(length(gyro_mean_1s) - 1) * 1;         %生成时间数据,间隔1s
time_mean_10s = 0:10:(length(gyro_mean_10s) - 1) * 10;      %生成时间数据,间隔10s

figure('name', '原始数据'); %新建绘图窗口

subplot(2, 3, 1);                           %第一幅子图
plot(time_original, gyro_original(:, 1));   %绘图
title('陀螺 X轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_x(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 2);                           %第二幅子图
plot(time_original, gyro_original(:, 2));   %绘图
title('陀螺 Y轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_y(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 3);                           %第三幅子图
plot(time_original, gyro_original(:, 3));   %绘图
title('陀螺 Z轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_z(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 4);                           %第四幅子图
plot(time_original, acc_original(:, 1));    %绘图
title('加计 X轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_x(g)');                         %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 5);                           %第五幅子图
plot(time_original, acc_original(:, 2));    %绘图
title('加计 Y轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_y(g)');                         %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 6);                           %第六幅子图
plot(time_original, acc_original(:, 3));    %绘图
title('加计 Z轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_z(g)');                         %添加y轴标签
grid on;                                    %添加网格线

figure('name', '1s均值'); %新建绘图窗口

subplot(2, 3, 1);                           %第一幅子图
plot(time_mean_1s, gyro_mean_1s(:, 1));     %绘图
title('陀螺 X轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_x(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 2);                           %第二幅子图
plot(time_mean_1s, gyro_mean_1s(:, 2));     %绘图
title('陀螺 Y轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_y(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 3);                           %第三幅子图
plot(time_mean_1s, gyro_mean_1s(:, 3));     %绘图
title('陀螺 Z轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_z(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 4);                           %第四幅子图
plot(time_mean_1s, acc_mean_1s(:, 1));      %绘图
title('加计 X轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_x(g)');                         %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 5);                           %第五幅子图
plot(time_mean_1s, acc_mean_1s(:, 2));      %绘图
title('加计 Y轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_y(g)');                         %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 6);                           %第六幅子图
plot(time_mean_1s, acc_mean_1s(:, 3));      %绘图
title('加计 Z轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_z(g)');                         %添加y轴标签
grid on;                                    %添加网格线

figure('name', '10s均值'); %新建绘图窗口

subplot(2, 3, 1);                           %第一幅子图
plot(time_mean_10s, gyro_mean_10s(:, 1));   %绘图
title('陀螺 X轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_x(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 2);                           %第二幅子图
plot(time_mean_10s, gyro_mean_10s(:, 2));   %绘图
title('陀螺 Y轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_y(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 3);                           %第三幅子图
plot(time_mean_10s, gyro_mean_10s(:, 3));   %绘图
title('陀螺 Z轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('gyro_z(deg/s)');                    %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 4);                           %第四幅子图
plot(time_mean_10s, acc_mean_10s(:, 1));    %绘图
title('加计 X轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_x(g)');                         %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 5);                           %第五幅子图
plot(time_mean_10s, acc_mean_10s(:, 2));    %绘图
title('加计 Y轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_y(g)');                         %添加y轴标签
grid on;                                    %添加网格线

subplot(2, 3, 6);                           %第六幅子图
plot(time_mean_10s, acc_mean_10s(:, 3));    %绘图
title('加计 Z轴');                          %添加标题
xlabel('time(sec)');                        %添加x轴标签
ylabel('acc_z(g)');                         %添加y轴标签
grid on;                                    %添加网格线

3,运行结果

      100Hz原始数据


       1s均值数据



       10s均值数据


你可能感兴趣的:(MATLAB,传感器,matlab,imu,gyro,acc,github)