白噪声:使用 Matlab 进行仿真与分析
定义
一个具有恒定功率谱密度(PSD)函数的随机过程(或信号)被称为白噪声过程。
功率谱密度
功率谱密度函数(PSD)显示了每个频谱分量中包含的功率。例如,对于一个固定频率的正弦波,PSD 图将只包含一个频谱分量,位于给定频率处。PSD 是一个偶函数,因此在绘制时,频率分量会在 Y 轴两侧对称分布。因此,对于一个固定频率的正弦波,双边的 PSD 图将有两个分量——一个在正频率处,另一个在负频率处。
高斯和白噪声:
白噪声信号(过程)由一组独立同分布(i.i.d)的随机变量构成。在离散情况下,白噪声信号由一系列独立且从相同概率分布生成的样本组成。例如,你可以使用随机数生成器生成一个白噪声信号,其中所有样本都遵循给定的高斯分布。这被称为白高斯噪声(WGN)或高斯白噪声。同样,从均匀分布生成的白噪声信号被称为均匀白噪声。
高斯噪声和均匀噪声经常用于系统建模。在建模/仿真中,可以使用适当的随机生成器生成白噪声。白高斯噪声可以使用 Matlab 中的 randn 函数生成,该函数生成遵循高斯分布的随机数。同样,rand 函数可以用于生成遵循均匀分布的均匀白噪声。当使用随机数生成器时,它会生成一系列来自给定分布的随机数。让我们以生成一个长度为 10 的白高斯噪声为例,使用 Matlab 中的 randn 函数——均值为 0,标准差为 1。
>> mu=0;sigma=1;
>> noise= sigma *randn(1,10)+mu
noise = -1.5121 0.7321 -0.1621 0.4651 1.4284 1.0955 -0.5586 1.4362 -0.8026 0.0949
什么是独立同分布(i.i.d)?
这生成了 10 个来自标准正态分布的随机数。正如我们所知,白噪声过程被视为由多个遵循相同概率分布函数(PDF)的随机变量组成的随机过程。上面的 10 个随机数是从相同的 PDF(标准正态分布)生成的。这种情况被称为“同分布”条件。上面的各个样本彼此“独立”。此外,每个样本可以被视为一个随机变量的实现。实际上,我们生成了一个由 10 个随机变量的实现组成的随机过程。因此,上述过程由“独立同分布”(i.i.d)随机变量构成。
严格和弱定义的白噪声:
由于白噪声过程是由 i.i.d 随机变量/样本构成的,所有样本都遵循相同的基础概率分布函数(PDF)。因此,该过程的联合概率分布函数不会随时间的变化而变化。这被称为平稳过程。因此,这种噪声是一个平稳过程。正如平稳过程可以分为严格平稳(SSS)和宽平稳(WSS)过程,我们可以有严格定义的白噪声和弱定义的白噪声。相应地,它们可以被称为严格定义的白噪声信号和弱定义的白噪声信号。
协方差函数/矩阵的作用是什么?
弱定义的白噪声信号,记为 x(t),是一个更实际的条件。在这里,样本在统计上是不相关的,并且同分布,方差等于 σ。这个条件通过使用协方差函数来指定:
为什么我们需要协方差函数?因为,我们正在处理一个由 n 个随机变量组成的随机过程(在上面的建模示例中有 10 个变量)。这样的过程被视为多元随机向量或多元随机变量[1]。
对于多元随机变量,协方差函数指定了给定随机过程中每个 n 个变量相对于彼此的行为。协方差函数将方差的概念推广到多个维度。
上述方程以矩阵形式表示时,给出了白噪声随机过程的协方差矩阵。由于该过程中的随机变量在统计上是不相关的,协方差函数仅在主对角线上有值。
上面的矩阵表明,每个随机变量只存在自相关函数。互相关值为零(样本/变量在统计上彼此不相关)。对角线元素等于方差,矩阵中的所有其他元素为零。弱定义的白噪声的集合自相关函数由下式给出。这表明弱定义的白噪声过程的自相关函数在滞后 τ=0 处为零。
频域特性:
Wiener-Khintchine 定理 指出,对于宽平稳过程(WSS),随机过程的功率谱密度函数 Sxx(f) 可以通过对随机过程的自相关函数进行傅里叶变换得到。在连续时间域中,这表示为
对于弱定义的白噪声过程,我们发现均值是一个常数,其协方差不随时间变化。这是 WSS 过程的充分条件。因此,我们可以应用 Wiener-Khintchine 定理。因此,弱定义的白噪声过程的功率谱密度在整个频谱上是恒定的(平坦的)(图 1)。常数的值等于噪声信号的方差或功率。
在 Matlab 中测试白高斯噪声的特性:
使用 Matlab 中的 randn 函数生成长度为 L=100,000 的高斯白噪声信号并绘制它。假设 pdf 是均值为 μ=0,标准差为 σ=2 的高斯 pdf。因此,高斯 pdf 的方差为 σ。高斯随机变量的理论 PDF 由下式给出:
clear all; clc; close all;
L=100000; %随机信号的样本长度
mu=0;
sigma=2;
X=sigma*randn(L,1)+mu;figure();
subplot(2,1,1)
plot(X);
title(\['白噪声 : \\mu\_x=',num2str(mu),' \\sigma^2=',num2str(sigma^2)\])
xlabel('样本')
ylabel('样本值')
grid on;
绘制直方图生成的噪声信号,并通过绘制高斯随机变量的理论 pdf 来验证直方图。
subplot(2,1,2)
n=100; %直方图的分箱数
[f,x]=hist(X,n);
bar(x,f/trapz(x,f)); hold on;
%高斯随机变量的理论 PDF
g=(1/(sqrt(2*pi)*sigma))*exp(-((x-mu).^2)/(2*sigma^2));
plot(x,g);hold off; grid on;
title('白高斯噪声的理论 PDF 和模拟直方图');
legend('直方图','理论 PDF');
xlabel('分箱');
ylabel('PDF f_x(x)');
计算白噪声的自相关函数。计算的自相关函数必须适当缩放。如果使用 Matlab 内置的‘ xcorr ’函数计算自相关函数,请使用‘ biased ’参数以正确缩放。
figure();
Rxx=1/L*conv(flipud(X),X);
lags=(-L+1):1:(L-1);%替代方法
%\[Rxx,lags\] =xcorr(X,'biased');
%参数 'biased' 用于通过 1/L 进行适当缩放
%通过样本长度归一化自相关以进行适当缩放plot(lags,Rxx);
title('白噪声的自相关函数');
xlabel('滞后')
ylabel('相关性')
grid on;
模拟 PSD:
模拟功率谱密度[3](PSD)的白噪声有点棘手。这里有两个问题:1)生成的样本长度有限。这等同于截断无限系列的随机样本。这意味着滞后是在固定范围内定义的。2)仿真中使用的随机数生成器是伪随机生成器。由于这两个原因,当你对生成的自相关值应用傅里叶变换时,你将不会得到平坦的 psd 频谱。通过生成长度足够长的随机信号并在多个随机信号实现上平均 psd,可以最小化 psd 的波动效应。
将高斯白噪声模拟为多元高斯随机向量:
为了验证白噪声的功率谱密度,我们将使用将噪声视为 N 个高斯随机变量的组合的方法。我们希望在 L 个这样的实现上平均 PSD。由于每个实现有 N 个高斯随机变量(N 个独立样本),协方差矩阵 的维度为 N×N。对于这种多元情况,均值向量将是 1×N 维的。
Cholesky 分解 协方差矩阵给出了多元情况的等效标准差。Cholesky 分解可以视为平方根操作。这里使用 Matlab 的 randn 函数生成具有给定均值矩阵和协方差矩阵的多维高斯随机过程。
%验证白高斯噪声过程的恒定 PSD
%具有任意均值和标准差 sigmamu=0; %噪声过程每个实现的均值
sigma=2; %噪声过程每个实现的 sigmaL = 1000; %要平均的随机信号实现的数量
N = 1024; %每个实现的样本长度设置为 2 的幂以进行 FFT%生成随机过程 - 白高斯噪声过程
MU=mu*ones(1,N); %所有实现的均值向量
Cxx=(sigma^2)*diag(ones(N,1)); %随机过程的协方差矩阵
R = chol(Cxx); %协方差矩阵的 Cholesky 分解
%生成具有给定均值向量和协方差矩阵 Cxx 的多元高斯分布
z = repmat(MU,L,1) + randn(L,N)*R;
计算上述生成的多维过程的 PSD 并对其进行平均以获得平滑的图。
%默认情况下,FFT 是在每列上进行的 - 正常命令 fft(z)
%在每行上找到多元分布的 FFT
%命令 - fft(z,[],2)
Z = 1/sqrt(N)*fft(z,[],2); %通过 sqrt(N) 缩放;
Pzavg = mean(Z.*conj(Z));%从 fft 计算平均功率normFreq=[-N/2:N/2-1]/N;
Pzavg=fftshift(Pzavg); %将零频率分量移到频谱中心
plot(normFreq,10*log10(Pzavg),'r');
axis([-0.5 0.5 0 10]); grid on;
ylabel('功率谱密度 (dB/Hz)');
xlabel('归一化频率');
title('白噪声的功率谱密度');
生成的噪声的 PSD 图显示在所有频率上功率几乎恒定。换句话说,对于白噪声信号,PSD 在所有频率(−∞ 到 +∞)上是恒定的(平坦的)。上图中的 y 轴以 dB/Hz 为单位表示。我们可以从图中看到,。