FPGA 数字信号处理入门保姆级指南:40 + 核心名词大白话解析 + 配套习题(电赛 / 竞赛专用)
很多同学备战电赛信号类题目(比如 2023 年 H 题信号分离装置)时,最大的门槛不是写代码,而是看不懂满屏的专业名词:FIR、FFT、Q 格式、建立时间、频谱泄漏…… 每个字母都认识,凑在一起就不知所云,抄完代码出了 bug 根本不知道从哪查。
这篇文章把 FPGA 做数字信号处理时最高频的 40 + 专业名词,全部用生活化类比 + 电赛真实场景讲透,零基础也能看懂;文末配套了对应习题,看完就能检验掌握程度,效率翻倍。
一、信号基础与质量指标:先搞懂信号的「好坏」怎么衡量
这部分是所有信号处理的基石,对应 ADC 采集、DAC 输出的最前端,也是题目评分的核心指标。
1. 基波
大白话解释:信号里能量最大、最主要的那个频率成分,就是我们真正想要的目标信号。电赛场景:题目里要求分离的 50kHz、100kHz 正弦波,就是两路信号的基波。
2. 谐波
大白话解释:频率是基波整数倍的杂波信号,属于信号失真的产物,比如 2 次谐波就是 2 倍基频,3 次谐波就是 3 倍基频。电赛场景:三角波里天然包含 3 次、5 次、7 次等奇次谐波;如果电路设计不好,正弦波输出也会产生谐波,影响分离精度。
3. 信噪比(SNR)
大白话解释:有用信号的功率和噪声功率的比值,单位 dB。数值越大,信号越干净,背景噪声越小。电赛场景:ADC 采样位数越高、电源噪声越小,信噪比越高,后续信号处理的精度就越好。
4. 总谐波失真(THD)
大白话解释:所有谐波的总能量和基波能量的比值,衡量信号波形的失真程度。数值越小,波形越接近理想正弦波。电赛场景:题目里输出波形的失真度指标,本质就是 THD,是评分的关键项。
5. 无杂散动态范围(SFDR)
大白话解释:基波幅度和最大杂波幅度的比值,单位 dB。代表系统能分辨的最大信号和最小信号的差距。电赛场景:DDS 输出的纯净度、FFT 识别微弱信号的能力,都和这个指标直接相关。
6. 噪声底(噪声基底)
大白话解释:系统本身固有的噪声水平,就算没有输入信号,也存在的背景噪声。电赛场景:FFT 频谱里底部的那些杂乱小峰,就是噪声底;小信号如果低于噪声底,就会被淹没识别不出来。
7. 满量程(Full Scale)
大白话解释:ADC/DAC 能处理的最大电压范围,比如 0~3.3V 就是常见的满量程范围。电赛场景:信号幅值接近满量程时,信噪比最高;信号太小的话,容易被噪声淹没。
二、数字滤波器全系列:从基础到进阶
滤波器是电赛信号题的绝对核心,从基础的 FIR 到进阶的多速率滤波,全部整理在这里。
1. FIR 滤波器(有限长冲激响应)
大白话解释:只靠历史采样值加权求和实现的「电子筛子」,系统绝对稳定、输出波形不失真,是电赛首选方案。对应代码:方案一里的fir_1024.sv就是典型的 1024 阶 FIR 滤波器实现。
2. IIR 滤波器(无限长冲激响应)
大白话解释:带反馈结构的滤波器,相同性能下阶数更低、省资源,但容易振荡、波形会产生相位失真,电赛慎用。
3. 阶数(抽头数)
大白话解释:滤波器系数的总个数,相当于筛子的层数。阶数越高,筛选边界越锐利、滤得越干净,但信号延迟越大、硬件资源占用越多。对应代码:1024 阶 FIR,就代表有 1024 个加权系数。
4. 通带 / 阻带 / 过渡带
大白话解释:
- 通带:能顺利通过、几乎不被削弱的频率范围;
- 阻带:被大幅衰减、基本无法通过的频率范围;
- 过渡带:通带和阻带中间的缓冲区域,信号是逐步被削弱的,现实中不存在一刀切的理想滤波器。
5. 阻带衰减
大白话解释:阻带内信号被削弱的程度,单位 dB。常用数值参考:20dB = 削弱到 1/10,40dB = 削弱到 1/100,60dB = 削弱到 1/1000。
6. 线性相位
大白话解释:所有频率的信号通过滤波器后,延迟时间完全一样。最大好处是波形不会变形,正弦波输入还是正弦波输出。实现条件:FIR 系数左右严格对称,就能保证线性相位;MATLAB 工具生成的系数天然满足。
7. 群延迟
大白话解释:信号通过滤波器需要的时间,单位是采样周期。线性相位滤波器的群延迟是固定值,等于 (阶数 - 1)/2。
8. 窗函数
大白话解释:设计 FIR 滤波器的不同「数学配方」,常用汉宁窗、汉明窗、布莱克曼窗,各有优劣。电赛常规题目用汉宁窗即可,均衡性最好。
9. 抽取(Decimation)
大白话解释:降低采样率,每隔 N 个采样点取一个,相当于降采样。抽取前必须先做低通滤波,防止信号混叠。
10. 插值(Interpolation)
大白话解释:提高采样率,在两个原始采样点之间插入新的数值,相当于升采样。插值后要做低通滤波滤除镜像频率。
11. 多速率信号处理
大白话解释:系统里不同模块用不同的采样率,低速部分用低采样率节省资源,高速部分用高采样率保证性能。
12. CIC 滤波器(梳状滤波器)
大白话解释:专门用于抽取 / 插值的滤波器,不需要乘法器,只用加法器和寄存器,硬件资源极少,适合大倍率降采样场景。
13. 半带滤波器(Half-band)
大白话解释:一种特殊的 FIR 滤波器,通带和阻带对称,一半系数为 0,运算量是普通 FIR 的一半,常用在 2 倍抽取 / 插值的场景。
14. 等波纹滤波器
大白话解释:用 Parks-McClellan 算法设计的 FIR 滤波器,通带和阻带的纹波是均匀的,相同阶数下性能比窗函数法更好。
三、FFT 频谱分析全家桶:频域分析必备
这部分对应方案二的 FFT 识别方案,搞懂这些才能理解频谱分析的原理和常见坑点。
1. DFT / FFT
大白话解释:
- DFT(离散傅里叶变换):把时域信号转换成频域,算出每个频率分量的大小;
- FFT(快速傅里叶变换):DFT 的快速优化算法,运算量小几十上百倍,工程上全部使用 FFT。对应代码:方案二里的
xfftIP 核,就是 Xilinx 官方的 FFT 硬件加速器。
2. 功率谱
大白话解释:每个频率对应的信号能量大小,横轴是频率、纵轴是功率,峰值最高的地方就是信号的主频率。对应代码:Cal_pwoer.v模块做的就是计算每个频点的功率值。
3. 频率分辨率
大白话解释:FFT 能分辨的最小频率差,核心公式:频率分辨率 = 采样率 / FFT 点数。举例:8.192MHz 采样率 + 16384 点 FFT,分辨率就是 8192000 / 16384 = 500Hz。
4. 栅栏效应
大白话解释:FFT 只能看到整数倍分辨率的频率点,就像隔着栅栏看风景,只能看到缝隙里的部分。如果信号频率刚好不在频点上,能量会分散到相邻频点,峰值位置有偏差。
5. 频谱泄漏
大白话解释:如果采样的信号不是整周期的,FFT 后信号能量会扩散到旁边的频点上,主峰值变矮、两侧出现杂峰,就像水洒出来一样。解决方法:FFT 前给信号乘窗函数(比如汉宁窗),可以大幅减小频谱泄漏,代价是频率分辨率略有下降。
6. 主瓣 / 旁瓣
大白话解释:
- 主瓣:频谱里峰值最高的主峰,对应信号的真实频率;
- 旁瓣:主瓣两边的小凸起,是窗函数带来的固有特性。 窗函数的旁瓣越低,滤波越干净,但主瓣会越宽,频率分辨率会下降。
7. 蝶形运算
大白话解释:FFT 的基本运算单元,因为结构长得像蝴蝶的翅膀得名。每一级 FFT 都由大量蝶形运算单元组成。
8. 基 2 FFT
大白话解释:FFT 点数是 2 的整数次幂(比如 1024、2048、16384),算法最简单、硬件实现最方便,电赛基本都使用基 2 FFT。
9. 位序倒置(比特反转)
大白话解释:基 2 FFT 的输入或输出地址是乱序的,需要把二进制位反过来排序,才能得到正确顺序的频谱结果。
10. 整周期采样
大白话解释:采样时长刚好是信号周期的整数倍,这时候做 FFT 几乎没有频谱泄漏,主峰值最准、识别精度最高。
四、DDS 与锁相环进阶:波形生成与相位同步
这部分对应三种方案的波形生成和锁相重构模块,是输出端的核心技术。
1. DDS(直接数字频率合成)
大白话解释:用「相位累加器 + 波形 ROM」生成任意频率波形的技术,频率切换快、精度高,是 FPGA 生成波形的主流方案。对应代码:三个方案里的波形生成模块,全部采用 DDS 架构。
2. 相位累加器
大白话解释:DDS 的核心计数器,每个时钟周期加上一个固定值,数值代表当前的相位角度。位宽越宽,频率精度越高。
3. 频率控制字
大白话解释:每个时钟周期加到相位累加器上的数值,数值越大,相位走得越快,输出频率越高。核心公式:输出频率 = 频率控制字 × 系统时钟 / 2^N(N 是相位累加器位宽)。
4. 相位截断杂散
大白话解释:DDS 只取相位累加器的高位去查波形 ROM,低位被丢弃,导致输出信号产生杂波,是 DDS 杂散的最主要来源。
5. 幅度量化杂散
大白话解释:波形 ROM 里的幅值是量化后的整数,不是连续的真实值,由此带来的失真和杂散。ROM 位宽越高,杂散越小。
6. 数字锁相环(DPLL)
大白话解释:一个负反馈控制系统,让本地生成的信号和输入信号保持同频、相位差恒定,最终示波器显示的波形稳定不漂移。对应代码:方案二里的PllOneOrder模块就是典型的一阶数字锁相环。
7. 鉴相器
大白话解释:锁相环的第一级,检测输入信号和本地信号的相位差,输出对应的误差信号。代码中常用乘法器实现。
8. 环路滤波器
大白话解释:锁相环的第二级,把误差信号里的高频杂波滤掉,输出平滑的控制信号,决定了锁相的速度和稳定性。
9. 环路带宽
大白话解释:锁相环能够跟上的频率变化范围。带宽大锁相速度快,但抗干扰能力差;带宽小抗干扰强,但锁相速度慢。
10. 稳态相位误差
大白话解释:锁相环进入锁定状态后,输入和输出信号之间固定的相位差值,不是 0,而是一个恒定值。
11. 捕获时间
大白话解释:从上电开始,到锁相环进入稳定锁定状态所需要的时间。
五、FPGA 硬件与时序基础:代码背后的真实硬件
搞懂这些,才知道写的 Verilog 代码最终变成了什么,出了硬件问题也能快速定位。
1. LUT(查找表)
大白话解释:FPGA 实现组合逻辑的最小单元,本质是一小块 SRAM 存储真值表,输入地址直接输出结果。
2. 触发器(FF / 寄存器)
大白话解释:存储 1 位数据的基本单元,按时钟节拍更新数据,是所有时序逻辑的基础。
3. BRAM(块存储器)
大白话解释:FPGA 里集成的专用高速内存块,专门用来存储大量数据。对应代码:FIR 的延迟线、DDS 的波形 ROM、延迟补偿的环形缓冲区,最终都会综合成 BRAM 资源。
4. DSP Slice(DSP 单元)
大白话解释:FPGA 里专门做乘法、加法的硬核电路,比用 LUT 搭建的乘法器快得多、节省逻辑资源。对应代码:FIR 滤波、FFT 运算、功率计算里的所有乘法操作,最终都会映射到 DSP 单元上。
5. 建立时间(Setup Time)
大白话解释:时钟有效沿到来之前,数据必须保持稳定的最短时间。不满足的话,触发器采到的数据可能出错。
6. 保持时间(Hold Time)
大白话解释:时钟有效沿到来之后,数据必须保持稳定的最短时间。不满足同样会导致采样错误。
7. 时序裕量(Slack)
大白话解释:时间还剩余多少,正值代表满足时序要求,负值代表时序违例,电路可能无法稳定工作。
8. 时序收敛
大白话解释:布局布线完成后,所有逻辑路径都满足建立时间和保持时间要求,设计能够在指定时钟下稳定运行。
9. 时钟抖动(Jitter)
大白话解释:时钟沿不是完美准时的,会有微小的左右偏移,会影响 ADC 采样精度和系统时序。
10. 时钟偏斜(Skew)
大白话解释:同一个时钟信号,到达不同触发器的时间不一样,有先后差值。全局时钟网络就是用来减小时钟偏斜的。
11. 关键路径
大白话解释:整个设计中延迟最长的那条逻辑路径,它决定了电路最高能跑多快的时钟频率。
12. 流水线
大白话解释:把一个大运算拆成多拍时钟完成,每拍只做一小部分,以此提升最高运行频率,代价是增加运算延迟。
13. IP 核
大白话解释:官方或第三方做好的、经过验证的功能模块,相当于现成的积木,直接调用即可,不用从零开始编写。举例:FFT IP 核、FIR 编译器 IP 核、乘法器 IP 核,都是电赛常用的官方 IP。
14. ILA(在线逻辑分析仪)
大白话解释:Xilinx FPGA 内置的调试工具,能够实时抓取内部信号波形,是电赛现场调 bug 的神器。
六、数字运算与数据格式:运算的底层规则
FPGA 的数字运算和软件不一样,数据格式错了结果全错,这部分是最容易踩坑的地方。
1. 定点数 / 浮点数
大白话解释:
- 浮点数:类似科学计数法,带小数点,范围大、精度高,但运算慢、占用资源多,FPGA 信号处理一般不用;
- 定点数:小数点位置固定,全部按整数运算,最后再换算,速度快、省资源,是 FPGA 信号处理的首选。
2. Q 格式
大白话解释:定点数的标准表示方法,Qm.n 代表 1 位符号位 + m 位整数位 + n 位小数位。举例:Q1.15 就是 16 位位宽,1 位符号 + 15 位小数,能表示 - 1 到接近 + 1 的小数范围。
3. 补码
大白话解释:FPGA 中有符号数的标准表示方式,正数最高位为 0,负数最高位为 1,减法可以转换成加法运算。
4. 符号扩展
大白话解释:把短位宽的有符号数扩展成长位宽时,高位全部补充符号位,保证数值大小不变。
5. 截位(Truncation)
大白话解释:运算后位宽变宽,直接丢掉低位,相当于向下取整。实现简单、省资源,但有固定的偏差误差。
6. 舍入(Rounding)
大白话解释:类似四舍五入,平均误差比截位小,但逻辑稍微复杂一点。
7. 饱和运算
大白话解释:运算结果超出位宽范围时,把值钳位在最大值 / 最小值,而不是直接截断高位。对应代码:方案一加法器里的溢出判断逻辑,就是典型的饱和截断处理。
8. 量化误差
大白话解释:用有限位数表示真实数值带来的误差,位数越多,误差越小。
9. 字长效应
大白话解释:因为位宽有限,运算过程中误差不断累积,最终影响结果精度。设计时要选择合适的位宽,不是越大越好。
学习小建议
- 不用死记硬背,碰到不懂的名词回来查即可,结合代码和实际场景理解最快;
- 电赛核心优先级:FIR 滤波器 → DDS → FFT → 锁相环,吃透这四个模块,大部分信号类题目都能快速上手;
- 先仿真再上板,MATLAB 先验证算法正确性,再移植到 FPGA,比盲目调硬件效率高得多。
配套习题(电赛 H 题场景)
全部题目围绕 2023 电赛 H 题三种方案设计,学完名词可以直接检验掌握程度。
一、单项选择题(共 15 题)
下列关于 FIR 滤波器的说法,错误的是? A. 可以实现严格线性相位 B. 系统一定是稳定的 C. 相同阶数下比 IIR 阻带衰减更大 D. 可以用分时复用架构减少资源答案:C解析:相同阶数下 IIR 的选频特性更好、阻带衰减更大;FIR 需要更高阶数才能达到相同的滤波效果。
8.192MHz 采样率、2048 点 FFT,频率分辨率约为? A. 500Hz B. 4kHz C. 1kHz D. 2kHz答案:B解析:分辨率 = 采样率 / FFT 点数 = 8192000 / 2048 = 4000Hz = 4kHz。
DDS 相位累加器位宽增加,会直接带来什么好处? A. 输出幅值精度提高 B. 频率分辨率提高 C. 谐波失真减小 D. 最高输出频率提高答案:B解析:DDS 频率分辨率 = 系统时钟 / 2^N,N 是相位累加器位宽,位宽越大分辨率越高。
下列哪种窗函数的阻带衰减最大? A. 矩形窗 B. 汉宁窗 C. 汉明窗 D. 布莱克曼窗答案:D解析:布莱克曼窗阻带衰减约 74dB,汉明窗 53dB,汉宁窗 44dB,矩形窗 21dB。
频谱泄漏产生的主要原因是? A. 采样率太低 B. FFT 点数太少 C. 非整周期采样 D. 信号幅值太小答案:C解析:非整周期采样时,信号截断导致能量扩散,产生频谱泄漏;加窗可以缓解但不能完全消除。
数字锁相环中,环路滤波器的主要作用是? A. 检测相位差 B. 滤除误差信号的高频分量 C. 生成输出频率 D. 扩大频率范围答案:B解析:环路滤波器是低通特性,滤除鉴相输出的高频和频分量,得到平滑的直流误差信号。
FPGA 中,FIR 滤波器的乘法运算优先使用哪种资源实现? A. LUT B. 触发器 C. DSP Slice D. BRAM答案:C解析:DSP Slice 是专用乘加单元,专门为滤波、FFT 等信号处理运算优化,速度快、节省逻辑资源。
下列关于饱和运算的描述,正确的是? A. 运算速度比直接截位快 B. 溢出时会出现严重的 wrap-around 失真 C. 溢出时将值钳位在最大 / 最小值 D. 会减小信号幅值答案:C解析:饱和运算的核心就是溢出时钳位,避免严重的波形畸变,是信号处理的标准操作。
异步 FIFO 使用格雷码指针的主要目的是? A. 提高读写速度 B. 减少 BRAM 占用 C. 避免跨时钟域的亚稳态问题 D. 简化空满判断逻辑答案:C解析:格雷码每次只有 1 位跳变,跨时钟域采样时不容易出错,配合两级同步器大幅降低亚稳态风险。
线性相位 FIR 滤波器的系数需要满足什么条件? A. 全部为正数 B. 左右对称 C. 全部为整数 D. 中间大两边小答案:B解析:系数偶对称是 FIR 实现严格线性相位的充要条件,MATLAB 生成的窗函数法 FIR 天然满足。
奈奎斯特采样定理要求采样率至少是信号最高频率的多少倍? A. 1 倍 B. 2 倍 C. 5 倍 D. 10 倍答案:B解析:采样率必须大于信号最高频率的 2 倍,才能无失真还原信号,否则会产生混叠。
下列哪个不是 DDS 的杂散来源? A. 相位截断误差 B. 幅度量化误差 C. 时钟抖动 D. 相位累加器位宽太大答案:D解析:相位累加器位宽越大,相位截断误差越小,杂散越小,是提升 DDS 性能的手段。
时序分析中,关键路径决定了什么? A. 电路最高工作频率 B. 资源占用多少 C. 功耗大小 D. 逻辑功能正确性答案:A解析:关键路径是延迟最长的路径,它的延迟决定了时钟周期的最小值,也就决定了电路的最高工作频率。
Q1.15 格式的 16 位有符号数,能表示的最大正数约为? A. 1 B. 接近 1 C. 32767 D. 15答案:B解析:Q1.15 有 1 位符号、15 位小数,最大正数是 0.111...111,等于 1 - 1/32768,无限接近 1。
三角波的频谱特点是? A. 只有基波,没有谐波 B. 包含所有整数次谐波 C. 只包含奇次谐波 D. 只包含偶次谐波答案:C解析:三角波是奇对称信号,傅里叶展开只有奇次谐波,谐波幅度和次数的平方成反比。
二、判断题(共 10 题)
FIR 滤波器的阶数越高,过渡带越窄,阻带衰减也越大。( )答案:×解析:阶数越高过渡带越窄,但阻带衰减由窗函数类型决定,和阶数无关。
数字锁相环锁定后,输出信号和输入信号相位差为 0。( )答案:×解析:锁定后相位差恒定,但存在稳态相位误差,不一定为 0。
加窗可以完全消除频谱泄漏。( )答案:×解析:加窗只能减小频谱泄漏,不能完全消除。
FPGA 中 BRAM 既可以当 RAM 用,也可以配置成 ROM 用。( )答案:√解析:BRAM 可以初始化数据,上电后只读,作为 ROM 使用,比如存储 DDS 的波形表。
建立时间违例时,可以通过降低时钟频率来解决。( )答案:√解析:降低时钟频率,时钟周期变长,建立时间裕量会变大,能缓解建立时间违例。
实信号 FFT 的频谱前后两半是完全独立的。( )答案:×解析:实信号 FFT 具有共轭对称性,后半部分是前半部分的镜像,有效信息只在前半段。
CIC 滤波器不需要乘法器,适合大倍率抽取。( )答案:√解析:CIC 只有加法器和寄存器,没有乘法器,硬件资源极少,是高倍率降采样的首选方案。
定点数运算中,截位的误差比舍入更小。( )答案:×解析:舍入的平均误差更小,截位总是往小的方向取,偏差更大。
异步 FIFO 读写时钟频率相同就不会有亚稳态。( )答案:×解析:只要是不同时钟域,哪怕频率相同,相位不同也可能产生亚稳态。
半带滤波器一半系数为 0,运算量是普通 FIR 的一半。( )答案:√解析:半带滤波器系数对称且奇数点为 0,计算量减半,常用在 2 倍抽取插值场景。
三、综合解答题(共 3 题)
1. 结合电赛 H 题,说明为什么方案一 FIR 滤波不适合发挥部分的多频率自适应要求?
解答: FIR 滤波器的系数是和截止频率强绑定的,一套系数只能对应一组通带、阻带参数。
- 题目发挥部分要求支持 20kHz~100kHz 多频率步进分离,如果用 FIR 方案,每一组频率都要重新设计系数、重新编译比特流,无法现场动态切换;
- 而方案二 FFT + 重构方案,只需要修改频率查表,就能支持不同频率,自适应能力强,更适合发挥部分的要求。
2. 解释什么是栅栏效应?针对方案二的 FFT 识别模块,提出两种减小栅栏效应影响的方法。
解答: 栅栏效应:FFT 只能分辨整数倍分辨率的频率点,就像隔着栅栏看景物,只能看到缝隙里的部分;如果信号频率不在采样频点上,能量会分散到相邻频点,峰值位置产生偏差。
减小影响的方法:
- 增加 FFT 点数:点数越多,频率分辨率越高,栅栏效应越弱;比如从 8192 点增加到 16384 点,分辨率提高一倍;
- 频谱插值校正:根据峰值和相邻两个频点的幅值,用插值算法估算真实频率位置,提升识别精度;
- 降低采样率:相同点数下,采样率越低,频率分辨率越高,栅栏效应越弱。
3. 方案二锁相环输出的信号,为什么要加延迟补偿模块?延迟补偿为什么用 BRAM 而不是移位寄存器?
解答:为什么要加延迟补偿: FFT 运算、FIR 滤波、DDS 流水线都会引入固定的时钟延迟,导致输出波形比输入信号滞后,示波器观测时两路信号有明显相位差,影响 “稳定同相显示” 的测试效果;延迟补偿可以抵消系统固有延迟,让输入输出相位对齐。
为什么用 BRAM 不用移位寄存器:
- 大延迟下更省资源:需要延迟几千个时钟周期时,用移位寄存器会消耗大量触发器资源;而 BRAM 是整块存储单元,只需要控制读写指针,资源占用极少;
- 延迟值灵活可调:BRAM 环形缓冲可以通过修改读地址偏移,灵活调整延迟值,适配不同频率下的相位补偿需求;移位寄存器延迟固定,修改不方便。
