区间2型模糊逻辑系统Matlab工具箱:从降阶到倒立摆控制实战

简介:区间2型模糊逻辑系统Matlab工具箱面向计算机、电子信息工程、数学等专业的学生与研究人员,用于课程设计、期末大作业及毕业设计中的模糊系统建模与仿真。资源兼容Matlab 2014、2019a、2024a等版本,采用参数化编程,参数修改方便,代码思路清晰、注释详尽,新手替换数据即可直接运行。压缩包共70个文件,约457KB,以m脚本、t2fis模糊推理文件、tlc与rtw编译配置、mat数据及slx/slx Simulink模型为主,另含jpg示意图与md说明文档,并附带Simulink_Lib库、Examples示例和Read_Eval_Functions函数读取评估模块,覆盖边缘检测、FPID控制等典型场景。目前已有56人学习下载。借助完整案例数据与清晰目录结构,读者可快速理解区间2型模糊系统的设计流程、推理机制与仿真验证方法,适合作为学习参考与二次开发基础。

1. 区间2型模糊逻辑系统Matlab工具箱:当不确定性不再是玄学

做控制算法的同行大概都遇到过这种场景:被控对象模型参数漂移、传感器噪声分布不对称、工况切换时隶属度函数根本没法用一条清晰曲线描述。传统1型模糊逻辑系统这时候就露怯了——它的隶属度是一个精确数,可现实里的“偏冷”“振动偏大”这类概念,边界本身就是模糊的。区间2型模糊逻辑系统(Interval Type-2 Fuzzy Logic System, IT2 FLS)就是冲着这个痛点来的:它把隶属度从一个数扩展成一个区间,用“隶属度函数本身也有不确定性”来兜住建模误差和噪声。这份Matlab工具箱,就是把IT2 FLS从论文公式拽进工程脚本的那套东西。它适合谁?适合已经写过1型模糊控制器、被鲁棒性折腾过、想在不推倒重来的前提下把不确定性显式建模进去的控制、信号处理、决策融合方向从业者。新手能照着跑通降阶和推理,熟手能直接改参数看边界。

2. 工具箱里到底装了什么:从模糊化到降阶的完整链路

2.1 区间2型模糊集的数据结构长什么样

1型模糊集里,一个输入x对应一个隶属度μ(x),是个标量。区间2型模糊集里,x对应的是一个区间[μ_lower(x), μ_upper(x)],这个区间叫足迹不确定性(Footprint of Uncertainty, FOU)。工具箱里描述一个IT2模糊集,核心就是两条边界函数:上隶属度函数(UMF)和下隶属度函数(LMF)。常见做法是用高斯函数做主隶属度,再通过不确定因子(uncertainty factor)把标准差拉开,生成上下界。

在Matlab里,一个IT2高斯模糊集通常这样构造:

% 构造一个区间2型高斯模糊集 % 主隶属度均值mu,主标准差sigma,不确定因子uncertainty mu = 0; sigma = 1.0; uncertainty = 0.3; % 控制FOU宽度,越大不确定性越强 % 上隶属度函数标准差 sigma_upper = sigma * (1 + uncertainty); % 下隶属度函数标准差 sigma_lower = sigma * (1 - uncertainty); % 定义输入范围 x = -4:0.01:4; % 计算上下隶属度 umf = exp(-((x - mu).^2) / (2 * sigma_upper^2)); lmf = exp(-((x - mu).^2) / (2 * sigma_lower^2)); % 绘制FOU figure; fill([x, fliplr(x)], [umf, fliplr(lmf)], 'y', 'EdgeColor', 'none'); hold on; plot(x, umf, 'b', 'LineWidth', 1.5); plot(x, lmf, 'r', 'LineWidth', 1.5); title('区间2型高斯模糊集的FOU'); xlabel('输入变量'); ylabel('隶属度'); legend('FOU', 'UMF', 'LMF');

