基于MATLAB的白噪声信号生成与频谱分析系统
项目介绍
本项目是一个基于MATLAB开发的综合仿真工具,旨在演示和验证随机信号处理中的基本概念。系统能够生成两种典型的白噪声信号——高斯白噪声(Gaussian White Noise)和均匀分布白噪声(Uniform White Noise),并对其进行全方位的特性分析。通过集成时域波形观察、统计直方图验证以及频域功率谱密度(PSD)分析,本项目能够直观地展示白噪声"时域随机、频域平坦"的核心属性,适用于通信信道建模、噪声分析及教学演示。
功能特性
- 多分布噪声生成
* 支持生成符合指定均值和方差(噪声功率)的高斯分布白噪声。
* 支持生成符合指定均值和方差的均匀分布白噪声,自动反推均匀分布的区间范围。
* 支持自定义采样频率(Fs)和信号持续时长(T)。
- 时域波形可视化
* 绘制噪声信号的时间序列波形。
* 为保证绘图清晰度,自动截取信号的前段部分(前1000个采样点或0.1秒)进行局部展示,直观呈现信号的随机起伏。
- 统计特性验证 (PDF)
* 计算并输出信号实际的均值、方差,与理论设定值进行误差对比。
* 绘制信号幅度的归一化统计直方图。
* 叠加理论概率密度函数(PDF)曲线(高斯钟形曲线或均匀分布矩形框),验证生成数据的统计分布准确性。
- 频域特性分析 (PSD)
* 利用快速傅里叶变换(FFT)计算信号的单边频谱。
* 采用周期图法(Periodogram)估算功率谱密度(PSD)。
* 以分贝(dB/Hz)为单位绘制频谱图,并计算平均功率水平,验证白噪声在有效频带内的功率谱平坦特性。
系统要求
- 软件环境:MATLAB R2016a 或更高版本(主要为了支持
histogram 函数的新特性,低版本需调整直方图绘制代码)。 - 工具箱:仅需 MATLAB 基础系统(MATLAB Base),无需额外的信号处理工具箱。
使用方法
- 参数配置
* 打开主脚本文件。
* 在代码顶部的“系统参数设置”区域修改以下变量:
*
Fs: 采样频率(例如 10000 Hz)。
*
T: 信号时长(例如 2秒)。
*
Target_Mean: 期望的信号均值(例如 0)。
*
Target_Power: 期望的噪声功率/方差(例如 2)。
- 运行仿真
* 运行脚本。系统将在控制台输出设定的参数摘要以及生成信号的实际统计误差。
- 结果观察
* 系统将弹出两个独立的图形窗口:
*
Figure 1: 高斯白噪声分析报告。
*
Figure 2: 均匀分布白噪声分析报告。
* 每个窗口包含三个子图,分别展示时域波形、概率密度分布和功率谱密度。
---
代码实现原理与逻辑详解
本项目包含一个主入口流程和一个通用的信号分析函数,具体实现逻辑如下:
1. 噪声信号生成逻辑
代码根据用户设定的目标均值($mu$)和目标功率/方差($sigma^2$)来生成随机序列:
利用 MATLAB 内置的
randn 函数生成标准正态分布序列(均值0,方差1),然后通过线性变换映射到目标参数:
$$X = mu + sqrt{sigma^2} times text{randn}(N)$$
均匀分布的方差公式为 $Var = frac{(b-a)^2}{12}$,其中 $W = b-a$ 为分布宽度。为了满足目标功率,代码首先反解出分布宽度:
$$W = sqrt{12 times sigma^2}$$
结合目标均值 $mu$,确定分布的下界 $a$ 和上界 $b$:
$$a = mu - W/2, quad b = mu + W/2$$
最后利用
rand 函数生成指定区间的均匀噪声。
2. 信号分析与可视化逻辑
所有分析功能封装在 analyze_signal 辅助函数中,确保对两种噪声的处理标准一致:
#### A. 统计参数计算
- 利用
mean() 和 var() 计算生成信号的实际统计量。 - 在控制台打印实际值与理论值的对比,用于验证随机数生成器的准确性。
#### B. 时域波形绘制 (Subplot 1)
- 为了避免大数据量导致绘图密集无法辨识,代码设置了
display_limit,仅绘制信号的前1000个点(或全长,取较小者)。 - 图例中动态显示该段信号的实际统计参数。
#### C. 直方图与PDF验证 (Subplot 2)
- 直方图:使用
histogram 函数绘制50个区间的统计直方图,并将 Normalization 设置为 'pdf',使直方图面积归一化为1,便于与理论曲线对比。 - 理论曲线对比:
*
高斯分布:根据目标均值和标准差,利用高斯概率密度公式计算理论曲线并绘制。
*
均匀分布:根据计算出的边界 $a$ 和 $b$,绘制理论上的“门函数”(在区间内概率为 $1/(b-a)$,区间外为0)。
#### D. 功率谱密度分析 (Subplot 3)
- FFT变换:对全长信号进行 FFT 变换。
- 单边谱处理:截取 FFT 结果的前一半(0 到 Nyquist 频率),并对非重合频率分量乘以2以保持能量守恒。
- PSD计算:采用周期图法公式计算功率谱密度:
$$P_{xx} = frac{|FFT(x)|^2}{F_s times N}$$
- 单位转换:将 PSD 转换为 dB/Hz 标度 ($10 log_{10}(P_{xx})$) 进行绘制。
- 平坦度验证:代码计算了 PSD 的平均值并在图中绘制红色虚线。对于白噪声,其理论 PSD 应近似为一条水平直线,通过观察实际谱线围绕平均线的波动情况来验证其“白”噪声特性。