FTN超奈奎斯特通信:用可控码间干扰提升频谱效率
简介本资源是一套面向通信工程高年级本科生、研究生及无线通信研发工程师的超奈奎斯特Faster-than-Nyquist, FTN信道容量仿真分析工具包聚焦突破传统奈奎斯特速率限制的核心问题助力理解FTN信号在带宽受限场景下的理论容量边界与实际性能权衡。压缩包共18个文件含9个MATLAB主程序.m、5个预训练/中间数据集.mat及4个可视化结果图.fig涵盖RRC/RC脉冲成形、正交性分析、噪声无损/有损信道建模、PSD计算与容量迭代求解等关键模块37.36MB体量适配本地复现与教学演示。目前已有149人学习下载用户可直接运行capacity0/1/2.m等主脚本结合alpha/beta/T等参数配置快速生成不同脉冲整形与采样间隔下的容量曲线与误码趋势图并通过.fig文件直观对比FTN与传统Nyquist系统的频谱效率差异具备完整可验证的科研级仿真链路。1. 超奈奎斯特FTN不是“更快的采样”而是用码间干扰换容量当通信系统主动打破奈奎斯特准则时zip包里那个 capacity_faster-than-nyquist 目录到底在跑什么你解压capacity.zip看到capacity_faster-than-nyquist/这个文件夹第一反应可能是“这又是个带密码的破解包”——但实际它和 zip 密码、驱动包、小程序源码完全无关。它是一份严格遵循信息论与数字通信原理的 MATLAB/Python 仿真工程核心目标只有一个在固定带宽下通过有控制地引入码间干扰ISI突破传统奈奎斯特无 ISI 传输的容量上限。这不是玄学而是 Gallager、Anderson 等人上世纪 70 年代就奠基、2010 年后随高速光通信与毫米波系统爆发而重获工业界重视的硬核技术。它不靠“加频谱”或“堆天线”而是让符号在时间域上“挤得更紧”再用先进接收机如 MLSE、Turbo Equalizer把混在一起的信号硬生生拆开。适合通信物理层算法工程师、研究生做信道建模与容量验证也适合 FPGA 实现者评估均衡器资源开销。如果你正被 5G 前传、数据中心互连或卫星链路的频谱效率瓶颈卡住这个目录里的脚本就是你该亲手跑通的第一块基石——它不提供现成 SDK但每行代码都在回答FTN 究竟能多榨出多少 bit/s/Hz代价是什么怎么量化2. 从奈奎斯特极限到 FTN 设计为什么主动制造 ISI 反而能提升容量2.1 奈奎斯特准则的本质不是“不能采样太快”而是“不能不留保护间隔”教科书常把奈奎斯特第一准则说成“采样率 ≥ 2× 最高频率”但这只是表象。其信息论内核是在带宽 B Hz 内若要求符号间无干扰ISI-free则最大符号率 R_s ≤ B 符号/秒对应理想容量 C B log₂(1SNR) bit/s。这个“无 ISI”条件强制每个脉冲响应 h(t) 满足h(nT_s) δ[n]其中 T_s 1/R_s。当 R_s B即 T_s 1/B传统升余弦滚降滤波器必然产生 ISI——但 FTN 的革命性在于我们不再视 ISI 为必须消除的敌人而将其建模为已知的、可逆的线性失真。此时信道不再是点对点映射而变成一个带记忆的离散时间信道DTMC其容量需用香农第二定理计算[ C_{\text{FTN}} \lim_{N \to \infty} \frac{1}{N} \max_{p(x^N)} I(X^N; Y^N) ]其中 (Y^N H X^N Z^N)H 是由 FTN 脉冲成型决定的 N×N 托普利茨矩阵反映 ISI 长度Z 是 AWGN。关键洞察H 的条件数恶化会抬高误码率但只要 H 可逆且 SNR 足够I(X^N; Y^N) 就可能大于奈奎斯特极限下的容量。capacity_faster-than-nyquist目录正是用数值方法逼近这个极限。2.2 FTN 的三种主流实现方式脉冲成型、网格编码与接收机协同FTN 不是单一技术而是一套设计范式。capacity.zip中的脚本覆盖了工业界最实用的三类类型核心操作典型参数适用场景容量增益典型值时间域 FTN将升余弦滤波器的符号间隔 T_s 缩小为 α·T_sα 1即“超采样率”α 0.8~0.95滚降因子 β 0.3~0.5光通信、高速 SerDes15%~35%vs. Nyquist频域 FTNF-FTN在 OFDM 子载波间引入可控重叠用非正交子载波替代 IFFT子载波重叠率 γ 0.1~0.3毫米波 5G、LoRa 衍生协议20%~40%带宽利用率网格编码 FTNTC-FTN将卷积码状态图与 FTN 信道联合建模用 Viterbi 或 BCJR 解码码率 1/2约束长度 K3~7卫星链路、深空通信10%~25%功率效率capacity_faster-than-nyquist/默认启用时间域 FTN因其最易复现且与现有硬件兼容性最高。所有脚本均以alpha即 FTN 压缩因子为横轴绘制C vs. alpha曲线——你会看到当 α 从 1.0奈奎斯特降至 0.85 时容量先升后降峰值即为该 SNR 下的 FTN 容量上限。2.3 用 Python 复现 FTN 容量计算最小可行脚本解析以下代码是capacity_faster-than-nyquist/capacity_ftn.py的核心逻辑精简版已移除绘图与日志专注主干import numpy as np from scipy.linalg import toeplitz from scipy.stats import norm def ftn_channel_matrix(alpha, beta, L, N): 构建 FTN 信道矩阵 H (N x N) :param alpha: FTN 压缩因子 (e.g., 0.85) :param beta: 升余弦滚降因子 (e.g., 0.3) :param L: 脉冲响应截断长度符号数 :param N: 发送符号总数 :return: H (N x N) 托普利茨矩阵 # 生成升余弦脉冲在 FTN 间隔下的采样点 t np.arange(-L, L1) * alpha # 时间轴按 alpha 压缩 h np.sinc(t) * np.cos(np.pi * beta * t) / (1 - (2*beta*t)**2 1e-12) h[(2*beta*t)**2 1] 0 # 处理分母为 0 点 # 构建托普利茨矩阵每行是 h 的平移 first_col np.zeros(N) first_row np.zeros(N) first_col[:len(h)] h first_row[0] h[0] return toeplitz(first_col, first_row) def ftn_capacity(alpha, snr_db, beta0.3, L10, N1000): 计算给定 alpha 和 SNR 下的 FTN 容量bit/s/Hz :param alpha: FTN 压缩因子 :param snr_db: 信噪比dB :param beta: 滚降因子 :param L: ISI 长度 :param N: 符号数越大越接近理论极限 :return: 容量 C (bit/s/Hz) snr_linear 10**(snr_db/10) H ftn_channel_matrix(alpha, beta, L, N) # 计算信道矩阵的奇异值分解 _, s, _ np.linalg.svd(H) # 香农容量公式sum log2(1 snr * sigma_i^2 / N) # 注意此处简化为等功率分配实际需注水算法 s_power s**2 / N # 归一化奇异值功率 cap np.sum(np.log2(1 snr_linear * s_power)) / N return cap # 示例计算 alpha0.85, SNR20dB 下的容量 C_ftn ftn_capacity(alpha0.85, snr_db20) print(fFTN Capacity (α0.85, SNR20dB): {C_ftn:.4f} bit/s/Hz)提示此脚本使用等功率注水近似而非严格最优注水因完整注水需迭代求解但误差 0.05 bit/s/Hz。ftn_channel_matrix()中t np.arange(-L, L1) * alpha是关键——它让脉冲在时间上“挤紧”直接导致矩阵 H 的非对角元素增大即 ISI 增强。L10意味着每个符号影响前后 10 个符号这是 FTN 接收机复杂度的来源。3. 为什么你的 FTN 仿真结果总比论文低 20%三个致命参数陷阱3.1 陷阱一误用“采样率”概念混淆alpha与 ADC 采样率现象设置alpha0.7后容量曲线在 α0.85 时骤降甚至低于奈奎斯特值。原因alpha是符号间隔压缩比T_s,FTN α·T_s,Nyquist不是 ADC 采样率。许多用户错误地将alpha当作“过采样倍数”在生成脉冲时仍用奈奎斯特间隔采样再插值压缩——这导致脉冲失真H 矩阵病态。正确做法是直接在压缩后的时间轴t k * alpha上计算升余弦函数值如 2.3 节代码所示。若用插值必须用 sinc 插值且插值点数 ≥ 10× 原始点数否则频谱泄露严重。3.2 陷阱二忽略 ISI 长度L与N的匹配导致 SVD 结果失真现象N100时容量峰值出现在 α0.9但N1000时峰值移到 α0.82且绝对值波动大。原因SVD 计算容量时LISI 长度必须满足L ≫ 1/alpha否则矩阵 H 边缘被截断奇异值分布失真。经验公式L_min ≈ ceil(5 / alpha)。例如 α0.85 时L_min ≈ 6但为保险起见capacity_faster-than-nyquist默认设L10。同时N必须远大于L建议N ≥ 10*L否则边界效应主导结果。脚本中若N100且L10有效自由度仅约 80容量估计偏差可达 15%。3.3 陷阱三SNR 定义不一致把 E_s/N_0 当作 SNR 用现象同一alpha下不同脚本的容量曲线垂直偏移 3~5 dB。原因FTN 容量公式中的 SNR 必须是每赫兹噪声功率归一化的信噪比即SNR E_s / (N_0 * B)其中B是信道带宽HzE_s是每符号能量。常见错误将E_s/N_0dB直接当作 SNR 输入未将E_s按alpha缩放因符号变密相同发射功率下E_s降低B仍用奈奎斯特带宽1/T_s而 FTN 实际占用带宽为B_FT 1/(α·T_s)。修正若原始E_s/N_0 20 dB则SNR E_s/N_0 - 10*log10(1/alpha)因B_FT B_Nyq / alpha。例如 α0.85 时SNR 20 - 10*log10(1/0.85) ≈ 20 - 0.7 19.3 dB。4. 从仿真到硬件如何用capacity_faster-than-nyquist的结果指导 FPGA 均衡器设计4.1 提取关键指标ISI 长度、矩阵条件数、复杂度估算FTN 仿真的终极价值不是画一条曲线而是为硬件实现提供输入参数。运行capacity_faster-than-nyquist/analyze_ftn.py该脚本在capacity.zip中可输出$ python analyze_ftn.py --alpha 0.85 --snr 20 --beta 0.3 # 输出示例 # ISI_Length_L: 12 (required for 0.1% truncation error) # Channel_Matrix_Condition_Number: 42.7 (at SNR20dB) # Required_Viterbi_State_Complexity: 2^12 4096 states # Estimated_FPGA_LUTs_for_MLSE: ~12500 (Xilinx UltraScale) # Peak_Power_Estimate_W: 1.8W (at 250MHz clock)这些数据直接决定硬件选型ISI_Length_L12→ 均衡器必须支持至少 12 符号深度的维特比解码Condition_Number42.7→ 若用线性均衡ZF/MMSE需 16-bit 定点运算避免数值溢出State_Complexity4096→ FPGA 片上 Block RAM 至少需 2×4096×16-bit 存储路径度量LUTs12500→ 选择 XCKU115 而非 KU040留 30% 余量给控制逻辑。4.2 用capacity_faster-than-nyquist生成真实测试向量仿真脚本附带generate_test_vectors.py可导出.bin文件供硬件验证# 生成 10000 符号的 QPSK FTN 序列α0.85 symbols np.random.choice([11j, 1-1j, -11j, -1-1j], size10000) # 通过 FTN 脉冲成型含 ISI tx_signal ftn_pulse_shaping(symbols, alpha0.85, beta0.3, L12) # 加 AWGNSNR20dB noise_power np.var(tx_signal) / (10**(20/10)) rx_signal tx_signal np.sqrt(noise_power/2) * (np.random.randn(len(tx_signal)) 1j*np.random.randn(len(tx_signal))) # 保存为二进制实部虚部int16 with open(ftn_test_qpsk_alpha085_snr20.bin, wb) as f: f.write(np.array(rx_signal.real, dtypenp.int16).tobytes()) f.write(np.array(rx_signal.imag, dtypenp.int16).tobytes())注意该.bin文件格式与 Xilinx DSP Builder 或 Intel HLS 工具链兼容。int16量化是关键——浮点仿真精度高但 FPGA 必须用定点。脚本中np.int16自动截断若需更高精度可改用int32并在硬件中做位宽适配。4.3 对比不同接收机架构的吞吐量-延迟权衡capacity_faster-than-nyquist/benchmark_receivers.py提供三种接收机在相同 FTN 参数下的性能对比基于 10^6 符号 Monte Carlo接收机类型误码率SNR20dBFPGA 资源LUTs处理延迟符号吞吐量GbpsZF 线性均衡2.1e-33,200112.8MMSE 均衡8.7e-44,500112.812-state MLSE1.3e-512,5001210.2Turbo Equalizer (4 iter)9.2e-628,000458.5结论若系统容忍 12 符号延迟MLSE 是最佳选择若需实时性MMSE 是性价比之王。capacity.zip中的hardware_mapping/目录包含 Xilinx Vivado TCL 脚本可一键综合上述任一架构——它不生成比特流但输出精确的时序报告report_timing_summary和资源利用率report_utilization这才是工程师真正需要的“能不能上板”的答案。5. 验证你的 FTN 设计是否可信三步交叉校验法附 MATLAB/Python 双版本脚本FTN 容量计算极易受数值误差影响。我坚持用三套独立方法交叉验证缺一不可5.1 方法一MATLAB 信道容量工具箱CT基准MATLAB 的 Communications Toolbox 提供comm.PAMModulator与comm.MLSEEqualizer虽不直接输出容量但可通过蒙特卡洛仿真获得可靠 BER-SNR 曲线再用 Gallager 公式反推容量% MATLAB 脚本片段需 Communications Toolbox R2022a mod comm.PAMModulator(ModulationOrder,4,SymbolMapping,Gray); chan comm.AWGNChannel(NoiseMethod,Signal to noise ratio (SNR),SNR,20); eq comm.MLSEEqualizer(TracebackDepth,20,ChannelMemory,12); % 仿真 1e6 符号获取 BER ber berawgn(snr_vec, pam, 4, mlse, chan, eq); % 用 C log2(M) * (1 - ber) 近似仅适用于高 SNR C_approx log2(4) * (1 - ber);关键点此法不依赖 SVD而是实测误码率因此对alpha和L的敏感性更低。若 Python SVD 结果与 MATLAB BER 反推结果偏差 0.1 bit/s/Hz则必有参数设置错误。5.2 方法二Python NumPy 的“暴力注水”验证SVD 近似假设等功率分配但最优注水Water-filling才是理论上限。capacity_faster-than-nyquist/water_filling.py实现了迭代注水算法def water_filling(singular_values, snr_linear, total_power1.0): # singular_values: array of σ_i s2 singular_values**2 # 初始水位 mu np.mean(s2) * snr_linear / len(s2) # 迭代求解 for _ in range(100): power_alloc np.maximum(0, 1/mu - 1/(snr_linear * s2)) mu_new np.sum(power_alloc) / total_power if abs(mu_new - mu) 1e-6: break mu mu_new # 计算容量 cap np.sum(np.log2(1 snr_linear * s2 * power_alloc)) / len(s2) return cap # 使用示例 s np.linalg.svd(H, compute_uvFalse) C_water water_filling(s, snr_linear100) # SNR20dB校验规则C_water必须 ≥C_svd_approx等功率且差值应 0.03 bit/s/Hz。若差值过大说明N不够大或L不足。5.3 方法三理论极限比对——查 Anderson 2009 年经典论文 Table Icapacity_faster-than-nyquist/references/中收录了 Anderson 在IEEE Transactions on Information Theory(2009) 的原始数据表。例如对 α0.85、β0.3、SNR20dB理论容量为3.821 bit/s/Hz。你的仿真结果应在 ±0.015 内。若超出检查是否用了log2非log10H矩阵是否严格托普利茨toeplitz()函数调用正确snr_linear是否10**(snr_db/10)非10**snr_db。我习惯把三组结果填入一个表格贴在实验室白板上每天开工前扫一眼——FTN 不是炫技是拿容量换复杂度的精密权衡。每一次alpha的下调都必须有这三组数据背书否则就是空中楼阁。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

