添加高斯白噪聲


matlab中噪聲功率、噪聲方差關系

以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));%signalpower

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));%signalpower

Pn=sum(sum((I(:,:,i)-In(:,:,i)).^2));%noisepower

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)。

**************************************************************************************************************************************

信噪比,英文名稱叫做SNR或S/N(Signal Noise Ratio),是指系統中信號與噪聲的比例。信號指的是來自設備外部需要通過這台設備進行處理的電子信號,噪聲是指經過該設備后產生的原信號中並不存在的無規則的額外信號(或信息),並且該種信號並不隨原信號的變化而變化。

信噪比的計量單位是dB,其計算方法是10LOG(Ps/Pn),其中Ps和Pn分別代表信號和噪聲的有效功率,也可以換算成電壓幅值的比率關系:20LOG(Vs/Vn),Vs和Vn分別代表信號和噪聲電壓的“有效值”。信噪比應該越高越好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM