SCMA的MPA译码Matlab仿真:从码本设计到误码率曲线
简介基于MPA的SCMA的Matlab仿真项目是一份面向5G非正交多址接入技术研究的可运行代码包适合通信工程专业学生、算法研究人员与系统工程师深入理解稀疏码多址原理和消息传递迭代译码实现。压缩包共包含11个文件其中9个m脚本覆盖了SCMA编码、稀疏码本设计、多用户接入、MPA译码及误码率统计等核心环节并配有一份md格式说明文档和一份txt说明文件方便读者快速梳理仿真流程与函数调用关系。整个资源包仅11KB非常轻量在Matlab环境下即可直接运行和二次修改。该仿真项目目前已有1675人学习使用。通过研读源码与运行结果读者可以掌握MPA因子图消息更新的具体编程路径观察不同信噪比下的误码性能并可进一步调整迭代次数、码本尺寸等参数为优化SCMA系统或开展多址接入技术对比提供实验支撑是研究和教学场景中一份实用的参考实现。1. 为什么还要自己拉一遍「基于MPA的SCMA的Matlab仿真」「基于MPA的SCMA的Matlab仿真」这串词看起来像通信课的一道大作业真正动手把它跑通的人都知道里面的坑比想象中多不少。SCMA稀疏码分多址靠码本稀疏性换来过载能力MPA消息传递算法则靠因子图迭代把这笔非正交的账算回来。这篇内容要做的事很具体从系统参数、码本、发射机到MPA迭代译码搭出一条能出误码率曲线的完整仿真链路。适合通信方向做链路级仿真的研究生、想做非正交多址对比的工程师以及所有听过SCMA但没亲手写过消息传递代码的人。跑通之后你会发现真正吃时间的不是编码而是那些藏在信噪比换算和因子图索引里的玄学。2. 仿真骨架SCMA链路怎么搭先让发射端动起来2.1 系统模型与参数表先定过载率、码本大小和稀疏模式SCMA的系统参数一般围绕用户数 J、资源块数 K、码本大小 M、每个码字的非零资源数 df 来定。业内做这类仿真最常见的配置是 J6、K4、M4、df2过载率 J/K150%。这个配置的复杂度正好卡在「能让MPA跑得动」的范围每个资源块上只有 df·J/K3 个用户叠加功能节点更新时的组合遍历量是 M²16代码写起来不痛苦跑一帧也就毫秒级。参数先列成表后面所有代码都围绕这张表展开参数含义演示取值J用户层数6K资源块数4M码本大小每用户候选码字数4df每个码字中的非零符号数2dc每个资源块上叠加的用户数3λ过载率150%EbN0dB每比特信噪比扫描范围0:2:12稀疏模式决定了因子图的长相。演示系统里每个资源块恰好被3个用户占用每个用户占用2个资源块我用一个 K×J 的0/1矩阵 smap 来表达行是资源块、列是用户。这个矩阵在发射端和译码端都要用到建议在一开始就定义成全局唯一的变量。J 6; K 4; M 4; df 2; EbN0dB 0:2:12; % 稀疏模式: 行资源块, 列用户 % 用户1占资源1,2; 用户2占资源1,3; ... 每列恰好2个1 smap [1 1 1 0 0 0; 1 0 0 1 1 0; 0 1 0 1 0 1; 0 0 1 0 1 1];这段代码里的 smap 不是随便写的它保证了每一列恰好有2个非零、每一行恰好有3个非零也就是 df 和 dc 都均衡。用这个矩阵去画因子图就是6个变量节点、4个功能节点、12条边。注意 smap 的列顺序就是用户编号顺序译码端如果换了用户顺序消息传递会整个错位后面专门讲这个坑。一般做法是把 smap 和 J、K、M 一起放在一个结构体里编码和译码都从同一个结构体取参数避免两头维护。2.2 演示码本与SCMA编码把比特映射成稀疏码字SCMA的码本是一个 K×M×J 的三维复数数组cb(:, m, j) 表示用户 j 的第 m 个码字。每个码字在 df 个资源上有非零符号其余位置是0。码本设计是SCMA性能的关键直接关系到同一资源块上叠加星座的可分性。正式研究中码本通常要做欧氏距离优化但做链路验证时可以用一个固定结构的演示码本基础QPSK星座加每用户相位旋转。% make_demo_codebook.m % 生成可复现的演示码本: 基准QPSK 每用户相位旋转 % 注意: 该码本未做距离优化, 仅用于链路调试 function cb make_demo_codebook() J 6; K 4; M 4; base [11i; -11i; -1-1i; 1-1i] / sqrt(2); % 平均符号能量1 cb zeros(K, M, J); for j 1:J theta (j - 1) * pi / 6; % 每用户一个旋转角 sym base * exp(1i * theta); % 旋转后的符号集 pos find(smap(:, j)); % 用户j的两个非零资源 cb(pos(1), :, j) sym.; cb(pos(2), :, j) sym.; end end逻辑说明每个用户在两个非零资源块上放置同一组旋转后的QPSK符号旋转角度随用户索引递增。这样做的目的是让不同用户在同一资源块上的星座不再完全重合MPA才有足够的区分度如果所有用户都用同一组QPSK符号叠加后会出现大量完全相同的候选组合译码性能会很差。参数上读者可以把 pi/6 改成任意步进但要注意角度差异太小会导致星座距离变近、高SNR段出现错误平层。编码过程就是每个用户按自己的比特选一个码字然后按资源块叠加。% scma_transmit.m % 输入: cb (KxMxJ), bitIdx (Jx1, 取值1..M) % 输出: y (Kx1), 叠加后的无噪声发射向量 function y scma_transmit(cb, bitIdx) [K, ~, J] size(cb); y zeros(K, 1); for j 1:J y y cb(:, bitIdx(j), j); end end代码里 bitIdx 是每个用户选中的码字索引由 log2(M)2 个比特映射而来。发射端的映射我用的是直接二进制bits 两列第一列是低位。实际项目中常见做法是把直接映射换成格雷映射能让星座点相邻比特只差1位从而降低高SNR下的误比特率但演示链路用直接映射不影响MPA本身的功能验证。2.3 信道与接收向量AWGN怎么加EbN0怎么进sigma2信道模型先按最简单的平坦AWGN来y_received transmit_vector noise。MPA译码需要两个关键量接收向量和噪声方差 sigma2。噪声方差的来源是EbN0而EbN0到sigma2的换算是整个仿真里最容易出错的一步。正确做法是先由码本统计出平均码字能量再除以 log2(M) 得到每比特能量最后除以线性EbN0。% 主仿真片段: 一帧的发射与加噪 bits randi([0 1], J, 2); % 每用户2比特 bitIdx bits * [1; 2] 1; % 00-1, 01-2, 10-3, 11-4 y scma_transmit(cb, bitIdx); % 由码本统计平均码字能量 Es mean(mean(sum(abs(cb).^2, 1), 2), 3); % 标量 Eb Es / log2(M); % 每比特能量 sigma2 Eb / (10^(EbN0dB / 10)); % 复噪声总方差 n sqrt(sigma2/2) * (randn(K,1) 1i*randn(K,1)); r y n;这一段里 sigma2 是复数噪声的总方差所以拆成实部虚部各占一半。Eb 的计算用 mean 对三个维度求平均不依赖某个具体用户或码字这样即便码本被整体缩放Eb 也会跟着变化信噪比定义始终一致。换到频率选择性信道时常见做法是把 h 参数从标量扩展成 K×J 矩阵接收向量变成逐资源块乘系数再叠加后面的MPA代码需要同步改。获得 r 之后发射端这一侧就完整了。接下来要面对的是整个仿真的核心到底怎么从叠加的信号里把6个用户的比特逐个抽出来也就是MPA译码部分。3. MPA译码因子图上的消息迭代从公式到Matlab3.1 因子图与消息定义MPA在log域里到底存了什么MPA把多用户检测建模成因子图上的消息传递。因子图里有两类节点变量节点对应6个用户功能节点对应4个资源块。用户 j 与资源块 k 之间有一条边当且仅当 smap(k,j)1。迭代过程中每条边上会跑两类消息从用户到资源块的 V2F 消息以及从资源块到用户的 F2V 消息。初学者最容易搞混的一点这里的消息不是定义在某个资源符号上的而是定义在码字索引 m 上的每条消息都是一个 M×1 的向量。原因是SCMA里一个码字同时决定用户在多个资源上的符号如果把消息按符号维度拆开码字内部的关联就丢了。所以 V2F{k,j}(m) 表示用户 j 告诉资源块 k「我的码字是 m」的对数置信度F2V{k,j}(m) 表示资源块 k 根据接收信号和其他用户的消息推断「用户 j 的码字是 m」的对数置信度。所有消息都在对数域里运算。初始化时没有任何先验信息每条边的 V2F 都置为全0向量表示所有码字等概率。0是log域里的均匀分布因为它对应概率1而消息之间通常只关心相对大小常数偏移在后面的更新中会自动抵消。这个初始化看似随意却直接影响迭代是否稳定第四章会专门讲。MPA的迭代更新分两步。功能节点更新F2V的max-log近似形式是L(k→j)(m) max over others的码字组合 [ -|y_k - Σ h_k,i x_k,i|^2 / sigma2 Σ V2F消息 ]变量节点更新V2F则是把该用户连接的其他资源块发来的 F2V 消息逐码字相加。3.2 功能节点更新把每个资源块上的16种组合算干净以资源块1为例它连接用户1、2、3。要给用户1更新 F2V需要固定用户1的码字索引 m然后遍历用户2和用户3的所有码字组合总共4×416种。对每种组合计算一个度量信道似然项加上来自用户2、用户3的 V2F 消息取最大值作为用户1的消息值。dc3 时组合数只有16这就是SCMA选择稀疏结构的核心原因——如果用传统叠加编码组合数会是 M^dc资源块上用户再一多就彻底算不动了。% scma_mpa_decode.m 核心片段: 功能节点更新 % cb: KxMxJ, smap: KxJ, y: Kx1, h: Kx1 平坦信道增益 % V2F/F2V: KxJ cell, 每个元素是 Mx1 log域消息 for k 1:K nbrs find(smap(k, :)); % 资源k上的用户集合, dc3 for j nbrs others setdiff(nbrs, j); % 其余两个用户 fMsg zeros(M, 1); for m 1:M xj cb(k, m, j); % 用户j在资源k上的符号 best -inf; for idxA 1:M xA cb(k, idxA, others(1)); vA V2F{k, others(1)}(idxA); for idxB 1:M xB cb(k, idxB, others(2)); vB V2F{k, others(2)}(idxB); metric -abs(y(k) - h(k)*(xj xA xB))^2 / sigma2; best max(best, metric vA vB); end end fMsg(m) best; end F2V{k, j} fMsg; end end这段代码用两层循环固定遍历 others(1) 和 others(2)是因为演示配置 dc3。如果以后换参数让 dc 变大两层循环要改成动态组合遍历常见做法是用 ndgrid 生成所有组合索引矩阵再批量计算。metric 里的 h(k) 目前是标量平坦增益换成频率选择性信道时要把 h 扩展成逐用户系数令 xj h(k,j)*cb(k,m,j)。vA 和 vB 来自上一次迭代的 V2F 消息因此迭代顺序必须是先更新全部 F2V再更新全部 V2F不能同一个迭代次数里混着用新一轮和旧一轮的消息否则会引入时序偏差。3.3 变量节点更新与硬判决迭代怎么收尾比特怎么出变量节点更新比功能节点简单得多。用户 j 发给资源块 k 的 V2F 消息等于用户 j 从其他资源块收到的 F2V 消息逐码字相加。这个更新的依据是用户 j 只连接两个资源块在贝叶斯意义下后验概率正比于各分支似然的乘积取对数后就是求和。% 变量节点更新 for j 1:J resNbrs find(smap(:, j)); % 用户j的资源集合 for k resNbrs vMsg zeros(M, 1); for l setdiff(resNbrs, k) vMsg vMsg F2V{l, j}; end V2F{k, j} vMsg; end end迭代结束后每个用户把所有 F2V 消息累加得到后验对数消息取最大值的索引作为码字估计再映射回比特。% 迭代结束后判决 LLR zeros(M, J); for j 1:J resNbrs find(smap(:, j)); for k resNbrs LLR(:, j) LLR(:, j) F2V{k, j}; end end [~, idxEst] max(LLR, [], 1); bitsEst zeros(J, 2); bitsEst(:, 1) mod(idxEst - 1, 2); bitsEst(:, 2) floor((idxEst - 1) / 2);这里比特映射和发射端保持一致发射端 bitIdx bits(:,1) 2*bits(:,2) 1译码端反过来拆就行。需要提醒的是SCMA的因子图是有环的MPA本质是在环图上做近似推断所以迭代次数不是越多越好。常见做法是固定5到8次既保证消息在环路里充分传播又避免过度自信。迭代次数的坑在下一章详细展开。4. MPA仿真避坑五个让曲线翻车的细节4.1 功率归一化和EbN0换算曲线整体平移的元凶坑1EbN0被当成SNR直接用。现象是误码率曲线形状完全正常但整体比预期差3dB左右而且不同码本配置下偏移量还不一样。原因在于SNR是信号功率对噪声功率的比而EbN0是每比特能量对噪声功率谱密度的比中间差了码字能量和比特数的换算。如果你的仿真直接把 EbN0dB 塞进 sigma2 10^(-EbN0dB/10)那曲线一定会平移。解决方法是严格走一遍先用码本统计平均码字能量 Es再算 Eb Es/log2(M)最后 sigma2 Eb / EbN0_linear。注意这里 Es 要用 mean 对码本三个维度求平均而不是拿某一个用户的码字能量代替。坑2码本符号没做能量归一化。现象是不同用户之间发射功率不一致误码曲线在高SNR段出现地板某个用户永远比别的用户差一截。原因是演示码本里如果直接拼接QPSK符号旋转后符号幅度虽然不变但码字总能量可能因为非零位置分布不同而产生差异尤其当 df 不固定时更明显。解决方法是统计每个用户的平均码字能量后做归一化cb cb ./ sqrt(Es_per_user)并更新 Eb 的计算。整体缩放不会改变MPA译码的相对判决只是让信噪比定义变公平。实际项目里还见过有人忘了把噪声方差跟信号一起缩放导致曲线随码本缩放左右乱飘这是同一个坑的两面。4.2 迭代相关的坑不收敛、震荡和max-log近似坑3迭代次数越多误码率反而越差。现象是迭代次数从5加到20BER先降后升甚至在某个迭代次数出现周期性波动。原因有两个一是SCMA因子图有环多轮迭代会让消息在环路上自我强化最终偏向某个局部最优二是log域消息没有做归一化绝对值随迭代不断增大数值上也开始不稳定。解决方法是固定迭代次数在5到8次同时在每次变量节点更新后对消息减去其最大值。减去最大值不改变码字间的相对关系纯粹是为了防止数值溢出这样消息值域就维持在0附近。坑4max-log近似在高SNR段出现假平层。现象是曲线低SNR段趋势正常越往高SNR走误差越大甚至出现一段斜率变缓的伪平层。原因是功能节点更新时用 max 替代了 log-sum-exp这一近似在消息可靠性低时误差较小但消息差异变大后被忽略的 exp 项占比上升判决边界被扭曲。解决方法是高SNR段改用完整LogSumExpMatlab里可以写成 max(a) log(sum(exp(a - max(a))))。如果嫌复杂度高另一个做法是只在最后两次迭代用LogSumExp前几次用max-log性能损失很小。4.3 索引与结构稀疏模式对不齐这类玄学坑5发射端和译码端稀疏模式对不齐BER永远在0.3以上。现象是无论SNR多高误码率都降不下去看起来像译码器完全失效。原因多半是编码侧和译码侧各写了一份 smap其中一份转置了或者用户顺序换了因子图上的边连错对象。这类问题特别隐蔽因为代码不报错只是结果荒谬。解决方法是把 smap、码本、用户顺序全部打包进一个参数结构体编码和译码共用同一份数据不在任何函数里重新声明。血泪经验是换参数文件或重排用户顺序时先跑一帧无误码的端到端测试把所有译码结果打出来人工核对再开始大面积扫SNR。5. 从跑通到可信用收敛性检查和误码统计给仿真结果上保险5.1 动态停止迭代监视LLR变化别数固定圈数固定迭代次数5到8次虽然稳定但不同SNR段需要的迭代数不一样。低SNR时消息收敛慢高SNR时两三轮就够了。常见做法是监视相邻两次迭代的变量节点LLR变化量变化小于阈值就提前退出既能省时间又能避免过迭代。阈值我一般取1e-3按所有用户所有码字索引的平均绝对差来算。% 动态停止: 计算相邻迭代的LLR平均变化量 delta mean(abs(LLR_new(:) - LLR_old(:))); if delta 1e-3 break; end这个阈值灵敏度很高实测中1e-2到1e-4之间对BER影响不大主要是省迭代。注意 LLR_new 要在每轮迭代结束时先算出来和上一轮的 LLR_old 比较后再进入下一轮。5.2 误码统计至少攒够多少关于BER曲线最后一段的可信度误码率曲线最后一段往往只有几十个误码波动极大。按置信区间的说法二项分布标准差是 sqrt(p(1-p)/n)想置信带宽在20%以内至少得攒够100个误码。也就是说如果某一帧SNR段只有10个误码要继续跑到至少100个误码再记下BER否则曲线最后一段就是在画噪声。我现在的习惯是每次仿真把随机种子、码本文件名、迭代次数、信噪比扫描范围一起存进结果文件方便事后定位问题。曾有一次调了个参数曲线明显变好后来发现是漏了噪声归一化从此所有仿真都先跑一发端到端无误码测试再信参数。收敛检查、误码计数、参数存档这三件事做到位曲线才是能给别人看的东西。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

