新闻详情

新闻详情

首页 / 资讯中心 / 详情

移动通信原理实验报告全解析:从QPSK到OFDM的Matlab仿真与实践

发布时间:2026/9/20 19:08:57来源:尧图网络
移动通信原理实验报告全解析:从QPSK到OFDM的Matlab仿真与实践
简介这份实验报告文档来自南京邮电大学“现代移动通信”课程完整记录了CDMA扩频与解扩及呼叫实验的全过程适合通信工程、电子信息类学生在学习扩频通信、准备实验或复习考点时参考。内容涵盖实验目的、设备清单与详细原理首先讲解扩频调制的基本概念说明PN码与m序列的生成方法——m序列即最长线性反馈移位寄存器序列可通过四级或五级移存器分别产生长度为15和31的序列并观察其频谱变化随后介绍Gold码的构成即由两个优选m序列模二加得到实验中包含31位Gold序列的生成与应用。在解扩部分给出解扩的基本方法与对应频谱规律同时涉及呼叫实验内容帮助读者从收发两端理解CDMA关键技术。资源为单个Word文档打包后约1.45MB排版清晰便于直接阅读或打印。目前已有288人学习浏览既可作为实验报告的写作模板也能作为理论复习的补充材料对于掌握直接序列扩频原理和CDMA系统架构具有直接帮助实用价值较高。1. 这门课为什么值得认真做实验报告如果你正在读通信工程、电子信息或者相关专业大概率会在培养方案里撞见“移动通信原理”这门课。很多同学第一反应是又是一门理论课公式多、概念抽象、考试难。等到实验课开起来才发现这门课真正落地之后反而比通信原理、信号与系统更有意思因为它离“真实的手机通信”最近。我当年拿到“移动通信原理-实验报告.doc”这个文件的时候脑子里想的不是怎么凑字数交差而是怎么把这些实验跟平时用的手机、基站、信号覆盖联系起来。普通消费者不会关心你手机里的调制方式是QPSK还是16QAM但作为学这个专业的人如果你连自己每天都在用的通信技术是怎么工作的都说不清楚那这门课真就白上了。这份实验报告我后来回头再看觉得它其实承担了三件事一是帮你把“移动通信原理”这门课里的关键知识点——从调制解调、信道编码到扩频通信、多址接入——从纸面公式变成看得见摸得着的波形和数值二是逼着你在Matlab、Simulink或者硬件平台上亲手搭一遍系统建立工程直觉三是给你一份拿得出手的、能放在简历或者保研材料里的实物证明。无论你是第一次打开这个doc文档的大三学生还是已经工作多年、想重新梳理移动通信知识体系的人这篇文章都适合你。我会把这份实验报告涉及的核心实验内容、关键原理、实操过程中容易踩的坑、以及我当时总结出来的调试经验全部分享出来。这些都是文档里不会直接写清楚的细节也是帮助你把实验报告从“满足格式要求”提升到“有工程参考价值”的关键。2. 实验报告的整体架构设计思路2.1 一个典型的移动通信原理实验报告包含什么先说结论一份规范的移动通信原理实验报告通常由五个部分组成——实验目的、实验原理、实验内容与步骤、实验结果与分析、实验心得与问题讨论。这个框架看起来老套但它不是随便定的。实验目的部分你要写清楚这个实验解决什么问题。比如“理解QPSK调制解调的基本原理掌握误码率性能的分析方法”而不是“为了完成课程要求”。实验原理部分是最容易写成“抄书”的地方但也是最有价值的地方。你需要用自己的逻辑重新组织一遍这个技术是什么、为什么需要它、它的数学模型是什么、在系统中处于什么位置。我当时写实验报告的习惯是在原理部分配一张简单的系统框图哪怕是自己手画的也比纯文字说明强十倍。因为阅卷老师一眼就能看出你懂不懂。实验内容与步骤部分要具体到“我做了什么操作”“改变了什么参数”“观察到了什么现象”而不是直接把实验指导书里的步骤复制粘贴。我见过太多同学的实验报告步骤写得跟说明书一样结果分析却只有两行字。这是最大的误区。实验结果与分析是整份报告的精华。你在这一步要把仿真波形、星座图、误码率曲线摆出来然后解释为什么是这个走向、和理论值有什么偏差、偏差来源是什么。我后面会详细讲怎么把这些内容做扎实。2.2 移动通信原理课程设计实验的核心逻辑做移动通信实验最关键的是建立“系统思维”。移动通信不是单一技术它是一个庞大的链条信源编码、信道编码、交织、调制、扩频、多址接入、射频发射、信道传播、接收端同步、解调、译码……每一环都有独立的实验可以做但如果你只看单个环节就永远理解不了手机通信的全貌。移动通信原理课的实验设计通常是按照这条链路拆解开的。我的那份实验报告选了四个方向信道编码卷积码、数字调制QPSK/16QAM、扩频通信CDMA、以及OFDM。为什么选这四个因为它们恰好代表了移动通信发展的几个核心里程碑——从2G的时分多址和码分多址到4G/5G的OFDM构成了整个移动通信演进的主线。我建议你在设计自己的实验报告结构时不要只满足于把规定的实验做完而是主动去思考这些实验之间是怎么衔接的比如你先做QPSK调制再做CDMA扩频最后做OFDM你会发现OFDM其实可以理解为“多个并行的QPSK子载波”。这种认知上的打通才是这门课真正想让你获得的。2.3 我为什么推荐Matlab/Simulink作为主力实验工具移动通信课程实验的主流平台在高校里无非就是Matlab、Simulink、SystemVue、GNURadio或者商用的matlab移动通信工具箱。我自己的选择是Matlab/Simulink原因很简单第一Matlab的通信工具箱对课程实验的覆盖率极高。QPSK调制解调、卷积码编译码、扩频序列生成、OFDM收发机全都自带现成函数和可视化工具你不需要从零开始造轮子。第二调试效率高。脚本式编程加上命令行窗口输入改参数、重新运行、看波形整个过程几秒就完成。以助教当时给的时间来看只有Matlab能保证你在课上做完并能实时验证。第三可复现性极强。同一份代码换个机器跑结果完全一致。这一点对写实验报告特别重要你的波形图、误码率数据都可以直接截图放进文档里不需要像硬件实验那样反复调仪器。当然也有同学用Python做近年来Python的通信库也越来越完善比如commpy、scikit-dsp-comm等。但我个人建议课程实验还是以Matlab为主一是因为参考代码多、遇到问题容易查二是因为很多学校的实验指导书就是基于Matlab写的跟着走会少很多麻烦。3. 核心实验原理与关键细节解析3.1 信道编码实验卷积码的编译码原理卷积码是移动通信里使用最广的信道编码方式之一GSM、3G/WCDMA、4G/LTE都在用。它的核心思想很简单把输入信息比特和之前的若干比特做模2卷积产生冗余比特从而提高抗干扰能力。实验里最典型的做法是构建一个约束长度K、码率R1/2的卷积编码器。约束长度K的意思是当前输出不仅取决于当前输入还取决于前K-1个输入比特。这个“记忆”特性让卷积码在同等复杂度下比分组码有更好的纠错性能。我在做这个实验时第一步是画状态转移图第二步是根据生成多项式比如常用的(7,5)八进制生成多项式实现编码器第三步是加噪声、做硬判决Viterbi译码最后对比不同约束长度下的误码率曲线。一个关键的细节是Viterbi译码的路径度量计算用的是汉明距离还是欧氏距离。硬判决用汉明距离软判决用欧氏距离。软判决通常比硬判决有2dB左右的增益这也是实验报告里值得展开分析的点。期望在校验时看到的现象是随着信噪比Eb/N0从0dB增加到8dB误码率呈指数级下降约束长度越大下降越快但译码复杂度也越高。如果曲线没有呈瀑布状下降那大概率是同步问题或者译码器的回溯深度设置太小。3.2 数字调制实验QPSK与16QAM的星座图和误码率数字调制是移动通信传输链路的“翻译官”把0/1比特序列映射成适合在无线信道中传输的模拟波形。QPSK和16QAM是课程里必做的两个也是实际系统里最常用的调制方式。QPSK每个符号携带2个比特有4个相位状态45度、135度、225度、315度星座图上就是四个点。16QAM每个符号携带4个比特有16个状态同时利用了幅度和相位两个维度。实验的核心任务不是记住星座图长什么样而是通过仿真理解为什么高阶调制频谱效率高但抗噪声能力弱以及如何在频谱效率和误码率之间做取舍。我当时用Matlab做了一次完整的链路仿真——随机比特生成、串并转换、QPSK映射、加高斯白噪声、接收端做相干解调、计算误码率最后把理论和仿真误码率曲线画在同一张图上。理论曲线用erfc函数计算仿真曲线用蒙特卡洛方法统计。理想情况下两条曲线应该高度吻合这也验证了你的仿真链路是正确配置的。详细分析时还要补一块加性高斯白噪声对星座图的影响。信噪比低的时候星座点会弥散成一团信噪比高的时候各个点聚类清晰。这种可视化结果放进报告里比你写十行字都有说服力。3.3 扩频通信实验CDMA中的PN序列与扩频增益扩频通信是3G时代的技术基石核心思想是把信号扩展到一个很宽的频带上进行传输接收端用相同的扩频码做相关解扩从而获得扩频增益和抗干扰能力。理解这个概念你才能真正明白为什么CDMA系统可以做到“所有用户共用同一个频率”还不互相干扰。实验里最常用的是m序列最长线性反馈移位寄存器序列做PN码扩频。m序列的自相关函数尖锐如针互相关特性接近零所以接收端能精准地把自己的信号“拽出来”同时把其他用户和干扰“压”下去。我在实验报告里详细对比了扩频前后的频谱变化扩频前信号能量集中在一个窄带内扩频后能量扩散到整个频带频谱密度大幅降低。这不只是好看它有实战意义——低功率谱密度意味着信号更隐蔽、更难被截获也意味着它可以叠加在其他信号之上而不造成明显干扰。关键参数是处理增益G 码片速率 / 符号速率。我当时用码片速率3.84Mcps、符号速率30ksps处理增益大约21dB。这个数值对应着系统抗干扰能力的上限。报告里我写了一段计算展开10lg(3.84×10^6 / 3×10^4) ≈ 21dB然后在仿真中注入窄带干扰对比解扩前后的信干噪比变化验证这个增益是否有效。3.4 OFDM实验循环前缀和子载波正交性OFDM是4G LTE和5G NR都采用的调制多址方式它把高速数据流拆分成N路低速子数据流分别调制到N个正交子载波上并行传输。这样做的好处是每个子载波的符号周期变长了N倍对多径时延的容忍度大幅提升。实验中最值得操作的部分是加循环前缀。添加CP的本质是把OFDM符号尾部的采样点复制到开头让多径信道造成的时延扩展落在CP范围内从而消除符号间干扰ISI和子载波间干扰ICI。我做了一个很有说服力的对比实验在相同的多径信道条件下加CP和不加CP的系统误码率差了接近两个数量级。这个实验结果放进报告里整份报告的说服力立刻就不一样了。还有一个容易忽略的点FFT长度和子载波间隔是互相制约的。子载波间隔越小符号周期越长频谱效率越高但对频偏越敏感。我在实验里尝试了15kHz和30kHz两种子载波间隔观察对载波频偏的容忍度差异。这个对比展示在报告里特别加分因为说明你不只是在复现课件而是做了进一步的探索。4. 实操过程中的核心环节与实现4.1 实验环境的搭建与初始化我的实操环境是Matlab R2022a安装了Communications Toolbox和Signal Processing Toolbox。不用最新版本也没关系R2018a以上的版本对这些基础实验都兼容。如果你想用开源方案Python环境搭配numpy、scipy、matplotlib也完全能做只是部分通信函数需要自己手写工作量会大一些。实验第一步先把仿真平台跑通。我的建议是不要一上来就铺开所有实验代码而是先写一个最简链路随机比特 → QPSK调制 → AWGN信道 → QPSK解调 → 误码率统计。这个链路跑通了后续所有实验都在它的基础上扩展效率会高很多。这个最简链路大约50行Matlab代码就能写完核心结构如下M 4; % QPSK k log2(M); data randi([0 1], 100000, 1); % 生成10万随机比特 sym bi2de(reshape(data, k, [])., left-msb); % 比特转符号 modSym pskmod(sym, M, pi/4); % QPSK调制 EbNo 0:2:12; for idx 1:length(EbNo) rxSig awgn(modSym, EbNo(idx) 10*log10(k), measured); demodSym pskdemod(rxSig, M, pi/4); % 相干解调 rxBits de2bi(demodSym, left-msb).; rxBits rxBits(:); [~, ber(idx)] biterr(data, rxBits); % 误码率计算 end4.2 关键代码与参数选择的背后逻辑上面的代码里有几个参数选择不是随意定的我逐一展开pskmod的相位偏移参数设为pi/4这是QPSK的标准星座图旋转角目的是让星座点对齐到45度、135度、225度、315度这四个位置方便接收端相干解调时的相位估计。awgn函数的“measured”选项会在添加噪声前先测量信号的实际功率这样保证实际信噪比与设定值的偏差在可接受范围内。这对于误码率曲线的可比性很重要——如果噪声功率加错了你画出来的曲线会整体偏移和理论值对不上。每信噪比点仿真10万比特是我经过测试确认的折中值。比特太少误码率统计的抖动大比特太多仿真时间成倍增加。10万比特在10^-3量级的误码率下大概能收集到100个误码置信度已经足够画出一条平滑的曲线。卷积码实验的代码要稍复杂一些核心是poly2trellis函数定义卷积码结构然后用convenc编码、vitdec译码trellis poly2trellis(7, [171 133]); % 约束长度7生成多项式[171 133]八进制 codeRate 1/2; for idx 1:length(EbNo) encoded convenc(data, trellis); % BPSK调制后过AWGN信道 txSig 2*encoded - 1; rxSig awgn(txSig, EbNo(idx) 10*log10(codeRate), measured); rxBits rxSig 0; % 硬判决 decoded vitdec(rxBits, trellis, 35, trunc, hard); [~, ber(idx)] biterr(data(1:length(decoded)), decoded); end注意vitdec的回溯深度这里取35至少要大于约束长度的5倍否则译码性能会严重退化。我当时一开始用回溯深度10结果误码率曲线完全不对后来改成35才恢复正常。这是典型的“参数不对结果全错”案例写进实验报告的问题分析部分特别有价值。4.3 数据图表呈现与判断标准实验报告的结果部分本质上是在回答三个问题波形对不对数值对不对趋势对不对波形对不对看时域和频域。QPSK星座图上四个聚类中心应该清晰、对称OFDM的发射信号时域波形应该看起来类似噪声这是“多载波叠加”的正常结果如果波形有明显的周期规律反而说明子载波干扰没消除干净。数值对不对看误码率的绝对位置。QPSK在10dB的Eb/N0条件下理论误码率大约在10^-6量级如果你的仿真值在10^-3量级那链路里一定有bug。这时回头检查符号映射、噪声方差计算、解调判决边界这三个最常见的出错点。趋势对不对看曲线整体走向。误码率曲线应该随信噪比增加呈现瀑布式下降当信噪比足够高时会进入错误平层error floor这是由信道干扰或硬件损伤决定的不存在于AWGN理想仿真中。如果你看到曲线在高信噪比时反弹几乎可以肯定是先估计或同步环节出了问题。图表呈现上我建议三张图必放发射端和接收端的星座图对比、理论误码率与仿真误码率的对比曲线、关键实验参数的表格列表。这三样东西组合起来你的实验报告就从“图文并茂”升级成了“数据驱动”。5. 常见问题与排查技巧实录5.1 AWGN信道下误码率不符合理论预期这是所有通信实验里出现频率最高的问题没有之一。我复盘过自己的实验过程总结了三个高频原因第一是Eb/N0和Es/N0的概念混用。Eb是每个信息比特的能量Es是每个符号的能量。对于QPSK每个符号带2个比特所以Es/N0 Eb/N0 3dB。awgn函数默认接收的是符号级信噪比SNR需要根据调制阶数做换算这里算错1dB误码率就完全对不上了。第二是比特映射和符号映射不一致。发端用gray mapping收端用binary mapping星座图的判决边界就完全错位误码率会固定在某个值附近不随信噪比下降。这是典型的“映射不匹配”问题。第三是Viterbi译码的回溯长度不够。前面提到过回溯长度小于约束长度的5倍会导致译码性能急剧恶化尤其在高信噪比时反而越明显。这也是为什么我在实验报告里特别注明了这个参数的设置依据。5.2 OFDM系统仿真中的循环前缀设计OFDM实验里踩坑最多的就是循环前缀长度设计。循环前缀的长度必须大于信道的最大时延扩展否则多径分量就会溢出到下一个OFDM符号里造成ISI和ICI。具体的参数计算过程是这样的假设仿真信道设置的最大多径时延为5微秒子载波间隔为15kHz时FFT长度为2048系统采样率为30.72MHz这个参数组合对应LTE系统。每个OFDM符号有效时间为66.7微秒循环前缀正常模式约为4.7微秒这意味着只能覆盖4.7微秒以内的多径时延如果实际信道多径时延超过这个值系统误码率就会显著上升。我在实验中故意设置了6微秒的多径时延然后对比加大CP长度后的效果。当CP从4.7微秒加长到10微秒后误码率从0.1量级降到了0.001量级。这个对比非常直观放在实验报告里比任何公式推导都更能说明“为什么LTE要设置normal和extended两种循环前缀模式”。5.3 CDMA扩频通信中的同步问题扩频通信实验最头疼的问题是“伪同步”——看似有信号实际解扩后什么也解不出来。原因几乎都是扩频序列的对齐问题。PN码的扩频与解扩严格依赖码相位对齐。哪怕只有一个码片的偏差相关值也会从峰值掉到副峰导致扩频增益完全失效。我在实验里的办法很简单在发送数据前面加一段已知的训练序列接收端用这段训练序列做相关搜索找到相关峰值的位置就能确定PN码相位偏移量并完成同步。这个操作让我想到一句话做扩频实验同步做不好一切都是空谈。所以如果你的CDMA实验误码率极高别急着排查扩频码本身先去检查收发两端的PN码相位是不是严格一致的。这个排查思路可以帮你省下大量调试时间。5.4 避免踩坑四个让我印象深刻的操作细节第一个细节是收发端的滤波器匹配问题。理论上接收端需要匹配滤波器来最大化信噪比但在Matlab的pskdemod函数里默认已经隐含了这个处理所以你不需要额外设计。如果你自己写解调函数而不做匹配滤波误码性能会差3dB——这是一道经典的课堂习题也是实验里常见的坑。第二个细节是蒙特卡洛仿真时不要在每个信噪比点重新生成信号。正确做法是固定一个长序列比如50万比特在不同信噪比下复用这个序列加噪声。这样做可以保证每条误码率曲线上不同信噪比点的对比是合理校准的尤其是你想观察不同调制方式在同一信噪比下的差异时这个细节会让数据更平滑。第三个细节是保存中间变量。我在做实验时养成了一个习惯每跑完一次仿真立刻用save命令把星座图数据、误码率结果、信道参数保存成mat文件。这样做的好处是写实验报告的时候不需要重新跑一遍仿真直接从mat文件里加载数据画图就行。特别是某些仿真动辄要跑好几分钟的这个习惯能帮你节省大量时间。第四个细节是版本兼容性。Matlab有些通信函数的语法在新旧版本里有细微差异比如comm.QPSKModulator对象和老的pskmod函数、pskdemod函数。如果你用的是别人的代码先检查函数文档和版本说明不要盲目复制粘贴。我在实验室看到太多同学抄代码后跑不通最后发现是函数签名不一致。6. 实验报告评审环节的实用参考6.1 评审关注点与报告质量的直观体现实验报告的评审通常看三个层次。第一层看格式是否规范图表是否清晰有没有按要求填写所有内容——这是及格线。第二层看结果是否有分析是否与理论对得上有没有对异常现象的解释——这是良好线。第三层看是否有自己的思考、对比实验、改进方案——这是优秀线。我的经验是想拿到优秀必须在“结果与分析”这一块发力。比如QPSK实验你可以补充不同滚降系数的升余弦滤波器对频谱效率和误码率的影响OFDM实验你可以尝试不同归一化循环前缀长度对误码率和频谱效率的折中。这些额外的探索不需要很复杂但表明你没有停留在“跑通就行”的层面。6.2 从实验报告中延展出的技能迁移移动通信原理实验报告的价值不止于这一门课的分数。我在实际工作中发现当年做这些实验积累的调试能力、频谱观察能力、误码率性能分析能力在做射频测试、无线通信系统开发时都直接有用。举个例子我现在做通信设备的射频测试每当遇到EVM误差矢量幅度超标的问题第一反应就是在脑子里回到当年那个QPSK实验——EVM指标不规范对应到实验里就是星座图上的点散开了。当年分析星座图“为什么散”的思维套路放到EVM问题分析里一摸一样噪声、失真、同步偏差、干扰信号逐一排查。所以我的建议是做实验的时候不要只想着写报告多问自己“这个现象背后对应真实系统的哪个指标”。这种思维方式培养起来你收获的远远超过学分本身。6.3 再增加一个速查小技巧每次实验前花20分钟把当次实验的原理图和信号流图画在草稿纸上不要看任何资料。画不出来说明你还没吃透画出来了说明你已经准备好了。这个“白纸画框图”的习惯比任何预习报告都有效。我当年做移动通信实验和写这份报告整个过程最大的收获不是那几个仿真图形而是真正建立起了“从比特到波形、从波形再回到比特”的系统认知。等你做完这些实验再去看4G/5G的物理层协议文档你会发现那些后来才接触的术语——调制编码方案、参考信号、多址接入——早就在这些基础实验里跟你见过面了。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

深入理解 chezmoi 的 `doppler` 模板函数:在 dotfiles 中安全注入 Doppler 云端密钥 2026/9/20 19:45:01

深入理解 chezmoi 的 `doppler` 模板函数:在 dotfiles 中安全注入 Doppler 云端密钥

深入理解 chezmoi 的 doppler 模板函数:在 dotfiles 中安全注入 Doppler 云端密钥 【免费下载链接】chezmoi Manage your dotfiles across multiple diverse machines, securely. 项目地址: https://gitcode.com/gh_mirrors/ch/chezmoi 导读 本篇文章聚焦 c…

阅读更多 →
BrewUI 可视化 Homebrew 管理:安装、报错与清理实战指南 2026/9/20 19:45:01

BrewUI 可视化 Homebrew 管理:安装、报错与清理实战指南

最近 BrewUI 这个项目在 macOS 用户圈子里的讨论度确实上来了。如果你平时要用 Homebrew 装软件、管环境,但又对那一长串命令行命令感到头疼,那么 BrewUI 就是那种能把你从终端里“捞出来”的工具——它是 Homebrew 的图形界面封装,安装包、搜…

阅读更多 →
放大器设计100问:运放选型、噪声分析与ADC接口实战避坑指南 2026/9/20 19:45:01

放大器设计100问:运放选型、噪声分析与ADC接口实战避坑指南

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

阅读更多 →
光伏电池建模与MPPT控制:从Simulink仿真到SVPWM并网全流程解析 2026/9/20 19:45:01

光伏电池建模与MPPT控制:从Simulink仿真到SVPWM并网全流程解析

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

阅读更多 →
PyCharm安装与汉化全指南:Python开发环境搭建从零到跑通 2026/9/20 19:45:01

PyCharm安装与汉化全指南:Python开发环境搭建从零到跑通

简介:PyCharm是Python开发者常用的集成开发环境,这份PDF教程面向刚接触Python或希望系统掌握PyCharm的初学者,从安装、激活、汉化到界面与核心功能做了完整梳理,可帮助读者快速搭建属于自己的Python开发环境。资源为单文件PDF&…

阅读更多 →
电脑有音量却没声音?音频服务、声卡驱动与输出设备排查全指南 2026/9/20 19:42:00

电脑有音量却没声音?音频服务、声卡驱动与输出设备排查全指南

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