首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM-Linux的微惯性单元数据采集与处理[图](3)

基于ARM-Linux的微惯性单元数据采集与处理[图](3)

设计IIR数字低通滤波器必须确定的另一个重要参数是滤波器的阶数。阶数低时,滤波时延较小,但过渡带宽过大,滤波效果不明显,阶数高时,过渡带宽较小,但滤波时延较大。为了既能获得较好的滤波效果,又能够最大限度地满足实时应用,在选择滤波器的阶数时需要做折中考虑。基于以上分析,选择具有单调下降幅频特性的巴特沃斯滤波器。  采用巴特沃斯直接型结构,系统函数为:
  
  通过分析比较,当通带截止频率设为4Hz左右、滤波器阶数设为4时,能得到理想的综合滤波效果。图5所示为滤波后的数据。
  
  对滤波后的数据进行Yule Walker功率谱密度分析,结果如图6所示。
  
  比较图4和图6可以看出,滤波后的功率谱密度原来的两个尖峰完全消失了,除0Hz附近整体变得十分平坦。这正是期望的滤波效果,说明设计的滤波器达到了预期的滤波目的。计算滤波前后的均值与方差,结果如表2所示。
  
  可以看出,滤波后的均值与滤波前的均值相比在误差允许的范围内可以认为是相等的,滤波后的方差比滤波前的方差小两个数量级。这说明合理地选择巴特沃斯数字低通滤波器的截止频率和阶数,MEMS陀螺仪输出的数据可产生较好的滤波效果。通过计算得出低通滤波器的权系数ak和br,便可根据差分方程编制C语言程序。
  2.4 输出数据基于Qt的界面显示
  Qt是一个跨平台的C++图形界面库,主要通过汇集C++类的形式来实现应用程序界面开发所需要的一切,包括Qt/X11、Qt Embedded、Qtdesigner和Qt linguist等[4]。Qt是基于面向对象的C++语言,它提供了signal(信号)和slot(槽)的对象通信机制,具有可查询和设计的属性以及强大的事件和事件过滤器。本文主要用到其面向嵌入式开发的Qt Embedded及其设计器Qtdesigner。
  Qt界面开发通常有以下步骤:
  (1)用Qt生成file.ui和main.cpp;
  (2)用uic生成file.h和file.cpp;
  (3)用qmake生成file.pro;
  (4)通过./setenv命令设置环境变量;
  (5)用tmake生成二进制代码。
  主函数部分如下:
  int main( int argc, char ** argv)
  {
   QApplication a(argc, argv);
   IMU_display w;   
   QTimer *t = new QTimer(&w );
  nnect(t,SIGNAL(timeout()),&w,SLOT(imu()));
   t->start( 10, FALSE);
   w.show();
  nnect(&a,SIGNAL(lastWindowClosed()),&a, SLOT(quit()) );
   return a.exec();
  }
  IMU数据输出速率为100Hz,将Qtimer定时器设置为10ms刷新一次,保证数据输出的完整性。IMU数据的具体输出可以进行定制。在上位机开发完系统之后,可以利用虚拟帧缓存技术(qvfb)技术在PC机上测试Qt/Embedded 程序。经过反复的测试修改,测试成功之后制作图标和桌面启动器,通过minicom拷贝到ARM-Linux系统下的指定目录,便完成了程序的开发工作,需要注意的是交叉编译前需要将程序中上位机的串口名改为ARM开发板的指定串口名,否则程序将不会正常运行。
  本文实现了ARM-Linux环境下对于MEMS IMU的数据采集处理,功耗低、成本低、体积小,可广泛应用到各种惯性测量领域。文中所述IIR数字低通滤波器,设计简单,适合运用于有用信号和噪声的频带不重叠的非高速变化运动的场合。其不足之处在于虽然可以取得较为理想的滤波效果,但同时产生了一定的延迟,所以不适合对于实时性要求很高的惯性测量场合,但可以通过改进滤波算法来实现。
继承事业,薪火相传
返回列表