matlab加隨機噪音

2021-07-23 22:27:53 字數 4616 閱讀 5532

雜訊中有兩種性質的雜訊,加性雜訊和乘性雜訊。白雜訊(白雜訊),是一種功率頻譜密度為常數的隨機訊號或隨機過程,是功率譜密度在整個頻域內均勻分布的雜訊。此訊號在各個頻段上的功率是一樣的,由於白光是由各種頻率(顏色)的單色光混合而成,因而此訊號的這種具有平坦功率譜的性質被稱作是「白色的」,此訊號也因此被稱作白雜訊。相對的,其他不具有這一性質的雜訊訊號(功率譜密度不均勻分布)被稱為有色雜訊。 

乙個雜訊過程所具有的頻譜寬度遠遠大於它所作用系統的頻寬。理想的白雜訊具有無限頻寬,因而其能量是無限大,這在現實世界是不可能存在的。實際上,我們常常將有限頻寬的平整訊號視為白噪音,因為這讓我們在數學分析上更加方便。然而,白雜訊在數學處理上比較方便,因此它是系統分析的有力工具。一般,只要乙個雜訊過程所具有的頻譜寬度遠遠大於它所作用系統的頻寬,並且在該頻寬中其頻譜密度基本上可以作為常數來考慮,就可以把它作為白雜訊來處理。例如,熱雜訊和散彈雜訊在很寬的頻率範圍內具有均勻的功率譜密度,通常可以認為它們是白雜訊。

加性雜訊一般指熱雜訊、散彈雜訊等,它們與訊號的關係是相加,不管有沒有訊號,雜訊都存在。而乘性雜訊一般由通道不理想引起,它們與訊號的關係是相乘,訊號在它在,訊號不在他也就不在。一般通訊中把加性隨機性看成是系統的背景雜訊;而乘性隨機性看成系統的時變性(如衰落或者都卜勒)或者非線性所造成的。

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'。線性強度(linearpower)以瓦特(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以瓦特為單位。 

注釋 1. 分貝(decibel,db):分貝(db)是表示相對功率或幅度電平的標準單位,換句話說,就是我們用來表示兩個能量之間的差別的一種表示單位,它不是乙個絕對單位。例如,電子系統中將電壓、電流、功率等物理量的強弱通稱為電平,電平的單位通常就以分貝表示,即事先取乙個電壓或電流作為參考值(0db),用待表示的量與參考值之比取對數,再乘以20作為電平的分貝數(功率的電平值改乘10)。 

2. 分貝瓦(dbw, dbwatt):指以1w的輸出功率為基準時,用分貝來測量的功率放大器的功率值。 

3. dbm(db-milliwatt):即與1milliwatt(毫瓦)作比較得出的數字。 

0 dbm = 1 mw 

10 dbm = 10 mw 

20 dbm = 100 mw 

也可直接用randn函式產生高斯分布序列,例如: 

y=randn(1,2500); 

y=y/std(y); 

y=y-mean(y); 

a=0.0128; 

b=sqrt(0.9596); 

y=a+b*y; 

就得到了 n ( 0.0128, 0.9596 ) 的高斯分布序列

產生指定方差和均值的隨機數

設某個隨機變數x均值為mu,方差為var^2,若要產生同樣分布的隨機變數y,但使新的隨

機變數引數改變,均值為mu_1,方差為var_1^2,可以用如下公式進行變換:

y=var_1/var*(x-mu)+mu_1,其中x為隨機變數,其餘為常數(原分布引數)。

具體到正態分佈,若要產生均值為u,方差為o^2的m*n的隨機數矩陣,可以用

y=o*randn(m,n)+u得到。

對於均勻分布,若要產生[a,b]區間的均勻分布的m*n的隨機數矩陣,則可以用

y=rand(m,n)*(b-a)+a得到。

%****************************************=%

上述資料基本上完整地描述了原始問題,不過有幾點內容附帶說明一下:

1. 上面資料最後部分隱含了乙個出自zhyuer 版友的結論:

%****************************************=%

1)  

