基于DFT及插值算法的瞬时测频系统建模与仿真
项目介绍
本仿真项目旨在解决数字信号处理中,由于离散傅里叶变换(DFT)的“栅栏效应”和频谱泄露导致的频率测量精度受限问题。通过结合滑动窗口DFT处理与Rife频谱插值算法,系统能够从含噪信号中提取高精度的瞬时频率轨迹。该方案不仅适用于稳态正弦信号的频率解析,也能有效追踪调频信号的频率变化趋势,将频率估计精度从传统的离散频率点(Bin)提升至亚基元级别。
功能特性
- 复合信号源构建:支持生成包含稳态阶段和非线性调频阶段的复杂信号,利用相位积分法确保频率变化的连续性。
- 高精度插值校正:集成Rife算法,通过主谱线与其相邻谱线的能量比值计算偏移量,显著降低栅栏效应带来的测量误差。
- 时变频率追踪:采用滑动窗口技术(Sliding Window),实现对信号瞬时频率的动态提取。
- 抗噪声干扰能力:系统内置高斯白噪声添加模块,验证在不同信噪比环境下的算法鲁棒性。
- 多维度结果评估:自动生成时域波形、频谱特征、频率追踪曲线以及对数级误差对比表,全方位评估测频精度。
运行环境
- MATLAB R2016b 或更高版本
- 无需额外工具箱支持(主要基于基础数学和信号处理函数)
系统实现逻辑
系统按照以下五个阶段顺序执行:
- 参数初始化:设定采样频率为2000Hz,总时长2秒。设定信噪比为25dB。窗口长度定为512点,FFT点数为1024点(通过补零提高初始辅助分辨率)。
- 信号合成:构建一个初始频率为150.5Hz(非整数频率,用以触发栅栏效应)的信号。前1秒为稳态正弦波,后1秒转为正弦调频信号。使用
cumtrapz 函数对瞬时频率进行数值积分,从而生成精确的信号相位。 - 滑动窗口处理:
- 利用Hamming窗对待处理片段进行加窗,以抑制频谱泄露。
- 通过滑动步长(Hop Size)移动窗口。
- 对每一帧执行FFT运算。
- 频率估计算法:
-
粗测阶段:识别FFT幅度谱中的最大值索引,计算基础频率。
-
精测阶段(Rife算法):比较最大谱线两侧相邻谱线的幅值,确定偏移方向。根据幅值比值关系计算偏移量 $delta$,对原始频率索引进行线性修正。
- 数据可视化与误差统计:提取每一帧中心点对应的真实频率值,计算FFT粗测和插值精测的绝对误差。
关键算法说明
Rife插值算法实现
在获取FFT最大模值位置 $k$ 后,系统判断 $k+1$ 与 $k-1$ 处的幅值大小。
- 若 $mag(k+1) > mag(k-1)$,说明真实频率偏向高频侧,利用 $r = mag(k+1)/mag(k)$ 计算偏移。
- 若 $mag(k-1) > mag(k+1)$,说明真实频率偏向低频侧,利用 $r = mag(k-1)/mag(k)$ 计算反向偏移。
修正后的频率公式为:$f = (k + delta - 1) times (F_s / N_{fft})$。这种方法能以极小的计算量换取精度数量级的提升。
仿真结果展示
系统运行后将输出四个主要视图:
- 时域波形图:展示局部纯净信号与含噪信号的覆盖情况。
- 单帧功率谱图:展示DFT输出的频谱分布及主瓣特征。
- 频率追踪轨迹图:同步绘制真实频率轨迹、FFT粗测阶梯线以及插值后的平滑精确曲线。
- 误差对比曲线:以Log量级展示插值算法相比于传统FFT在精度上的显著优势。
控制台将同步输出平均绝对误差(MAE)以及精度提升倍数,作为算法效能的定量评估依据。
使用方法
- 启动MATLAB软件。
- 将相关脚本文件置于当前工作目录。
- 在命令行窗口输入函数名称并回车。
- 观察弹出的可视化图形窗口以及控制台输出的误差比对数据。