MATLAB调用REFPROPDLL封装:制冷剂物性计算后端架构解析
简介对于需要借助NIST REFPROP开展热物性计算的MATLAB用户这份资源带来一个更实用的后端封装改善原生refpropm函数语法不一致、难以批量计算等痛点。它支持以数组作为输入并能用同一套语法同时计算纯流体与混合物的属性还专门为实验数据处理引入不确定性选项方便科研与工程中的参数扫描与数据拟合。资源共13个文件以8个m源文件为核心涵盖主函数、辅助类及完整测试用例另有mat数据文件、说明文档和开源许可证便于理解实现思路并快速集成到自己的项目中。压缩包仅26KB轻量易部署。目前已有789人学习下载适合具备一定MATLAB与REFPROP基础、希望提升属性计算效率的流体热力学相关方向读者。1. 从三十行初始化到一句 getTP这个后端做了什么我第一次在 MATLAB 里调 REFPROP 取制冷剂温压物性下午两点开始快下班才跑出一个对的数。问题根本不在热力学而是三层边界DLL 加载、指针传参、单位换算每一层都能让人原地转圈。refprop-matlab-additions 就是把这三层边界收拾干净的项目它给 NIST REFPROP 的 DLL 例程套了一层面向状态点的 MATLAB 后端让上层代码像调用普通函数一样拿焓、熵、饱和线、粘度和声速而不是背对着 calllib、libpointer 和一堆魔法数字。这个项目适合两类人一类是把 REFPROP 当计算内核做制冷、热泵、气体液化仿真的开发者另一类是手里已经有 MATLAB 业务模型、只想把物性查询换成可靠公共接口的人。2. 架构设计三层调用与状态对象是怎么组织起来的2.1 没有这个后端REFPROP 为什么难接REFPROP 的 DLL 不是今天常见的面向对象 SDK它更像一组保留全局状态的 Fortran/C 例程先SETUP指定流体和混合物后面对TPFLSH、PHFLSH这些函数发起查询时DLL 内部记住的是当前这一套流体配置。调用顺序一旦出错轻则 ierr 非零重则 MATLAB 直接崩掉。我拆这个项目时的第一印象是它把这种「有状态的 C 调用」变成了「无状态的业务函数」。源码的大致组织方式是这样refprop-matlab-additions/ ├── thermo/ │ ├── RefpropBackend.m │ └── State.m ├── private/ │ ├── unitConvert.m │ ├── checkError.m │ └── loadOnce.m ├── headers/ │ └── REFPROP.h ├── examples/ │ ├── pureCycle.m │ └── mixtureCycle.m └── tests/ └── roundTripTest.mthermo是 MATLAB 的包目录好处是已有项目里可以直接import thermo.*不会和别的工具箱函数撞名。private目录存放 DLL 加载、单位换算、错误检查这些内部工具不暴露给业务层。headers里存的是 REFPROP 自带或者手动整理的 C 头文件loadlibrary要靠它解析函数原型。整个调用链是标准的三层最底层是 REFPROP DLL 和它的 FLD/MIX 数据文件中间层是RefpropBackend负责 DLL 加载、单位换算、错误码转换最上层是业务脚本它只看到getTP、getPH、sat这类方法和一个结构体状态。业务代码不出现calllib也不出现libpointer这是一个主要判断标准哪一层混进去指针哪一层就该被后端收掉。REFPROP 的全局状态特性还带来一个隐藏约束同一个 MATLAB 进程里同一时间只能用一套流体配置。后端把fluidName和z留在实例属性里每次查询都主动带上组分避免因为上一次调用把配置改了就静默算错。2.2 统一状态结构单位约定写在一处后端最核心的数据结构是一个状态结构体类似下面这张表的字段。业务层用 SI 单位REFPROP 内部用另一套单位所有换算只在private/unitConvert.m里发生。字段业务单位说明fluidchar流体名如 R134A、R32、R410Az1×n 摩尔分数混合物各组份摩尔分数纯工质为 1TK温度pPa压力hJ/kg比焓sJ/(kg·K)比熵rhoL / rhoVkg/m3液相 / 气相密度visPa·s动力粘度tcW/(m·K)导热系数REFPROP 内部常见单位是 K、kPa、mol/L、J/mol。也就是说业务层要传压力得先把 Pa 除以 1000业务层要读焓得把 J/mol 乘上摩尔质量再除以 1000 变回 J/kg。这些换算如果不收口每个方法都会各自实现一遍出问题的概率成倍往上走。我一般会把换算做成两个私有函数toInternal(state)和fromInternal(raw, M)一个负责进、一个负责出。密度换算尤其容易漏REFPROP 输出 mol/L业务层习惯用 kg/m3差一个摩尔质量就是几十倍误差。这个项目把换算收敛到unitConvert之后后续加新例程只需要在表格里补一行不需要翻旧代码。2.3 后端方法全景每个方法对应哪个 REFPROP 例程从调用方视角看后端暴露的方法不多覆盖了物性计算最常用的五种场景后端方法输入业务单位返回封装的 REFPROP 例程getTPT, p, z完整状态TPFLSHgetPHp, h, z完整状态PHFLSHgetTDT, rho, z完整状态TDFLSHsatT, z泡点、露点状态SATTtransportstate粘度、导热系数TRNPTPFLSH、PHFLSH、TDFLSH是物性计算的三件套分别解决「温压」「压焓」「温密」三类输入。饱和线查询走SATT不要在业务层用两相闪蒸去迭代泡点露点那样算得慢数值还容易震荡。transport单独提出来是因为输运性质例程要求状态已经算过一遍后端需要内部先补一次闪蒸。这套方法设计的好处是业务代码完全不需要关心 REFPROP 函数的入参顺序。混合物的调用方式和纯工质一样z 传向量即可后端在进入 DLL 之前会归一化。这也是用这个项目而不是自己写脚本的最大差别脚本是一次性的后端是能长期维护的。3. 核心模块拆解一个状态点从业务函数走进 DLL 的完整链路3.1 初始化loadlibrary 和单例加载DLL 只需要加载一次MATLAB 对同名资源重复加载会直接报错所以后端一般做成 handle 类加单例。persistent变量保证同一个 MATLAB 会话里只走一遍加载逻辑。classdef RefpropBackend handle properties (SetAccess private) Dll char Header char Alias char refprop end methods (Static) function obj instance() persistent inst if isempty(inst) inst RefpropBackend(); end obj inst; end end methods function obj RefpropBackend() obj.Dll fullfile(getenv(REFPROP_HOME), refprop.dll); obj.Header fullfile(getenv(REFPROP_HOME), REFPROP.h); loadlibrary(obj.Dll, obj.Header, alias, obj.Alias); end end end这段代码有三个参数很关键。第一个是REFPROP_HOME环境变量它指向 REFPROP 安装目录如果没有这个变量也可以改成从config文件里读路径。第二个是别名alias加上之后所有calllib都写短名字否则要写一长串 DLL 文件名。第三个是头文件路径loadlibrary必须靠它解析函数原型头文件缺失是最常见的加载失败原因。加载之后可以用libfunctionsview(refprop)弹出函数列表核对能看到每个例程的参数签名。这一步非常值得做REFPROP 版本不同头文件里的参数顺序会有差异一切以当前环境里的头文件为准。3.2 封装 TPFLSH温压查询的真实实现温压查询是 REFPROP 的当家例程。后端getTP的核心是这样一段代码function state getTP(obj, T, p, z) if nargin 4, z 1; end z z / sum(z); % 组分归一化 zPtr libpointer(doublePtr, z); phase libpointer(doublePtr, 0.0); out libpointer(doublePtr, zeros(1, 12)); ierr libpointer(doublePtr, 0.0); herr libpointer(cstring, blanks(1024)); calllib(refprop, TPFLSH, T, p / 1000.0, zPtr, phase, out, ierr, herr); if ierr.Value ~ 0 error(RefpropBackend:TPFLSH, %s, deblank(herr.Value)); end state.T T; state.p p; state.phase phase.Value; state.rhoL out(5); state.h out(6); state.s out(7); % 后面字段根据 refprop.h 里声明的输出顺序继续展开 end参数说明T直接传 K不需要换算p从业务单位 Pa 折算成 kPa所以是p / 1000.0。zPtr是组分的 double 指针REFPROP 内部用摩尔分数闪蒸这里提前做归一化避免微量误差累计。out需要预分配一个 double 数组REFPROP 会把多个输出写进这块内存不预分配 MATLAB 会报指针错误。herr用cstring预分配 1024 字节否则 DLL 往字符串指针写内容时可能造成段错误。phase参数在混合两相区起约束作用业务调用时通常传 0.0让例程自动判断相态。头文件里的输出字段顺序在不同版本里不完全一致常见顺序是rho、h、s、cv、cp、w…但我不会把它当成铁律。拿到新环境后先libfunctionsview(refprop)看一眼原型再决定out(5)对应哪个物理量。这个小习惯能省掉大量 debug 时间。3.3 饱和线查询SATT 的包装和两相输出制冷循环里饱和线是需求很高的查询。后端对SATT的包装比直接调 DLL 友好得多核心思路是只传温度和组分返回两个状态。function [satL, satV] sat(obj, T, z) zPtr libpointer(doublePtr, z / sum(z)); out libpointer(doublePtr, zeros(1, 8)); ierr libpointer(doublePtr, 0.0); herr libpointer(cstring, blanks(1024)); calllib(refprop, SATT, T, zPtr, out, ierr, herr); if ierr.Value ~ 0 error(RefpropBackend:SATT, %s, deblank(herr.Value)); end satL.p out(1) * 1000; % kPa - Pa satV.p out(2) * 1000; satL.T T; satV.T T; endSATT是已知温度求泡点露点压力迭代求解在 DLL 内部完成。返回数组里前两项一般是液相压力和汽相压力到临界点附近两者会重合T 超过临界温度后ierr会非零。业务代码可以把ierr非零当作「已超临界」信号处理而不是直接抛异常。这里最容易踩的坑是液相汽相顺序。有些版本的 REFPROP 输出顺序是rhoL、rhoV、hL、hV有些是pL、pV在前。我的做法是加一个自检比较输出密度密度大的是液项密度小的是汽项用物理常识反向验证映射关系。3.4 错误信息透传REFPROP 的 ierr 不是摆设REFPROP 不抛异常每个例程返回一个ierr和一条字符串。后端要做的是把它们统一转成 MATLAB 异常避免调用方自己猜。function checkError(ierr, herr) if ierr.Value 0 return; end throw(MException(RefpropBackend:RefpropError, ... REFPROP(%d): %s, ierr.Value, deblank(herr.Value))); endcheckError放在private目录里每个包装方法调完后执行一次。这样做最大的好处是保留 REFPROP 原始错误串比如TPFLSH: pressure is above the maximum。业务代码拿到这样的错误能立刻定位是输入压力越界而不是看到一个 NaN 到处排查。如果不做这层透传REFPROP 的ierr非零时通常返回 NaN仿真模型里 NaN 会一路扩散到下一个组件最后整个系统输出全是 NaN排查成本极高。所以后端项目里错误处理优先级甚至高于查询逻辑。4. 落地用法等熵压缩和二元混合物两个能直接抄的例子4.1 例子一R134a 等熵压缩流程打开 MATLAB用这个后端算一段压缩过程代码非常短import thermo.* b RefpropBackend.instance(); z 1; s1 b.getTP(280, 6e5, z); % 吸口 280K, 0.6MPa s2s b.getPH(1.5e6, s1.s, z); % 等熵压缩到 1.5MPa eta 0.82; h2 s1.h (s2s.h - s1.h) / eta; s2 b.getPH(1.5e6, h2, z); % 按实际出口焓还原状态逻辑说明第一步拿到吸口状态包含s1.h和s1.s。第二步用getPH传入吸口熵和出口压力得到理想等熵过程的出口焓s2s.h。第三步考虑等熵效率实际出口焓等于吸口焓加上理想焓升除以效率。第四步再调一次getPH用真实焓值还原出口完整状态。这个例子体现后端的设计价值整个过程中业务代码完全不碰压力单位换算p直接传 Pah直接传 J/kg。封装好坏的标准就是看业务代码里有没有出现*1000或sqrt这种临时补丁。4.2 例子二CO2/R290 二元混合物查询混合物的调用方式和纯工质几乎一样只是把z从标量换成向量。import thermo.* b RefpropBackend.instance(); z [0.7, 0.3]; % 70% CO2 30% 丙烷摩尔分数 s b.getTP(300, 8e5, z); disp(s.h);如果你拿到的是质量分数不要直接传给 REFPROP要转成摩尔分数xg [0.6, 0.4]; % 质量分数 M [44.01, 44.09]; % CO2 和丙烷摩尔质量 n xg ./ M; z n ./ sum(n);REFPROP 内部闪蒸用摩尔组分质量分数传进去会得到错误平衡组成。后端接口要求z统一为摩尔分数换算放在业务层。混合物的SETUP名称要和 REFPROP 数据文件一致如果 REFPROP 里没有预混物需要先用MIXTURE建立再让后端加载。4.3 MATLAB 编译部署时的处理方式用mcc打包成 exe 时DLL 路径会变成另一个坑。开发环境里getenv(REFPROP_HOME)有值目标机器上可能没有。我一般会在初始化函数里区分部署状态。if isdeployed dllPath fullfile(ctfroot, refprop.dll); else dllPath fullfile(getenv(REFPROP_HOME), refprop.dll); end打包命令要把 DLL 和流数据目录一起带上。-a参数告诉编译器把目录加进 CTF 包mcc -m runSimu.m -a path/to/refprop.dll -a path/to/FLUIDS这里要特别注意ctfroot是运行时展开目录REFPROP 的 DLL 需要从那里加载而不是从当前工作目录。否则 exe 换台机器跑第一步loadlibrary就失败后面的仿真全白算。5. 避坑合集加载、单位与饱和项的高频故障这一章整理的是我拆 REFPROP 后端时复现率最高的五条血泪记录每一条都按「现象 → 原因 → 解决」写清楚碰到对应情况直接照做。5.1 加载与链接阶段的两个高频故障故障一loadlibrary 报头文件不支持或签名不匹配。现象是执行loadlibrary时 MATLAB 抛出The header file contains unsupported constructs或者提示找不到某个函数签名。原因是 REFPROP 自带头文件不一定能被 MATLAB 解析干净有些版本用了条件编译或 C 语言特性MATLAB 没有配置对应的 C 编译器。解决方法是两件事同时做先用mex -setup c配好 MinGW 或 MSVC 编译器再用loadlibrary(dllPath, hdrPath, includepath, headerDir)显式指定头文件目录。不要用相对路径REFPROP 安装目录里的头文件经常互相引用相对路径解析会让 MATLAB 找不到依赖。故障二第二次运行脚本时报同名资源已加载。现象是同一个 MATLAB 会话里第一次运行正常第二次运行报A resource of the same name is already loaded。原因是loadlibrary默认以 DLL 文件名为库名重复加载时 MATLAB 认为资源冲突哪怕代码逻辑完全没变。解决方法是统一使用别名加载并在每次初始化前做一次释放检查if libisloaded(refprop) unloadlibrary(refprop); end loadlibrary(obj.Dll, obj.Header, alias, refprop);这里建议把libisloaded和unloadlibrary放进loadOnce.m私有函数所有方法共用同一套加载入口。5.2 计算值与单位相关的三个典型坑故障三焓值数量级差了一千倍。现象是仿真结果里 COP 或者制冷量数值大得离谱例如 6kW 变成了 6000kW。原因是 REFPROP 的焓输出单位是 J/mol业务层习惯的比焓是 J/kg中间差一个摩尔质量 M。R134a 的摩尔质量约 102 g/mol差出来的倍数就是 1000 量级。解决方法是把换算放到fromInternal函数里h_Jperkg h_Jpermol / M * 1000。注意除以 M 而不是乘以 M方向反了会变成十万倍误差。这个坑在所有 REFPROP 后端里都存在UnitConvert 测试应该专门覆盖。故障四混合物查询返回一堆 NaN。现象是 z 传了向量REFPROP 调用正常但返回的密度、焓全是 NaN。原因是组分没有归一化或者 REFPROP 当前没有加载对应的混合物定义。比如 z 写成[0.7, 0.3]没归一化没问题但如果写成[0.7, 0.28]内部闪蒸收敛时就会出界。解决方法是后端在入口统一执行z z / sum(z)并且确保SETUP阶段传入的流体名和混合物名与查询一致。如果 REFPROP 没有预混物要先调MIXTURE建立不要指望直接传名字就能自动组配。故障五饱和点的液相汽相拿反。现象是临界点附近密度曲线乱跳或者算出的干度完全不合理。原因是 SATT 返回数组的字段顺序在不同头文件里不一致有的把压力排前面有的把密度排前面直接按下标取数极易拿反。解决方法是先用「密度大的是液相、密度小的是汽相」这条物理规则校验一次再落库。后端sat方法内部可以做一层保护如果out(1) out(2)就把顺序交换。这样无论头文件怎么变对外接口语义稳定。6. 二次开发给后端新增一个 getPH 方法而不推翻原有结构后端已经有getTP的前提下加一个getPH的难点不是调 DLL而是不要复制一整套calllib。我一般会在RefpropBackend里做一个公共入口callState把单位换算和checkError收敛进去新方法只是往里填参数。methods function state getPH(obj, p, h, z) state obj.callState(PHFLSH, ... {p / 1000.0, h / obj.molarMass(z)}, z); end endPHFLSH的输入顺序是压力、比焓但 REFPROP 内部用 J/mol所以h要先除以摩尔质量。callState内部还是那套固定的zPtr、out、ierr、herr工作流新例程进来只改例程名和入参映射改完全文件控制在十行以内。加完方法之后不要急着接业务先做往返一致性验证。用getTP算一个状态点再用它的p和h喂回getPH两个状态应该重合到 1e-6 量级sA b.getTP(280, 6e5, 1); sB b.getPH(sA.p, sA.h, 1); assert(abs(sB.T - sA.T) 1e-6); assert(abs(sB.s - sA.s) 1e-6);如果这两个断言不通过问题基本出在单位换算或输出字段映射上而不是 REFPROP 本身。这套验证表应该跟着新方法一起进tests/目录以后每次改unitConvert都能回归跑一遍。从那以后我每次给后端加新例程都先写一个五分钟的往返校验测试再写业务用法。虽然看起来多绕了一步但省掉了后面整整一星的调试时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