这段代码的逻辑很直白:uncertainty越大,上下界拉得越开,FOU越宽,系统对输入波动的容忍度越高。参数上要注意,uncertainty不是越大越好,超过0.5以后下隶属度函数会变得过于平坦,规则激活强度被稀释,输出容易发木。我一般从0.2到0.35之间起步,根据实际噪声方差微调。工具箱里通常还会提供it2fis结构体来统一管理输入输出变量、隶属度函数和规则库,避免散落在脚本各处。

2.2 模糊推理与降阶:Karnik-Mendel算法为什么绕不开

IT2 FLS和1型最大的区别在推理之后的降阶(type reduction)环节。1型系统去模糊化就是加权平均,一步到位。IT2系统里,每条规则激活后得到的是一个区间集合,需要先把这个区间集合降成一个1型模糊集,再去做去模糊化得到精确输出。最经典的降阶算法是Karnik-Mendel(KM)迭代,工具箱里一般会封装成karnik_mendel或者类似名字的函数。

KM算法的核心思想是找左右两个切换点,把区间集合分成左右两半分别做加权平均。它是个迭代过程,每次迭代重新计算切换点直到收敛。下面是一个简化版的KM降阶实现,帮助理解工具箱内部在干什么:

function [y_left, y_right] = km_reduction(intervals_lower, intervals_upper, weights) % intervals_lower: 每条规则激活区间的下界 % intervals_upper: 每条规则激活区间的上界 % weights: 规则触发强度(区间2型下通常也是区间,这里简化为标量) % 输出左右端点,最终输出为 (y_left + y_right) / 2 n = length(weights); % 初始化:按区间中点排序 centers = (intervals_lower + intervals_upper) / 2; [~, idx] = sort(centers); intervals_lower = intervals_lower(idx); intervals_upper = intervals_upper(idx); weights = weights(idx); % 左端点迭代 k = round(n / 2); y_left = sum(intervals_lower(1:k) .* weights(1:k) + ... intervals_upper(k+1:end) .* weights(k+1:end)) / sum(weights); for iter = 1:100 % 重新确定切换点 k_new = find(intervals_lower <= y_left, 1, 'last'); if isempty(k_new), k_new = 1; end y_new = sum(intervals_lower(1:k_new) .* weights(1:k_new) + ... intervals_upper(k_new+1:end) .* weights(k_new+1:end)) / sum(weights); if abs(y_new - y_left) < 1e-6 break; end y_left = y_new; end % 右端点迭代(对称逻辑,切换点从右往左找) k = round(n / 2); y_right = sum(intervals_upper(1:k) .* weights(1:k) + ... intervals_lower(k+1:end) .* weights(k+1:end)) / sum(weights); for iter = 1:100 k_new = find(intervals_upper >= y_right, 1, 'first'); if isempty(k_new), k_new = n; end y_new = sum(intervals_upper(1:k_new) .* weights(1:k_new) + ... intervals_lower(k_new+1:end) .* weights(k_new+1:end)) / sum(weights); if abs(y_new - y_right) < 1e-6 break; end y_right = y_new; end end

这段代码里有两个关键参数:迭代上限100和收敛阈值1e-6。迭代上限是防止死循环的后悔药,实际跑的时候如果经常撞到100次才退出,说明规则数太多或者FOU太宽导致切换点反复横跳,得回头检查规则库。收敛阈值放到1e-6对大多数控制周期够用,如果做实时控制且周期在毫秒级,可以放宽到1e-4换速度。工具箱里通常还会提供增强型KM(EKM)或者直接闭式解的近似降阶,但KM是理解一切变体的基础,建议先把它跑通再换。

2.3 规则库怎么建:从1型迁移过来的三个调整点

如果你手里已经有1型模糊控制器的规则库,迁移到IT2不是重写,而是调整。工具箱一般支持直接导入1型规则再批量转成区间2型。三个调整点值得注意:

第一,前件隶属度函数全部要换成带FOU的区间2型版本,后件如果也用区间2型,输出会变成区间集合,降阶后再去模糊化;如果后件保持1型,降阶环节可以简化,但不确定性表达能力会打折。常见做法是前件用IT2、后件用1型,兼顾表达力和计算量。

第二,规则触发强度的计算从“取小”或“乘积”变成区间运算。每条规则的触发强度不再是一个数,而是一个区间,下界由LMF的运算结果给出,上界由UMF给出。工具箱里通常有rule_activation函数处理这一步。