NOI竞赛C++实战避坑指南:内存、STL、编译器与IO四大维度

NOI竞赛C++实战避坑指南:内存、STL、编译器与IO四大维度

简介:本资源是《C全国青少年信息学奥林匹克竞赛(NOI)大纲(2023年修订版)》官方PDF文档,由中国计算机学会(CCF)NOI科学委员会审定发布,面向NOI系列赛事的指导教师、参赛学…

2026/10/19 22:44:04 阅读更多 →
MinGW+Qt下GDAL 1.11.5环境配置与避坑指南

MinGW+Qt下GDAL 1.11.5环境配置与避坑指南

简介:这是一份面向 QT(MinGW 版)C 开发者的 Windows 预编译 GDAL 1.11.5 开发包,采用 MSYS2 MinGW64 工具链编译,可让使用者跳过源码编译阶段,直接获得可链接的库文件与命令行工具。压缩包约 70.71MB&…

2026/10/19 23:43:01 阅读更多 →
Python aiida-siesta 包详解与实战案例

Python aiida-siesta 包详解与实战案例

1. 引言aiida-siesta 是 AiiDA(Automated Interactive Infrastructure and Database for Computational Science)生态中用于管理 SIESTA 第一性原理计算的工作流插件。它把 SIESTA 的输入准备、任务提交、结果解析和数据结构化存储整合到 AiiDA 的图数据…

