白噪声和色噪声的仿真

2025-12-19

白噪声和色噪声的仿真,包括它们的时域波形、自相关函数和功率谱密度函数。

白噪声与色噪声特性对比

噪声类型 功率谱密度 自相关函数 特点
白噪声 常数 (在所有频率上均匀分布) 狄拉克δ函数 (在τ=0处有峰值,其余为0) 各频率分量功率相等,完全不相关
粉红噪声 与1/f成正比 缓慢衰减的相关性 低频能量较高,自然界常见
布朗噪声 与1/f²成正比 更缓慢衰减的相关性 低频占主导,随机游走过程

MATLAB仿真代码

1. 生成各种噪声信号

clear; close all; clc;

% 参数设置
fs = 1000;          % 采样频率 1000Hz
T = 2;              % 信号时长 2秒
N = fs * T;         % 采样点数
t = (0:N-1)/fs;     % 时间向量
f = (-N/2:N/2-1)*(fs/N); % 频率向量

% 1. 白噪声生成
white_noise = randn(1, N);           % 高斯白噪声
white_noise = white_noise - mean(white_noise); % 去均值

% 2. 粉红噪声生成 (1/f噪声)
pink_noise = pinknoise(N)';          % 使用Audio Toolbox函数
% 如果没有pinknoise函数,可用以下方法生成:
% pink_noise = cumsum(white_noise);   % 近似粉红噪声
% pink_noise = pink_noise - mean(pink_noise);

% 3. 布朗噪声生成 (红噪声,1/f^2)
brown_noise = cumsum(white_noise);   % 随机游走
brown_noise = brown_noise - mean(brown_noise);
brown_noise = brown_noise / std(brown_noise); % 标准化

% 4. 带限白噪声 (色噪声的一种)
fc = 50; % 截止频率 50Hz
[b, a] = butter(4, fc/(fs/2));       % 4阶巴特沃斯低通滤波器
bandlimited_noise = filter(b, a, white_noise);

2. 计算自相关函数

% 计算自相关函数
max_lag = 500; % 最大滞后点数

% 白噪声自相关
[R_white, lags_white] = xcorr(white_noise, max_lag, 'coeff');
lags_time_white = lags_white / fs; % 转换为时间滞后

% 粉红噪声自相关  
[R_pink, lags_pink] = xcorr(pink_noise, max_lag, 'coeff');
lags_time_pink = lags_pink / fs;

% 布朗噪声自相关
[R_brown, lags_brown] = xcorr(brown_noise, max_lag, 'coeff'); 
lags_time_brown = lags_brown / fs;

% 带限白噪声自相关
[R_band, lags_band] = xcorr(bandlimited_noise, max_lag, 'coeff');
lags_time_band = lags_band / fs;

3. 计算功率谱密度

% 计算功率谱密度 (使用Welch方法)
nfft = 1024;
window = hamming(nfft);
noverlap = nfft/2;

[Pxx_white, f_white] = pwelch(white_noise, window, noverlap, nfft, fs);
[Pxx_pink, f_pink] = pwelch(pink_noise, window, noverlap, nfft, fs);
[Pxx_brown, f_brown] = pwelch(brown_noise, window, noverlap, nfft, fs);
[Pxx_band, f_band] = pwelch(bandlimited_noise, window, noverlap, nfft, fs);

% 转换为dB尺度
Pxx_white_db = 10*log10(Pxx_white);
Pxx_pink_db = 10*log10(Pxx_pink); 
Pxx_brown_db = 10*log10(Pxx_brown);
Pxx_band_db = 10*log10(Pxx_band);

4. 绘制结果图形

% 创建综合图形
figure('Position', [100, 100, 1400, 1000]);

% 1. 时域波形 (前0.5秒)
subplot(3, 4, 1);
plot(t(1:500), white_noise(1:500));
title('白噪声时域波形');
xlabel('时间 (s)'); ylabel('幅度');
grid on;

subplot(3, 4, 2);
plot(t(1:500), pink_noise(1:500));
title('粉红噪声时域波形');
xlabel('时间 (s)'); ylabel('幅度');
grid on;

subplot(3, 4, 3);
plot(t(1:500), brown_noise(1:500));
title('布朗噪声时域波形');
xlabel('时间 (s)'); ylabel('幅度');
grid on;

subplot(3, 4, 4);
plot(t(1:500), bandlimited_noise(1:500));
title('带限白噪声时域波形');
xlabel('时间 (s)'); ylabel('幅度');
grid on;

% 2. 自相关函数
subplot(3, 4, 5);
plot(lags_time_white, R_white);
title('白噪声自相关函数');
xlabel('时间滞后 \tau (s)'); ylabel('R(\tau)');
grid on; xlim([-0.1, 0.1]);

