深入理解awgn函数如何向信号中添加高斯白噪声
引言
在數(shù)值模擬應用中,經(jīng)常在模擬信號中添加噪聲數(shù)據(jù),分析不同模型的信號解析能力。博文使用MATLAB中提供的awgn函數(shù)向信號X添加高斯白噪聲,但從實現(xiàn)原理上分析了awgn的實現(xiàn)過程,這樣讀者可以通過其他語言實現(xiàn)這一過程。
MATLAB中可以方便的使用awgn將一定信噪比的高斯白噪聲添加到理論信號中,產(chǎn)生添加噪聲后的模擬信號。另一個函數(shù)wgn僅是產(chǎn)生高斯白噪聲。[注:高斯白既標準正態(tài)分布]
wgn描述
y=wgn(m,n,p) 產(chǎn)生一個m行n列的高斯白噪聲的矩陣,p以dBW為單位指定輸出噪聲的強度。
y=wgn(m,n,p,imp) 以歐姆(Ohm)為單位指定負載阻抗。
y=wgn(m,n,p,imp,state)重置RANDN的狀態(tài)。
在數(shù)值變量后還可附加一些標志性參數(shù):
y=wgn(…,POWERTYPE)指定p的單位。POWERTYPE可以是dBW,dBm或linear。線性強度(linear power)以瓦特(Watt)為單位。
y=wgn(…,OUTPUTTYPE) 指定輸出類型。OUTPUTTYPE可以是real或complex。
awgn描述
y=awgn(x,snr)將白高斯噪聲添加到向量信號x中。標量snr指定了每一個采樣點信號與噪聲的比率,單位為dB。如果x是復數(shù)的,awgn將會添加復數(shù)噪聲。這個語法假設x的能量是0dBW。
y=awgn(x,SNR,SIGPOWER) 如果SIGPOWER是數(shù)值,則其代表以dBW為單位的信號強度,如果SIGPOWER為’measured’,則函數(shù)將在加入噪聲之前測定信號強度。
y=awgn(x,SNR,SIGPOWER,STATE)重置RANDN的狀態(tài)。
y=awgn(…,POWERTYPE)指定SNR和SIGPOWER的單位。POWERTYPE可以是’dB’或’linear’。如果POWERTYPE是’dB’,那么SNR以dB為單位,而SIGPOWER以dBW為單位。如果POWERTYPE是’linear’,那么SNR作為比值來度量,而SIGPOWER以瓦特為單位。
單位釋義:
根據(jù)分貝定義,分貝和噪聲具有下式關系:
rand與randn介紹
在使用awgn,wgn前還需要介紹一下rand與randn的用法及原理。
MATLAB中rand(m,n)函數(shù)用于產(chǎn)生m行n列的均勻分布序列。均分分布隨機數(shù)產(chǎn)生方法是在線性同余法基礎上對隨機數(shù)進行歸一化。
高斯白分布隨機數(shù)是在均勻分布的基礎上,使用Box-Muller方法,將均勻分布隨機數(shù)x1和x2生成高斯白隨機數(shù)y1和y2。
方法在“Numerical Recipes”書中有詳細介紹及源代碼,可直接使用。
由于randn產(chǎn)生的“高斯白序列x”標準差δ和均值μ并不嚴格等于理論值1和0,需要使用下試進行變換:
y是較x“嚴格”意義上的高斯白分布序列。利用序列 y可以生成指定均值μ′和標準差 δ′的正態(tài)分布序列 y′。
y′=y?δ′+μ′
直接用rand和randn函數(shù)對原始信號添加噪聲(例如y=x+rand(l,1)或者y=x+randn(l,1)),l,是信號長度。
wgn,awgn原理剖析
使用wgn,awgn函數(shù)內(nèi)部都調(diào)用了randn函數(shù)產(chǎn)生高斯白噪聲。即,wgn函數(shù)中調(diào)用了randn函數(shù),而awgn函數(shù)中調(diào)用了wgn函數(shù)。
在使用wgn,awgn涉及到了信號強度、噪聲強度和信號比的概念,有必要進一步解釋這兩個概念和計算方法。
信號強度:
信號的強度指的就是信號的能量(振幅的平方和),連續(xù)情形就是對f(x)平方后求積分,而在離散的情形是求和代替積分。在MATLAB中運行editawgn后可以看到源碼也是這樣實現(xiàn)的,既均方根振幅:
信噪比(Signal-to-noise ratio,SNR):
信噪比是用于科學和工程中將所需信號的電平與背景噪聲水平進行比較的措施。它被定義為信號功率與噪聲功率的比值,通常以分貝表示。高于1:1(大于0 dB)的信號比噪聲更多。SNR通常被引用于電信號,但它可以應用于任何形式的信號。下式是信噪比計算式:
其中, Psignal是信號的功率, Pnoise是噪聲功率。噪聲和原始信號必須等長且對應。如果在相同阻抗下測量信號和噪聲,則可以通過計算振幅比的平方來獲得SNR:
SNR=PsignalPnoise=AsignalAnoise
其中 Asignal, Anoise分別是均方根root mean square (RMS) 振幅。既MATLAB中源碼就是通過這種方式計算的信號強度與相應的噪聲強度。
噪聲強度和信噪比關系:
noisePower = sigPower/reqSNR;使用awgn函數(shù)向原始信號中添加噪聲過程比較簡單。首先,計算出f(x)的信號強度;然后,根據(jù)給定的信噪比計算噪聲強度。由于使用的是高斯白噪聲即randn函數(shù),而randn的結果是一個強度為1的隨機序列。于是,所要添加的噪聲信號顯然就是:sqrt(noisePower)?randn(n,1),其中n為信號長度。
下面分別是wgn和awgn中的部分源碼。從這里可以更好的明白信號強度、信噪比和噪聲強度的關系。標準正態(tài)分布的信號強度是1。
switch lower(pMode)case 'linear'noisePower = p;case 'dbw'noisePower = 10^(p/10);case 'dbm'noisePower = 10^((p-30)/10); end; if(strcmp(measMode,'measured'))sigPower = sum(abs(sig(:)).^2)/length(sig(:));if(strcmp(pMode,'db'))sigPower = 10*log10(sigPower);end end% --- Compute the required noise power switch lower(pMode)case 'linear'noisePower = sigPower/reqSNR;case 'db'noisePower = sigPower-reqSNR;pMode = 'dbw'; end% --- Add the noise if(isreal(sig))opType = 'real'; elseopType = 'complex'; endy = sig+wgn(size(sig,1), size(sig,2), noisePower, 1, state, pMode, opType);參考
[1]http://cn.mathworks.com/help/comm/ref/awgn.html?searchHighlight=awgn&s_tid=doc_srchtitle
[2]http://cn.mathworks.com/help/comm/ref/wgn.html?searchHighlight=wgn&s_tid=doc_srchtitle
[3]http://www.ilovematlab.cn/thread-28150-1-1.html
[4]https://en.wikipedia.org/wiki/Signal-to-noise_ratio
[5]https://en.wikipedia.org/wiki/Decibel
總結
以上是生活随笔為你收集整理的深入理解awgn函数如何向信号中添加高斯白噪声的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D动态烟花--HTML
- 下一篇: 网络营销推广实战宝典 2.3 软文推广