从零实现轻量响应式内核:依赖收集、调度队列与计算属性缓存

从零实现轻量响应式内核:依赖收集、调度队列与计算属性缓存

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维第一次看到“rea”这个标题,很多人会愣一下——三个字母,没有上下文,没有说明,甚至连大小写都没区分。但恰恰是这种极简命名,在真实的项目开发中非…

2026/10/19 16:37:21 阅读更多 →
XERJ reference-coding 实战:让 Agent 用一次检索替换整轮试错,告别输出 Token 浪费

XERJ reference-coding 实战:让 Agent 用一次检索替换整轮试错,告别输出 Token 浪费

人工智能搜索引擎本地部署后端MCP 服务 【免费下载链接】xerj XERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, logs and PDFs for sear…

2026/10/19 16:36:37 阅读更多 →
鸿蒙开发入门:用React Native实现日期天数计算工具

鸿蒙开发入门:用React Native实现日期天数计算工具

最近有个朋友问我,小白想接触鸿蒙开发,又不想一上来就被原生工程的各种配置劝退,有没有门槛低一点、又能看到实际效果的项目。我每次都建议先从 React Native 跨平台切入,第一个练手项目就做“日期天数计算工具”。原因很简单&…

2026/10/19 16:35:07 阅读更多 →

最新新闻

AI视频生成工作流:从产品拆解到批量成片的完整指南

AI视频生成工作流:从产品拆解到批量成片的完整指南

去年年底接了一个电商代运营团队的活儿,帮他们把带货短视频从“每周人工憋3条”改成“一天批量出20条成片”。项目做完以后,团队里负责剪辑的同事跟我说了一句话,让我印象特别深:以前最怕的不是剪片子,而是想不出脚本、…

2026/10/19 23:05:36 阅读更多 →
Flutter 库鸿蒙适配实战:m_package 从崩溃到跑通的完整流程

Flutter 库鸿蒙适配实战:m_package 从崩溃到跑通的完整流程

没有哪次推送失败比“鸿蒙上跑不起来”更让人头大了。Flutter 项目本来一套代码走天下,结果到了鸿蒙设备上,编译能过,一打开就直接崩了,日志指向m_package里的某个工具函数。这个库说大不大,却几乎每个页面都引用它&am…

2026/10/19 23:03:33 阅读更多 →
智能体Agent实战:从原理到代码,打造会做事的AI

智能体Agent实战:从原理到代码,打造会做事的AI

智能体(Agent)到底是个啥东西?我直接说结论:智能体不是一个神秘的技术黑盒,而是“大模型 记忆 工具 自主决策循环”的组合体。它跟普通的聊天机器人最大的区别就三个字——会做事。你问ChatGPT“明天深圳天气怎么样…

