STM32F4上神经网络识别的实现

概述

硬件上使用STM32F4+MPU9150实现的神经网络识别手势,不过没有用IMU的地磁数据,只用了三轴加速度计和三轴陀螺仪的数据,板子是自己画的主要参照了意法官方的开发板的原理图(人生画的第一个板子还没有错误哈,容小逗比高兴一下。。。)。MPU9150的驱动是用的InvenSense提供的eMPL硬件抽象层,虽然这个driver配置imu内置DMP比较方便,但感觉这个bias矫正和姿态解算做的并不是很好,而且源码没公开不好改。不过识别部分用的是原始数据没用融合出的姿态数据,(姿态用在另一个功能上了)。考虑到单片机的计算性能不高(其实是训练部分不好移植^_^)于是把网络的训练部分放在在matlab上做的,然后把训练完的网络的阈值和权值导出来,放到单片机里。这里涉及到了单片机采集的数据怎么发给matlab的问题,幸好高版本的matlab对硬件的支持有大幅提升,可以通过串口来收数据。网络在单片机上的识别过程计算量还是挺大的,原始的imu数据(6Dof)经过一个巴特沃斯低通滤波器后放到一个类似于FIFO的数据结构中,从这个FIFO中首先进行间隔取数(间隔根据手势动作时间计算),并对取出的数进行归一化,然后将这些数据传给网络进行识别。过程中的滤波、归一化和网络计算都要进行大量的浮点运算,于是把logsig函数由泰勒展开改成了查表,还开了FPU,用了CMSIS-DSP。

Matlab串口接收

下面是创建串口obj的脚本

try
    try
        obj=serial('COM15','baudrate',115200,'parity','none','databits',8,'stopbits',1);
        flag_fetch=1;
    catch
        fprintf('Create Obj Error'
对于STM32F4上的神经网络,可以采取以下步骤: 1. 首先,在MATLAB中使用训练数据来训练神经网络模型,并导出相应的参数。使用MATLAB神经网络工具箱,可以构建并训练神经网络模型。在训练过程中,可以设置训练参数和目标误差,以获得更好的训练效果。 2. 将导出的神经网络参数移植到STM32F4上的代码中。通过将训练得到的权重和偏置值导入到STM32F4的代码中,可以实现神经网络的计算功能。在STM32F4上,可以使用DSP库来进行矩阵乘法运算,并使用激活函数(如tansig)来计算输出结果。 3. 在STM32F4的代码中,确保已开启FPU(浮点运算单元)并添加了相应的头文件(如arm_math.h)。这样可以确保在神经网络计算过程中使用了硬件加速,提高了计算效率。 通过以上步骤,可以在STM32F4实现神经网络的计算功能。这将使您能够使用STM32F4微控制器进行实时的神经网络计算。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [神经网络移植到STM32F4上的应用 可以训练识别手势](https://blog.csdn.net/qingelife/article/details/78429508)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值