matlab产生高斯白噪声「建议收藏」

matlab产生高斯白噪声「建议收藏」函数介绍matlab里和随机数有关的函数:(1)rand:产生均值为0.5、幅度在0~1之间的伪随机数。(2)randn:产生均值为0、方差为1的高斯白噪声。(3)randperm(n):产生1到n的均匀分布随机序列。(4)normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵。rand:返回一个在区间(0,1)内均匀分布的随机数。rand(n):生成0到1之间的n阶(n×n)随机数方阵。rand(m,n):生成0到1之间的m×n的随机数矩阵。

函数介绍

matlab里和随机数有关的函数:
(1) rand:产生均值为0.5、幅度在0~1之间的伪随机数。
(2) randn:产生均值为0、方差为1的高斯白噪声。
(3) randperm(n):产生1到n的均匀分布随机序列。
(4) normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的 随机矩阵。

  • rand:返回一个在区间 (0,1) 内均匀分布的随机数。

    • rand(n):生成0到1之间的n阶( n×n )随机数方阵。
    • rand(m,n):生成0到1之间的m×n的随机数矩阵。
  • randn:返回一个从标准正态分布中得到的随机标量。

    • randn()命令是产生白噪声的,白噪声应该是0均值,方差为1的一组数。
    • 同rand函数一样,randn(n),randn(m,n)含义与上述一致。
    • randn(size(A)),返回一个和A有同样维数大小的随机数组。
  • randperm:整数的随机排列。

    • p = randperm(n) 返回行向量,其中包含从 1 到 n 没有重复元素的整数随机排列。
    • p = randperm(n,k) 返回行向量,其中包含在 1 到 n 之间随机选择的 k 个唯一整数
  • normrnd:生成服从正态分布的随机数

    • r = normrnd(mu,sigma)均值参数为 mu标准差参数为 sigma 的正态分布中生成随机数。
    • R=norrmrnd(MU,SIGMA,m):从均值参数为 mu标准差参数为 sigma 的正态分布中生成随机数,矩阵的形式由m定义。m是一个1×2向量,其中的两个元素分别代表返回值R 中行与列的维数。
    • R=normrnd(MU,SIGMA,m,n): 生成m×n形式的正态分布的随机数矩阵。

注:

  • 一般来说,可以使用公式r = a + (b-a).*rand(N,1)生成区间 (a,b) 内的 N 个随机数。
  • rand是0-1的均匀分布,randn是均值为0方差为1的正态分布。
  • 理论上randn()生成的随机数分布范围为(-∞,+∞),即无穷大。Matlab中randn()是产生正态分布的随机数或矩阵的函数,它产生均值为0,方差为1,标准差为1的正态分布的随机数或矩阵的函数。

高斯白噪声函数

  • 高斯白噪声概念解释
    • 高斯白噪声(white Gaussian noise; WGN):均匀分布于给定频带上的高斯噪声
      • 如果一个噪声,它的幅度服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。
      • 高斯白噪声中的高斯是指概率分布是正态函数,而白噪声是指:它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。这是考察一个信号的两个不同方面的问题。
      • 热噪声散粒噪声高斯白噪声
  • matlab高斯白噪声函数介绍:——wgn( )、awgn( )
    • WGN:产生高斯白噪声
      • y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度
      • y = wgn(m,n,p,imp)欧姆(Ohm)为单位指定负载阻抗
      • y= **wgn(…,outputtype)**指定输出类型,OUTPUTTYPE可以是’real’或’complex’来获得复噪声信号。
      • y=**wgn(…,powertype)**指定p的单位。POWERTYPE可以是’dBW’, ‘dBm’或’linear’。线性强度(linear power)以瓦特(Watt)为单位。
      • linear表示线性强度(linear power),单位为Watt。如果输入其他:‘dBw’或缺省则表示用dBw作为功率单位
    • AWGN:在某一信号中加入高斯白噪声
      • y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是 复数,就加入复噪声。
      • y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为’measured’,则函数将在加入噪声之前测定信号强度。
      • y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的状态。
      • y = awgn(…,POWERTYPE) 指定SNR和SIGPOWER的单位。POWERTYPE可以是’dB’或’linear’。如果POWERTYPE是’dB’,那么SNR以dB为单位,而SIGPOWER以dBW为单位。如果POWERTYPE是’linear’,那么SNR作为比值来度量,而SIGPOWER以瓦特为单位。

