使用Matlab产生白噪声的简单方法

您所在的位置:网站首页 十拿九稳拼音怎么写 使用Matlab产生白噪声的简单方法

使用Matlab产生白噪声的简单方法

#使用Matlab产生白噪声的简单方法| 来源: 网络整理| 查看: 265

白噪声的 psd 在整个频率范围内显示出相同的值。由于功率谱密度下面的总面积,即噪声具有的总功率是无线的,所以白噪声是不存在的。但实际上对于任何一种噪声谱,如果所关心的频带内是平坦的,通常都被称为白噪声谱。高斯白噪声

顾名思义,高斯白噪声指的是产生白噪声的幅值服从的是均值为0的正态分布。

在Simulink中产生高斯白噪声①Band-limited White NoiseBand-limited White Noise模块Band-limited White Noise模块的参数设置Noise power 指的是产生高斯白噪声的功率谱密度 psd ;Sample time 指的是产生高斯白噪声的采样时间;Seed 产生高斯白噪声的随机数种子,随机数种子不同,产生的高斯白噪声序列不同;Noise power和Sample time存在关系:

\sigma^{2}=\frac{Noisepower}{Sample time} .

其中 \sigma^{2} 指产生高斯白噪声的方差(功率),故Band-limited White Noise产生的是均值为0,方差为\sigma^{2}的信号。

【个人理解 欢迎指正】均值为0,故方差可代表信号幅值的平方,由此想到信号的能量。根据帕塞瓦尔定理和功率谱密度的表达式:

\sum_{n=1}^{N} \left| x_i(n)\right| ^{2}= \frac{1}{N}\sum_{n=1}^{N} \left| F_i(k)\right| ^{2}.

psd_{i}=\frac{\left| F_{i}(k) \right|^{2}}{Nf_{smp}} , 1\leq n\leq N .

\left| F_{i} \right|^{2}=psd_{i}Nf_{smp} .

白噪声在频率范围内表现为一个常数,如果产生噪声信号的幅值为 \sigma ,则信号的能量可表示为:

\sum_{n=1}^{N} \left| x_i(n)\right| ^{2}=N\sigma^{2}=\frac{1}{N}\sum_{1}^{N}{\left| F_{i} \right|^{2}}=psdNf_{smp} .

由此可以推出方差与 psd 和采样时间的关系。

也可以由方差代表信号的功率想到,功率谱密度对频率的积分等于总功率直接得到 \sigma^{2}=psdf_{smp} .

【例】设功率谱密度为1e-31,采样频率为250kHz,可算得信号的平均能量(平均强度、功率)为2.512385728845274e-26。

simulink模型②Random number

原理与前一种相同,只不过Random number是直接通过设置方差控制噪声能量的,使用Random number产生白噪声时,均值一定要设置为0。

Random number模块Random number模块的参数设置Mean 均值,设置为0;Variance 方差;Sample time 采样时间。

其原理与Band-limited White Noise相同,依然可以通过如下公式来估计功率谱密度

\sigma^{2}=\frac{psd}{Sample time} .

【例】分别用Band-limited White Noise和 Random Number产生方差为2.5e-26的白噪声,采样频率都为250kHz,采样点数都为2048。

Simulink 模型Band-limited White NoiseRandom Number功率谱密度3.5665e-321e-31功率谱密度1e-313.5665e-32用代码产生高斯白噪声①randn()

a+b*randn(1,c):产生均值为 a ,方差为 b^{2} 的 c 个白噪声采样点。

【例】产生均值为0,方差为0.01的2048个采样点,系统带宽为125000,计算高斯白噪声的功率谱密度和总能量。

clc;clear; BW = 125e3; %带宽 N = 2^11; %采样点数 noise=1e-1*randn(1,2048)'; %产生噪声 tsmp = 4e-6; fsmp = 1/tsmp; %采样周期 fB = N*(BW/fsmp); %带宽所占采样点数 fB=ceil(fB); %向下取整 noise_psd=(abs(fft((noise(1:N))'))).^2/(N*fsmp); %功率谱密度 energy_t=sum((abs((noise(1:N)))).^2); %总能量 plot([1:fB]*fsmp/N,noise(1:fB),'r'); grid on; xlabel('Frequency [Hz]') ylabel('功率谱密度 [W/Hz]') text_handle = text(100000,0.35, sprintf('总能量为 = %4.3fJ',energy_t));使用randn()产生的高斯白噪声②wgn()

