含噪正弦信号生成与低通滤波去噪仿真系统
项目介绍
本项目是一个基于 MATLAB 开发的数字信号处理演示系统。其主要功能是模拟真实环境下的信号干扰与恢复过程。系统首先生成标准的正弦波信号,按指定的信噪比(SNR)添加高斯白噪声(AWGN),然后通过设计并应用数字低通滤波器滤除噪声,最终通过时域和频域的对比图表,直观展示信号处理算法的去噪效果。
主要功能特性
- 参数化信号生成:支持自定义采样率、信号频率、振幅、持续时间等基础参数。
- 高斯白噪声模拟:能够根据设定的信噪比(SNR)自动计算噪声功率,生成相应的加性高斯白噪声。
- 数字滤波器设计:内置巴特沃斯(Butterworth)低通滤波器设计算法,可调节截止频率和滤波器阶数。
- 零相移滤波处理:采用
filtfilt 算法进行双向滤波,在去噪的同时避免了相位延迟,保证了波形在时间轴上的严格对齐。 - 全方位可视化分析:
*
时域分析:对比展示原始信号、含噪信号及滤波恢复后的信号波形。
*
频域分析:通过快速傅里叶变换(FFT)计算并绘制单边幅值谱,清晰展示噪声分布及滤波器的频域截止效果。
*
滤波器响应:独立绘制滤波器的幅频响应曲线,验证设计指标。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(信号处理工具箱)
* 代码中使用了
butter(滤波器系数设计)、
filtfilt(零相移滤波)和
freqz(频率响应分析)等工具箱函数。
使用方法
- 确保 MATLAB 环境已按要求配置。
- 打开 MATLAB,将工作路径切换到项目所在目录。
- 在命令行窗口直接运行主函数。
- 程序运行结束后,将自动在命令行输出“仿真完成”提示,并弹出三个图形窗口展示仿真结果。
---
核心算法与实现逻辑详解
本项目的所有逻辑均包含在一个主流程中,具体实现细节如下:
1. 信号与噪声建模
- 原始信号:基于设定的采样频率(2000 Hz)和时长(1.0 秒),生成频率为 50 Hz、振幅为 2.0 的标准正弦波。
- 信噪比换算与噪声生成:
* 首先计算原始正弦信号的理论功率 $P_{signal} = A^2 / 2$。
* 根据给定的信噪比 $SNR = 5dB$,反向推算所需的噪声功率 $P_{noise} = P_{signal} / 10^{(SNR/10)}$。
* 利用
randn 函数生成标准正态分布随机数,并乘以 $sqrt{P_{noise}}$ 进行幅度缩放,从而获得符合指定信噪比的高斯白噪声。
* 最终通过叠加原始信号与噪声,构建出模拟的含噪混合信号。
2. 滤波器设计与应用
- 参数归一化:将设定的截止频率(150 Hz)除以奈奎斯特频率(采样率的一半),转换为 MATLAB 滤波器设计所需的归一化频率参数。
- 巴特沃斯滤波器:调用
butter 函数设计一个 4 阶低通滤波器,获取传递函数系数 b (分子) 和 a (分母)。 - 零相移滤波:代码优先尝试使用
filtfilt 函数。该函数通过正向和反向两次滤波,不仅使幅频响应翻倍(衰减更强),更重要的是完全消除了相位非线性引起的延迟,使得滤波后的正弦波峰值与原始信号在时间上完美重合。代码包含了兼容性检查,若未检测到工具箱则回退使用 filter 函数。
3. 频谱分析 (FFT)
- 为了准确分析频率特性,代码内部封装了一个
fft_wrapper 辅助逻辑:
* 执行标准 FFT 变换。
* 计算双边频谱并取模,除以采样点数 N 进行归一化。
* 截取前一半数据转换为单边频谱,并将除直流分量外的幅度乘以 2,以还原真实的物理幅值。
4. 结果可视化方案
结果通过三个独立的图形窗口进行展示:
* 窗口包含三个子图,分别显示“原始信号”、“含噪信号”和“滤波后信号”。
*
细节优化:含噪信号图和滤波信号图中均叠加了原始信号的虚线轮廓,便于直观评估噪声强度和还原程度。同时,X 轴被限制在 $[0, 0.2]$ 秒范围内,以放大观察局部波形细节。
* 窗口包含两个子图,对比滤波前后的频谱变化。
*
滤波前:展示含噪信号频谱,可见在整个频带上分布着噪声底噪,但在 50 Hz 处有明显的主信号峰值。
*
滤波后:展示滤波处理后的频谱,并绘制了一条绿色的截止频率指示线(150 Hz)。可以明显观察到截止频率尤其是高频部分的噪声被大幅抑制。
* 利用
freqz 函数计算并绘制所设计滤波器的幅频响应曲线(Bode图幅度部分)。
* 图中标记了截止频率位置,验证了滤波器在通带内的平坦特性和阻带内的衰减特性。