2026/10/19 22:44:04 阅读更多 →

最新新闻

MCP Server 集群化部署:从 Docker 到 Kubernetes 的完整实践

MCP Server 集群化部署:从 Docker 到 Kubernetes 的完整实践

我在团队里负责 AI 基础服务,前几个月被 MCP Server 折腾得够呛。MCP 是模型上下文协议,说白了就是让大语言模型能通过标准化接口调用外部工具和数据源。最开始我们每个人在本机起一个 MCP Server,工具定义各改各的,代码一更新就要…

2026/10/20 14:49:35 阅读更多 →
从零搭建SpringBoot+Vue商城系统:核心设计与部署全攻略

从零搭建SpringBoot+Vue商城系统:核心设计与部署全攻略

自己动手把一套网上商城从零搭到能上线,这事听起来工程量大,实际上踩完一轮坑之后回头看,最值钱的不是那几万行代码,而是整个链路里每个环节你都知道它为什么这么设计。这个项目用的是Java后端技术栈里最经典的组合:Sp…

2026/10/20 14:49:34 阅读更多 →
innodb_flush_log_at_trx_commit全解析:性能与数据安全如何取舍

innodb_flush_log_at_trx_commit全解析:性能与数据安全如何取舍

做MySQL维护和调优的朋友,十有八九都听过innodb_flush_log_at_trx_commit这个参数。有人叫它“安全开关”,有人说它是“性能与数据安全的天平”,其实都不过分。很多压测报告里,把这个参数从1改成2,TPS能肉眼可见地涨一…