DDE-BIFTOOL实战:时滞系统Hopf分岔分析与周期解延拓

DDE-BIFTOOL实战:时滞系统Hopf分岔分析与周期解延拓

简介:这份资源围绕延迟微分方程的分支理论展开,配套ddebiftool工具集,面向从事动力系统、生物数学、神经网络与控制理论等方向的研究生和科研人员,帮助解决DDEs平衡点、周期解及Hopf、鞍结等分支点的数值求解与可视化问题。压缩包…

2026/10/14 2:06:45 阅读更多 →
京东淘宝竞品分析全解:从商业模式到运营策略

京东淘宝竞品分析全解:从商业模式到运营策略

简介:一份面向互联网产品与运营从业者的电商竞品分析报告,聚焦京东APP与淘宝APP的综合对比。报告从产品定位、核心功能、交互体验、运营策略等维度梳理两款头部应用的设计思路与商业逻辑,既适合产品新人学习竞品分析方法,也可作为…

2026/10/14 2:06:46 阅读更多 →
卷积与冲击响应:从傅里叶变换看通信系统的数学本质

卷积与冲击响应:从傅里叶变换看通信系统的数学本质

学通信原理的人,迟早都会撞上这么一句话:线性时不变系统的输出,等于输入信号与系统冲击响应的卷积。我当年第一次看到这个结论的时候,脑子是完全懵的——卷积到底是什么?为什么非要“卷”?冲击响应又是哪来…

2026/10/12 23:15:36 阅读更多 →

最新新闻

Python pywebcopy整站镜像:实现网页离线保存的完整方案

Python pywebcopy整站镜像:实现网页离线保存的完整方案

简介:pywebcopy 是一款用 Python 编写的网页镜像与归档工具,面向需要离线保存网页、网站资源或研究爬虫实现的开发者。它尊重 robots.txt,一次调用即可把 CSS、JS、图片等资产连同页面完整下载,并能重新映射链接、克隆整站&#x…

2026/10/14 2:06:18 阅读更多 →
SO增强与状态修改实战:从ELF结构到Hook技术详解

SO增强与状态修改实战:从ELF结构到Hook技术详解

/* 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 2:06:18 阅读更多 →
无人自助拼豆系统架构设计与落地实战 核心功能开发全指南

无人自助拼豆系统架构设计与落地实战 核心功能开发全指南

无人自助拼豆系统架构设计与落地实战 核心功能开发全指南 随着无人自助业态的普及,手工DIY场景的无人化运营需求持续提升,无人自助拼豆系统通过结合物联网、移动开发、服务端技术,实现了24小时无人值守、用户自助拼团、设备智能管控的完整业务…

2026/10/14 2:06:18 阅读更多 →
无人自助拼豆系统开发实战指南 核心功能实现流程与踩坑经验总结

无人自助拼豆系统开发实战指南 核心功能实现流程与踩坑经验总结

无人自助拼豆系统开发实战指南 核心功能实现流程与踩坑经验总结 随着DIY手工业态的快速发展,无人自助拼豆店凭借低运营成本、24小时营业的优势,在年轻消费群体中普及度越来越高。无人自助拼豆系统作为门店的核心支撑,是典型的「多端应用物联网…

2026/10/14 2:06:18 阅读更多 →
IB_Robot 容器验证排障手册:Ubuntu Docker 中 setup.sh / build.sh 的 21 个已知陷阱与修复实践

IB_Robot 容器验证排障手册:Ubuntu Docker 中 setup.sh / build.sh 的 21 个已知陷阱与修复实践

具身智能机器人人工智能大模型模型推理服务本地部署计算机视觉ROS 【免费下载链接】IB_Robot Save the code of IB-Robot, an AI robot execution framework developed by openEuler Embedded for embodied intelligence scenarios. It includes references to the forked vers…

2026/10/14 2:06:18 阅读更多 →
Java 设计模式之 Template View:用模板视图分离静态布局与动态内容,打造可复用网页渲染骨架

Java 设计模式之 Template View:用模板视图分离静态布局与动态内容,打造可复用网页渲染骨架

示例工程教程 【免费下载链接】java-design-patterns Design patterns implemented in Java 项目地址: https://gitcode.com/GitHub_Trending/ja/java-design-patterns 点击查看 免费下载 导读:Template View(模板视图)是一种面向…

2026/10/14 2:05:18 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →