MATLAB產生特定功率譜密度的高斯白噪聲的兩種方法

產生方法

假設我們想要的高斯白噪聲信號的功率譜密度爲k(這裏只考慮k爲常數的情形)。

1、wgn函數:

noise = wgn(1,N,k*B,'linear');             % 功率P = 功率譜密度*B = k*B;

其中前兩個參數表示行列數,第三個參數表示信號功率P,要注意區分功率和功率譜密度

P(信號功率)=k(信號功率譜密度)* B(帶寬);			% 這裏k爲常數;

具體原因是:我們所能產生的噪聲總是離散且有限長的,不妨記長度爲N,有限長的時域信號對應無限寬的頻譜,但是我們只能通過DFT獲得有限長的頻譜,頻譜長度由時域採樣間隔td決定,即帶寬爲B = 1/td,td無法做到無窮小,那麼B就不可能無限寬,這表明從頻域來看,我們只能獲得噪聲的長度爲 B 的頻譜,那麼功率譜的頻率範圍也爲B,這樣就可以得到P(功率)=k(功率譜密度)* B(帶寬)
我們可以通過下面的代碼塊來驗證:

clear all; close all;
N = 2048;           % 噪聲點數2048點;
B = 20000;          % 帶寬20000Hz;
k = 1;              % 功率譜密度1;
f = 0-B/2:B/N:B-B/N-B/2;    % 頻譜列表
noise = wgn(1,N,k*B,'linear');      % 功率P = 功率譜密度*B = k*B;
Nf = fftshift(fft(noise,N));        % 噪聲頻譜
GN = power(abs(Nf), 2);             % 噪聲功率譜
figure; hist(noise, 50);title('噪聲1的概率分佈');
figure; plot(f,GN/N);title('噪聲功率譜');xlabel('f/Hz');
fprintf('噪聲功率譜密度均值爲:%f\n', mean(GN/N)/B);

在這裏插入圖片描述在這裏插入圖片描述

2、randn函數

noise = randn(1,N) * ((k*B)^0.5);        % 與噪聲直接相乘的應該是 功率^0.5(即電壓值)

randn直接生成的時域信號,通過乘以一個係數使它的功率譜密度發生改變,這個係數應當是信號的幅值(或者說電壓),與噪聲直接相乘的應該是 功率^0.5(即電壓值)
在這裏插入圖片描述在這裏插入圖片描述
結果也是在1附近,與k值基本吻合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章