rand產生的是[0,1]上的均勻分布的隨機序列

2)  

randn產生均值為0,方差為1的高斯隨機序列,也就是白雜訊序列;

%****************************************=%

也就是說,可以直接使用上面兩個函式對原始訊號新增雜訊(例如y=x+rand(length(x),1)或者y=x+randn(length(x),1))

2.事實上,無論是wgn還是awgn函式,實質都是由randn函式產生的雜訊。即,wgn函式中呼叫了randn函式,而awgn函式中呼叫了wgn函式。下面就我熟悉的「向已知訊號新增某個訊雜比(snr)的高斯白雜訊」來說明一下,不過如果大家閱讀過awgn的實現**就不用看下去了,呵呵。從上述可知,這個任務可以使用awgn函式實現,具體命令是:awgn(x,snr,』measured』,'linear』),命令的作用是對原訊號f(x)新增訊雜比(比值)為snr的雜訊,在新增之前先估計訊號f的強度。這裡涉及三個問題:在awgn這個函式中,snr是如何計算的?什麼是訊號的強度?awgn函式具體是如何新增雜訊的?事實上,前兩個問題是相關的,因為根據定義,snr就是訊號的強度除以雜訊的強度,所以,首先來講講訊號的強度。其實訊號的強度指的就是訊號的能量,在連續的情形就是對f(x)平方後求積分,而在離散的情形自然是求和代替積分了。在matlab中也是這樣實現的,只不過多了乙個規範化步驟罷了:

sigpower = sum(abs(sig(:)).^2)/length(sig(:))

這就是訊號的強度。至此,snr的具體實現也不用多說了(注:由於採用的是比值而非db,所以與下面「計算訊雜比」所使用的方式不同,即沒有求對數步驟)。

最後說說awgn函式具體是如何新增雜訊的。事實上也很簡單,在求出f的強度後,結合指定的訊雜比,就可以求出需要新增的雜訊的強度noisepower=sigpower/snr。由於使用的是高斯白雜訊即randn函式,而randn的結果是乙個強度為1的隨機序列(自己試試sum(randn(1000,1).^2)/1000就知道了,注意訊號的長度不能太小)。於是,所要新增的雜訊訊號顯然就是:sqrt(noisepower)*randn(n,1),其中n為訊號長度。

3. 上面所說的都是具有分布特性(相關的)隨機序列,如果需要新增不相關的隨機序列,則可以使用jimin版友的方法:

%****************************************=%

for i=1:100

x(i)=randn(1);

end 

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

pn=sum(sum((i(:,:,i)-in(:,:,i)).^2));%noise power

snr=snr+10*log10(ps/pn);

endsnr=snr/3;

end%****************************************=%

3. 隨機產生1-n的索引排列:randperm函式

4. 隨機產生1-60的正整數乙個(三種方法):

a=randperm(60);

b=a(1)

a=round(100*rand(1,10))

b=a(1)

b = unidrnd(60,1,1)

matlab隨機訊號處理

matlab中rand和randn是產生隨機數的命令,x rand 1,n 產生 0,1 區間均勻分布的長度為n的隨機訊號,x randn 1,n 產生長度為n且具有零均值和單位方差的正態分佈的隨機訊號。matlab中產生偽隨機數需要種子,把不同的種子用於不同的隨機數生成器產生不同的偽隨機數。bet...

matlab生成隨機矩陣

一 matlab 裡和隨機數有關的函式 1 rand 產生均值為 0.5 幅度在 0 1之間的偽隨機數 2 randn 產生均值為 0 方差為 1的高斯白雜訊 3 randperm n 產生1 到n的均勻分布隨機序列 4 normrnd a,b,c,d 產生均值為 a 方差為 b大小為 cxd的隨機...

MATLAB生成隨機點

clc,close all,clear all sc 1.3 定義縮放係數 xy tra 3 定義標籤平移距離 r 400 定義圓的半徑 num pt 5000 定義資料點個數 randr r rand num pt,1 生成隨機點 phi 2 pi 0 rand num pt,1 生成隨機角度 x...