自定义参数白噪声与有色噪声生成及分析系统
项目简介
本项目是一个基于 MATLAB 开发的通用噪声信号处理系统。旨在生成标准的高斯白噪声以及四种具有特定频谱衰减特性的有色噪声(粉红噪声、红噪声/布朗噪声、蓝噪声、紫噪声)。系统不仅能够生成模拟信号,还内置了完整的分析与验证模块,通过时域统计、概率密度分析以及频域功率谱密度(PSD)斜率拟合,确保生成的噪声符合 $1/f^alpha$ 的理论特性。
功能特性
- 多类型噪声支持:支持生成 White(白噪声)、Pink(粉红噪声)、Red(红/布朗噪声)、Blue(蓝噪声)和 Violet(紫噪声)。
- 参数完全可控:用户可自定义采样频率 (Fs)、信号时长 (Duration) 和目标功率 (Target Power)。
- 频域整形算法:采用 FFT-IFFT 频域滤波技术,通过直接控制频谱幅度来实现精确的频谱斜率。
- 自动功率归一化:生成算法包含后处理步骤,强制将信号的均值调整为 0,并将方差(功率)调整为用户设定的目标值。
- 全方位可视化分析:
*
时域波形图:观察信号局部细节。
*
概率分布验证:对比实际信号直方图与理论高斯分布曲线。
*
PSD 功率谱:基于 Welch 法的频谱估计。
*
斜率拟合验证:在双对数坐标下进行线性回归,自动计算并标注实测的频谱衰减斜率(dB/dec)和对应的 $alpha$ 值。
系统要求
- MATLAB R2016b 或更高版本。
- Signal Processing Toolbox(用于
pwelch 函数进行功率谱估计)。
使用方法
- 打开 MATLAB,定位到项目根目录。
- 直接运行主函数。
- 程序将依次生成配置列表中的 5 种噪声,并弹出 5 个独立的图形窗口展示分析结果。
- MATLAB 命令行窗口(Command Window)将输出每种噪声的理论 $alpha$ 值、实测 $alpha$ 值以及功率验证数据。
如需修改生成参数(如采样率、时长或功率),请直接在代码顶部的参数配置模块中修改 sys_params 结构体的数值。
---
核心算法与实现逻辑
本项目代码包含一个主流程控制和两个核心功能函数,其具体实现逻辑如下:
1. 参数配置与主控流程
主程序首先进行环境清理,随后定义系统的全局参数。默认配置为:采样率 48kHz,时长 10秒,目标功率 1.0 Watt。待处理的噪声类型列表被硬编码为 {'White', 'Pink', 'Red', 'Blue', 'Violet'}。程序通过循环遍历该列表,依次调用生成函数和分析函数。
2. 有色噪声生成器 (Core Algorithm)
代码通过 generate_noise_signal 函数实现了基于频域合成(Spectral Synthesis)的噪声生成算法。该部分并未采用 AR 或 IIR 滤波器,而是使用了精度更高的 FFT-IFFT 方法。
- 理论映射:根据输入的噪声名称,确定功率谱密度(PSD)与频率 $f$ 的关系指数 $alpha$(即 PSD $propto 1/f^alpha$)。
* White: $alpha = 0$
* Pink: $alpha = 1$
* Red: $alpha = 2$
* Blue: $alpha = -1$
* Violet: $alpha = -2$
- 初始源生成:利用
randn 生成标准高斯白噪声序列。代码中设定了特定的随机种子(42 + type_index),确保结果具有可重复性。 - 频域变换:对白噪声进行快速傅里叶变换(FFT),获取频域系数。
- 频谱整形滤波器:构建幅度缩放因子。由于 PSD 是幅度的平方,为了实现 $1/f^alpha$ 的功率谱衰减,幅度谱需要乘以 $f^{-alpha/2}$。
*
特殊处理:对直流分量(DC, n=1)进行保护处理。如果 $alpha > 0$(低频能量极大),强制将 DC 置零以保持稳定;否则保持为 1。
*
共轭对称性:为了确保通过逆变换(IFFT)回到时域后的信号是实数信号,算法在应用滤波器后,强制将频谱的负频率部分构造为正频率部分的共轭镜像。
- 时域重构与归一化:执行 IFFT 得到时域信号,取其实部。随后减去均值(去直流),并根据当前方差与目标功率的比值进行幅度缩放,确保输出信号精确符合设定的
TargetPower。
3. 信号分析与验证可视化
代码通过 analyze_and_visualize 函数对生成结果进行多维度的校验:
- 时域观察:截取前 5000 个采样点绘制波形,直观展示信号的快慢变化特征(例如红噪声比白噪声更平滑)。同时在图中计算并显示实际均值和方差。
- 幅度分布验证:绘制 100 bins 的归一化直方图(PDF),并叠加理论的标准高斯分布曲线(黑色虚线)。此步骤用于证明即使经过频域整形,生成信号的幅度分布依然服从高斯分布。
- PSD 估计:使用 Welch 方法 (
pwelch) 计算功率谱密度,窗口长度设为 8192 点,采用 Hanning 窗。这比普通的周期图法更平滑、方差更小。 - 双对数坐标拟合(Log-Log Fit):这是验证噪声颜色的核心步骤。
*
拟合范围:自动选取 20Hz 到 Fs/4 之间的频段进行线性回归,避开直流端的不稳定和奈奎斯特频率处的混叠效应。
*
斜率计算:在对数频率和对数功率(dB)之间拟合直线。
*
数学关系:理论斜率(dB/dec)应为 $-10 times alpha$。例如粉红噪声 ($alpha=1$) 应呈现 -10 dB/decade 的斜率。
*
结果展示:图表中会直接标注理论斜率、实测斜率以及反推得到的实测 $alpha$ 值,并在控制台输出对比表格,以此量化验证生成的准确性。