MATLAB 與 FPGA無線通信、圖像處理、數字信號處理(數字濾波器)、信道編碼系列
加性高斯白噪聲(Additive White Gaussian Noise)
awgn函數向信號中添加高斯白噪聲
1.Y = awgn(X,SNR)
向信號“X”添加高斯白噪聲,信噪比大小爲“SNR”,單位是dB;信號“X”的功率假定爲 0 dBW;如果“X”是複數,則添加的是復高斯白噪聲;
Example 1:
X = sqrt(2)*sin(0:pi/8:6*pi);% 設定一輸入信號X
% 假定X的功率爲0 dBW,加入高斯白噪聲,加入後信噪比SNR=10 dB
Y = awgn(X,10); % 等價爲2中的Y = awgn(X,10,0);
2.Y = awgn(X,SNR,SIGPOWER)
當參數“SIGPOWER”是一個數值的時候,代表輸入信號“X”的功率,單位是dBW;當參數“SIGPOWER”是“measured”的時候,在添加噪聲前會測量(計算)輸入信號“X”的功率;
Example 2:
X = sqrt(2)*sin(0:pi/8:6*pi); % 設定一輸入信號X
% 設定X的功率爲5 dBW,加入高斯白噪聲,加入後信噪比SNR=10 dB
Y = awgn(X,10,5);
% 在加入噪聲前先測量信號X的功率,然後加入高斯白噪聲,加入後信噪比SNR=10 dB
Y = awgn(X,10,’measured’);
3.Y = awgn(X,SNR,SIGPOWER,S)
使用隨機流句柄“S”,用RANDN函數生成隨機噪聲樣本。如果“S”是整數,則將RANDN的狀態重置爲“S”。如果想要生成可重複的噪聲樣本,那麼提供一個隨機流的句柄(‘RandStream’),或者在默認隨機流上使用reset方法。
Y = awgn(X,SNR,SIGPOWER,STATE)
將RANDN狀態重置爲參數“STATE”指定的狀態。這種用法是不贊成的,可能在將來的版本中被刪除。
Example 3:
X = sqrt(2)*sin(0:pi/8:6*pi); % 設定一輸入信號X
S = RandStream('mt19937ar','seed',5489); % 由RandStream隨機數據流產生隨機數據
% 指定X的功率爲0 dBW,添加要產生的噪聲,SNR爲10dB,利用本地隨機流
Y = awgn(X,10,0,S);
4.Y = awgn(…, POWERTYPE)
使用參數“POWERTYPE”來指定信噪比“SNR”和信號功率“SIGPOWER”的單位。參數“POWERTYPE”可以選擇爲“db”或“linear”。如果“POWERTYPE”爲“db”,則信噪比“SNR”以db爲單位進行表示,“SIGPOWER”用dBW爲單位進行表示。如果“POWERTYPE”是“linear”,那麼信噪比“SNR”是按比例來測量的,而“SIGPOWER”是按瓦特來測量的。
Example 4:
X = sqrt(2)*sin(0:pi/8:6*pi); % 設定一輸入信號X
% 指定X的功率爲3瓦,並向其添加噪聲,設定線性信噪比爲4
Y = awgn(X,4,3,'linear');
% 指定X的功率爲3 dBW,並向其添加噪聲,信噪比SNR爲4 dB
Y = awgn(X,4,3,'dB');
% 在加入噪聲前先測量信號X的功率,然後加入高斯白噪聲,設定線性信噪比爲4,
Y = awgn(X,4,'measured','linear');
5.pskmod(data_in, M)
M = 4; %調製階數
data = randi([0 M-1],1000,1); %生成隨機序列作爲待調製信號
txSig = pskmod(data,M,pi/M); %調製,頻偏pi/4
rxSig = awgn(txSig,20); %白噪聲,SNR=20dB
scatterplot(txSig) %繪製發送信號的星座圖
scatterplot(rxSig) %繪製接收信號的星座圖