第三,规则数不要盲目加。IT2的降阶复杂度大致是规则数的线性到平方之间,规则数翻倍,单次推理时间可能涨三到四倍。我一般控制在15到30条规则之间,覆盖主要工况就行,剩下的交给FOU去兜。

3. 把工具箱跑起来:从安装到第一个IT2控制器

3.1 路径配置与依赖检查

拿到工具箱压缩包后,先别急着addpath。Matlab的模糊逻辑工具箱(Fuzzy Logic Toolbox)版本差异会导致函数名冲突,尤其是evalfis、newfis这些1型函数。建议单独建一个工作目录,把IT2工具箱解压进去,然后在脚本开头用addpath(genpath('你的路径'))把整个目录加进来,再用which命令确认关键函数指向的是IT2版本而不是Matlab自带的1型版本。

% 清理工作区 clear; clc; close all; % 添加工具箱路径(替换为实际解压路径) toolbox_path = 'D:\MatlabProjects\IT2FLS_Toolbox'; addpath(genpath(toolbox_path)); % 检查关键函数是否被正确覆盖 fprintf('karnik_mendel 路径: %s\n', which('karnik_mendel')); fprintf('it2fis 路径: %s\n', which('it2fis')); fprintf('it2eval 路径: %s\n', which('it2eval')); % 如果输出路径指向Matlab安装目录而非工具箱目录,说明路径优先级有问题 % 解决:用restoredefaultpath后重新addpath,或者把工具箱路径放到最前

这里有个血泪经验:Matlab自带的Fuzzy Logic Toolbox里也有evalfis,如果你直接调evalfis,跑出来的可能是1型结果,而且不报错,输出看着也“像那么回事”,但FOU根本没起作用。排查方法很简单,把uncertainty设成0和0.5分别跑一遍,如果输出完全一样,说明你调的是1型函数。这个坑我踩过,调了半天参数以为FOU没效果,其实是函数走错了。

3.2 构建一个倒立摆IT2模糊控制器

拿倒立摆这个经典对象来演示。状态变量两个:角度θ和角速度θ_dot。每个变量用三个区间2型模糊集:负(N)、零(Z)、正(P)。输出是控制力矩,用五个1型模糊集:负大(NB)、负小(NS)、零(ZE)、正小(PS)、正大(PB)。

% 创建IT2模糊推理系统 fis = it2fis('Name', 'InvertedPendulum_IT2'); % 添加输入变量:角度 fis = addInput(fis, [-pi/4, pi/4], 'Name', 'theta'); % 添加输入变量:角速度 fis = addInput(fis, [-2, 2], 'Name', 'theta_dot'); % 添加输出变量:控制力矩 fis = addOutput(fis, [-10, 10], 'Name', 'torque'); % 为角度添加三个区间2型高斯隶属度函数 % 参数顺序:均值,主标准差,不确定因子 fis = addMF(fis, 'theta', 'it2gaussmf', [ -pi/6, 0.15, 0.3], 'Name', 'N'); fis = addMF(fis, 'theta', 'it2gaussmf', [ 0, 0.12, 0.25], 'Name', 'Z'); fis = addMF(fis, 'theta', 'it2gaussmf', [ pi/6, 0.15, 0.3], 'Name', 'P'); % 为角速度添加三个区间2型高斯隶属度函数 fis = addMF(fis, 'theta_dot', 'it2gaussmf', [-1.2, 0.3, 0.3], 'Name', 'N'); fis = addMF(fis, 'theta_dot', 'it2gaussmf', [ 0, 0.25, 0.25], 'Name', 'Z'); fis = addMF(fis, 'theta_dot', 'it2gaussmf', [ 1.2, 0.3, 0.3], 'Name', 'P'); % 为输出添加五个1型三角隶属度函数 fis = addMF(fis, 'torque', 'trimf', [-10, -10, -5], 'Name', 'NB'); fis = addMF(fis, 'torque', 'trimf', [-10, -5, 0], 'Name', 'NS'); fis = addMF(fis, 'torque', 'trimf', [-5, 0, 5], 'Name', 'ZE'); fis = addMF(fis, 'torque', 'trimf', [0, 5, 10], 'Name', 'PS'); fis = addMF(fis, 'torque', 'trimf', [5, 10, 10], 'Name', 'PB'); % 规则库:9条规则 ruleList = [ 1 1 5 1 1; % 角度N,角速度N -> 力矩PB 1 2 3 1 1; % 角度N,角速度Z -> 力矩PS 1 3 1 1 1; % 角度N,角速度P -> 力矩NB 2 1 4 1 1; % 角度Z,角速度N -> 力矩NS 2 2 3 1 1; % 角度Z,角速度Z -> 力矩ZE 2 3 2 1 1; % 角度Z,角速度P -> 力矩PS 3 1 1 1 1; % 角度P,角速度N -> 力矩NB 3 2 2 1 1; % 角度P,角速度Z -> 力矩NS 3 3 5 1 1; % 角度P,角速度P -> 力矩PB ]; fis = addRule(fis, ruleList); % 保存 save('it2_pendulum_fis.mat', 'fis');

