randn函数产生噪声信号
首先要理解信号的幅度和功率,例如信号的幅度为 
     
      
       
       
         U 
        
       
      
        U 
       
      
    U,那么信号的功率就是 
     
      
       
        
        
          U 
         
        
          2 
         
        
       
      
        U^2 
       
      
    U2,他们之间是平方的关系。
 matlab中randn函数用法,产生正态分布的随机数或矩阵的函数。
randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。
 例如下面的代码就是产生1个噪声信号,它的幅度和功率都是1。
noise = randn(1,1000);
plot(noise)
title('功率为1的噪声信号');

如何计算信号的平均功率
在matlab中计算信号的能量,可以通过以下公式,长度为 
     
      
       
       
         N 
        
       
      
        N 
       
      
    N的向量 
     
      
       
       
         x 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
      
        x(n) 
       
      
    x(n)的能量为
  
      
       
        
        
          p 
         
        
          o 
         
        
          w 
         
        
          e 
         
        
          r 
         
        
          = 
         
         
         
           ∑ 
          
          
          
            n 
           
          
            = 
           
          
            1 
           
          
         
           N 
          
         
        
          x 
         
        
          ( 
         
        
          n 
         
         
         
           ) 
          
         
           2 
          
         
        
       
         power = \sum_{n=1}^{N}x(n)^2 
        
       
     power=n=1∑Nx(n)2
 它的功率为:
  
      
       
        
        
          P 
         
        
          = 
         
         
         
           1 
          
         
           N 
          
         
         
          
           
           
             ∑ 
            
            
            
              n 
             
            
              = 
             
            
              1 
             
            
           
             N 
            
           
          
            x 
           
          
            ( 
           
          
            n 
           
           
           
             ) 
            
           
             2 
            
           
          
         
        
       
         P = \frac{1}{N}\sqrt{\sum_{n=1}^{N}x(n)^2} 
        
       
     P=N1n=1∑Nx(n)2
randn函数产生指定功率的噪声信号
知道了功率,只要开根号就可以知道信号的幅度
P = 2; %指定噪声信号的功率
noise = sqrt(P)*randn(1,1000); %开根号得到幅度
sum(abs(noise.^2))/1000 %输出信号的功率
matlab输出:
ans =
    2.0600
可以看出,计算出来的功率和指定的功率基本是吻合的。
指定功率的复信号噪声信号
复数 x = a + b j x=a+bj x=a+bj的幅度为 a 2 + b 2 \sqrt{a^2+b^2} a2+b2,因此指定幅度的时候要除以 2 \sqrt{2} 2
%%产生功率为P的复信号噪声信号
P = 2;
noise = sqrt(P/2)*(randn(1,1000)+1j*randn(1,1000));
sum(abs(noise.^2))/1000
matlab输出:
ans =
    1.9329
指定信噪比的信号
仿真的时候,我们先固定噪声功率,默认输出功率为1的噪声信号,然后再产生指定信噪比的有用信号。信噪比的定义:
  
      
       
        
        
          s 
         
        
          n 
         
        
          r 
         
        
          = 
         
        
          10 
         
        
          l 
         
        
          o 
         
        
          g 
         
        
          1 
         
         
         
           0 
          
          
           
           
             P 
            
           
             s 
            
           
           
           
             P 
            
           
             n 
            
           
          
         
        
       
         snr =10 log10^{\frac{P_s}{P_n}} 
        
       
     snr=10log10PnPs
 当噪声 
     
      
       
        
        
          P 
         
        
          s 
         
        
       
         = 
        
       
         1 
        
       
      
        P_s=1 
       
      
    Ps=1的时候,信号功率为:
  
      
       
        
         
         
           P 
          
         
           s 
          
         
        
          = 
         
        
          1 
         
         
         
           0 
          
          
          
            s 
           
          
            n 
           
          
            r 
           
          
            / 
           
          
            10 
           
          
         
        
       
         P_s=10^{snr/10} 
        
       
     Ps=10snr/10
 那么信号的幅度 
     
      
       
        
        
          U 
         
        
          s 
         
        
       
      
        U_s 
       
      
    Us为:
  
      
       
        
         
         
           U 
          
         
           s 
          
         
        
          = 
         
         
          
          
            P 
           
          
            s 
           
          
         
        
          = 
         
         
          
          
            1 
           
           
           
             0 
            
            
            
              s 
             
            
              n 
             
            
              r 
             
            
              / 
             
            
              10 
             
            
           
          
         
        
       
         U_s=\sqrt{P_s}=\sqrt{10^{snr/10}} 
        
       
     Us=Ps=10snr/10
 例如,要产生信噪比为snr的信号:
xs = sqrt(10^(snr/10))*exp(j*2*pi*fd*t); %构造有用信号



















