matlab+awgn和wgn,噪聲強度(噪聲功率) 噪聲方差到底有什么關系? matlab中的awgn函數...

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

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

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

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

http://blog.163.com/wei_jian_ping/blog/static/1038117252013058271704/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值