MATLAB 16QAM星座图与误码率仿真:从映射、归一化到避坑实践
简介一套面向16QAM调制解调仿真的Matlab代码适合通信工程专业学生、研究人员以及期望掌握数字调制误码率分析的技术开发者。压缩包共含8个MATLAB脚本文件大小仅3KB代码结构清晰包含主控流程、星座图绘制、调制/解调、4位与2位比特转换、随机二进制序列生成及波形整形等功能模块。通过运行主函数可完成从数据产生、16QAM调制、AWGN信道模拟、解调判决到误码率统计的完整链路仿真并能直接绘制星座图直观展示信号分布。星座图上的坐标分布清晰便于观察判决门限与噪声容限。用户可根据注释调整信噪比等参数绘制不同条件下的误码率曲线结合星座图观察噪声对信号的影响通过对比不同信噪比下的误码率结果可评估系统抗噪声能力并加深对调制机制的理解。目前已有1927人学习下载。1. MATLAB 里的 16QAM 星座图与误码率仿真从跑通到看懂刚接触数字通信仿真那会儿我拿着别人的 16QAM 脚本跑出一张星座图满屏五颜六色的点挤成一团压根分不清哪个是哪个再看误码率曲线跟课本理论值差了十万八千里对着代码较劲了整整两天。后来才发现问题出在信噪比定义、映射表和判决边界这三处没对齐。这篇笔记就把我拆过的 16QAM 星座图仿真与误码率仿真完整捋一遍覆盖调制映射、AWGN 信道建模、星座图观察、误码率统计与理论对比以及新手最容易翻车的几个大坑。面向所有用 MATLAB 做通信仿真、毕设和课程实验的读者跟着步骤走你也能得到一张干净的 16QAM 星座图和一条贴着理论曲线的 BER 图。2. 调制映射与参数准备先算对符号和能量再做仿真2.1 星座图不是画出来的是映射出来的很多人一上来就调qammod()函数星座图是出来了但换几个参数就不会用了。我建议先理解 16QAM 的星座点布局。16QAM 把每 4 个比特映射成一个复符号I 路和 Q 路各取 4 个电平-3、-1、1、3。这样就有 4×416 个组合映射成复数符号时实部对应 I 路电平虚部对应 Q 路电平。这里有一个关键选择怎么把 4 比特编码到 16 个点上。最常见的做法是格雷映射Gray mapping保证相邻星座点之间只差 1 个比特这样即使判决出错多数情况下也只错 1 个比特误码率BER会比随机映射低不少。格雷映射表可以直接用comm.RectangularQAMModulator这类工具箱对象生成但为了看清原理我一般直接手写映射关系。下面是一份常用的格雷映射电平顺序二进制I/Q 各 2 比特十进制索引I 电平Q 电平000-3-3011-1-31121-31033-300Q 电平递增后4-3-1015-1-11161-11073-1以此类推Q 电平按 -3、-1、1、3 循环就得到一个完整的 16 点星座。注意这里 I 路和 Q 路都是格雷码顺序码型上是 00、01、11、10而不是自然二进制 00、01、10、11。这一点必须刻在脑子里后面对比理论与仿真误码率时它决定了两条曲线能不能贴合。2.2 MATLAB 手写映射函数参数与逻辑拆解下面这个函数接收比特串输出复数符号序列不依赖通信工具箱也能跑function sym qam16_gray_map(bits) % bits: 行向量长度必须是 4 的整数倍 % sym: 复数符号列向量 bits bits(:); nSym length(bits) / 4; if mod(length(bits), 4) ~ 0 error(比特数必须是 4 的倍数); end bitsMat reshape(bits, 4, nSym); % 每行一个符号的 4 比特 % 格雷映射表行索引对应 [I2 I1 Q2 Q1] 转十进制 1 grayMap [ -3-3i, -3-1i, -31i, -33i, ... -1-3i, -1-1i, -11i, -13i, ... 1-3i, 1-1i, 11i, 13i, ... 3-3i, 3-1i, 31i, 33i ]; % 按列顺序取索引第1列是I路高位第2列是I路低位第3列是Q路高位第4列是Q路低位 idx bitsMat(:,1)*8 bitsMat(:,2)*4 bitsMat(:,3)*2 bitsMat(:,4) 1; sym grayMap(idx).; end这段代码的关键在于索引计算。bitsMat(:,1)*8 bitsMat(:,2)*4 ...是把 4 比特看成一个 4 位二进制数左侧高位在前。而grayMap的行顺序必须与这个索引顺序严格一一对应否则映射就乱了。我在初版脚本里就吃过亏映射表写成了自然二进制顺序结果理论曲线需要右移 1~2 个 dB 才对得上整个调试过程极其痛苦。所以建议把映射表打印出来跟星座图逐个点校验一遍。2.3 符号能量归一化仿真里最容易被忽略的一步星座图画出来之后下一个问题就是功率。16QAM 的 16 个符号平均功率必须算对否则加噪声时方差怎么设都是错的。16 个点的坐标模平方分别是4 个角点模平方为 99188 个边点为 9110 或 19104 个内点为 112平均功率为 (4×18 8×10 4×2) / 16 160 / 16 10。等等这个算错了重新算角点 4 个是 18边点 8 个是 10内点 4 个是 2总和是 72808160平均确实是 10。但标准 16QAM 星座点坐标若取 ±1、±3平均功率就是 10而归一化到单位功率需要乘 1/sqrt(10)。很多教材直接按单位能量星座点画图那坐标就变成 ±1/sqrt(10)、±3/sqrt(10)。我习惯先按 ±1、±3 映射再统一归一化% 映射后归一化使平均符号能量为 1 sym sym / sqrt(10);这样后续无论算 EsN0、还是对比理论误码率信噪比定义都能直接对上。这个sqrt(10)就是 16QAM 的归一化因子对应平均能量 10。如果你改用 64QAM归一化因子就是 42 的平方根改成 4QAM 就是 2。归一化做完之后星座图的平均半径应该接近 1而不是原来的 3 点多。3. AWGN 信道与星座图绘制让噪声功率和信噪比严格对应3.1 加噪声的两种写法本质是一样的AWGN 信道下接收信号 r s n其中 n 是复高斯白噪声实部和虚部相互独立每一维方差为 N0/2。N0 是单边噪声功率谱密度取决于信噪比设定。两种常见的加噪方式第一种直接用awgn()函数rx awgn(tx, snr_db, measured);第二种是手动加噪声这种更可控也更容易理解参数含义N0 10^(-EsN0_db / 10); % 由 EsN0 反推噪声功率谱密度 noise sqrt(N0/2) * (randn(size(tx)) 1j*randn(size(tx))); rx tx noise;两种写法在信噪比定义一致时结果相同。我总用手动方式因为可以精确控制每维方差而且当你要研究相位噪声、IQ 失衡时直接改噪声生成那行就行不必依赖工具箱封装。关键在于sqrt(N0/2)前面那个系数很多新手在这一步把方差搞错导致误码率曲线整体偏移。3.2 星座图仿真完整流程从发端到接收端这里给一段可以直接跑的脚本骨架% 参数设置 M 16; k log2(M); nBits 1e6; % 总比特数 EbN0_db 15; % 每比特信噪比 EsN0_db EbN0_db 10*log10(k); % 每符号信噪比 % 发端 bits randi([0 1], nBits, 1); txSym qam16_gray_map(bits); % 调用映射函数 txSym txSym / sqrt(10); % 能量归一化 % 信道 N0 10^(-EsN0_db / 10); noise sqrt(N0/2) * (randn(size(txSym)) 1j*randn(size(txSym))); rxSym txSym noise; % 星座图 figure; plot(real(rxSym(1:5000)), imag(rxSym(1:5000)), .); hold on; plot(real(txSym(1:5000)), imag(txSym(1:5000)), rx, MarkerSize, 8); axis equal; grid on; title(16QAM 接收星座图 (Eb/N0 15 dB)); xlabel(I 分量); ylabel(Q 分量);逻辑说明先随机生成 100 万比特映射成 25 万个 16QAM 符号并归一化接着根据 EsN018.45 dB 反推 N0生成复高斯噪声叠加到信号上。绘图时只取前 5000 个点否则点太密看不清趋势。红色叉号标出理想星座点蓝色圆点就是带噪声的接收符号。注意axis equal很重要不然横纵轴比例不一致正方形星座会显示成长方形。3.3 星座图怎么看噪声半径、判决边界和 EVM画出来的星座图不只是好看它能直接反映信道质量。当 Eb/N0 在 15 dB 时噪声斑点应该比较紧密地围绕理想点四个角尤其清晰当 Eb/N0 降到 5 dB 时斑点会连成一片内点相互交叠判决区域边界模糊。我一般会顺手算出误差矢量幅度 EVM% 误差矢量幅度 EVMRMS EVM_rms sqrt(mean(abs(rxSym - txSym).^2)) / sqrt(mean(abs(txSym).^2)) * 100; fprintf(EVM (RMS) %.2f%%\n, EVM_rms);EVM 是一个更直观的星座图质量指标工程上经常用它快速评估链路。EVM 和 SNR 的关系近似为 SNR ≈ -20*log10(EVM/100)。比如 EVM 是 10% 时SNR 大约 20 dB。画星座图时我习惯把判决边界也叠加上去即 I0、Q0 的两条轴线以及 ±2/sqrt(10) 的电平线这样一眼就能看出哪些点会判错。判决边界在仿真里不一定要画但对于理解误码率成因很有帮助。4. 误码率仿真与理论曲线对比蒙特卡洛循环里的关键参数4.1 蒙特卡洛误码率主循环误码率仿真的核心是重复发符号、加噪、判决、比对统计错误比例。下面这段是完整的误码率扫描循环% 参数 M 16; k log2(M); EbN0_dB_list 0:2:16; % 扫描 Eb/N0 numBits 2e6; % 每个信噪比下的比特数 ber_sim zeros(size(EbN0_dB_list)); ser_sim zeros(size(EbN0_dB_list)); for idx 1:length(EbN0_dB_list) EbN0_dB EbN0_dB_list(idx); EsN0_dB EbN0_dB 10*log10(k); N0 10^(-EsN0_dB / 10); bitsTx randi([0 1], numBits, 1); symTx qam16_gray_map(bitsTx); symTx symTx / sqrt(10); noise sqrt(N0/2) * (randn(size(symTx)) 1j*randn(size(symTx))); symRx symTx noise; % 最小距离判决 symRx symRx * sqrt(10); % 还原到 ±1, ±3 坐标 I_rx real(symRx); Q_rx imag(symRx); I_hat 2*(I_rx 0) - 1; % 先粗判 I_hat(I_rx 2) 3; I_hat(I_rx -2) -3; I_hat(I_rx 0 I_rx 2) 1; I_hat(I_rx 0 I_rx -2) -1; % Q 路同理 Q_hat 2*(Q_rx 0) - 1; Q_hat(Q_rx 2) 3; Q_hat(Q_rx -2) -3; Q_hat(Q_rx 0 Q_rx 2) 1; Q_hat(Q_rx 0 Q_rx -2) -1; % 还原符号索引并解映射为比特 symHat I_hat 1j*Q_hat; [~, symIdx] ismember(symHat, grayMap); % grayMap 是原来的非归一化映射表 bitsRx de2bi(symIdx - 1, k, left-msb); bitsRx bitsRx(:); bitErr sum(bitsTx ~ bitsRx); symErr sum(symHat ~ symTx * sqrt(10)); ber_sim(idx) bitErr / numBits; ser_sim(idx) symErr / (numBits / k); end这个判决思路是先按正负粗判到 ±1再根据幅度是否超过 2 修正到 ±3。看着笨但它不依赖通信工具箱也方便改成软判决或对数似然比。需要注意ismember那一步要求grayMap与映射函数里的顺序一致否则索引就乱了。另一个隐蔽的点是symTx * sqrt(10)在比对时也要还原因为判决是在非归一化坐标里做的归一化因子不能漏。如果全程在归一化坐标里做判决阈值就应该是 ±1/sqrt(10) 和 ±2/sqrt(10)各有利弊我偏好非归一化坐标数字看着舒服不容易写错阈值。4.2 理论误码率公式SER 与 BER 不是一回事16QAM 的理论符号误码率SER公式有多种写法常见的一种是基于最小欧氏距离的近似。精确一点的公式是对 M16 方形 QAMSER 2(1 - 1/√M) erfc(√(3EsN0/(2(M-1)))) - (1 - 1/√M)² erfc²(...)。这个公式看着复杂实际用 MATLAB 一行就行% 理论 SER按符号能量计算 EsN0_lin 10.^(EsN0_dB_list / 10); ser_theory 2*(1 - 1/sqrt(M)) .* erfc(sqrt(3*EsN0_lin/(2*(M-1)))) ... - (1 - 1/sqrt(M))^2 .* erfc(sqrt(3*EsN0_lin/(2*(M-1)))).^2;注意 erfc 是余误差函数erfc(x) 2Q(√2 x)MATLAB 里用erfc比qfunc更通用qfunc 在通信工具箱里。还有公式里的 EsN0 必须是线性值不是 dB 值别直接代进去。BER 就不能简单套 SER 公式了。格雷映射下相邻符号误判时通常只错 1 个比特因此 BER ≈ SER / k。注意这是近似不是精确相等因为还存在跨多个比特的误判但在高信噪比下误差很小。我在对比曲线时会把理论 SER 除以 k 画成 BER 理论曲线与仿真的 BER 对比。这样如果两条曲线还差 0.5 个 dB 以上就说明映射表或判决有 bug。4.3 画误码率曲线semilogy 与坐标轴的三个细节画 BER 曲线代码很简短但有几个细节不处理就会让曲线“消失”figure; semilogy(EbN0_dB_list, max(ber_sim, eps), b-o, LineWidth, 1.5); hold on; semilogy(EbN0_dB_list, max(ser_sim, eps), r-s, LineWidth, 1.5); semilogy(EbN0_dB_list, max(ser_theory/k, eps), k--, LineWidth, 1.5); grid on; xlabel(Eb/N0 (dB)); ylabel(误码率 / 误符号率); legend(BER 仿真, SER 仿真, BER 理论);三个细节第一eps兜底否则某段信噪比下一个错误都没有时log10(0)会得到负无穷曲线直接断掉。第二横轴用 Eb/N0 还是 Es/N0 必须想清楚我习惯横轴用 Eb/N0因为和理论公式里的 EsN0 换算已经做完了横轴语义更贴近比特级比较。第三仿真点不要连成平滑线要带标记符号信噪比间隔取 2 dB 足够观察趋势。如果你跑 16 dB、18 dB 时误码率已经低于 1e-6那就得加大比特数不然统计噪声会严重抖动。5. 仿真避坑记录5 个最容易翻车的操作细节5.1 Eb/N0 与 Es/N0 换算少加 10*log10(k)现象曲线整体比理论右移约 6 dB仿真误码率比理论大得多。原因16QAM 一个符号承载 4 个比特符号能量是比特能量的 4 倍。若直接把 Eb/N0 当作 Es/N0 用等效信噪比被低估了 6 dB。反过来如果把 Es/N0 当 Eb/N0 画横轴理论曲线又会左移。解决统一按 EsN0_dB EbN0_dB 10*log10(k) 换算k4 时就是加 6.02 dB。每次写循环前先打印一遍换算结果确认无误再跑。5.2 星座图所有点堆成一团看不出 16 个簇现象接收星座图不是 16 团点而是乱糟糟一片或者所有点挤在一起。原因噪声方差设太小比如 N0 直接写成了 1e-4而信号幅度接近 1信噪比极高噪声几乎不可见。另一个常见原因是没有做能量归一化信号幅度有 3 点多噪声相对幅度太小。解决先把 Eb/N0 设成 0 dB 甚至 -5 dB这时候星座图应该明显糊成一团然后慢慢增大到 10 dB、15 dB观察斑点逐渐收紧。如果 0 dB 时还是清晰的 16 团那噪声方差肯定算错了。检查 N0 计算式里的 EsN0 有没有换算对。5.3 误码率为 0 导致曲线断点semilogy 直接报错或图形缺失现象高信噪比下 BER 曲线突然消失或出现断崖log 坐标下看不到点。原因蒙特卡洛仿真中某个信噪比下错误数为 0BER 恰好是 0而 semilogy 对 0 取对数得到负无穷。我还见过有人为了得到“完美曲线”故意加大信噪比到 20 dB结果错误数为 0曲线直接断掉。解决两种方案任选。一是统计时保证最少错误数比如当错误数不足 100 时继续增加数据量直到统计到 100 个错误再停止二是绘图时用max(ber, eps)处理。我推荐前者因为误码率为 0 的“漂亮”曲线没有实际意义统计误差太大别人根本没法复现你的结果。5.4 用了格雷映射表但判决时按自然二进制还原比特现象仿真 BER 比理论值明显偏高尤其在低信噪比时能高出几倍但 SER 曲线和理论 SER 对得很好。原因判决出来的符号索引又按自然二进制转回比特丢掉了格雷映射的相邻单比特特性。比如符号从 11 判到 10自然二进制下两个比特都错格雷码下只错 1 个比特。SER 不受影响但 BER 被放大了。解决解映射必须使用与调制完全一致的格雷表。最保险的做法是维护一张映射表调制的逆过程直接查表反推而不是自己写“电平到比特”的手动规则。我在代码里用grayMap(idx)正向映射逆过程用ismember查表两头走同一个表就不会出现这种错位。5.5 仿真重复性差同一段代码每次跑出的曲线不一样现象同样的参数两次运行得到的 BER 曲线有小幅抖动尤其在低误码率区间。原因随机数生成器未固定种子。蒙特卡洛仿真本身是随机试验不设种子时每次结果都不同。解决脚本开头加rng(42);固定随机种子这样别人复现你的实验能得到完全一致的曲线。如果要跑多组对比实验可以用不同种子并取平均但发布代码时一定要固定种子否则结果的置信度无从谈起。我一般会固定种子同时在注释里写明用了多少比特方便他人判断统计精度。6. 进阶玩法把脚本包成参数化函数顺便观察相位旋转的影响到这一步基础仿真已经跑通了但直接复制粘贴脚本改参数始终不是工程习惯。我会把整个流程封装成一个函数输入参数是调制阶数 M、Eb/N0 范围、比特数输出 BER 和星座图function [ber, ser] qam_sim(M, EbN0dB_list, maxBits) k log2(M); % 调用 qammod 生成星座图工具箱版或手动扩展 qam16_gray_map % 这里以 16QAM 为例M 可变时建议用三角函数星座生成 ... end封装之后你可以同时跑 4QAM、16QAM、64QAM 三组曲线对比它们在相同 Eb/N0 下的性能差异这是毕设和面试里常被问到的点高阶 QAM 频谱效率高但误码性能急剧下降64QAM 要达到 16QAM 相同误码率大约需要多 6~10 dB 的 SNR。接着还可以在接收端人为加入相位偏移比如把接收符号整体旋转 10 度然后观察星座图旋转后判决误码率飙升的现象这能帮你理解为什么实际系统需要载波同步。我自己的习惯是每次仿真都在收尾时固定随机种子、打印出 Eb/N0 换算表并把归一化因子写进注释里从那以后凡是跑通信仿真我都强制走一遍固定种子、能量归一化、误码统计三个检查点再也没被“玄学曲线”折磨过。希望这些能帮到你少走我踩过的那几步弯路。本文还有配套的精品资源点击获取