wgn(a,b,c):产生一个a行,b列,方差为cdB的高斯白噪声。即 \sigma^{2}=10^{\frac{c}{10}} .

【例】产生均值为0,方差为0.01的2048个点的高斯白噪声,计算其能量和功率谱密度。

clc;clear; BW = 125e3; %带宽 N = 2^11; %采样点数 noise=wgn(1,2048,10*log10(0.01)); %产生噪声 var(noise) tsmp = 4e-6; fsmp = 1/tsmp; %采样周期 fB = N*(BW/fsmp); %带宽所占采样点数 fB=ceil(fB); %向下取整 noise_psd=(abs(fft((noise(1:N))'))).^2/(N*fsmp); %功率谱密度 energy_t=sum((abs((noise(1:N)))).^2); %总能量 plot([1:fB]*fsmp/N,noise(1:fB),'r'); grid on; xlabel('Frequency [Hz]') ylabel('功率谱密度 [W/Hz]') text_handle = text(90000,0.3, sprintf('总能量为 = %4.3fJ',energy_t));使用wgn()产生的高斯白噪声③awgn()

awgn(signal,snr):表示在信号signal中产生了使信噪比为snr的噪声。

【例】添加噪声使信噪比为60dB。

clc;clear; N = 2^11; %采样点数 psd=1e-10; %所要求白噪声噪声的功率谱密度 tsmp = 1e-6; fsmp = 1/tsmp; %采样周期 fin=2e4; %输入信号频率 n=(1:N); %采样点数为N个 f=fin/fsmp; signal=sin(2*pi*f*n); %输入信号 signal_noise=awgn(signal,60); %信号+噪声 noise=signal_noise-signal; %噪声 signal_noise_power=sum((abs(fft(signal_noise((1:N))'))).^2)/N^2;%信号+噪声的总功率 noise_power=sum(abs(fft((noise(1:N))')).^2)/N^2; %噪声功率 snr=10*log10(signal_noise_power/noise_power); %信噪比 plot([1:N]*fsmp/N,noise(1:N),'r'); grid on; xlabel('Frequency [Hz]') ylabel('噪声功率谱密度 [W/Hz]') text_handle = text(800000,0.0035, sprintf('snr= %4.3fdB',snr));使用awgn()为信号添加噪声

具体用法及其他参数说明可见wgn及awgn参数说明.

均匀分布的白噪声

均匀分布的白噪声其幅值分布是均匀的。

rand():产生的是均值为0.5,方差为 \frac{1}{12} 的幅值在幅度在0~1之间的随机数。已知白噪声的均值为0,白噪声的强度也要根据需要发生变化,解决的方法是:

减去产生的随机数序列的平均值;调节幅度来调节方差。

【例】产生功率谱密度为1e-10W/Hz,采样频率为1Mhz,均值为0的均匀白噪声。

clc;clear; BW = 125e3; %带宽 N = 2^11; %采样点数 psd=1e-10; %所要求白噪声噪声的功率谱密度 tsmp = 1e-6; fsmp = 1/tsmp; %采样周期 c=psd*fsmp; %所要求白噪声的方差 k=sqrt(c/(1/12)); %比例系数 fB = N*(BW/fsmp); %带宽所占采样点数 noise=rand(1,2048); %产生噪声 noise=k*(noise-mean(noise)); %使均值为0,修正方差 va=var(noise); %方差 fB=ceil(fB); %向下取整 noise_psd=(abs(fft((noise(1:N))'))).^2/(N*fsmp); %功率谱密度 noise_psd_mean=sum(noise_psd)/N; energy_t=sum((abs((noise(1:N)))).^2); %总能量 plot([1:fB]*fsmp/N,noise(1:fB),'r'); grid on; xlabel('Frequency [Hz]') ylabel('功率谱密度 [W/Hz]') text_handle = text(100000,0.018, sprintf('总能量为 = %4.3fJ',energy_t));运算结果

运算所得功率谱密度与设定的功率谱密度相符。

均匀白噪声Noise模块

在RF模块中使用的噪声模块。

noise 模块



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3