基于MATLAB的有色噪声生成与分析系统
项目介绍
本项目是一个用于生成、分析及可视化多种物理特性噪声的MATLAB系统。通过对白噪声进行频域整形,系统能够精确模拟出功率谱密度(PSD)遵循特定幂律分布的五种典型噪声:白噪声、粉红噪声、红噪声(布朗噪声)、蓝噪声及紫噪声。该系统不仅提供了信号生成的算法,还内置了基于分段平均周期的功率谱估计算法,用于验证生成的噪声是否符合预期的频谱斜率。
功能特性
- 多类型噪声生成:支持生成从低频增强型(红、粉)到高频增强型(蓝、紫)的完整颜色序列噪声。
- 频域整形算法:利用快速傅里叶变换(FFT)与逆变换(IFFT)技术,通过振幅加权实现精准的频谱控制。
- 自定义频谱分析:内置手动实现的Welch功率谱密度估计方法,无需依赖额外信号处理工具箱。
- 波形对比验证:提供时域信号对比与双对数坐标系(Log-Log)下的功率谱对比视图。
- 自动化结果保存:生成的信号及其采样参数自动导出为标准数据格式。
系统实现逻辑分析
#### 1. 参数初始化
系统默认设置采样频率为 44.1 kHz,生成时长为 2 秒。首先生成一个基于标准正态分布(randn)的白噪声时间序列作为原始种子信号。
#### 2. 频域整形生成算法
系统并未采用时域滤波器(如IIR/FIR),而是采用了更为直接的频域加权法(Frequency Domain Shaping):
-
粉红噪声:振幅按 1/sqrt(f) 比例衰减,实现功率谱 1/f 特性。
-
红噪声:振幅按 1/f 比例衰减,实现功率谱 1/f^2 特性。
-
蓝噪声:振幅按 sqrt(f) 比例增加,实现功率谱 f 特性。
-
紫噪声:振幅按 f 比例增加,实现功率谱 f^2 特性。
- 对称重构:为了确保在逆变换(IFFT)后得到的是实数信号,系统通过逻辑判断区分了样本总数的奇偶性,并构造了共轭对称的频谱结构。
- 信号归一化:统一将所有类型噪声的幅值缩放到 [-1, 1] 区间。
#### 3. 功率谱密度(PSD)估计逻辑
系统实现了一个精简版的 Welch 估计算法:
- 分段与加窗:将长信号切分为 4096 样本的短段,并手动应用汉宁窗(Hanning Window)以减少频谱泄漏。
- 重叠处理:采用 50% 的分段重叠以提高方差性能。
- 能量补偿:通过计算窗口函数的范数进行能量归一化,并对单边频谱进行 2 倍增益补偿,确保功率守恒。
关键函数说明
核心算法在子函数中实现,它接收白噪声的 FFT 序列及预设的频率权重向量。通过在正负频率区间正确映射权重,确保信号在合成后具备物理一致性。
该函数通过分段平均法计算功率,能够平滑随机噪声振幅波动,从而清晰地观察到不同噪声在双对数坐标下的斜率特征(如红噪声每倍频程衰减 6dB,粉红噪声每倍频程衰减 3dB)。
为了实现系统的自包含性,直接通过余弦公式构建窗口向量,消除了对特定工具箱的依赖。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:标准桌面或笔记本电脑,内存 4GB 以上。
- 依赖说明:系统采用纯脚本编写,不依赖于 Signal Processing Toolbox。
使用方法
- 启动程序:在 MATLAB 命令行窗口运行该脚本。
- 观察输出:
-
图形窗口:上方视图对比粉红噪声与白噪声的时域细节;下方视图以 Log-Log 坐标展示五种噪声的 PSD 曲线。
-
命令行:显示计算进度及保存确认消息。
- 获取数据:计算结束后,当前目录下会生成一个数据文件,包含所有噪声类型的原始序列及采样率信息,可直接用于后续科研分析或仿真。
数据说明
导出的数据结构体包含以下字段:
- White/Pink/Red/Blue/Violet:各类型噪声的归一化幅值数组。
- Fs:采样频率。