2026/10/19 23:00:29 阅读更多 →
校招面试算法与JVM核心考点全解析:从刷题到调优的实战指南

校招面试算法与JVM核心考点全解析:从刷题到调优的实战指南

1. 校招面试官到底想在算法题里看到什么很多人准备校招的时候,第一反应是去刷题网站按标签刷个三五百道,觉得数量上去了自然就稳了。我带过几届校招的技术面,也跟不少做校招的朋友聊过,实际情况是:面试官出算法题&…

2026/10/19 22:50:12 阅读更多 →
【信息科学与工程学】【数据中心】 第十一篇 人工智能智算中心整体设计101 智算中心解决方案 第一部分1.1 智算中心ICT基础设施的定义与边界

【信息科学与工程学】【数据中心】 第十一篇 人工智能智算中心整体设计101 智算中心解决方案 第一部分1.1 智算中心ICT基础设施的定义与边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 22:46:04 阅读更多 →
open-code-review:CLI+LLM+Git驱动的开源代码审查新范式

open-code-review:CLI+LLM+Git驱动的开源代码审查新范式

1. 什么是 open-code-review:一个被严重低估的开发者协作新范式open-code-review 不是某个具体软件的名字,也不是某家公司的私有产品,而是一类正在快速成型的技术实践范式——它指代的是基于开源理念、命令行界面(CLI)…

2026/10/19 22:40:54 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →