基于DDPG强化学习的滑模控制器参数在线整定与Simulink仿真

做控制仿真的人,十有八九被滑模控制的参数整定折磨过。滑模面系数c、切换增益k、边界层厚度φ,这几个参数怎么取,教科书上只告诉你满足不等式条件,可真正落到某个具体对象上,到处都是靠试、靠调的经验。我这次做的项目,方向就是用一个深度确定性策略梯度算法(DDPG)强化学习智能体,在Simulink中在线整定滑模控制器(SMC)的参数,把人工反复试参数的过程变成智能体自己探索学习的过程。整套仿真做完,效果比较有意思,所以把搭建思路和踩坑过程整理出来。

如果你正在做机器人轨迹跟踪、机电伺服系统鲁棒控制,或者想把手里的强化学习从倒立摆这类演示环境搬到实际控制回路里,这篇内容会很对胃口。它不要求你改造SMC的结构,只需要把增益参数开放成端口,让DDPG去接管。整个思路可以复用到绝大多数带参数整定需求的控制任务中。

1. 为什么要把DDPG强化学习和滑模控制结合起来

1.1 滑模控制的一大痛点

滑模控制(SMC)的优点大家都知道:对模型不确定性和外部扰动有很强的鲁棒性。代价呢?就是那个符号函数或者饱和函数里的增益k,理论上要大于扰动上界,才能保证滑模面可达并且系统状态不脱离滑模面。实际系统里扰动上界往往是猜的,k取小了系统抵抗不住扰动,误差在滑模面附近来回穿;k取大了鲁棒是够强,但控制量高频抖振,执行器受不了,激励出的未建模动态反而让系统变差。这就是经典矛盾。

也就是说,固定参数SMC里面的k和φ到底折中在哪,不是一个定值能解决的。系统运动到滑模面附近时,理想情况希望边界层厚度小一点以减少稳态误差;但面对大幅扰动时,又希望切换增益足够大。不同阶段、不同工况需要的参数方向不一样。我最初的做法是分别测了几组参数,在不同工况下各取一个折中值,结果总是不尽如人意——这促使我想到用强化学习把参数时变化。

1.2 DDPG能补上哪块短板

DDPG是深度确定性策略梯度算法,它最擅长的就是在连续动作空间里学一个确定性的策略。滑模控制的增益恰好就是连续值,比如k∈[0.5, 30],φ∈[0.01, 0.5],DDPG输出的动作可以直接映射到这个区间,不需要把动作离散化。相比DQN那样的离散动作输出,DDPG的连续输出天然匹配参数整定任务。

另一层原因是DDPG属于离策略算法,有经验回放缓冲池,训练中学到的历史样本可以反复使用,这对Simulink仿真特别重要。每个仿真回合虽然只有几秒钟,但采样频率高,样本量巨大,离线复用能大幅提升学习效率。而且Actor-Critic结构里Actor输出动作、Critic评估动作价值,两者交替优化,比单纯的策略梯度算法稳定得多。

1.3 这套方案适合谁用

如果你需要处理带不确定性和扰动的连续控制问题,又不希望用固定参数牺牲某一方面的性能,这个方案很值得试一试。它不要求你具备多深的强化学习理论背景,更看重对控制回路的理解和对Simulink建模的熟练度。DDPG在这里扮演的角色是“参数调度器”,SMC仍然是主控制器,这种主从结构让系统始终有一个鲁棒控制器兜底,不会因为强化学习探索期的乱来就彻底失控。

2. 先把两个算法的核心机制捋清楚

在动手搭Simulink之前,得先把算法本身吃透。否则你连输出的动作是什么意思、奖励信号为什么这么设都说不清,后面调参只能全靠瞎猜。

2.1 滑模控制的误差收敛逻辑

考虑一个二阶对象,定义跟踪误差e = x - xd,滑模面s = c·e + ė,其中c > 0。如果s能收敛到0,则ė = -c·e,误差按指数衰减,收敛快慢取决于c。这是滑模控制最核心的想法:先设计一个滑模面,让系统状态收敛到这条流形上,然后维持在这个流形上。

控制量的典型构成为u = u_eq + u_sw。以对象ẍ = u + d(t)为例,等效控制u_eq = -c·ė + ẍd用来保持s = 0,切换控制u_sw = -k·sat(s/φ)用来克服扰动并驱动状态到滑模面。为降低抖振,我用饱和函数sat(s/φ)替代sign(s),φ越大抖振越小但稳态精度变差,k越大鲁棒性越好但控制量摆动越大。

这里值得解释一下为什么三个参数里我主要让DDPG去调k和φ。c决定滑模面上的误差收敛速度,它通常由系统的期望动态决定,给定一个值不需要频繁变化;而k和φ是一对矛盾量,它们需要根据扰动大小、误差位置动态调整,这正是自适应调参发挥价值的地方。参数太多也会增加动作维度,训练难度明显上升。

2.2 DDPG的试错学习逻辑

DDPG的核心由四个网络组成:在线Actor、目标Actor、在线Critic、目标Critic。每个控制周期,智能体观察系统状态,Actor输出动作,环境反馈下一状态和奖励,存入经验池。训练时从经验池随机采样一批样本,Critic网络更新价值函数,Actor网络则朝着“让Critic打分更高”的方向更新参数。

DDPG用确定性策略而不是随机策略,好处是控制输出平稳,更加贴合执行器输入要求。同时为了探索,训练时给动作叠加噪声,让智能体尝试不同参数组合,并在学习过程中逐渐降低噪声强度。这个探索噪声设计非常关键,后面我会具体说。如果你用过PPO这类在线策略算法,再对比DDPG就会发现,DDPG对历史样本的复用效率高很多,这在仿真耗时较长的控制任务里是实打实的优势。

2.3 两者的接口匹配点在哪里

SMC和DDPG的接口就在于“参数整定”这个动作。DDPG读取的系统状态相当于控制工程师平时看监视器的那几个量,DDPG输出的动作直接连到SMC的增益端口。整体闭环结构为:被控对象产生状态误差,误差信息和滑模量进入DDPG智能体,智能体输出SMC增益,SMC计算控制信号驱动对象。

这样整个控制回路仍然保持SMC的鲁棒结构,DDPG并不直接输出控制量,它只调节控制器参数。所以任何能保证SMC稳定运行的对象都可以加装这个自适应层;哪怕DDPG在训练初期探索出不好的参数,SMC本身的鲁棒性也会限制控制性能的下限,系统不至于失控。这个思路对工程实践很友好,也是我在这个项目里坚持采用主从结构的原因。

3. Simulink仿真环境搭建与DDPG Agent设计

下面进入实操环节。我用的是二阶位置伺服模型:ẍ = u + d(t),d(t) = 0.5·sin(2πt) + 噪声。参考轨迹xd = 0.5·sin(πt)。仿真步长0.01s,单回合10s。这个设定简单但足以体现参数自适应的价值。

3.1 系统总体架构与信号流

模型从上到下分为三块:参考信号与对象模块、SMC控制律模块、DDPG Agent模块。对象用两个积分器串联搭建,加速度输入,速度输出,位置输出。误差信号通过减法器产生,误差导数由速度与参考速度相减得到。滑模面由误差和误差导数加权求和得到。你得把需要观测的信号汇总到一个向量里,作为DDPG的观测输入。

DDPG模块放在SMC模块旁边,动作端口输出是一个2×1向量,分别接在切换增益k和边界层厚度φ的常数模块上。这里要注意,Simulink里不能直接把动作信号当作参数对话框里的数值用,需要通过乘法器或者可变增益模块把信号引进去。我在搭建时把k和φ都做成外部输入端口,这样动作信号直接乘以一个缩放系数就能用。最开始我就是忽略了这一点,在S-Function里把动作值写进参数列表,结果每次更新都要重建模型,后来改成外部输入才彻底解决。

3.2 滑模控制器模块搭建

滑模控制律u = -c·ė + ẍd - k·sat(s/φ),其中c固定为5。ẍd是参考轨迹的二阶导,直接对0.5·sin(πt)做两次导数解析式计算出来。控制器模块用加法器和乘法器搭就行,这里有一个值得注意的细节:饱和函数sat(s/φ)可以用Saturation模块实现,把s先除以φ,再经过限幅[-1, 1]的Saturation模块,得到的结果就是sat(s/φ)。我看到很多人直接用sign函数或者近似符号函数,抖振会明显更严重。

这一步建议先让k和φ用固定常数把SMC回路跑通。我在实际测试中先给k=8,φ=0.05,观察跟踪曲线和控制量,确认对象稳定跟踪正弦信号后再接入DDPG。先验证SMC再叠加RL,这条顺序千万别反过来,否则出问题时不知道是控制器问题还是学习算法问题。另外提醒一句,Simulink模型里所有信号名字都要用英文字母,中文变量名万一碰到编码问题,排查起来非常痛苦。

3.3 DDPG智能体的状态、动作与奖励设定

观测向量我选4个分量:e、ė、s、以及参考信号的导数。前三个反映当前跟踪状态,第四个帮助智能体判断轨迹变化趋势。也许有人会问为什么不加入跟踪的积分项,我试过加积分项效果接近但维度增加,收敛速度略慢,所以最后取了这4个。

动作是2维连续向量:a = (k, φ)。k用tanh输出映射到[0.5, 30],φ映射到[0.01, 0.5]范围。tanh输出在[-1, 1],需要手动缩放,给每个动作维度乘以缩放系数并加上偏置,换算到有效范围。这里要注意边界处理,DDPG的tanh输出天生有界,不会超出动作区间,所以比直接输出原始数值更安全。

奖励函数是我调得最久的模块。最终用的是:

r = -0.01·s² - 0.001·u² - 0.005·(u_t - u_{t-1})²

第一项驱动滑模面收敛,第二项限制控制能量,第三项抑制控制量突变也就是抖振。三个权重对应的量级差异很大,需要根据仿真中实际数值调整。这里有个通用经验:先记录固定SMC下s、u、Δu的典型数值,让每个惩罚项贡献量大致同数量级,否则量级大的项压过其他项,学出来的策略会偏心。我把做法写成一个可复用的流程:先跑一次固定参数SMC仿真,把各项指标的平均值记下来,然后反推权重,让三个惩罚项在典型工况下各占约三分之一比重。

3.4 Agent网络与超参配置

DDPG的Actor网络我用两层全连接,隐藏层神经元400和300,激活函数ReLU,输出层用tanh。Critic网络输入是观测向量拼接动作向量,同样两层全连接,最后输出一个Q值。这里我推荐Critic先拼接状态和动作再放进网络,而不是让动作单独走一路,前者在低维连续控制问题中更稳定也更容易训练。

超参数配置我整理成一张表,方便对照参考。

参数推荐值说明
Actor学习率1×10⁻³网络更新步长,大了容易发散,小了收敛慢
Critic学习率1×10⁻³可以与Actor相同,但很多场景建议略小
折扣因子γ0.99越接近1越看重长期收益,这里取常规值
批量大小256每次采样训练的样本数,内存不够可降到128
经验池容量1×10⁶存储历史样本,越大越稳定但占用内存
目标网络软更新系数τ0.005目标网络参数平滑更新的比例
每回合步数1000单回合时长10s,按0.01s步长折算

如果平台性能一般,建议把批量降到128,经验池降到5×10⁵,训练速度会快不少。网络层数也并非越深越好,我试过三层隐藏层,训练时间明显变长,收敛后的性能提升却可以忽略不计。对于这个任务,两层网络完全够用。

4. 完整训练流程与实战操作

这一节把从零到训练完成的完整操作整理成步骤,照做基本能复现。我会针对关键步骤补充必要的说明。

4.1 先跑通固定参数的SMC基线

在模型里把k和φ设为固定常数模块,比如k=8、φ=0.05。运行仿真,观察位置跟踪曲线是否贴合参考轨迹,控制量是否在合理范围,记录s的波形和抖振程度。这个基线有两个作用:第一验证被控对象和SMC模块搭建无误,第二为后面的奖励权重提供参照。

我测试的基线结果是:正弦跟踪误差稳态在0.02附近,但控制量存在明显的高频振荡,尤其在参考信号过零变化时抖振幅度很大。这就是固定参数SMC的老毛病——为了抗干扰把k设得偏高,遇到大扰动时有用,但扰动平缓时抖振又过于明显。用这个结果的数值去定奖励权重,s相关项权重给了0.01,控制能量项和突变项分别是0.001和0.005。

有人觉得“固定参数跑基线”是多此一举,直接接上RL Agent开训就行。我不建议这么做。没有基线的训练,如果模型本身搭建有误,你根本分不清是对象模型的问题还是DDPG训练的问题。先跑通基线,相当于把底层的坑全部排掉,后面接入DDPG时注意力可以完全集中在算法上。

4.2 接入RL Agent和训练环境

在Simulink中用RL Agent模块替换掉固定参数模块,把观测向量通过Mux组合后接到RL Agent的观测端口,动作输出通过Demux拆成两路,分别接到SMC的k和φ端口。记住端口名要和MATLAB环境定义保持一致。

在MATLAB命令行里定义环境对象:

env = rlSimulinkEnv('smc_model','smc_model/RL Agent', obsInfo, actInfo);

obsInfo和actInfo分别用rlNumericSpec创建,并设置动作的上下界。还要指定模型的观测端口和动作端口名称。初次接入时系统会提示观测信号维数不一致,这时去检查Mux输入是否与rlNumericSpec指定的一致即可。这里最容易出问题是Simulink模型名和RL Agent模块路径名写错,或者端口名用了中文,导致环境对象创建失败。

创建Agent的时候,我在rlDDPGAgentOptions里指定网络初始化函数、噪声选项和优化器参数。有一个小坑值得提醒:rlDDPGAgent默认的OU噪声参数是按典型场景定的,我调成θ=0.15、σ=0.1后,探索的随机性比较适中;如果数值取得太大,训练初期Agent完全像瞎试,收集的样本质量差,后面无论怎么调权重都不容易救回来。

4.3 训练过程监控与结果评价

用train命令跑的时候,打开训练监视器看每回合总奖励曲线。DDPG训练的典型情况是:前50回合奖励快速上升,中间可能出现一两次下降,那是经验池中引入了一些不稳定样本,不必太紧张。如果奖励曲线稳定走高,说明网络正在学出有效策略。

训练到大概200回合以后,我观察到奖励不再大幅变化,此时可以每隔几个回合用当前策略做一次确定性仿真,看k和φ实时变化是否合理。我记录到的规律符合预期:跟踪误差大时k往大调,误差小时k自动回小;参考轨迹斜率大时φ稍微放大,进入平缓段后φ又收小。这说明智能体学到的不只是固定最优值,而是一个能根据状态变化的调度策略。判读这个规律是否有意义,有一个有效方法:把一组测试中k的曲线和误差曲线放到同一张图里看,两者的变化方向是否互补。如果互补,说明智能体确实学出了逻辑,而不是简单地记忆奖励。

4.4 训练后的部署与验证

训练结束后,把Agent切到评估模式,去掉探索噪声,做完整回合仿真。与固定参数SMC对比,我这边看到的改善集中在两点:一是跟踪误差峰值明显下降,二是控制量的高频抖动幅度减弱。原因是智能体会在扰动大、误差大的阶段主动提高切换增益,在误差收敛后主动降低增益并适当放宽边界层,从而避免了固定高增益带来的持续抖振。

部署时要注意一点:Simulink模型里的RL Agent模块如果保留训练模式,仍然会叠加探索噪声,测试结果会偏抖。要把训练选项里的探索噪声参数关掉,或者直接用evaluatePolicy这类评估函数跑确定性动作。我用的是后一种方式,生成的策略评估结果比在线训练时的每回合曲线好看得多,也更接近真实应用表现。

5. 常见问题、踩坑记录与排查方法

仿真过程不会一帆风顺,这部分是我反复调试后总结的实战经验,先收藏再看。

5.1 训练发散不收敛的排查顺序

如果训练曲线暴跌或者一直不涨,我会按顺序检查这些项:

第一,奖励权重是否合适。惩罚项里有数值很大的,指导信号就被这个项主导,策略不敢输出有效动作。解决方法是回到基线数据,把权重缩放到同一量级。

第二,观测向量是否归一化。原始误差、速度等信号量纲不同,直接输入网络会让部分维度支配更新。误差是0.02量级,速度导数是0.5量级,s又可能是几的量级,不归一化的话网络几乎只盯着s看。我用简单的缩放把每个观测分量都处理到大致[-1, 1]区间,训练稳定度提升明显。

第三,网络结构是否过深。低维控制问题用两三层的网络足够,堆太多层只是增加训练负担,不会有精度收益。

还有一个常被忽略的点:经验回放池里训练之前的早期探索样本占比太多。早期样本大多对应很差的参数,Critic会被这些数据带偏。解决办法是训练前先用固定参数跑若干回合,把正常的样本预填充到经验池里,再开始DDPG训练。这招我在实践中屡试不爽,能让训练初期的奖励曲线明显更稳。

5.2 抖振越调越严重的背后原因

有人反馈说训练完成后抖振比固定SMC还明显。绝大多数原因是奖励中缺少控制量变化率的惩罚项。滑模控制本身就容易抖振,如果DDPG只被要求减小误差,它就会通过反复切换增益或把增益逼到上限来压低误差,抖振当然越来越重。给奖励加上(Δu)²惩罚后,智能体会主动选择平滑的增益序列。

另一个容易忽略的问题是DDPG动作更新频率和控制周期不一致。如果动作每个仿真步长都变化,k和φ的抖动会直接耦合进控制量,建议用一个零阶保持器把DDPG输出保持若干个控制周期,或者对动作输出做低通滤波。调低动作更新频率之后,抖振问题能缓解不少。我实际采用的方案是让DDPG每隔5个控制步长更新一次动作,中间保持不变,效果比单纯加低通滤波更干净。

5.3 训练效率低下的几个优化技巧

如果你的机器跑500回合要很久,优先检查两步:每回合步数和批量大小。这个仿真里每步是0.01s,单回合10s就是1000步,改到5s并相应缩短参考信号周期,经验池照样能收集到足够样本。批量大小从256降到128,训练速度提升明显但稳定性略有下降,在可接受范围。

还可以调整环境对象的重置函数,让每个回合的初始位置和参考轨迹参数在一定范围内随机化,这样智能体见过的工况更多,泛化性更好,即使训练回合数不多也能学到较稳健的策略。我最终用的初始误差范围是[-0.1, 0.1],参考轨迹幅值在[0.4, 0.6]之间随机选。这样处理之后,把训练完成的策略用在一组新的参考轨迹上,依然有不错的跟踪效果,说明策略没有过拟合到某一条特定曲线。

如果条件允许,可以用并行训练。多个Simulink环境同时跑,每个环境独立采样再汇总到同一个经验池,训练回合数能大幅减少。我后来在另一个衍生的项目里试过并行训练,4个环境并行时,相同训练时间内策略性能大约提升了近一倍,代价是CPU和内存占用成倍上涨。

6. 关于这个方案我对你的一点建议

整个项目做下来,我个人体会最深的地方是:把强化学习和经典控制结合时,核心不是把控制权完全交给强化学习,而是明确分工。SMC负责兜底,DDPG负责优化,两者各司其职,稳定性和自适应性才能兼顾。这也是这类“智能算法+经典控制”组合能够落地的关键前提。

如果你准备把这个方案用到自己的课题里,建议先从被控对象的物理模型入手,哪怕先做一个简化模型,只要能把输入输出关系跑通,后面的强化学习部分就能复用到绝大多数场景。最后再分享一个小技巧:训练完成后别把Agent内部逻辑当黑盒看完就完事。可以把Actor在关键时间点的输入输出导出来,和SMC的k、φ变化曲线放到一张图里对照分析,你会发现智能体学出来的调参规律和人的直观经验往往惊人地一致。把这一步分析写进报告或论文里,比贴一堆训练曲线要更有说服力。

相关新闻

智慧城管计算机视觉实战:从目标检测到工单闭环的关键技术

智慧城管计算机视觉实战:从目标检测到工单闭环的关键技术

这两年做城市管理信息化项目,最多的需求不再是简单的视频监控上墙,而是把摄像头拍到的东西自动变成工单。我参与过某地级市的智慧城管平台改造,核心就是计算机视觉与智能分析。所谓智慧城管,说白了就是让前端摄像机自动识别违法停…

2026/10/20 4:31:43 阅读更多 →
大模型“养龙虾”实战:从推理优化到RAG的AI工程指南

大模型“养龙虾”实战:从推理优化到RAG的AI工程指南

最近和几个做后端的朋友吃饭,聊到各自公司最近在忙什么,一位在一线互联网公司做运维的同学叹了口气说:我们部门现在最重要的工作不是发版,也不是日常扩容,是养龙虾。我第一反应是开玩笑吧,后来听他解释才明…

2026/10/20 4:31:43 阅读更多 →
OpenClaw实战:被裁后我用AI Agent把工作时间压缩到2小时

OpenClaw实战:被裁后我用AI Agent把工作时间压缩到2小时

我上一份工作结束得很突然,收到通知那天下午,我还在会议室里跟同事对需求。回家的路上我算了笔账:房贷、社保、日常开销,以我当时的储蓄最多撑几个月。那时候我满脑子只有一个念头——我得在最短时间内找到新的收入来源&#xff0…

2026/10/20 4:31:42 阅读更多 →

最新新闻

数据链路层核心原理:MAC地址、以太网帧与交换机转发机制解析

数据链路层核心原理:MAC地址、以太网帧与交换机转发机制解析

十年前我第一次在模拟器里敲下 show mac address-table,看着那几行 MAC 和端口映射,并不觉得数据链路层有什么特别。直到后来排障时发现,很多网络“通了却不对”的问题,根源都藏在这一层。数据链路层是连接物理传输与网络逻辑之间…

2026/10/20 5:22:05 阅读更多 →
信呼OA v1.9.1部署与流程实战:中小团队生产级协同底座

信呼OA v1.9.1部署与流程实战:中小团队生产级协同底座

简介:信呼协同办公OA系统v1.9.1是一款面向中小企业及IT运维/开发人员的开源办公平台解决方案,旨在解决多终端协作、流程标准化与系统可定制化等核心管理需求。资源包共1256个文件,主体为606个PHP后端逻辑文件、231个GIF/79个PNG/3个JPG等前端…

2026/10/20 5:22:05 阅读更多 →
jstat实战:用JDK自带工具监控JVM内存与GC

jstat实战:用JDK自带工具监控JVM内存与GC

在Java服务卡顿、内存飙高、接口超时的时候,绝大多数人第一反应是抓一把jstack看线程,或者拉一份heap dump慢慢分析。但很多时候,问题的根源根本不在某个线程卡在哪行代码,而是整个堆的“新陈代谢”出了问题——对象疯狂创建、回收…

2026/10/20 5:22:05 阅读更多 →
Yume1.5交互式世界生成实战:单卡12FPS实时渲染与部署全解析

Yume1.5交互式世界生成实战:单卡12FPS实时渲染与部署全解析

第一次在某个开源项目页里看到“单卡 12 FPS 实时交互渲染”这句话,我还以为是拿预渲染视频抽帧充数。直到自己把提示词敲进去,生成出一片雨夜小巷,拖动路灯,地上的积水反光跟着偏移角度的那一刻,我才确定:…

2026/10/20 5:22:05 阅读更多 →
c++11学习

c++11学习

/* 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 5:22:05 阅读更多 →
视觉模型重塑时间序列分析:从离散Token到连续视觉的范式转换

视觉模型重塑时间序列分析:从离散Token到连续视觉的范式转换

1. 从离散Token到连续视觉:时间序列分析的新思路拆解时间序列分析这个领域,做的人多,但真正让人眼前一亮的突破少。传统方法从统计模型一路走到深度学习,Transformer架构进来之后,大家发现一个尴尬的事实:文…

2026/10/20 5:21:04 阅读更多 →

日新闻

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实现详解

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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/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 阅读更多 →