MATLAB实现白噪声与色噪声仿真
MATLAB实现白噪声与色噪声仿真,并绘制其自相关函数和功率谱密度函数
一、仿真代码实现
%% 参数设置
clear; clc; close all;
fs = 1000; % 采样频率(Hz)
t = 0:1/fs:1-1/fs;% 时间向量(1秒)
N = length(t); % 信号长度%% 1. 生成白噪声
white_noise = randn(1,N); % 高斯白噪声%% 2. 生成色噪声(以带通滤波为例)
[b,a] = butter(4, [0.2 0.3]); % 4阶带通滤波器(200-300Hz)
colored_noise = filter(b,a,white_noise);%% 3. 自相关函数计算
[r_white,lags] = xcorr(white_noise,'biased'); % 白噪声自相关
[r_color,lags] = xcorr(colored_noise,'biased'); % 色噪声自相关%% 4. 功率谱密度计算
[Pxx,f] = periodogram(white_noise,[],N,fs); % 白噪声PSD
[Pyy,f] = periodogram(colored_noise,[],N,fs);% 色噪声PSD%% 5. 绘图
figure;% 白噪声分析
subplot(2,2,1);
plot(t,white_noise);
title('白噪声时域波形');
xlabel('时间(s)'); ylabel('幅值');subplot(2,2,2);
stem(lags/fs,r_white*fs/N);
title('白噪声自相关函数');
xlabel('归一化时延'); ylabel('幅度');
xlim([-0.1 0.1]);subplot(2,2,3);
plot(f,10*log10(Pxx));
title('白噪声功率谱密度');
xlabel('频率(Hz)'); ylabel('dB/Hz');
xlim([0 500]);% 色噪声分析
subplot(2,2,4);
plot(t,colored_noise);
title('色噪声时域波形');
xlabel('时间(s)'); ylabel('幅值');figure;subplot(2,1,1);
stem(lags/fs,r_color*fs/N);
title('色噪声自相关函数');
xlabel('归一化时延'); ylabel('幅度');
xlim([-0.1 0.1]);subplot(2,1,2);
plot(f,10*log10(Pyy));
title('色噪声功率谱密度');
xlabel('频率(Hz)'); ylabel('dB/Hz');
xlim([0 500]);
二、关键特性分析
1. 时域特性
| 噪声类型 | 波形特征 | 统计特性 |
|---|---|---|
| 白噪声 | 短时强波动,无周期性 | 均值=0,方差恒定 |
| 色噪声 | 波动幅度相对平缓 | 均值=0,方差可能时变 |
2. 自相关函数
% 自相关函数特性对比
figure;
subplot(2,1,1);
plot(lags/fs,r_white*fs/N);
title('白噪声自相关函数');
xlabel('时延(s)'); ylabel('归一化幅度');
xlim([-0.001 0.001]);subplot(2,1,2);
plot(lags/fs,r_color*fs/N);
title('色噪声自相关函数');
xlabel('时延(s)'); ylabel('归一化幅度');
xlim([-0.001 0.001]);
- 白噪声:自相关函数在零时延处为峰值,两侧快速衰减至零(δ函数特性)
- 色噪声:自相关函数存在非零拖尾,表明时域相关性
3. 功率谱密度
% 功率谱密度对比
figure;
subplot(2,1,1);
plot(f,10*log10(Pxx));
title('白噪声功率谱密度');
xlabel('频率(Hz)'); ylabel('dB/Hz');
xlim([0 500]);subplot(2,1,2);
plot(f,10*log10(Pyy));
title('色噪声功率谱密度');
xlabel('频率(Hz)'); ylabel('dB/Hz');
xlim([0 500]);
- 白噪声:全频段功率谱密度平坦(约-3dB/Hz)
- 色噪声:在滤波器通带(200-300Hz)呈现明显能量集中
三、典型应用场景
-
白噪声仿真:
% 高斯白噪声 gn = 0.5*randn(1,fs); % 均匀白噪声 un = 0.5*(rand(1,fs)-0.5); -
色噪声生成方法:
-
低通色噪声:通过低通滤波器
[b,a] = butter(4,0.2); colored = filter(b,a,randn(1,N)); -
粉红噪声:使用Voss-McCartney算法
function pink = pink_noise(N)white = randn(N,1);b = [0.049922035, -0.09599352, 0.050612699, -0.004408786];a = [1, -2.494956002, 2.017265875, -0.522189400];pink = filter(b,a,white); end
-
四、扩展实验建议
-
多通道噪声分析:
% 生成多通道有色噪声 [b1,a1] = butter(4,0.2); [b2,a2] = butter(6,0.3); noise1 = filter(b1,a1,randn(1,N)); noise2 = filter(b2,a2,randn(1,N)); -
实时噪声仿真:
% 使用音频设备实时采集 audioDeviceReader('SampleRate',fs); -
噪声抑制对比:
% 维纳滤波去噪 [dpsd,f] = pwelch(noise,hamming(256)); H = 1./dpsd; % 理想维纳滤波器 denoised = filter(H,1,noise);
参考代码 白噪声与色噪声的仿真样例 www.youwenfan.com/contentcsl/79805.html
五、注意事项
-
频率轴校准:
f = (0:N/2)*fs/N; % 正确计算频率轴 -
功率谱单位转换:
% 从V²/Hz转换为dB/Hz PSD_dB = 10*log10(PSD); -
随机种子控制:
rng(0); % 固定随机种子保证可重复性
该方法通过对比白噪声与色噪声的时域波形、自相关函数和功率谱密度,清晰展示了二者的本质区别。实际应用中可根据具体需求选择噪声类型,并通过滤波器设计实现噪声特性控制。