subplot(3, 4, 6);
plot(lags_time_pink, R_pink);
title('粉红噪声自相关函数');
xlabel('时间滞后 \tau (s)'); ylabel('R(\tau)');
grid on; xlim([-0.5, 0.5]);

subplot(3, 4, 7);
plot(lags_time_brown, R_brown);
title('布朗噪声自相关函数');
xlabel('时间滞后 \tau (s)'); ylabel('R(\tau)');
grid on; xlim([-0.5, 0.5]);

subplot(3, 4, 8);
plot(lags_time_band, R_band);
title('带限白噪声自相关函数');
xlabel('时间滞后 \tau (s)'); ylabel('R(\tau)');
grid on; xlim([-0.1, 0.1]);

% 3. 功率谱密度
subplot(3, 4, 9);
semilogx(f_white(2:end), Pxx_white_db(2:end)); % 从第二个点开始避免log(0)
title('白噪声功率谱密度');
xlabel('频率 (Hz)'); ylabel('功率谱密度 (dB/Hz)');
grid on;

subplot(3, 4, 10);
semilogx(f_pink(2:end), Pxx_pink_db(2:end));
title('粉红噪声功率谱密度');
xlabel('频率 (Hz)'); ylabel('功率谱密度 (dB/Hz)');
grid on;

subplot(3, 4, 11);
semilogx(f_brown(2:end), Pxx_brown_db(2:end));
title('布朗噪声功率谱密度');
xlabel('频率 (Hz)'); ylabel('功率谱密度 (dB/Hz)');
grid on;

subplot(3, 4, 12);
semilogx(f_band(2:end), Pxx_band_db(2:end));
title('带限白噪声功率谱密度');
xlabel('频率 (Hz)'); ylabel('功率谱密度 (dB/Hz)');
grid on;

sgtitle('白噪声与色噪声特性对比分析');

5. 理论特性验证

% 验证理论特性
figure('Position', [100, 100, 1200, 500]);

% 理论功率谱密度对比
subplot(1, 2, 1);
loglog(f_white, Pxx_white, 'b-', 'LineWidth', 1.5); hold on;
loglog(f_pink, Pxx_pink, 'r-', 'LineWidth', 1.5);
loglog(f_brown, Pxx_brown, 'g-', 'LineWidth', 1.5);
loglog(f_band, Pxx_band, 'm-', 'LineWidth', 1.5);

% 添加理论参考线
f_theory = logspace(0, log10(fs/2), 100);
plot(f_theory, 0.1./f_theory, 'r--', 'LineWidth', 1, 'DisplayName', '1/f理论');
plot(f_theory, 0.01./(f_theory.^2), 'g--', 'LineWidth', 1, 'DisplayName', '1/f^2理论');

title('功率谱密度理论验证 (线性尺度)');
xlabel('频率 (Hz)'); ylabel('功率谱密度');
legend('白噪声', '粉红噪声', '布朗噪声', '带限白噪声', '1/f理论', '1/f^2理论');
grid on;

% 自相关函数细节对比
subplot(1, 2, 2);
plot(lags_time_white, R_white, 'b-', 'LineWidth', 1.5); hold on;
plot(lags_time_pink, R_pink, 'r-', 'LineWidth', 1.5);
plot(lags_time_brown, R_brown, 'g-', 'LineWidth', 1.5);
plot(lags_time_band, R_band, 'm-', 'LineWidth', 1.5);

title('自相关函数对比');
xlabel('时间滞后 \tau (s)'); ylabel('R(\tau)');
legend('白噪声', '粉红噪声', '布朗噪声', '带限白噪声');
grid on; xlim([-0.2, 0.2]);

参考代码 白噪声与色噪声的仿真样例 www.3dddown.com/csa/79805.html

说明

  1. 白噪声特性

    • 自相关函数在τ=0处有尖锐峰值,其他地方接近零
    • 功率谱密度在整个频率范围内基本平坦
    • 体现"无记忆"特性
  2. 色噪声特性

    • 粉红噪声:自相关函数缓慢衰减,功率谱密度随频率增加而下降(斜率约-3dB/倍频程)
    • 布朗噪声:更强的低频分量,功率谱密度下降更快(斜率约-6dB/倍频程)
    • 带限白噪声:自相关函数呈现sinc函数形状,体现滤波器的记忆效应
  3. 工程意义

    • 白噪声用于系统辨识和测试
    • 粉红噪声用于声学测试和音频处理
    • 理解噪声特性对通信系统、信号处理等应用至关重要