NNoM 开源项目教程

NNoM 开源项目教程

nnomA higher-level Neural Network library for microcontrollers.项目地址:https://gitcode.com/gh_mirrors/nn/nnom

1. 项目目录结构及介绍

NNoM(Neural Network on Microcontroller)的目录结构如下:

.
├── docs               # 文档相关文件
│   ├── Chinese (中文)  # 中文版文档
│   └── ...
├── examples           # 示例代码
│   ├── mnist-simple    # 简单MNIST示例
│   └── ...
├── inc                # 头文件目录
├── port               # 平台移植相关代码
├── scripts            # 脚本文件
├── src                # 主要源代码
│   ├── core           # 核心库
│   ├── layers         # 层操作实现
│   ├── ...            # 其他子目录
├── .gitignore         # Git 忽略文件列表
├──/LICENSE            # 许可证文件
├── README.md          # 项目主README
└── SConstruct         # 构建脚本
  • docs: 存放项目文档,包括英文和中文版本。
  • examples: 提供不同应用场景的示例代码,例如简单的MNIST手写数字识别。
  • inc: 包含所有C头文件,用于暴露接口给用户。
  • port: 这里存放平台移植相关的代码,使得NNoM能在不同的微控制器或硬件平台上运行。
  • scripts: 各种辅助脚本,比如模型转换工具等。
  • src: 主要源码目录,包含核心库以及各个层的实现。
  • .gitignore: 规定Git不应跟踪的文件类型。
  • LICENSE: 开源许可证,此项目使用Apache License 2.0。
  • README.md: 项目概述和快速入门指南。
  • SConstruct: 项目构建脚本,可能使用了SCons作为构建工具。

2. 项目启动文件介绍

NNoM不是一个独立运行的程序,而是一个库。通常,在你的应用中,你需要导入NNoM库并创建自己的模型。在examples中的mnist-simple是一个简单的启动点,它展示了如何加载Keras模型并进行推理。具体的启动过程涉及到模型的初始化、输入数据的准备以及调用推断函数。

#include "nnom.h"

int main()
{
    // 创建并编译模型
    nnom_model_t *model = create_mnist_model();
    nnom_status_t status = nnom_model_compile(model);
    
    if(status == STATUS_OK)
    {
        // 执行模型推理
        int result;
        nnom_input_t *input = create_input(); // 创建输入数据
        input->data[0] = ...; // 设置输入数据
        result = nnom_model_infer(model, input); // 推理
        
        // 处理结果
        process_result(result);
        
        // 释放资源
        nnom_model_free(model);
        nnom_input_free(input);
    }
}

上述代码中,create_mnist_model()nnom_model_compile() 分别是自定义的模型构造和编译函数,它们将根据模型结构文件生成对应的NNoM模型。create_input() 函数用于创建输入数据结构,nnom_model_infer() 是执行模型预测的核心函数。

请注意,这只是一个简化的示例,实际应用中可能需要根据特定的模型和硬件环境进行调整。

3. 项目的配置文件介绍

NNoM项目本身没有单独的配置文件,它的配置主要是通过代码来完成的,例如模型结构、内存管理策略、量化参数等。这些配置是在构建模型时指定的,或者在使用库的不同功能时动态设置的。

例如,当你创建一个模型时,可以定义量化参数:

// 创建一个量化配置
nnom_quant_cfg_t quant_cfg = { .bits = 8, .range = 2047, .signedness = 1 };

// 将配置应用于卷积层
nnom_conv2d_layer_t *conv = nnom_conv2d_build(..., ..., &quant_cfg, ...);

在这个例子中,quant_cfg 结构体包含了关于量子化的详细设置,如位宽、量化范围和符号性。这些配置会影响到模型在微控制器上的性能和精度。

此外,当需要针对特定硬件平台进行优化时,可能会涉及对port目录下的代码进行修改,以适应内存布局、中断处理、定时器设置等相关配置。

总之,NNoM 的配置更多的是集成到代码之中,开发者可以根据需要灵活地调整和定制。

nnomA higher-level Neural Network library for microcontrollers.项目地址:https://gitcode.com/gh_mirrors/nn/nnom

由于这是一个较为复杂的问题,我们逐步来回答。 1. 在Simulink中建立调速系统的动态结构图 根据传递函数1/s3+18s2+72s,我们可以使用Simulink中的Transfer Fcn模块来建立传递函数模型。建立模型的步骤如下: 1. 打开Simulink并创建一个新模型。 2. 在模型中添加Transfer Fcn模块,并将传递函数输入到模块中。 3. 添加一个Sum模块,并将输入连接到该模块中。 4. 在Sum模块中添加反馈,即连接输出到Transfer Fcn模块中。 5. 添加一个Step模块,该模块代表输入信号。 6. 连接Step模块到Sum模块中。 7. 运行模型并观察输出结果。 2. 计算额定磁通下电机电动势转速比 电机电动势常数K_E等于额定磁通下电机电动势与转速之比。因此,我们可以使用以下公式来计算电动势转速比: K_E = V_RMS / (2 * pi * f * n) 其中,V_RMS是电源电压,f是电网频率,n是电机转速。 3. 求闭环系统的闭环放大倍数 系统调速范围为D=20,静差率为s=5%。因此,我们可以使用以下公式来计算闭环放大倍数: K_P = (D / 100) * (1 / s) 4. 求拖动系统测速反馈系数 给定信号un*=12V时,n=nnom=1000r/m。因此,我们可以使用以下公式来计算测速反馈系数: K_S = un* / (K_E * nnom) 5. 求满足调速范围和静差率的比例调节器放大系数KP 我们已经求得了闭环放大倍数K_P和测速反馈系数K_S。因此,我们可以使用以下公式来计算比例调节器放大系数K_P: K_P = K_P / K_S 6. 系统稳定性分析 要确定系统是否稳定,我们需要计算系统的临界开环放大倍数,并将其与闭环放大倍数进行比较。系统的临界开环放大倍数等于系统传递函数的分母中最大的实部。如果闭环放大倍数大于临界开环放大倍数,则系统不稳定。 7. 设计控制器参数以满足相角裕度要求 为了满足相角裕度要求,我们可以使用控制器设计工具箱中的根轨迹法来设计控制器。具体步骤如下: 1. 打开MATLAB并创建一个新的脚本文件。 2. 在脚本文件中使用Control System Designer打开调节器设计工具箱。 3. 在工具箱中输入系统传递函数,并设置相角裕度要求。 4. 使用根轨迹法来设计控制器参数。 5. 在脚本文件中编写代码来实现控制器。 以上是对问题的回答,根据具体情况可能还需要进一步的调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花椒菡Drucilla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值