matlab复杂噪声产生实验报告,matlab加入噪声 - 范文中心
(2)產生指定方差和均值的隨機數
設某隨機變量x ~N(Mx,Dx)若要產生同樣分布的隨機變量y~ N(My,Dy),但使新的隨
機變量參數隨x分布改變
y=Dy/Dx*(x-Mx)+My
具體到正態分布,若要產生服從N(u,o)分布的M*N的隨機數矩陣,可以用
y=o*randn(M,N)+u
對于均勻分布,若要產生[a,b]區間的均勻分布的M*N的隨機數矩陣,則可以用
y=rand(M,N)*(b-a)+a
(3)直接對原始信號添加噪聲
y=x+rand(length(x),1)//均勻分布
y=x+randn(length(x),1))//正太分布
以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(: ))
這就是信號的強度。至此,SNR的具體實現也不用多說了(注:由于采用的是比值而非db,所以與下面“計算信噪比”所使用的方式不同,即沒有求對數步驟)。
最后說說awgn函數具體是如何添加噪聲的。事實上也很簡單,在求出x的強度后,結合指定的信噪比,就可以求出需要添加的噪聲的強度noisePower=sigPower/SNR。由于使用的是高斯白噪聲即randn函數,而randn的結果是一個強度為1的隨機序列(自己試試sum(randn(1000,1).^2)/1000就知道了,注意信號的長度不能太小)。于是,所要添加的噪聲信號顯然就是:sqrt(noisePower)*randn(n,1),其中n為信號長度。
自然要求的白噪聲的方差也可以求出來了!
http://blog.163.com/wei_jian_ping/blog/static/[***********]1704/
噪聲強度(噪聲功率) 噪聲方差到底有什么關系?
2013-01-05 20:27:01| 分類: 高斯白噪聲 |字號 訂閱
轉載自 川草天涯的博客
以matlab中awgn函數為例說明:
在matlab中無論是wgn還是awgn函數,實質都是由randn函數產生的噪聲。即:wgn函數中調用了randn函數,而awgn函數中調用了wgn函數。
根據awgn的實現代碼可以知道”向已知信號添加某個信噪比(SNR)的高斯白噪聲“,即:awgn(x,sn
r,’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分別代表信號和噪聲電壓的“有效值”。信噪比應該越高越好。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的matlab复杂噪声产生实验报告,matlab加入噪声 - 范文中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 判断exception类型_C
- 下一篇: 计算道路超高lisp_5G+AI超高清智