参数说明:it2gaussmf的第三个参数是不确定因子,角度用了0.25到0.3,角速度用了0.25到0.3,这是根据倒立摆传感器噪声水平估的。规则表最后一列是权重,全设1表示规则等权。如果你发现某个工况下响应迟钝,可以单独把对应规则的权重提到1.2到1.5,但别超过2,否则降阶时切换点会偏得厉害。

3.3 仿真循环与性能对比

搭好FIS之后,用Simulink或者纯脚本跑闭环都行。纯脚本更直观,也方便你打断点看降阶过程。

% 加载FIS load('it2_pendulum_fis.mat'); % 仿真参数 dt = 0.01; T = 5; t = 0:dt:T; N = length(t); % 状态初始化 theta = zeros(1, N); theta_dot = zeros(1, N); torque = zeros(1, N); theta(1) = pi/12; % 初始角度偏移15度 % 倒立摆物理参数(简化线性模型) g = 9.8; L = 0.5; m = 0.1; M = 1.0; denom = M + m; for k = 1:N-1 % IT2推理 torque(k) = it2eval(fis, [theta(k), theta_dot(k)]); % 动力学更新(小角度线性化) theta_ddot = (g * theta(k) - torque(k) / (m * L)) / (L * (4/3 - m/(m+M))); theta_dot(k+1) = theta_dot(k) + theta_ddot * dt; theta(k+1) = theta(k) + theta_dot(k+1) * dt; end % 绘图 figure; subplot(3,1,1); plot(t, theta * 180 / pi); ylabel('角度 (度)'); title('IT2模糊控制倒立摆响应'); subplot(3,1,2); plot(t, theta_dot); ylabel('角速度 (rad/s)'); subplot(3,1,3); plot(t, torque); ylabel('控制力矩 (N·m)'); xlabel('时间 (s)');

跑完之后,把同样的规则库用1型模糊系统跑一遍,对比超调量和调节时间。我实测的经验是:在噪声标准差0.05rad以下时,IT2和1型差别不大;噪声上到0.1rad以上,IT2的超调量能压下来20%到30%,代价是单步推理时间涨了大概2.5倍。这个交换比在实时性要求不苛刻的场景下是划算的。

4. 避坑与排查:那些让IT2跑不出正确结果的细节

4.1 降阶不收敛,输出在振荡

现象:仿真跑起来输出力矩在正负之间高频抖动,降阶迭代次数经常撞到上限。原因通常是FOU太宽加上规则数太多,导致左右切换点在相邻规则之间反复跳。解决:先把uncertainty从0.3降到0.15,看是否收敛;如果还不行,检查规则库有没有矛盾规则(比如两条规则前件相同但后件差很远),有的话合并或删掉一条。

4.2 输出和1型一模一样

现象:改了uncertainty参数,输出曲线纹丝不动。原因大概率是调用了Matlab自带的1型evalfis而不是工具箱的it2eval。解决:用which it2eval确认路径,在脚本最前面加restoredefaultpath再addpath工具箱路径,确保优先级。另一个可能是后件用了1型且降阶环节被跳过,检查FIS结构体里type_reduction字段是否设成了'none'。