相关新闻

PHP 调用 Google API 官方鉴权指南:google/auth 库 OAuth 2.0 与 Application Default Credentials 实战解析

PHP 调用 Google API 官方鉴权指南:google/auth 库 OAuth 2.0 与 Application Default Credentials 实战解析

后端电商前端 【免费下载链接】CRMEB 🔥CRMEB开源商城免费开源多语言商城系统,Tp6框架商城,系统可商用;包含小程序商城、H5商城、公众号商城、PC商城、App,支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序…

2026/10/15 15:27:16 阅读更多 →
STM32F1 HAL驱动包拆解:从目录结构到调试实战

STM32F1 HAL驱动包拆解:从目录结构到调试实战

简介:这份资源是面向STM32F1XX系列开发者的HAL库驱动压缩包,专为Keil MDK 5工程设计,可在不依赖STM32CubeMX的情况下搭建HAL库开发环境,适合嵌入式入门及中高级开发者快速接入外设驱动。压缩包共137个文件,含76个.h头文…

2026/10/15 15:27:16 阅读更多 →
Moonlight V+ for PC 多平台安装指南:Windows、macOS、Linux 与 Steam Link 一站配齐

Moonlight V+ for PC 多平台安装指南:Windows、macOS、Linux 与 Steam Link 一站配齐

【免费下载链接】moonlight-qt GameStream client for PCs (Windows, Mac, Linux, and Steam Link) 项目地址: https://gitcode.com/gh_mirrors/moo/moonlight-qt 点击查看 免费下载 Moonlight V for PC 是一款面向 Windows、macOS、Linux 和 Steam Link 的游戏串流…

2026/10/15 15:26:14 阅读更多 →

最新新闻

梯度下降法MATLAB实现:从代价曲线到参数调优全解析

梯度下降法MATLAB实现:从代价曲线到参数调优全解析

简介:梯度下降法是机器学习与优化问题中最常用的数值求解方法之一,对于需要实现线性回归、逻辑回归或神经网络权重更新的MATLAB用户,这份程序提供了直接可用的代码参考。资源仅包含1个m文件,压缩后大小2KB,轻量小巧&am…

2026/10/15 16:07:27 阅读更多 →
亮灯拣选系统选型:有线CAN总线与无线PTL的深度对比

亮灯拣选系统选型:有线CAN总线与无线PTL的深度对比

做智能仓储和产线物料拣选这些年,我接触过的亮灯拣选项目一只手数不过来。每次和用户聊需求,前半小时基本都在扯概念,但一旦聊到“有线CAN总线”还是“无线PTL方案”,现场气氛就会变得特别真实——预算、工期、现场环境、后期维护…

2026/10/15 16:07:27 阅读更多 →
石墨烯专利实体抽取:BERT微调与规则融合实战

石墨烯专利实体抽取:BERT微调与规则融合实战

简介:这份PDF文档面向自然语言处理、专利分析与知识图谱方向的研究者与工程技术人员,聚焦如何用改进BERT算法提升专利实体抽取的效率与准确度。内容以石墨烯制备技术为案例,提出两种改进方案:一是融合中文特征与句法语义特征的BER…

2026/10/15 16:07:27 阅读更多 →
查出慢性病后我才懂:不是在等死,是把每天过出含金量

查出慢性病后我才懂:不是在等死,是把每天过出含金量

《斯多葛式人生管理罗盘》 健康活力维度:【实战篇】 (9/24) 前两篇,咱们聊了怎么看懂体检报告,怎么给精力防风。今天是这个维度的收官篇,我想跟你聊一件更扎心、也更根本的事。 如果身体真的查出了某个慢性问题,一时半会儿好不了,甚至这辈子都得带着它了,往后的日子到…

2026/10/15 16:07:27 阅读更多 →
JDY18蓝牙透传模块从接线到手机实测:串口透传与AT指令避坑指南

JDY18蓝牙透传模块从接线到手机实测:串口透传与AT指令避坑指南

简介:JDY18使用例子是一份面向BLE蓝牙应用开发者的实践示例包,重点演示JDY18模块与外部设备通信的两种常用方式。资源包含串口通信与IIC通信两个完整C语言示例,压缩包内共2个源文件,整体仅4KB,结构清晰、便于快速移植到…

2026/10/15 16:07:27 阅读更多 →
串口与CAN双通道工业通信实战:硬件设计到C#STM32协同调试

串口与CAN双通道工业通信实战:硬件设计到C#STM32协同调试

1. 为什么串口CAN组合仍是工业现场最稳的通讯底座在某高校自动化实验室调试一套电机驱动监控系统时,我遇到一个典型场景:上位机(Windows PC)需要实时读取下位机(STM32F4系列主控板)采集的电流、温度、转速三…

2026/10/15 16:06:27 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →