ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

64QAM软解调+扩频解扩+FFT频偏估计的MATLAB误码率仿真

64QAM软解调+扩频解扩+FFT频偏估计的MATLAB误码率仿真 如果你在导师给的题目列表里看到这样一串组合——64QAM调制软解调、扩频解扩、FFT频偏估计、matlab误码率仿真——第一反应多半和我当初一样这三个东西到底怎么串成一条链路64QAM已经是高阶调制了再加扩频不是自相矛盾吗FFT频偏估计放在哪个环节才不会把软解调的结果搞坏去年我带过好几个做这类链路仿真的同学发现真正麻烦的从来不是某个模块本身而是模块连起来之后互相之间的牵制。这篇文章把我从原理理解到代码实现、再到联调排错的全过程整理出来。适合正在做通信系统课程设计、毕业设计或者想在MATLAB里把“调制扩频频偏估计”做成一套可复现仿真链路的同学参考。我会把每个模块为什么这么设计、代码怎么写、参数怎么设、跑出来怎么判读都讲清楚最后还会列出我实际联调中踩过的一批坑。1. 先把题目拆开三个模块在链路上各管什么事1.1 目标的三种解读方式题目全称是“64QAM调制软解调扩频解扩FFT频偏估计通信系统matlab误码率仿真”。拆开看实际上包含三层验证目标波形级验证证明64QAM在高斯白噪声信道下的理论误码率可以被正确复现系统级验证证明软解调与扩频解扩可以级联工作解扩之后输出的软信息仍然有效算法级验证证明FFT频偏估计算法能扛住一定范围的载波频偏补偿后误码率不会塌掉。如果你只做其中一层仿真会简单很多但题目把三个模块放在一起目的就是让你搭建一条完整的收发链路并且用误码率这条横线把每个模块串起来考核。我曾经见过有人只写了一个BER主程序和星座图老师说缺少“频偏估计模块对误码率影响的对比分析”结果返工。所以动手前先想清楚最终演示需要输出三条曲线一条是理想无频偏的BER一条是加了频偏但没补偿的BER一条是用FFT频偏估计补偿后的BER。这三条才算完整回答题目。1.2 信号流的总体设计顺序我的建议是先定链路方向再写代码发射端随机比特 → 串并变换 → 64QAM符号映射Gray编码 → 扩频每符号乘扩频码 → 加入固定频偏 → 加高斯白噪声。接收端FFT频偏估计 → 频偏补偿 → 解扩相关解扩/软合并 → 64QAM软解调 → 硬判决 → 统计误比特数。这个顺序看起来简单但有个关键决策点频偏估计到底放在解扩之前还是之后。通常放在解扩之前因为FFT频偏估计只需要观察信号的整体谱结构对扩频码本身不敏感而如果放在解扩之后残余频偏会破坏相关峰反而更难估。这一点后面我会用实测数据说明。1.3 这类仿真项目的常见评分视角根据我接触过的课程设计和毕业设计老师评阅这种多模块级联仿真重点看三件事第一链路完整性。有没有把误码率统计、星座图、频偏估计三个结果全部展示出来第二算法正确性。比如软解调的LLR对数似然比是否真的用了软信息还是把软解调做成硬判决再补一层曲线第三结果对比。有没有把仿真BER和理论BER放在同一张图上有没有对比频偏补偿前后的差异。如果你能在这三点上做到位即使某些参数不是最优分数也不会差。所以我下面每个章节的安排本质上就是围绕这三个评分视角展开。2. 64QAM软解调LLR计算原理与max-log实现2.1 为什么软解调比硬解调强64QAM一个符号承载6个比特硬解调的做法是拿接收符号和64个星座点比距离选最近的星座点然后把对应的6个比特直接定下来。这种方式在低信噪比下丢信息丢得很厉害因为判决器只保留了“最可能”的答案把第二可能、第三可能全部扔掉了。软解调输出的不是0/1而是每个比特的对数似然比LLR表示该比特为1与为0的概率比的对数值。这个值越大说明越确信该比特是1。对于后面接了LDPC、Turbo这类迭代译码的系统软信息是必须的就算没有信道编码软判决也比硬判决在高阶QAM下通常有1到2dB的增益。原因是64QAM星座点密集硬判决在边界区域容易一把定错软信息至少保留了可信度差异可以用在后续的干扰消除或迭代检测场景中。还有一个非常实际的原因题目明确写了“软解调”如果代码里只是用qamdemod硬判决再算误码率那么方案设计这一关就不过关。软解调是你展示算法能力的最低门槛。2.2 Gray映射与星座归一化64QAM标准星座图I路和Q路各有8个电平±1、±3、±5、±7。64个星座点平均能量为42因此星座归一化因子是 1/sqrt(42)。做软解调之前必须把发射符号除以这个因子否则接收端距离计算会带上一个常数偏差LLR的尺度全错。Gray映射在这个系统里不是可选项而是必选项。Gray编码保证相邻星座点之间只差1个比特这样大多数错误都是单比特错误误比特率与误符号率的关系更干净。如果随意编码同样误符号率下误比特率会高不少。实际映射方式可以直接用MATLAB的qammod函数设置symOrder为grayM 64; k log2(M); % 6 symbols qammod(0:M-1, M, gray, UnitAveragePower, true);使用UnitAveragePower, true事星座已被归一化省去手动除sqrt(42)的麻烦。但要注意这套星座点在文档上也有对应顺序0到63按Gray序排列接收端做软解调时要按同样的索引查星座表。2.3 LLR推导和max-log近似在高斯白噪声信道下接收符号y在已知星座点s被发送的条件概率密度为p(y|s) (1/(πN0)) * exp(-|y-s|²/N0)第i个比特的LLR定义为LLR(bi) ln( P(bi1|y) / P(bi0|y) )假设各星座点等概率把这个条件概率展开再用max-log近似即用子集里距离最近的星座点近似整个子集的概率和可以得到特别简洁的形式LLR(bi) ≈ (1/N0) * ( min_{s∈S0} |y-s|² - min_{s∈S1} |y-s|² )其中S0是第i位为0的32个星座点集合S1是第i位为1的32个星座点集合。为什么可以这样近似因为指数函数里负距离平方占主导离y最近的点贡献的概率最大其它点可以忽略。这种近似在中等以上信噪比下非常准低信噪比下也不至于离谱工程上大量使用。还有一个等价观点值得注意式中的1/N0其实就是信噪比尺度。当噪声变大时同样的距离差对LLR的贡献要打折这正符合直觉——噪声大时你对判决越不确定。所以实现时如果符号能量归一化为1那么1/N0就取Es/N0即可。2.4 MATLAB代码要点实现时不需要把64个星座点手动写出来可以直接从qammod函数生成然后为每个比特找两个子集的最小距离。我给出一个能直接跑通的核心片段% 生成归一化星座点 constell qammod(0:M-1, M, gray, UnitAveragePower, true); % 输入y为接收符号向量已归一化、已频偏补偿 % snrLinear为符号级信噪比 Es/N0 线性值 numBitsPerSym log2(M); LLR zeros(numBitsPerSym, length(y)); for bitIdx 1:numBitsPerSym % 找出第bitIdx位为1和为0的星座点索引 idx1 find(bitand(0:M-1, 2^(bitIdx-1)) ~ 0); idx0 find(bitand(0:M-1, 2^(bitIdx-1)) 0); dist1 min(abs(y - constell(idx1).), [], 1).^2; dist0 min(abs(y - constell(idx0).), [], 1).^2; LLR(bitIdx, :) snrLinear * (dist0 - dist1); end这段代码用循环遍历6个比特位每个比特位各找一次最小距离。仿真时为了提速可以向量化但对于教学演示循环版本更容易看懂、不容易出错。有一点必须提醒上面距离用的是星座点与接收点之间的复数模平方。如果接收信号幅度没有被归一化LLR会整体偏大或偏小导致后续判决异常。我建议在接收端把符号功率归一化到1再做软解调否则就只能全部折算进snrLinear里给自己添麻烦。3. 扩频解扩在“高阶调制软判决”链路里的正确打开方式3.1 明明有64QAM为什么还要扩频很多同学第一次看到“64QAM扩频”的组合会很疑惑64QAM追求的是高频谱效率一个符号6比特扩频是把1个符号变成多个码片带宽效率不升反降。这两个东西放在一起不是自相矛盾吗实际并不矛盾。扩频的真正目的从来不是提高带宽效率而是抗窄带干扰、抗部分频带干扰、抗多径衰落以及在多用户场景下提供码分多址能力。一个比较典型的应用场景是在存在强窄带干扰的频段里传输高速数据64QAM保证高速率扩频则把干扰能量在整个频带上摊平接收端解扩后干扰被抑制。体现在仿真里你可以设计一个对比同样加一个窄带干扰不扩频的64QAM误码率可能到0.1扩频后误码率恢复可用。这是我建议你在最终报告中加的一张图老师很吃这一套。不过要澄清一个常见误区纯高斯白噪声信道下扩频不改变误码率性能。因为扩频只是展宽带宽并引入处理增益最终解扩后信噪比和未扩频理论一致。所以不要在仿真里指望“加了扩频BER就变好”那是被干扰环境或系统模型概念搞混了。扩频的作用要放在干扰场景或频偏场景下看。3.2 扩频码选择m序列还是Walsh码扩频码的自相关特性和互相关特性决定了解扩后的信噪比损失。我实际用过的两种m序列最长线性反馈移位寄存器序列自相关旁瓣低适合需要良好同步性能的单用户场景。码长2^n-1比如15、31、63在64QAM符号速率下扩频因子分别是15、31、63。m序列生成简单MATLAB里用通信工具箱的pngen或自己写十几行反馈移位寄存器都能实现。Walsh码Hadamard码码长必须是2的幂比如16、32、64多用户正交性好但同步要求高自相关旁瓣在非对齐情况下较大。适合做多用户仿真展示。我自己做单链路仿真的习惯是选m序列长度31理由是自相关峰值尖锐解扩时时序对齐稍微有点偏差都能看出来旁瓣很小调试阶段更容易定位问题。扩频码取值映射为±1后与符号相乘。注意这里是复数符号乘一个实数码片不改变相位关系。如果做的是正交扩频码片必须是±1实数序列不能拿复数码去乘。3.3 发射端扩频与接收端解扩的两种实现方案扩频接线有两种常见做法区别在于代码结构。方案一码片级扩频。每个QAM符号先复制成SF个码片再逐码片乘以扩频码。接收端也按码片处理解扩时把SF个码片乘以相同扩频码后累加再除以SF。这是最贴近真实物理层的做法因为码片级加噪声等价于宽带信号加噪声。% 发射端data为QAM符号向量长度NPN为1xSF的±1码 chipSeq kron(data(:), ones(1, SF)) .* kron(ones(N,1), PN); % 接收端解扩chipRcv为接收码片序列长度N*SF chipMat reshape(chipRcv, SF, N).; softSym chipMat * PN. / SF;方案二符号级等效扩频。直接在每个QAM符号上加一个“扩频增益权重”本质是把解扩等效成加权合并。这种方案快但无法体现码片级噪声和频偏对码片的影响不推荐作为主仿真链路。我强烈建议用方案一。虽然码片级仿真耗时更长但FFT频偏估计模块需要处理的是码片级信号只有码片级信号才真实反映了接收机看到的频谱结构。如果按符号级做频谱上根本看不到扩频特征频偏估计的物理意义就被架空了。3.4 解扩位置与软信息衔接先解扩再做软解调解扩和软解调的衔接顺序看似简单实际上有两种做法第一种是先硬判决符号再做解扩这是错误做法等于把扩频损耗当成噪声丢进去 第二种是码片级解扩后输出“软符号”即解扩后的复符号直接作为软解调模块的输入这是正确做法。我用的也是第二种。因为解扩本质是线性相关操作对一个含噪符号乘以扩频码再累加结果仍然可以近似看作高斯噪声下的接收符号只不过信噪比被处理增益提高了。所以解扩后直接进入LLR计算链路不需要额外做软合并操作。如果你以后要接信道译码那么解扩输出的软符号已经是每个编码比特对应的接收值接标准LLR计算即可。代码上就是前面章节那个LLR函数输入变为解扩后的符号序列snrLinear对应解扩后符号级信噪比。4. FFT频偏估计从谱峰搜索到残余频偏收敛4.1 频偏对64QAM星座的杀伤力有多强64QAM的星座点间距很小高维星座对相位误差极其敏感。假设符号周期为T归一化频偏为fdT。一个符号内相位旋转了2πfd*T如果这个旋转量超过星座点最小角度间隔判决就会失败。以64QAM八个I路电平来看相邻电平间隔是2归一化后约2/sqrt(42)≈0.31。星座最外层点与原点的角度间隔大约只有几度受过频偏影响后外层星座点旋转几度就可能越过判决边界。经验上的一个大致指标归一化频偏fd*T超过0.0164QAM误码率就开始明显塌陷超过0.05星座图基本糊成一团。所以频偏估计的目的不是把频偏完全估到零——那几乎不可能——而是把残余频偏压到0.01以下能接受的区域。FFT频偏估计的最大价值在于捕获范围大。基于导频的估计方法要求频偏不能超过符号率的几分之一而FFT方法只要信号带内不混叠捕获范围可以达到 ±fs/2fs是采样率。对于突发通信、开机同步这种先不知频偏范围的场景先用FFT粗扫一遍把频偏压到很小再用判决引导精估是工程上非常经典的两步走。4.2 FFT频偏估计原理谱峰位置对应频偏接收信号如果有残余载波频偏Δf相当于复基带信号乘了一个e^(j2πΔft)的旋转因子。对它做FFT相当于是把这个旋转因子变成一个谱峰峰的位置就指示了Δf。具体来说对不含调制的单音信号做N点FFT幅度谱会在Δf处出现峰值。但如果信号本身是已调信号64QAM扩频频谱并不是单音而是一个有一定带宽的谱。这时直接找最大值点估计的是“信号频谱的质心位置”而不是纯粹的频偏。所以这个方法的物理前提是频偏造成的整段频谱搬移量远大于信号本身带宽带来的频谱模糊。这里有一个实战细节如果你直接对64QAM信号做FFT由于符号随机频谱近似平坦峰值不明显。这时应该利用扩频信号的周期性或导频结构。我采用的是在数据帧头部插入一小段重复训练符号比如几个相同QAM符号把这部分符号单独拿去做FFT。因为重复符号在频域等效于多根离散谱线频偏会整体搬移这些谱线谱峰很尖锐。或者更简单如果你已经知道扩频码周期对码片信号做FFT扩频码的重复结构也会产生明显谱峰。如果不想加导频也可以用信号的四次方谱或非线性变换去除调制信息。但最稳妥、最容易被报告的方案还是“训练段FFT粗估计”。4.3 MATLAB实现FFT峰值搜索和插值细化FFT频偏估计的核心代码不长坑都在细节里。我给出带插值细化的版本% rxTrain为接收到的训练符号段已下变频到基带 N length(rxTrain); NFFT 2^nextpow2(N); % 补零到2的幂 X fft(rxTrain, NFFT); [~, idx] max(abs(X(1:NFFT/2))); % 只看正半轴 % 频率分辨率 df fs / NFFT; % 频偏粗估计 fCoarse (idx - 1) * df; % 三点插值细化Jacobsen公式把峰值位置精度提到亚分辨率 if idx 1 idx NFFT/2 alpha abs(X(idx-1)); beta abs(X(idx)); gamma abs(X(idx1)); delta (alpha - gamma) / (2*beta - alpha - gamma eps); delta min(max(delta, -0.5), 0.5); fFine (idx - 1 delta) * df; else fFine fCoarse; end fEstimate fFine;插值那块的分母可能出现接近0的情况必须做限幅和保护否则一个离谱的插值结果能把整个环路带偏。我最初就是因为没写限幅在低信噪比下插值delta跑出几十的大数频偏估计完全崩掉。使用补零原则FFT点数NFFT大于实际信号长度N时额外分辨率是插值而不是真实分辨率所以不能无限依赖补零。提高真实分辨率的方法是增加训练段长度。比如符号速率1Msps、训练段256个符号真实分辨率约3.9kHz插值后可以压到几百Hz这个精度对64QAM来说够了。4.4 残余频偏对软解调LLR的影响频偏补偿不可能完全消除频偏。残余频偏会让星座点整体旋转一个角度同时还会随时间累积相位旋转。软解调的LLR是基于欧氏距离计算的如果星座整体旋转距离结构会失真LLR的符号在边界处会来回跳。最直接的观测手段就是打完补偿之后画星座图。如果星座图还是转成一圈说明残余频偏过大如果星座图能看清四个象限但外圈飞点很多说明残余频偏接近边界。工程上可以把补偿后的信号再做一次判决引导的残余频偏估计但初版仿真不必搞这么复杂。我建议的做法是把FFT估计出的频偏值拿去对整帧信号做相位旋转补偿补偿量是exp(-j2πfEst*t)。补偿完再解扩、再计算LLR只要星座图外圈清晰误码率曲线就能落到理论曲线附近。5. 误码率仿真怎么组织参数折算、蒙特卡洛统计与对比曲线5.1 蒙特卡洛仿真的帧结构与停止准则误码率仿真的核心不是写一个BERsum(x~y)/N的函数而是如何保证统计结果的置信度。64QAM的理论误码率在10^-4量级时平均要统计几百个错误比特才够稳定。如果每帧只发1万比特在高信噪比下错误数太少曲线会抖动得很厉害。我采用的帧结构每帧包含200个QAM符号也就是1200个比特。每个信噪比点跑50到200帧并设定最少错误比特数500个才停止当前信噪比点。如果到达最大帧数还没凑够500个错比特就按已统计数计算不再无休止跑下去。这样既保证低频段曲线平滑又不会让高频段耗时爆炸。MATLAB里可以这样组织for idxSNR 1:length(EbN0dB) numErr 0; numBit 0; while (numErr 500) (numFrame maxFrame) [bitErr, bitTotal] runFrame(...); numErr numErr bitErr; numBit numBit bitTotal; end ber(idxSNR) numErr / numBit; end有一点值得强调64QAM仿真的噪声生成要用复噪声实部和虚部方差各为N0/2总噪声功率N0。把复高斯噪声加到码片信号上的时候噪声方差需要按符号级信噪比换算成码片级信噪比换算公式下一节说。5.2 Eb/N0与Es/N0以及扩频因子的折算关系这部分是误码率仿真里最容易算错的地方。我先把无扩频情况说清楚64QAM每个符号6比特所以符号能量Es与比特能量Eb的关系是Es/N0 (dB) Eb/N0 (dB) 10*log10(6) ≈ Eb/N0 7.78 dB如果把每条I/Q支路单独看每维噪声方差为N0/2那么归一化到Es1时每维噪声方差是 10^(-EsN0dB/10)/2。有扩频时如果扩频因子是SF那么一个QAM符号对应SF个码片。码片级信噪比Ec/N0与符号级信噪比的关系是Ec/N0 (dB) Es/N0 (dB) - 10*log10(SF)原因很简单同样符号能量平摊到SF个码片上每个码片能量缩小SF倍而噪声是按码片速率叠加的。接收端解扩时把SF个码片相加信号相干相加幅度变SF倍、能量变SF²倍噪声非相干相加功率只变SF倍于是信噪比提升SF倍——这就是处理增益。但注意扩频处理增益是被“解扩”这个动作拿回来的不是凭空产生的。所以如果把横轴定义成数据比特能量Eb/N0那么无论SF多大理论BER曲线都不应该移动。如果你在仿真里把噪声按符号级叠加、解扩时又按码片级归一化导致横轴实际对应错了曲线就会整体平移好几dB。我建议最稳的接法是把Eb/N0dB转成码片信噪比所有加噪操作都在码片域完成esN0dB EbN0dB 10*log10(6); ecN0dB esN0dB - 10*log10(SF); noiseVar 10.^(-ecN0dB/10); % 码片总噪声功率 noiseSigma sqrt(noiseVar/2); % 每维标准差这样无论SF取多少横轴Eb/N0的物理意义始终正确。5.3 理论曲线与仿真曲线的对比方法64QAM在高斯白噪声下的理论BER可以直接用MATLAB自带函数berTheory berawgn(EbN0dB, qam, 64);也可以自己写近似公式但既然有现成函数就用现成的。画图时用semilogy横轴Eb/N0dB纵轴BER对数坐标理论曲线用黑色实线仿真曲线用带圆圈标记的线再加一条带方块标记的“有频偏不补偿”曲线一条带三角标记的“FFT频偏估计补偿后”曲线。判读曲线时有几个特征值得注意无频偏仿真曲线如果与理论曲线偏离超过1dB说明链路有问题先查噪声方差、星座归一化、LLR尺度频偏不补偿曲线在信噪比升高时会出现“平台”也就是BER不再下降这是残留相位旋转造成的不可消除错误平台高度由频偏大小决定补偿后的曲线应该基本贴回理论曲线如果仍有差距要观察残余频偏是否过大。5.4 典型仿真参数建议我用的典型参数组合直接抄作业也能跑出漂亮曲线参数取值说明调制阶数M646bit/符号扩频因子SF31m序列长度31符号速率1 MHz归一化时间基准训练段长度256 符号FFT频偏估计用频偏范围0 ~ 0.05*fs超过会超出FFT捕获能力Eb/N0范围10 ~ 25 dB64QAM理论门槛约10dB起每信噪比最少错误数500保证曲线平滑这个参数组合在你的机器上跑一轮大概几分钟到十几分钟属于可以接受的范围。如果你赶时间把最少错误数降到200曲线会稍微抖一点但趋势没问题。6. 联调时最容易踩的坑频偏、时序、LLR数值6.1 FFT频偏估计误判与星座旋转问题我最开始跑完整链路时发现补偿后的星座图不是清晰网格而是一个缓慢旋转的圆环。排查了很久最后定位到FFT峰值搜索有个边界bug当信号频谱峰值恰好落在idx1附近时插值公式访问到X(0)MATLAB里其实是X(end)把谱峰位置算错了一大截。加上了idx1的边界判断后才正常。另外FFT估计出的频偏符号要特别小心。一个正频偏对应e^(j2πft)补偿时乘e^(-j2πft)。如果你在实验里发现星座图越补偿越乱先用单音信号单独验证一下频偏估计和补偿的符号。我通常写一个简单的测试生成一个固定频偏的单音跑一遍估计看补偿后是否变成零频。验证通过后再接进完整链路省得问题叠问题。6.2 解扩时序对齐问题码片级扩频仿真里接收端解扩前必须知道码片起点。如果训练导频只用于频偏估计没有同步码片起点解扩时从错误的位置开始取SF个码片跨了两个符号边界相关峰直接消失符号信噪比严重恶化。解决思路有两种。一种是在数据帧里额外插入一个扩频码同步序列接收端先滑动相关找峰值定边界另一种更省事——在仿真里假设接收端已知帧起始位置从正确位置取码片。做毕业设计的话第二种完全够用但要写清楚“理想同步假设”。我建议你在报告里明确标注这一点否则老师追问你帧同步怎么做的时候场面会很难看。6.3 低信噪比下LLR数值溢出LLR计算公式里有snrLinear这个缩放因子。高信噪比下snrLinear可能到几百如果接收符号恰好落在极端位置LLR会到几百甚至上千。在高阶调制和后续译码场景中太大的LLR会让后续模块饱和。MATLAB里常见的问题不是溢出而是NaN。如果某个子集距离差为0而0乘以大数还是0没问题但如果星座点集合里恰好出现NaN整个LLR向量就全废了。一个稳健做法是对LLR做限幅LLR min(max(LLR, -30), 30);限幅范围不用太纠结30对64QAM完全够用。这不会改变判决结果但能保证后面接任何模块都不出数值问题。6.4 误码率曲线的“平台”排查思路如果你画出补偿后的BER曲线还是出现平台参考下面这张排查顺序表现象排查重点补偿后曲线整体上移3dB检查噪声方差是否按码片域折算、是否重复加了两次噪声高信噪比出现平台检查残余频偏是否仍然过大星座图是否缓慢旋转低信噪比曲线低于理论线99%是横轴单位搞错了检查Eb/N0折算曲线干脆不下降解扩时序大概率错位SSR相关解扩失效我在实际联调中最常犯的就是第一个噪声按码片域加了结果解扩后又莫名其妙把符号能量再归一化一次双重归一化把信噪比整体拉低3dB。这种问题用单点调试法最有效设Eb/N015dB跑一次仿真并打印中间各节点的信噪比检查是否与理论预期一致而不是盯整条曲线猜。整套链路调通之后你会发现这个项目本质上就是“三个模块各自做好再接缝处做对接口”。64QAM软解调负责把噪声环境下的信息保真扩频解扩负责把带宽铺开再收拢带来处理增益的同时也给频谱特性提供了辨识度FFT频偏估计则是给接收机一个在频偏乱局中稳住阵脚的前置手段。三者的连接顺序一旦理顺剩下的就是参数调试和画图。希望这篇文章能帮你少走我当初走过的弯路尤其是第3章那个“扩频后加噪声到底加在哪一层”的为什么我见过太多人在那里绕不出来。
返回列表