注:

  • 一阶矩就是随机变量的期望二阶矩就是随机变量平方的期望,以此可以类推高阶的矩。
  • 分贝(decibel, dB):分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个能量之间的差别的一种表示单位,它不是一个绝对单位。
    • 例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比取对数(以10为底的对数),再乘以20作为电平的分贝数(功率的电平值改乘10)。
    • 分贝瓦(dBW, dB Watt):指以1W的输出功率为基准时,用分贝来测量的功率放大器的功率值
      • dBm (dB-milliWatt):即与1milliWatt(毫瓦)作比较得出的数字。
      • 0 dBm = 1 mW 10 dBm = 10mW 20 dBm = 100 mW

总结

  • 在matlab中无论是wgn还是awgn函数实质都是由randn函数产生的噪声
  • 即:wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。
  • awgn(x,snr,’measured’,'linear’)表示向已知信号添加某个信噪比(SNR)的高斯白噪声“,命令的作用是对原信号x添加信噪比(比值)为SNR的噪声,在添加之前先估计信号x的强度
    • 定义解释:
      • SNR就是信号的强度除以噪声的强度或者信号功率与噪声功率之比((注:由于采用的是比值而非db,所以与下面“计算信噪比”所使用的方式不同,即没有求对数步骤))
      • 信号的强度指的就是信号的能量,在连续的情形就是对x平方后求积分,而在离散的情形是求和代替积分(在matlab中sigPower= sum(abs(sig(: )).^2)/length(sig(: )),这就是信号的强度,这里sig(: )为信号。)
    • 在求出x的强度后,结合指定的信噪比,就可以求出需要添加的噪声的强度noisePower = sigPower/ SNR。由于使用的是高斯白噪声即randn函数,而randn的结果是一个强度为1的随机序列(自己试试sum(randn(1000,1).^2)/1000就知道了,注意信号的长度不能太小)。于是,所要添加的噪声信号显然就是: sqrt(noisePower)*randn(n,1)其中n为信号长度。
    • matlab 例子:
X = sqrt(2)*sin(0:pi/1000000:6*pi);               % 产生正弦信号
Y = awgn(X,10,'measured');                        % 加入信噪比为10db的噪声,加入前预估信号的功率(强度)
sigPower = sum(abs(X).^2)/length(X)           	  % 求出信号功率
noisePower=sum(abs(Y-X).^2)/length(Y-X)  		  % 求出噪声功率
SNR=10*log10(sigPower/noisePower)        		  % 由信噪比定义求出信噪比,单位为db
只听到从架构师办公室传来架构君的声音:
只愿君心似我心,定不负相思意。有谁来对上联或下联?
  • 运算结果如下所示:
    在这里插入图片描述
    • WGN(m,n,p)产生功率为p dBW的m*n的高斯白噪声矩阵,其中p是以dbW为单位的输出强度。若要产生一个均值0,方差为0.0965 的高斯白噪声,不可直接用WGN(N,1,0.0965)产生(单位不对应)
    • 对高斯白噪声,其方差和功率(单位为W)是一样的。因此,对方差,要做的只是将w变换成dbw,即dbw=10log(w)
    • 做法如下有两种:
此代码由Java架构师必看网-架构君整理
%% 方法一: N=1000; x=sqrt(0.0965)*randn(N,1); Px=(x.'*x)/N % 验证,这里Px的求法与上面noisePower=sum(abs(Y-X).^2)/length(Y-X)的求法是一致的 %% 方法二: N=1000; y=wgn(N,1,10*log10(0.0965)); Py=(y.'*y)/N % 验证

信噪比,英文名称叫做SNR或S/N(Signal Noise Ratio),是指系统中信号与噪声的比例。信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。
信噪比的计量单位是dB,其计算方法是10LOG(Ps/Pn),其中Ps和Pn分别代表信号和噪声的有效功率,也可以换算成电压幅值的比率关系:20LOG(Vs/Vn),Vs和Vn分别代表信号和噪声电压的“有效值”。信噪比应该越高越好。

参考来源

matlab 中产生高斯白噪声
高斯白噪声及Matlab常用实现方法
关于dB 分贝
Matlab产生高斯白噪声
MATLAB产生特定功率谱密度的高斯白噪声的两种方法

架构君码字不易,如需转载,请注明出处:https://javajgs.com/archives/209242
0

发表评论