2026/10/20 14:49:34 阅读更多 →
MCP Server云原生集群化实战:Docker与K8s弹性伸缩指南

MCP Server云原生集群化实战:Docker与K8s弹性伸缩指南

MCP(Model Context Protocol)这两年火得很快,身边搞 AI 应用的同学几乎都在接。但大部分人把 MCP Server 部署得比较随意——一台机器,一个进程,能跑就行。直到流量上来、工具越接越多,才发现单机模式处处碰…

2026/10/20 14:49:34 阅读更多 →
MySQL参数详解:innodb_flush_log_at_trx_commit的性能与安全取舍

MySQL参数详解:innodb_flush_log_at_trx_commit的性能与安全取舍

我处理过不少数据库卡顿和“丢了几秒数据”的现场,最后基本都绕回到一个老参数上: innodb_flush_log_at_trx_commit 。它字面意思很简单,就是控制事务提交时InnoDB怎么刷redo log,可真正把它讲透、用对的人并不多。很多后端开发…

2026/10/20 14:49:34 阅读更多 →
Frida动态插桩实战:从Hook到内存扫描的完整指南

Frida动态插桩实战:从Hook到内存扫描的完整指南

做移动端安全测试这些年,我见过太多人把大量时间花在反编译和读汇编上,遇到加了壳的应用就只能干瞪眼。后来我开始把 Frida 动态插桩作为主要分析手段,很多原本要折腾半天的任务,现在几分钟就能拿到结果。这篇文章我会从最基础的 …

2026/10/20 14:48:08 阅读更多 →

日新闻

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/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出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/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 阅读更多 →