matlab中噪声功率、噪声方差关系

来源:互联网 发布:平高集团待遇知乎 编辑:程序博客网 时间:2024/04/28 20:31
以matlab中awgn函数为例说明:
    在matlab中无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即:wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。
  根据awgn的实现代码可以知道”向已知信号添加某个信噪比(SNR)的高斯白噪声“,即:awgn(x,snr,’measured’,'linear’),命令的作用是对原信号x添加信噪比(比值)为SNR的噪声,在添加之前先估计信号x的强度。
     这里涉及三个问题:在awgn这个函数中,SNR是如何计算的?什么是信号的强度?awgn函数具体是如何添加噪声的?
     事实上,前两个问题是相关的,因为根据定义,SNR就是信号的强度除以噪声的强度(或者信号功率噪声功率之比),所以,首先来讲讲信号的强度。其实信号的强度指的就是信号的能量,在连续的情形就是对x平方后求积分,而在离散的情形自然是求和代替积分了。在matlab中也是这样实现的,只不过多了一个规范化步骤罢了:
      sigPower = sum(abs(sig(: )).^2)/length(sig(: ))
      这就是信号的强度,这里sig(: )为信号。     
      至此,SNR的具体实现也不用多说了(注:由于采用的是比值而非db,所以与下面“计算信噪比”所使用的方式不同,即没有求对数步骤)。
     最后说说awgn函数具体是如何添加噪声的。事实上也很简单,在求出x的强度后,结合指定的信噪比,就可以求出需要添加的噪声的强度noisePower=sigPower/SNR。由于使用的是高斯白噪声即randn函数,而randn的结果是一个强度为1的随机序列(自己试试sum(randn(1000,1).^2)/1000就知道了,注意信号的长度不能太小)。于是,所要添加的噪声信号显然就是:                    
                                                       sqrt(noisePower)*randn(n,1)
其中n为信号长度。 
    自然要求的白噪声的方差也可以求出来了!
   
更新程序如下:
function snr=SNR(I,In)
% 计算信号噪声比函数
% I :original signal,原始信号
% In:noisy signal(ie. original signal + noise signal),加噪声后的信号
% snr=10*log10(sigma2(I2)/sigma2(I2-I1))
[row,col,nchannel]=size(I);
snr=0;
if nchannel==1%gray image
Ps=sum(sum((I-mean(mean(I))).^2));%signal power
Pn=sum(sum((I-In).^2));%noise power
snr=10*log10(Ps/Pn);
elseif nchannel==3%color image
for i=1:3
Ps=sum(sum((I(:,:,i)-mean(mean(I(:,:,i)))).^2));%signal power
Pn=sum(sum((I(:,:,i)-In(:,:,i)).^2));%noise power
snr=snr+10*log10(Ps/Pn);
end
snr=snr/3;
end
****************************************************************************************************************************************
一个例子:
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
WGN(m,n,p)产生功率为p dBW的m*n的高斯白噪声矩阵,其中p是以dbW为单位的输出强度。 
若要产生一个均值0,方差为0.0965 的高斯白噪声,不可直接用WGN(N,1,0.0965)产生,而应该如下:
1. N=1000;
    x=sqrt(0.0965)*randn(N,1);
    Px=(x.'*x)/N   % 验证,这里Px的求法与上面
noisePower=sum(abs(Y-X).^2)/length(Y-X)的求法是一致的

2. N=1000;
    y=wgn(N,1,10*log10(0.0965));
    Py=(y.'*y)/N   % 验证

一点说明,对高斯白噪声,其方差和功率(单位为W)是一样的。因此,对方差,要做的只是将w变换成dbw,即dbw=10log(w)。
**************************************************************************************************************************************

信噪比,英文名称叫做SNRS/NSignal Noise Ratio),是指系统中信号与噪声的比例。信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。

信噪比的计量单位是dB,其计算方法是10LOG(Ps/Pn),其中PsPn分别代表信号和噪声的有效功率,也可以换算成电压幅值的比率关系:20LOG(Vs/Vn)VsVn分别代表信号和噪声电压的有效值。信噪比应该越高越好。


awgn()和wgn()函数

MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。


1. WGN:产生高斯白噪声

y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度。
y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。
y = wgn(m,n,p,imp,state) 重置RANDN的状态。

在数值变量后还可附加一些标志性参数:
y = wgn(…,POWERTYPE) 指定p的单位。POWERTYPE可以是'dBW', 'dBm'或'linear'。线性强度(linear power)以瓦特(Watt)为单位。
y = wgn(…,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE可以是'real'或'complex'。

2. 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以瓦特为单位

dB、dBm、dBw和w的换算关系

dBm是一个表示功率绝对值的值(也可以认为是以1mW功率为基准的一个比值),计算公式为:10log(功率值/1mw)。

这里将dBm转换为W的口算规律是要先记住“1个基准”和“2个原则”:

“1个基准”:

30dBm=1W

“2个原则”:

1)+3dBm,功率乘2倍;-3dBm,功率乘1/2

举例:33dBm=30dBm+3dBm=1W×2=2W

27dBm=30dBm-3dBm=1W×1/2=0.5W

2)+10dBm,功率乘10倍;-10dBm,功率乘1/10

举例:40dBm=30dBm+10dBm=1W×10=10W

20dBm=30dBm-10dBm=1W×0.1=0.1W

以上可以简单的记作:30是基准,等于1W整,互换不算难,口算可完成。加3乘以2,加10乘以10;减3除以2,减10除以10。

几乎所有整数的dBm都可用以上的“1个基准”和“2个原则”转换为W。

例1:44dBm=?W

44dBm=30dBm+10dBm+10dBm-3dBm-3dBm

=1W×10×10×1/2×1/2

=25W

例2:32dBm=?W

32dBm=30dBm+3dBm+3dBm+3dBm+3dBm-10dBm

=1W×2×2×2×2×0.1

=1.6W

计算技巧:

+1dBm和+2dBm的计算技巧

+1dBm=+10dBm-3dBm-3dBm-3dBm

=X×10×1/2×1/2×1/2

=X×1.25

+2dBm=-10dBm+3dBm+3dBm+3dBm+3dBm

=X×0.1×2×2×2×2

=X×1.6

在计算中,有时候也可以根据上面的规律变换为-1dBm和-2dBm,达到快速口速的目的,即:

-1dBm=-10dBm+3dBm+3dBm+3dBm

=X×0.1×2×2×2

=X×0.8

-2dBm=-3dBm+1dBm

=X×1/2×1.25

=X×0.625

例3:51dBm=30dBm+10dBm+10dBm+1dBm

=1W×10×10×1.25

=125W

例4:38dBm=30dBm+10dBm-2dBm

=1W×10×0.625

=6.25W

这样都是口算,是不是很简单啊?你记住了吗?

另:dBw与W的换算

dBw与dBm一样,dBw是一个表示功率绝对值的单位(也可以认为是以1W功率为基准的一个比值

),计算公式为:10log(功率值/1w)。

dBw与dBm之间的换算关系为:0 dBw = 10log1 W = 10log1000 mw = 30 dBm。

如果功率P为1W,折算为dBw后为0dBw。

总之,dB,dBi, dBd, dBc是两个量之间的比值,表示两个量间的相对大小,而dBm、dBw则是表示功率绝对大小的值。在dB,dBm,dBw计算中,要注意基本概念,用一个dBm(或dBw)减另外一个dBm(dBw)时,得到的结果是dB,如:30dBm - 0dBm = 30dB。

一般来讲,在工程中,dBm和dBm(或dBw和dBw)之间只有加减,没有乘除。而用得最多的是减法:dBm 减 dBm 实际上是两个功率相除,信号功率和噪声功率相除就是信噪比(SNR)。dBm 加dBm 实际上是两个功率相乘。

0 0
原创粉丝点击