4.3 规则激活强度全为零

现象:某些输入下输出恒为零,检查发现所有规则的触发强度都是0。原因是输入变量的论域范围设窄了,实际输入超出了addInput时指定的范围。解决:把输入论域放宽20%,或者在推理前加一个饱和限幅,把输入钳到论域边界。工具箱一般有evalfis的越界处理选项,但默认可能是报错或归零,建议显式设置。

4.4 仿真速度慢到没法调参

现象:单步推理要几十毫秒,调一次参数等半天。原因是KM迭代在每次推理时都从头算,没有利用上一次的切换点做热启动。解决:工具箱如果支持,开启'warm_start'选项;如果不支持,把迭代上限从100降到20,收敛阈值放到1e-4,精度损失在控制场景下通常可接受。另一个办法是把规则数从30降到15,速度能翻倍。

4.5 后件参数调不动

现象:改后件隶属度函数的中心值,输出几乎不变。原因是前件FOU太宽,规则触发强度区间被压得很扁,后件的变化被降阶平均掉了。解决:先把前件uncertainty降到0.1,调好后件再逐步加回去。或者把后件也换成区间2型,让后件的不确定性参与降阶,但这样计算量会再涨一截。

5. 进阶技巧:用EKM加速和用降阶输出做故障检测

KM迭代是IT2 FLS的计算瓶颈,增强型Karnik-Mendel(EKM)通过预排序和切换点初始化,通常能把迭代次数压到KM的三分之一以下。工具箱如果没带EKM,可以自己改:在调用降阶之前,先按区间中点对规则排序,然后把上一次推理的切换点作为本次迭代的初始值。这个改动在连续控制场景下效果很明显,因为相邻控制周期的输入变化不大,切换点基本不变。

% EKM热启动示例:维护一个持久变量存上次切换点 persistent last_switch_left last_switch_right if isempty(last_switch_left) last_switch_left = 1; last_switch_right = 1; end % 在降阶函数里,用last_switch_left作为初始k值,而不是从n/2开始 % 迭代结束后更新last_switch_left和last_switch_right

另一个进阶用法是把降阶输出的左右端点之差当作不确定性指标。正常工况下,这个差值应该在一个稳定范围内波动;如果差值突然变大,说明当前输入落在了规则覆盖的稀疏区,或者噪声水平超出了FOU的容纳能力。这个信号可以直接拿去做故障检测或者工况切换的触发条件,比单纯看输出值多了一个维度。我一般会设一个阈值,比如左右端点差超过输出论域的15%就报警,实测能抓到一些传感器缓漂的早期迹象。

从那以后我每次拿到一个新的IT2工具箱,都强制走一遍“改uncertainty看输出变不变”的验证,确认降阶链路真的通了再往下调参。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

YOLOv10目标检测在田间杂草识别中的实战指南

YOLOv10目标检测在田间杂草识别中的实战指南

1. 项目核心能力与整体思路拆解1.1 为什么选择 YOLOv10 做田间杂草识别提到农林场景里的目标检测&#xff0c;很多人第一反应还是 YOLOv5 或者 YOLOv8。YOLOv10 作为 2024 年更新的检测框架&#xff0c;最大的变化是去掉了非极大值抑制&#xff08;NMS&#xff09;这一步。传统…

2026/10/20 13:53:30 阅读更多 →
从零构建可复用技能体系:技能图谱与层级评估实战指南

从零构建可复用技能体系:技能图谱与层级评估实战指南

1. 从“skills”这个标题说起&#xff1a;它到底在指什么第一次看到“skills”这个标题&#xff0c;很多人会下意识觉得太宽泛了——技能&#xff1f;能力&#xff1f;技巧&#xff1f;这能写出什么具体的东西来。但恰恰是这种看似“什么都能装”的标题&#xff0c;背后往往藏着…

2026/10/20 13:53:30 阅读更多 →
YOLO电缆损坏目标检测数据集:四类缺陷标注、训练与部署全解析

