加性高斯白噪声信道:MATLAB小例题

1.dB

   (1)dB 是一个纯计数单位:dB = 10logX;

             X = 1000000000000000 = 10logX = 150 dB 

             X = 0.000000000000001 = 10logX = -150 dB

             dB的引入是为了把乘除关系变换为加减,便于工程中的运算。

   (2)dB是一个表征相对值的值,当考虑甲的功率相比于乙功率大或小多少个dB时,按下面计算公式:

            10lg(甲功率/乙功率)

            甲功率=乙功率:  10lg(1)=0dB;

            甲功率=2*乙功率:10lg(2)=3dB;

2.dBw:以1W为基准

           dBw=10lg(\frac{P}{1W})

3.dBm:以1mW为基准

         dBm=10lg(\frac{P}{1mW})

         0dBm=10lg(1mW)

         0dBw=10lg(1W)=10lg(1000mW)=30dBm

    由此可见,0dBw是一个比0dBm大得多的多的单位,功率上相差1000倍。

   dBm 减 dBm 实际上是两个功率相除。比如:

(信号)30dBm - (噪声)0dBm = (信号功率)1000mW/1mW(噪声功率) = 1000 = 30dB。(式1)

4.SNR(信噪比=信号功率/噪声功率)(信噪比SNR(dB)=信号功率(dBW)-噪声功率(dBW))

    本来2个数相除((SNR)1000W/1W)转化为2个数相减30dBW-0dBW=30dB(SNR)

    若信号功率为0dBW,因此,噪声的实际功率-SNRdBW。(式1)

例题一:

在正弦信号上叠加功率为-20dBW的高斯白噪声。

clear all
t = 0:0.001:10;             
x = sin(2*pi*t);              
snr = 20;                          %设定加性高斯白噪声功率
y = awgn(x,snr);              %正弦信号上叠加高斯白噪声
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y);title('叠加高斯白噪声的正弦信号');
z = y-x;
var(z)                               %计算噪声功率(方差)

ans = 0.01

函数awgn(x,snr)把加性高斯白噪声叠加到输入信号x中,snr以dB的形式指定噪声的功率。

这种情况下,信号的功率假设为0dBW(其实信号功率并不是0dBW,原来此处是假设!),噪声的功率实际上等于-snrdBW。于是,snr的值为20。

结果显示噪声功率为0.01,该值是由snr决定的。

例题二:

clear all
t = 0:0.001:10;               
x = sin(2*pi*t);             
snr = 20;                           %设定加性高斯白噪声功率
y = awgn(x,snr,10);           %正弦信号上叠加高斯白噪声
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y);title('叠加高斯白噪声的正弦信号');
z = y-x;
var(z)                        %计算噪声功率(方差)

函数awgn(x,snr,sigpower):假设输入信号的功率为sigpower(单位:dBW)(原来都是假设!)

10dBW-噪声功率=20dB,噪声功率=-10dBW

结果恰好:ans = 0.100。

例题三:终于计算信号功率了:awgn(x,snr,'measured')

clear all
t = 0:0.001:10;             
x = sin(2*pi*t);              
snr = 20;                                         %设定加性高斯白噪声功率
y = awgn(x,snr,'measured');           %正弦信号上叠加高斯白噪声
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y);title('叠加高斯白噪声的正弦信号');
z = y-x;
var(z)                         %计算噪声功率(方差)

ans = 0.005

实际信号功率为0.5(sum(abs(x).^2)/length(x)),snr=20dB,噪声功率0.005,结果也验证了这一点。

例题四:用randn函数产生加性高斯白噪声

randn(n):返还一个n行n列的随机矩阵,每一行每一列都服从均值为0,方差为1的正态分布;

randn(m,n):返还一个m行n列的随机矩阵,每一行每一列都服从均值为0,方差为1的正态分布;

clear all
t = 0:0.001:10;
x = sin(2*pi*t);
px = norm(x).^2/length(x);          %计算信号x的功率
snr = 20;                                     %信噪比,dB形式
pn = px./(10.^(snr./10));              %根据snr计算噪声功率
n = sqrt(pn)*randn(1,length(x));  %根据噪声功率产生相应的高斯白噪声序列
y = x+n;                          
subplot(2,1,1);plot(t,x);title('正弦信号x')
subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声后的正弦信号')
var(n)

ans = 0.005

x为一向量,norm(x)=norm(x,2)返回向量的2范数:即sum(abs(x).^2)^1/2;

根据噪声功率产生相应的高斯白噪声序列,要对噪声功率进行开方运算。(D(CX)=C^2D(X))

你可能感兴趣的:(MATLAB)