研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug

文章目录

前言

背景

问题

排查

解决

总结


前言

见《研发日记,Matlab/Simulink避坑指南(一)------Data Store Memory模块执行时序Bug

见《研发日记,Matlab/Simulink避坑指南(二)------非对称数据溢出Bug

背景

在一个嵌入式软件项目中,需要对一个可变数组进行数据处理。要求是原始数据相邻四个合并在一起,在这个算法中需要对原始可变数组的lengh除4后向上取整。算法的思路是,length对4整除,除不尽的加1,示例如下:

R 复制代码
function y = fcn(u)
 
if mod(u,4) == 0
    y = floor(u/4);
else
    y = floor(u/4) + 1;
end

问题

按照上述示例,预想不同的lengh都能除4后向上取整,但是实际运行的结果如下:

排查

把数据处理算法的过程变量都输出来,看到求余和求商都是正确的,if分段判定也没有问题,示例如下:

R 复制代码
function [Mod, Shg, y] = fcn(u)
 
Mod = mod(u,4);
Shg = floor(u/4);
 
if Mod == 0
    y = Shg;
else
    y = Shg + 1;
end

解决

换一种算法实现方式,用Gain模块直接做整除向上取整,示例如下:

重新运行程序,问题不再出现,Bug修复完工。示例如下:

总结

整除后四舍五入,向上取整,向下取整,这类算法在Matlab/Simulink中官方已经集成了,只要熟悉一下就能应用,不需要开发者自己再开发了,如下图所示:


版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!

上述例程使用的Demo工程,可以到笔者的主页查找和下载。

相关推荐
t1987512810 小时前
MATLAB水声信道仿真程序
开发语言·算法·matlab
bu_shuo14 小时前
Simulink中的On Delay模块
matlab·simulink·on delay
RestCloud17 小时前
神州通用数据库的 ETL 集成方案:兼容性与性能实战
数据库·数据仓库·etl·数据处理·数据集成·数据传输·神州通用
元素之窗17 小时前
MATLAB 的输入与输出:一篇速查博客
开发语言·matlab·php
元素之窗19 小时前
MATLAB 的“面子工程”:一键切换数值显示风格 —— format 命令小记
开发语言·算法·matlab
软件算法开发19 小时前
基于GA遗传优化的5G微基站部署策略matlab仿真
5g·matlab·ga遗传优化·微基站部署
freexyn21 小时前
Matlab自学笔记六十九:多项式求值、求根、积分和求导
开发语言·笔记·matlab
机器学习之心21 小时前
MATLAB基于改进蜣螂优化算法的磨削参数低碳优化
算法·matlab·基于改进蜣螂优化算法·磨削参数低碳优化
科研面壁者1 天前
SPSS——绘制三维条形图(3D条形图)
3d·信息可视化·spss·数据处理·科研绘图
可编程芯片开发1 天前
基于扰动观察法MPPT控制器和IGBT单相全桥逆变器的光伏并网发电系统simulink建模与仿真
simulink·mppt·igbt·扰动观察法·全桥逆变器·光伏并网