news 2026/5/9 20:04:29

基于MATLAB Simulink的Average Curve:多条曲线线性插值与唯一排序横坐...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于MATLAB Simulink的Average Curve:多条曲线线性插值与唯一排序横坐...

Average Curve:基于MATLAB/Simulink的通过线性插值返回多条曲线的平均曲线。 返回的平均曲线也具有唯一的和排序的横坐标。

最近在整理实验数据的时候遇到个头疼的问题——同一组测试里不同样本的曲线横坐标对不上,想算个平均值都费劲。比如测了五台电机的转速-温度曲线,采样时间点全都不一样,这时候要画个平均曲线该咋整?总不能在Excel里手动对齐吧?

这时候发现MATLAB有个挺聪明的思路:既然各曲线横坐标不统一,那就先给它们找个公共的横坐标基准。具体来说就是先把所有原始数据的x值收集起来,去重排序后作为新基准,然后把所有曲线都用线性插值对齐到这个基准上,最后直接算y值的平均数。

先看核心函数怎么写的:

function [x_avg, y_avg] = average_curve(x_cell, y_cell) % 合并所有横坐标 all_x = cell2mat(cellfun(@(x) x(:), x_cell, 'UniformOutput', false)); x_common = unique(all_x); % 去重排序 x_avg = sort(x_common); % 初始化存储矩阵 y_interp = zeros(length(x_avg), length(x_cell)); % 逐条插值 for k = 1:length(x_cell) [x_unique, idx] = unique(x_cell{k}); y_unique = y_cell{k}(idx); y_interp(:,k) = interp1(x_unique, y_unique, x_avg, 'linear', 'extrap'); end % 计算平均 y_avg = mean(y_interp, 2); end

这段代码有几个亮点值得说:

  1. cellfun快速展开所有曲线的x值,比写循环清爽多了。注意这里传参用的是元胞数组,能处理不同长度的曲线数据
  2. unique函数自带排序功能,省去了手动调用sort的麻烦,还自动过滤掉重复点
  3. 插值前先对原始数据做unique处理,避免输入数据中有重复x值导致interp1报错
  4. 最后用矩阵运算代替循环做平均,MATLAB的向量化操作真香

在Simulink里应用时,可以把这个算法封装成自定义模块。实测处理20条采样率不同的传感器曲线,耗时不到0.3秒。有个坑要注意:当某条曲线的x范围小于公共基准时,'extrap'参数会让它自动外推,这在某些场景下可能引入误差,建议根据实际情况选择是否保留。

举个实际案例:假设我们有三组发动机转速(200-300rpm随机采样)对应的燃油效率数据,用这个算法得到的平均曲线不仅平滑度适中,还能准确反映效率拐点。比起简单粗暴的每100rpm分段平均,插值法保留了更多细节特征。

最后给个可视化彩蛋——用动画展示平均曲线的生成过程:

figure; hold on; colors = lines(length(x_cell)); % 绘制原始曲线 for n = 1:length(x_cell) plot(x_cell{n}, y_cell{n}, 'Color',[colors(n,:),0.3],'LineWidth',0.5); end % 逐点绘制平均曲线 h = plot(x_avg(1), y_avg(1), 'k','LineWidth',2); for m = 2:length(x_avg) set(h,'XData',x_avg(1:m),'YData',y_avg(1:m)) drawnow pause(0.01) end

这个动态演示特别适合在组会上展示,比静态图表更能体现数据对齐的过程。说到底,处理非对齐曲线的关键就是先统一坐标系再操作,这思路在深度学习里的数据对齐、信号处理中的时域对齐也通用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 20:04:29

RocketMQ怎么保证消息不丢失

目录 一、生产端:消息能可靠到达 Broker 二、Broker 端:消息落盘 多副本,硬件故障也不丢 1. 同步刷盘(SYNC_FLUSH) 2. 主从同步复制(SYNC_MASTER) 3. 存储结构:顺序写 持久化…

作者头像 李华
网站建设 2026/5/9 20:03:39

BinaryEye条码生成教程:从文本到QR码的完整创建流程

BinaryEye条码生成教程:从文本到QR码的完整创建流程 【免费下载链接】BinaryEye Yet another barcode scanner for Android 项目地址: https://gitcode.com/gh_mirrors/bi/BinaryEye 想要快速生成专业的二维码和条码吗?BinaryEye作为一款功能强大…

作者头像 李华
网站建设 2026/5/9 20:01:24

【2026收藏版】小白程序员必看!AI Agent核心架构拆解

本文专为2026年想入门大模型、深耕AI Agent的小白和程序员打造,深入浅出拆解AI Agent的内部运作逻辑,从看似神秘的黑盒,到Chain-of-Thought、ReAct两大核心架构,再到工具调用的实战细节,一步步拆解Agent从接收用户指令…

作者头像 李华
网站建设 2026/5/9 19:59:25

基于NIST框架的健康AI算法偏见治理:从理论到工程实践

1. 项目概述:当AI决定你的健康,公平从何谈起? “构建可信AI促进全球健康公平”,这个标题精准地戳中了当前医疗人工智能领域最核心、也最容易被忽视的痛点。作为一名在医疗科技和数据伦理交叉领域摸爬滚打了十多年的从业者&#xf…

作者头像 李华
网站建设 2026/5/9 19:59:02

cann/cann-competitions 算子测试作品

团队信息 【免费下载链接】cann-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-competitions 团队名称:弥澄大亮所属单位:闽江大学团队成员&a…

作者头像 李华
网站建设 2026/5/9 19:58:41

轻量级多进程消息收发模型WEBSOCKET,MQTT

TCP方面除了用WEBSOCKET,还有什么组件可以收到完整的一条消息?比如MQTT? 纯TCP发送文字,一次收到多条,粘包比较麻烦,客户端想要来发也比较麻烦 你说到了TCP 最核心的痛点:流式传输、无边界、粘包 / 拆包,纯…

作者头像 李华