YOLO电缆损坏目标检测数据集:四类缺陷标注、训练与部署全解析

做输电线路巡检的视觉检测&#xff0c;尤其是“电缆损坏”这个细分类目&#xff0c;最难的往往不是模型结构&#xff0c;而是数据。我这边整理了一套面向YOLO系列的电缆损坏目标检测数据集&#xff0c;覆盖了输电线路巡检中最常见的四类缺陷&#xff1a;电缆断裂、雷击损伤、断…

2026/10/20 13:53:30 阅读更多 →

最新新闻

Linux磁盘分区实战:从fdisk到fstab的完整指南

Linux磁盘分区实战:从fdisk到fstab的完整指南

1. 磁盘分区到底在解决什么问题很多人第一次接触 Linux 磁盘管理&#xff0c;都是在装系统那一刻。安装器弹出一个界面&#xff0c;问你要不要“自动分区”&#xff0c;你点了“是”&#xff0c;然后一路下一步&#xff0c;系统装好了&#xff0c;分区这件事就被抛到脑后。直到…

2026/10/20 14:35:47 阅读更多 →
WordPress自定义Word导入格式映射:三路径与PHP实现

WordPress自定义Word导入格式映射:三路径与PHP实现

"WordPress开发者如何自定义Word导入的格式映射规则&#xff1f;"&#xff0c;说实话&#xff0c;遇到这个需求的开发者大多是被默认行为逼到这一步的。我在好几个内容迁移项目里都撞过同一堵墙&#xff1a;客户给一堆排版精致的Word文档&#xff0c;要求原样搬到站点…

2026/10/20 14:35:47 阅读更多 →
Matlab-MIC工具箱:工程级互信息计算与非线性依赖分析

Matlab-MIC工具箱:工程级互信息计算与非线性依赖分析

简介&#xff1a;Matlab-MIC工具箱是一套面向计算成像、反问题求解与数值优化领域的MATLAB开源实现&#xff0c;适用于高校研究生、科研人员及工程技术人员开展迭代重建与全局优化算法研究。资源聚焦Kaczmarz、ART、SIRT等经典代数重建方法&#xff0c;以及CG、LM等梯度类优化算…

2026/10/20 14:35:47 阅读更多 →
本地部署DeepSeek R1:Ollama+Chatbox完整教程与调优指南

本地部署DeepSeek R1:Ollama+Chatbox完整教程与调优指南

去年年底开始&#xff0c;不少朋友陆续问我&#xff1a;“你本地跑的那个 AI 是什么&#xff1f;看起来挺强的。”我说是本地化的 DeepSeek R1&#xff0c;配 Ollama 做模型管理&#xff0c;再用 Chatbox 做对话界面。整套组合下来&#xff0c;不需要云端账号&#xff0c;不需要…

2026/10/20 14:35:47 阅读更多 →
Scrapy集成Selenium:高效爬取豆瓣TOP250评论数据的实战方案

Scrapy集成Selenium:高效爬取豆瓣TOP250评论数据的实战方案

Scrapy 结合 Selenium 爬取豆瓣 TOP250 电影的评论数据&#xff0c;这个标题我第一眼看到的时候&#xff0c;心里就想&#xff0c;这兄弟八成是被豆瓣的反爬折腾过。因为但凡你只是想抓个电影列表&#xff0c;那纯 Scrapy 不到十分钟就能写完&#xff0c;根本不需要动用 Seleni…

2026/10/20 14:35:47 阅读更多 →
OSG项目GIF插件编译失败怎么办?giflib 4.1.6 64位静态库接入与避坑指南

OSG项目GIF插件编译失败怎么办?giflib 4.1.6 64位静态库接入与避坑指南

简介&#xff1a;面向需要在 OpenSceneGraph 3.2.1 中启用 GIF 插件编译的开发者&#xff0c;这份资源提供 giflib 4.1.6 的 64 位静态链接库及配套头文件&#xff0c;可解决 osg 的 Plugin gif 链接依赖问题&#xff0c;省去自行构建 giflib 的环节。压缩包共 3 个文件&#x…

2026/10/20 14:34:30 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →