
简介这份资源是面向无线通信学习与研究的OFDM关键环节仿真程序包重点围绕信道估计、循环前缀应用与定时估计三大主题适合通信工程学生、算法开发者及需要动手验证OFDM原理的工程师参考。压缩包共28个文件以19个txt数据文件、4个dat文件、2个m脚本、2个asv备份和1个doc流程说明为主整体仅133KB轻量易用。txt与dat文件存放训练序列、调制前后I/Q信号等仿真数据m脚本实现OFDM调制解调、信道估计与定时同步等核心算法doc文档梳理整体程序流程。目前已有137人学习下载。通过运行并剖析这些程序可直观理解基于训练序列或导频的信道估计方法、循环前缀对抗多径符号间干扰的机制以及相关定时估计算法的实现思路为进一步开展频率偏移校正、均衡器设计等完整OFDM收发实验打下良好基础是一份兼顾理论讲解与代码实操的入门参考资料。1. OFDM 信道估计与定时同步这套 MATLAB 资源把多径信道下的符号边界问题一次讲透OFDM 系统的调试难点从来不在 FFT 本身而在信道估计和定时同步。这套 OFDM.rar 资源用完整的 MATLAB 收发脚本配合 256 点训练序列数据文件把符号生成、循环前缀添加、接收端 LS 信道估计、定时估计的整条链路串了起来。压缩包里 ofdm_mod.m 和 v06_03_dem_2up_arrange.m 分别对应调制与解调两端data_I/Q_train_word_*_i0_256.txt 这类训练序列文件可以直接喂给估计模块验证。适合正在做无线通信课程设计、或者刚接手 OFDM 仿真项目但还没理清 CP 与同步关系的从业者。这套资源要回答的核心问题很明确训练序列已知、接收波形已知怎么把信道冲激响应估出来同时把符号起始位置找对。2. 从文件清单还原 OFDM 收发链路调制脚本、训练序列与 2 倍上采样2.1 解压后的文件地图源码、数据与中间产物怎么区分拿到压缩包先别急着跑把文件按性质分三类后面排查会省很多时间。第一类是主程序ofdm_mod.m 和 v06_03_dem_2up_arrange.m一个做发送端调制一个做接收端解调ofdm_mod.asv 是 MATLAB 自动保存的备份版本可以直接忽略。第二类是训练序列数据data_I_train_word_1_i0_256.txt 这一组命名里的 I/Q 表示正交两路word_1/word_2 表示第几个训练字i0_256 表示索引从 0 开始、长度 256 点re 后缀我理解为 reference 参考序列。第三类是中间波形和滤波系数OFDM_mod_I_ser_2up_sam_50.dat 是 2 倍上采样后、50 MHz 采样率下的串行发送波形SoutI_4_IF.txt 和 SoutI_4_BF.txt 是接收端某级处理后的输出HBF23.txt 是 23 阶半带滤波器的系数。文件之间的依赖关系大致是ofdm_mod.m 读训练序列、做 IFFT、加 CP、2 倍上采样输出 .dat 波形v06_03_dem_2up_arrange.m 读回波形做定时估计、去 CP、FFT、LS 信道估计输出 SoutI_4_IF/BF 这类中间结果。程序流程说明.doc 是资源自带的流程图文档建议先打开它对着文件清单看一遍能少走不少弯路。下面这张表是我整理的文件分类排查问题时按表定位比翻文件快得多。类别典型文件作用主程序ofdm_mod.m / v06_03_dem_2up_arrange.m发送端调制、接收端解调主流程训练序列data_I/Q_train_word_{1,2,re}_i0_256.txtI/Q 两路训练字各 256 点供信道估计与定时估计发送波形OFDM_mod_I/Q_ser_2up_sam_50.dat2 倍上采样后的正交两路发送波形50 MHz 采样率处理输出SoutI_4_IF.txt / SoutI_4_BF.txt接收端 IF/BF 阶段输出用于逐级核对中间结果滤波系数HBF23.txt23 阶半带滤波器系数用于 2 倍插值滤波提示ofdm_mod.asv 是 MATLAB 自动保存文件编辑时直接改 .m 源文件不要拿 .asv 当主程序看内容可能滞后。2.2 训练序列 I/Q 数据256 点符号结构与 2up 上采样的关系训练序列是信道估计和定时同步的地基。这套资源里的训练序列以 256 点为基本长度正好对应 N_fft 256 的 OFDM 符号。I 路和 Q 路分开存成两个文本文件每行一个数值读进来后组成复数序列 train_seq train_I 1j * train_Q。为什么是 256 点因为 OFDM 符号在频域上就是 256 个子载波IFFT 之后得到 256 点时域样点训练序列与符号长度一致就可以直接在频域逐子载波做信道估计不需要额外的重采样对齐。2up 是这份资源里反复出现的标记表示 2 倍上采样。OFDM_mod_I_ser_2up_sam_50.dat 里的 sam_50 我理解为 50 MHz 采样率也就是说基带符号在 25 MHz 符号速率下生成经过 2 倍插值和半带滤波后抬到 50 MHz。上采样的意义在于给定时估计留出过采样裕量如果在符号率上直接采样定时偏差一个样点就是整个符号周期的偏移误差容限太小2 倍上采样后定时估计精度可以做到半个采样周期以内对 CP 的容忍度也随之放宽。读训练序列文件时要注意格式。我一般先 whos 看变量尺寸再确认是行向量还是列向量。文本文件常见坑是末尾多一个空行或缺失换行符load 通常能容忍但后续做矩阵运算时方向不一致会直接报维度错误。建议读进来后统一用 (:) 强制成列向量再和接收信号保持一致的维度约定。2.3 ofdm_mod.m 主流程从训练字到发送波形的 MATLAB 骨架这套资源的发送端脚本我没有逐行改过但从文件命名和输出数据能还原出标准流程生成或读取训练序列 → 频域映射 → IFFT → 加 CP → 2 倍上采样 → 半带滤波 → 写 .dat 文件。下面这段是按这个流程整理的可运行骨架思路和资源一致可以替换成你自己的训练序列文件跑通全链路。% ofdm_mod_demo.m —— OFDM 发送端骨架N_fft256, CP64, 2x upsampling clear; clc; N_fft 256; % FFT 点数与训练序列长度一致 N_cp 64; % 循环前缀长度取 N_fft 的 1/4 M 2; % 2 倍上采样率 Fs 50e6; % 上采样后采样率对应文件里的 sam_50 % 1. 读取 I/Q 两路训练序列拼成复数符号 train_I load(data_I_train_word_1_i0_256.txt); train_Q load(data_Q_train_word_1_i0_256.txt); train_seq train_I(:) 1j * train_Q(:); % 强制列向量256x1 % 2. 频域映射训练序列直接作为频域符号 mod_sym train_seq; % 3. IFFT 到时域 ifft_out ifft(mod_sym, N_fft); % 256 点时域样点 % 4. 添加循环前缀复制尾部 N_cp 个样点到开头 cp_part ifft_out(end - N_cp 1 : end); tx_symbol [cp_part; ifft_out]; % 长度 25664320 % 5. 2 倍上采样插零后过 HBF23 半带滤波器 up2 zeros(2 * length(tx_symbol), 1); up2(1:2:end) tx_symbol; % 奇数位插零 HBF23 load(HBF23.txt); % 23 阶半带滤波器系数 tx_up filter(HBF23, 1, up2); % 滤除镜像频谱 % 6. 写出发送波形文件 fid fopen(OFDM_mod_demo_2up_sam_50.dat, w); fwrite(fid, [real(tx_up); imag(tx_up)], float32); % I/Q 交织存储 fclose(fid);参数说明N_fft 256 必须与训练序列点数严格一致否则频域相除时长度不匹配N_cp 64 是 N_fft 的四分之一这个比例能覆盖的多径时延扩展大约为 64 / 25e6 2.56 微秒基带符号率 25 MHz超出这个范围 ISI 就压不住。filter 函数用 HBF23 做插值滤波半带滤波器通带边缘在归一化频率 0.25 附近2 倍插值后镜像频谱正好落在 0.5 附近能被有效抑制。步骤 5 里插零后数据长度翻倍滤波器群延迟会让输出开头有一段过渡区实际发送时通常丢弃前 1112 个样点约半滤波器阶数这个细节对接收端定时估计有直接影响后面避坑章节会展开。3. LS 信道估计与循环前缀多径衰落补偿的底层逻辑与 MATLAB 实现3.1 为什么选 LS 估计训练序列已知时的最小二乘思路信道估计解决的是信号经过多径信道后变成什么样的问题。发送的训练序列是已知的接收端拿到的是经过信道卷积、叠加噪声的版本。在频域看多径信道等效于每个子载波乘上一个复增益 H(k)因此估计信道就是估计这 256 个复增益。LS 估计的思路最直接发送频域符号 X(k) 已知接收频域符号 Y(k) 可测那么 H(k) Y(k) / X(k) 就是每个子载波上的信道响应估计没有任何先验假设一次复数除法做完复杂度最低。为什么这套资源选 LS 而不是 MMSE因为 LS 不需要知道信道统计特性和噪声方差适合先把链路跑通、再做性能优化的场景。MMSE 在低信噪比下增益明显但需要先估计噪声功率和信道相关矩阵代码复杂度上一个量级。我一般建议初学先把 LS 调通星座图和 BER 能看懂了再换 MMSE 对比这样出错时知道该怀疑哪一环。LS 的代价是噪声放大某个子载波上 X(k) 幅度很小时Y(k) 里的噪声会被除法放大导致估计值跳动。缓解手段有两个一是选恒包络、频谱平坦的训练序列让每个子载波上 X(k) 幅度接近二是估计后做时域平滑把冲激响应截断到 CP 长度以内因为真实信道的时延扩展不超过 CP超出部分的能量基本是噪声。3.2 循环前缀的添加与移除ISI 和 ICI 是怎么被同时压住的循环前缀Cyclic Prefix的本质是把线性卷积变成循环卷积。没有 CP 时前一个 OFDM 符号的多径延迟会叠加到当前符号的起始部分造成符号间干扰ISI同时 FFT 解调窗口错位子载波之间的正交性被破坏产生载波间干扰ICI。加 CP 的做法是把每个符号末尾的 N_cp 个样点复制到符号开头只要多径时延扩展小于 N_cp 个采样周期前一个符号的拖尾只落在当前符号的 CP 区间内FFT 窗口内的数据不受污染ISI 和 ICI 同时被抑制。以这套资源为例25 MHz 基带符号率、256 个子载波子载波间隔约 97.7 kHz符号周期 320 / 25e6 12.8 微秒CP 占 2.56 微秒这个配置对室内多径环境是够用的。接收端移除 CP 不是简单丢掉前面 N_cp 个点关键是 FFT 窗口的起始位置必须落在 CP 区间内、且不能越过下一个符号的数据起点。窗口位置决定了信道估计和均衡的相位基准窗口偏早或偏晚等效于给频域响应乘上一个线性相位因子虽然均衡后能纠正但会加剧边缘子载波的相位误差。这就是为什么定时估计必须和信道估计配合做顺序不能乱。2 倍上采样对 CP 的影响也值得单独说上采样后采样间隔减半同样的时延扩展对应更多采样点定时估计的量化误差从 ±1 个基带样点变成 ±1 个上采样样点精度提升一倍代价是数据量翻倍FFT 前需要先抽回符号率抽取相位直接影响定时性能。3.3 MATLAB 实现LS 估计与 CP 处理的参考代码接收端处理顺序是定时估计找符号起点 → 丢弃 CP → FFT → LS 信道估计 → 均衡。下面这段对应 v06_03_dem_2up_arrange.m 的核心逻辑注意 2 倍上采样下的抽取时机和窗口位置。% ofdm_dem_demo.m —— OFDM 接收端骨架定时估计 去 CP LS 信道估计 clear; clc; N_fft 256; N_cp 64; M 2; % 与发送端保持一致 % 1. 读训练序列本地参考 train_I load(data_I_train_word_re_i0_256.txt); train_Q load(data_Q_train_word_re_i0_256.txt); train_seq train_I(:) 1j * train_Q(:); % 2. 读接收波形.dat 按 I/Q 交织的 float32 存储 fid fopen(OFDM_mod_I_ser_2up_sam_50.dat, r); rx_raw fread(fid, inf, float32); fclose(fid); rx_signal rx_raw(1:2:end) 1j * rx_raw(2:2:end); % 拆 I/Q % 3. 定时估计用本地训练序列做滑动相关找峰值 corr zeros(1, length(rx_signal) - N_fft * M); for n 1 : length(corr) seg rx_signal(n : n N_fft * M - 1); corr(n) abs(sum(seg .* conj(train_seq))); end [~, idx_peak] max(corr); % 峰值位置即粗定时起点 % 4. 抽取回符号率从峰值位置开始隔 M 取一点 sym_start idx_peak; rx_base rx_signal(sym_start : M : sym_start (N_fft N_cp) * M - 1); % 5. 去 CP FFT rx_symbol rx_base(N_cp 1 : N_cp N_fft); % 窗口起点在 CP 之后 Y fft(rx_symbol, N_fft); % 6. LS 信道估计频域除法 时域截断平滑 X fft(train_seq, N_fft); H_ls Y ./ X; % 256 个子载波复增益 h_time ifft(H_ls); % 转时域看冲激响应 h_time(N_cp 1 : end) 0; % 截断到 CP 长度抑制噪声 H_sm fft(h_time); % 平滑后的信道估计 % 7. 频域均衡ZF 均衡 X_eq Y ./ H_sm;参数说明滑动相关窗口长度取 N_fft * M也就是上采样后的符号长度 512 点这样相关峰值对应一个完整符号的起始。步骤 4 的抽取是整个 2up 流程最容易出错的地方抽取相位不是随便选的峰值位置对应训练序列第一个样点从这个位置开始隔 2 取 1才能保证抽取后的序列和本地训练序列对齐。步骤 6 的时域截断平滑是 LS 估计的关键改进把估计出的冲激响应限制在 CP 长度内能显著压低噪声子载波的抖动代价是信道时延扩展超过 CP 时会把真实多径截掉这时要适当放宽截断长度。均衡用 ZF 除法信道幅度很小时噪声会被放大实际系统里会加一个小的正则项防止除零。4. 定时估计实战相关峰搜索与符号边界对齐的调参要点4.1 定时估计的经典做法滑动相关与峰值判决定时估计Timing Estimation要回答的问题是每个 OFDM 符号从哪里开始。发送端在符号前加了 CP接收端如果不知道符号边界就无法确定 FFT 窗口位置。最经典的做法是利用训练序列的已知特性做滑动相关本地训练序列与接收信号逐点对齐相乘累加两者完全对齐时相关值出现峰值峰值位置就是符号起点。相关峰的质量取决于训练序列的自相关特性理想训练序列要求自相关函数在零点尖锐、其他位置接近零工程上常用 CAZAC 序列恒包络零自相关或 m 序列。这套资源里的训练序列是从文件读出的实际数据可以先在 MATLAB 里算一遍自相关观察旁瓣水平旁瓣峰值超过主瓣 30% 时定时误触发的概率就偏高需要结合阈值和搜索策略补偿。判决策略分两步。粗定时用滑动相关的全局最大值锁定符号大致位置精定时在粗定时附近做更小步长搜索把起始位置细化到分数采样点。对 2 倍上采样的系统粗定时精度已经达到上采样间隔足够满足 CP 的容忍范围一般不需要再做分数时延估计除非信道时延扩展逼近 CP 长度。另外实际接收信号里有频偏时相关峰会受到相位旋转影响幅度上会打折扣。这是为什么有些实现会先做粗频偏估计再定时或者用差分相关的形式消除固定相位的影响。初学者可以先忽略频偏把定时链跑通后再加否则两个变量同时调出了问题很难定位。4.2 MATLAB 实现用训练序列做粗定时同步上一章代码里已经包含了一个最简单的滑动相关实现这里把它拆开讲清楚并加上阈值判决避免在噪声背景下误锁峰值。滑动相关直接写循环在数据长时会很慢训练阶段可以接受正式跑建议用矩阵化或 FFT 加速。% timing_est.m —— 基于训练序列的定时估计含阈值判决 train_I load(data_I_train_word_1_i0_256.txt); train_Q load(data_Q_train_word_1_i0_256.txt); train_seq train_I(:) 1j * train_Q(:); % 接收信号 rx_signal 已按 I/Q 拆分见上一节 L N_fft * M; % 相关窗长 上采样后符号长度 N_search length(rx_signal) - L; % 滑动范围 corr_power zeros(1, N_search); for n 1 : N_search seg rx_signal(n : n L - 1); corr_power(n) abs(sum(seg .* conj(train_seq)))^2 / L; end % 阈值判决峰值必须超过均值的一定倍数才认 thresh 4 * mean(corr_power); [peak_val, idx_candidate] max(corr_power); if peak_val thresh idx_peak idx_candidate; else error(定时同步失败相关峰低于阈值请检查 SNR 或训练序列); end % 精调在峰值前后各 L/4 范围内做二次搜索取能量最大窗口 search_range max(1, idx_peak - L/4) : min(N_search, idx_peak L/4); [~, idx_fine] max(corr_power(search_range)); idx_peak search_range(idx_fine);参数说明阈值取 4 倍平均相关功率是经验值SNR 高于 10 dB 时很安全低 SNR 下要降到 23 倍否则漏检率上升。精调窗口取峰值前后 L/4即 128 个采样点目的是避开相关峰平台边缘的抖动。如果相关峰出现平顶说明训练序列带有周期结构CP 区域内任意起点都得到相近相关值这时取平顶中心比取最大值更稳。实际项目中我会把 corr_power 画出来看一眼峰值形状比峰值大小更能说明问题尖锐单峰说明序列自相关好双峰说明可能有两个强多径分量平顶说明序列周期性太强。4.3 参数怎么调阈值、窗长与 50 MHz 采样率的匹配定时估计的参数不是孤立调的要和采样率、CP 长度咬合。50 MHz 采样率下基带符号率是 25 MHz一个符号周期 12.8 微秒CP 占 2.56 微秒。定时误差只要控制在 CP 长度以内FFT 窗口就还在安全区2 倍上采样下 1 个采样点的误差40 纳秒远远够用真正要防的是误锁到噪声峰或旁瓣。窗长 L 的选择有个权衡L 越大相关积累增益越高抗噪声越好但计算量线性增长而且要求接收信号在这一段内信道近似不变。对 256 点符号、50 MHz 采样率L 512一个符号长度是平衡点信道相干时间远大于 12.8 微秒时可以放心用。信道快时变时建议把训练序列分段每段 128 点做分段相关再累加既保持积累增益又跟得上信道变化。另一个容易忽略的参数是抽取相位。上一章提到从峰值位置隔 2 取 1但如果峰值位置落在插值后的偶数索引上抽取出来的序列和本地训练序列会有一个样点的错位。解决办法是同时试两个抽取相位比较哪个相位下相关峰更尖锐或者在峰值前后各偏移一个采样点重新计算相关取最大值对应的位置。这套资源里 SoutI_4_IF.txt 和 SoutI_4_BF.txt 就是不同处理阶段的输出对比它们可以看出抽取相位对中间结果的影响——IF 阶段的波形还带着载波BF 阶段已经是基带两处相位基准不同核对时要分开看。5. OFDM 调试避坑记录五个从数据文件到星座图还原的常见问题5.1 现象星座图整体旋转发散BER 居高不下现象均衡后的星座点不是聚在理论位置而是绕原点旋转SNR 越高转得越明显BER 在 1e-2 附近下不去。原因FFT 窗口起点偏移导致每个子载波乘上线性相位因子。窗口偏一个样点最高子载波上的相位旋转可达 2π × 127 / 256 ≈ 2.8 弧度星座点自然发散。如果信道估计用的训练序列也取自错误窗口LS 估计会把窗口偏移吸收进信道响应短训练序列场景下估计不准残留相位误差就体现在星座图旋转上。解决先用训练序列的自相关峰值重新定位符号起点再去 CP。我一般会在定时估计后加一个校验步骤用估计出的信道对本地训练序列做一次重构比较重构波形和接收波形的相位差残差大于 0.1 弧度就判定窗口偏移往回调整 12 个采样点重跑。这套资源里 data_I_train_word_re_i0_256.txt 这类参考序列就是用来做校验的。5.2 现象定时相关峰出现平顶峰值位置不确定现象corr_power 曲线在符号起始附近是一段平台最大值位置在多次运行间跳动解调结果不稳定。原因训练序列本身带周期性结构时滑动相关在 CP 范围内都会得到高相关值形成平顶。另一个原因是 2 倍上采样后插值滤波器 HBF23 的群延迟把训练序列的冲激响应展宽了相关峰被抹平。解决平顶场景取平台中心而不是最大值。实现上找到超过峰值 90% 的区间取区间中点作为定时位置。如果是因为插值滤波器展宽就在相关前给接收信号补偿群延迟——filter 函数引入的固定延迟约等于滤波器阶数一半即 11 个样点把接收序列前移 11 个点再相关即可。5.3 现象LS 信道估计结果噪声大均衡后星座点发散现象H_ls 的幅度在相邻子载波间剧烈跳变均衡后星座点外圈比内圈散得厉害噪声底抬高。原因LS 估计本质是频域除法训练序列某些子载波上能量低时噪声被放大。低 SNR 下这个问题尤其严重256 个子载波里有几个深衰落点这几个点的信道估计完全被噪声主导。解决先做时域截断平滑把 h_time 截到 CP 长度内再变换回来这是成本最低的改进。还不够的话对 H_sm 做频域滑动平均窗长 57 个子载波能进一步压噪声代价是牺牲频率选择性信道的细节。再不够就换 MMSE 估计但需要先估计噪声方差我一般在 SNR 低于 5 dB 的场景才上 MMSE。5.4 现象2 倍上采样后频谱出现镜像发射信号带外辐射超标现象把 OFDM_mod_I_ser_2up_sam_50.dat 的功率谱画出来在 25 MHz 偏移附近出现明显镜像谱带外衰减不达标。原因插零上采样在频域产生周期性镜像如果插值滤波器不是标准半带特性或者 HBF23.txt 系数加载后没归一化镜像就滤不干净。另一个常见原因是滤波器阶数不够23 阶半带滤波器的过渡带相对较宽对紧邻通带的镜像抑制有限。解决先检查 HBF23.txt 的系数是否对称、中心系数是否为 0.5半带滤波器的中心系数应为 0.5 左右。如果系数没问题考虑级联上采样先 2 倍到 50 MHz再 2 倍到 100 MHz每级用更宽松的滤波器总抑制效果通常比单级 23 阶更好。注意画功率谱时用 Welch 方法看平均谱不要直接用单帧 FFT方差太大看不出镜像抑制的真实水平。5.5 现象读 .dat 文件和 .txt 文件的数据对不上波形完全错乱现象用 load 读训练序列 .txt 正常但 fread 读 .dat 后波形杂乱无章幅度和预期差几个数量级。原因.txt 是文本格式每行一个数.dat 很可能是二进制 float32 且 I/Q 交织存储。不按交织拆分把 I 路和 Q 路当成连续数据复数信号完全错位。字节序也常踩坑MATLAB 默认本机字节序如果文件在别的平台生成大小端不匹配会导致数值异常。解决读 .dat 前先用 dir 看文件大小256 个复数浮点、I/Q 交织的话应该是 256×2×4 2048 字节。然后用 fread(fid, inf, float32) 读出后按 1:2:end 和 2:2:end 拆 I/Q。幅度对不上时尝试加 ieee-be 字节序参数重新读。把这五条先过一遍大部分 OFDM 收发链路的问题都能定位到具体环节不用整体推倒重来。6. 整链验证的三个进阶技巧导频跟踪、EVM 与回归检查6.1 从训练字过渡到导频时变信道下的实时跟踪改法训练序列只在帧头出现信道时变时一帧后半段用的信道估计可能已经过时。常见做法是在数据符号里固定插入 1632 个导频子载波收发两端约定好图案接收端每个符号用导频做一次 LS 估计再线性插值得到全部子载波信道。data_I_train_word_re_i0_256.txt 可以作为导频序列的参考来源。代价是吞吐率下降约 10%但能显著拉长一帧内有效数据的长度工程上普遍这么干。6.2 EVM 与星座图比 BER 更早暴露问题BER 定位问题太迟钝要到误码发生才知道链路有问题。EVM 更敏感对均衡后的每个星座点求它与最近理想星座点的归一化距离超过 5% 就要警惕超过 10% 基本开始误码。画星座图时叠上理想点偏移方向能直接区分是相位旋转、增益缩放还是噪声弥散。跑到 SoutI_4_BF.txt 这一步时先算 EVM 再决定是否继续不用等整帧解完。6.3 收尾整条链路跑通后我会做一次回归检查定时估计峰值位置在多次运行间稳定信道冲激响应主径位置与预设多径时延吻合端到端 BER 至少统计到 100 个误码以上才认为统计有效。从那以后我每次调 OFDM 链路都强制把星座图、EVM、定时峰值这三样完整走一遍哪怕只改了一个滤波器系数。这个习惯帮我省掉大量以为通了其实没通的返工也希望帮到你。本文还有配套的精品资源点击获取