模拟加性高斯白噪声(AWGN)信道

在本文中,SNR-per-bit之间的关系(E类b条/N个0)和SNR-per-symbol(E类/N个0)是关于M元信令方案定义的。然后复杂基带模型讨论了AWGN信道,然后讨论了各种调制的理论误差率加性高斯白噪声信道最后,年开发的数字调制器和检测器的复杂基带模型本书前一章,以构建完整的通信系统模型。

如果你想了解更多关于白噪声的模拟和分析,我建议你阅读这篇文章:白噪声:使用Matlab进行仿真与分析.

信噪比(SNR)定义

假设信道带宽B类,接收信号功率P(P)第页和噪声的功率谱密度N个0/2,信噪比(信噪比)由提供

\伽马=\显示样式{\frac{P_r}{N_0B}}

让信号的每比特能量表示为E类b条每符号能量为E类,然后γb条=Eb条/N个0 γ=E/N个0分别是位SNR和符号SNR。

对于带有k=对数2(百万)每个符号的比特数,每个调制符号的信号能量由下式给出

E_s=k.E_b

每个符号的信噪比由下式给出

\gamma_s=\显示样式{\frac{E_s}{N_0}=k

AWGN信道模型

为了在性能模拟中模拟特定的SNR点,来自发射机的调制信号需要添加特定强度的随机噪声。产生的噪声强度取决于所需的信噪比水平,这通常是此类模拟中的输入。实际上,SNR在分贝。给定一个特定的SNR点进行模拟,让我们看看如何模拟一个AWGN信道,该信道向传输的符号添加正确水平的白噪声。

加性高斯白噪声信道的仿真模型
图1:awgn信道的简化仿真模型

考虑图1中给出的AWGN信道模型。给定要模拟的特定SNR点,我们希望生成高斯白噪声矢量\数学{N}(0,{\sigma}^2)并将其添加到输入信号中。所述方法可用于波形仿真和复杂基带仿真。在下文中,术语SNR(γ)指γb条=Eb条/N个0调制为二进制时(例如:BPSK)。对于QPSK和MQAM等多级调制,术语SNR指的是γ=E/N个0.

(1)假设,是表示传输信号的向量。我们希望生成一个向量第页表示通过AWGN信道后的信号。AWGN信道增加的噪声量由给定的SNR控制–γ

(2)对于波形仿真模型,让给定的过采样率表示为L(左)另一方面,如果您正在使用复杂基带模型,套L=1.

(3)N个表示向量的长度矢量的信号功率可以测量为,

计算信号功率的方程式

(4)噪声矢量所需的功率谱密度n个计算为

awgn信道所需噪声功率谱密度方程

(5)假设所有数字调制的复IQ平面,产生高斯随机噪声所需的噪声方差(噪声功率)如下所示

awgn信道的噪声方差方程

(6)生成从正态分布中提取的噪声向量n,平均值设为零,标准偏差由上述方程计算得出

实和复加性高斯白噪声信道的噪声矢量方程

(7)最后将生成的噪声矢量相加(n个)到信号机()

awgn噪声信道方程

Matlab代码

以下用Matlab编写的自定义函数可用于向传入信号添加AWGN噪声。它可以用于波形仿真以及复杂的基带仿真模型。

%作者-Mathuranathan Viswanathan(gaussianwaves.com%这段代码是本书的一部分:使用Matlab的无线通信系统和使用Matlab的数字调制。函数[r,n,N0]=add_awgn_noise(s,SNRdB,L)%将AWGN添加到给定信号的功能%[r,n,N0]=add_awgn_noise(s,SNRdB)将awgn噪声矢量添加到信号%“s”生成指定SNR的%结果信号矢量“r”%单位为dB。它还返回添加到%信号“s”和噪声的谱密度N0%%[r,n,N0]=add_awgn_noise(s,SNRdB,L)将awgn噪声矢量添加到%信号“s”生成指定的结果信号向量“r”%信噪比(单位:dB)。参数“L”指定使用的过采样率%在系统中(用于波形模拟)。它还返回噪音%矢量“n”添加到信号“s”和频谱%添加的噪声密度N0s_temp=秒;如果是列,s=s.';结束;%返回与's'相同的结果γ=10ˆ(SNRdB/10);%信噪比到线性标度如果nargin==2,L=1;end%如果未给定第三个参数,请将其设置为1如果是isvector,P=L*总和(abs.ˆ2)/长度;%矢量中的实际功率对于MFSK等多维信号,else%P=L*总和(总和(abs.ˆ2))/长度;%如果s是矩阵[MxN]结束N0=P/伽马;%求噪声谱密度如果(以色列),n=平方(N0/2)*randn(大小);%计算出的噪音其他的n=sqrt(N0/2)*(兰登(大小)+1i*randn(大小));%计算出的噪音结束r=s+n;%接收到的信号如果iscolumn(s_temp),则r=r';结束;%以原始格式返回r作为s结束

Python代码

以下用Python 3编写的自定义函数可用于向传入信号添加AWGN噪声。它可以用于波形仿真以及复杂的基带仿真模型。

#作者-Mathuranathan Viswanathan(gaussianwaves.com#此代码是《使用Python的数字调制》一书的一部分从numpy导入sum,isrealobj,sqrt从numpy.random导入standard_normal定义awgn(s,SNRdB,L=1):"""AWGN信道将AWGN噪声添加到输入信号。该函数将AWGN噪声矢量与信号“s”相加,以生成指定信噪比的结果信号矢量“r”(单位:dB)。它还可以返回添加到信号“s”的噪声矢量“n”和添加的噪声的功率谱密度N0参数:s:输入/传输信号矢量SNRdB:接收信号的期望信噪比(单位:dB)L:过采样因子(适用于波形模拟)默认L=1。退货:r:接收信号矢量(r=s+n)"""伽马=10**(SNRdB/10)#信噪比到线性刻度如果s.ndim==1:#如果s是一维向量P=L*sum(abs(s)**2)/len(s)#矢量中的实际功率else:#多维信号,如MFSKP=L*总和(总和(abs(s)**2))/len(s)#如果s是矩阵[MxN]N0=P/gamma#求噪声谱密度if isrealobj(s):#检查输入是否为实/复杂对象类型n=sqrt(N0/2)*standard_normal(s.shape)#计算的噪声其他:n=平方(N0/2)*(标准_规范(s.shape)+1j*标准_规范r=s+n#接收信号返回r

AWGN信道中数字调制的理论符号错误率

表示符号错误率(SER)作为P_秒,每比特的信噪比为gamma_b=E_b/N_0和SNR-per-symbol为gamma_s=E_s/N_0表1列出了AWGN信道上各种调制方案的符号错误率(参见[1])。

awgn信道中各种调制的理论符号错误率表。
表1:AWGN信道中各种调制的理论符号错误率

理论符号错误率被编码为可重用函数。在本实施中,erfc函数使用,而不是Q函数如表4.1所示。以下方程式描述了erfc函数和Q函数之间的关系。

Q(x)=\frac{1}{2}erfc\left(\frac{x}{\sqrt{2}}\right)

性能仿真的统一仿真模型

书的前一章给出了各种数字调制器和解调器的复杂基带模型的代码实现。利用这些模型,我们可以创建一个统一的仿真代码来模拟AWGN信道上各种调制技术的性能。

AWGN信道性能仿真的完整仿真模型如图2所示。图中所示为相干通信系统模型(适用于MPSK/MQAM/MPAM调制)

AWGN信道通信系统的完整仿真模型
图2:具有AWGN信道的通信系统的完整仿真模型

实现上述仿真模型的Matlab代码是在书中给出这里,使用统一的方法来模拟任何给定调制技术的性能–MPSK、MQAM、MPAM或MFSK(MFSK模拟技术可在以下书籍中获得:Python数字调制和Matlab数字调制).

本文是以下书籍的一部分
使用Matlab进行数字调制:从头开始建立仿真模型,国际标准图书编号:978-1521493885
使用Python的数字调制国际标准图书编号:978-1712321638
Matlab中的无线通信系统国际标准图书编号:979-8648350779
所有书籍都有电子书(PDF)和平装本格式

模拟代码将自动选择所选的调制类型,执行蒙特卡罗模拟,计算符号错误率,并将其与理论符号错误率进行绘图。MQAM和MPSK调制的模拟性能结果如图3和图4所示。

AWGN信道上M-QAM调制的误码率性能仿真
图3:AWGN信道上M-QAM调制的模拟符号误码率性能
AWGN信道下M-PSK调制的模拟误码率性能
图4:AWGN信道上M-PSK调制的模拟符号误码率性能

评价此文章:可怜的低于平均水平平均很好杰出的(23平均票数:4.43(共5个)

参考文献

[1]Andrea Goldsmith,《无线通信》,剑桥大学出版社,第一版,2005年8月8日。

作者的书籍

Matlab中的无线通信系统
Matlab中的无线通信系统
第二版(PDF)

注意:此帖子中包含评分,请访问此帖子进行评分。
使用Python的数字调制
使用Python的数字调制
(PDF电子书)

注意:此帖子中包含评分,请访问此帖子进行评分。
数字模块使用matlab图书封面
使用Matlab的数字调制
(PDF电子书)

注意:此帖子中包含评分,请访问此帖子进行评分。
手绘通信工程最佳书籍
信号处理最佳书籍

关于“模拟加性高斯白噪声(AWGN)信道”的45点思考

  1. 先生,现在有一个三维QAM信号,也就是说,QAM信号有三个坐标分量:x、y和z。假设有100个符号,我将它们表示为3×100矩阵。我如何向其添加高斯白噪声?

    答复
  2. 先生,我需要Matlab代码源:

    我们是一个正交频分复用(OFDM)发射机,由总共N=256个子载波和L=32个样本的前缀循环组成。在这N个子载波中,前16个子载波被分配用于传输64-QAM符号。传输功率可以标准化为1W(但对于本次练习来说并不重要)。考虑了AWGN信道模型。

    使用MATLAB仿真,显示上述OFDM系统的误码率(BER)曲线作为Eb/No的函数。将获得的误码率性能与考虑64-QAM单载波调制时获得的性能进行比较(我们想使用MATLAB函数“berawgn”来节省时间)。

    答复
  3. 您好,先生,
    这是正确的吗?如果是,这意味着什么?
    信噪比=10
    y=awgn(randn(11000),snr,‘测量’)
    这种情况下的噪声方差是多少?

    答复
  4. 尊敬的马图拉纳坦爵士:,

    我买了你所有的书,我已经了解了通带和复杂基带仿真模型。我不知道为什么在你的符号能量演算中,你断言过采样因子仅在仿真为波形级时才相关,但当仿真为复杂基带时,它不能包括在内。

    非常感谢你。
    当做

    答复
    • 在波形级模拟中,根据采样频率,每个传输符号由#L个采样比特组成。因此,此类模拟模型的过采样因子设置为L。

      另一方面,在复杂基带模型中,我们没有模拟传输信号中的位对位变化。相反,我们对符号级模拟感兴趣。这里不涉及采样。因此,每个传输的符号仅相当于一个位(在符号采样瞬间)。因此,过采样因子L设置为1。

      答复
      • 感谢Mathuranathan先生清晰快速的回复。我的误解源于这样一个事实,即在我的模拟中,通带模拟和复杂模拟之间的区别只是使用或不使用载波,这意味着我总是有一些过采样因子(在复杂包络中要小得多)。

        那么,我们可以说存在三个级别的模拟吗

        通带模拟(OF=N)
        复杂包络线(OF=M<<<N)
        符号级别(OF=1)

        非常感谢你

        答复
  5. 亲爱的Mathuranathan:,

    你能更深入地解释一下使用复杂基带或通带模拟以包括或不包括过采样因子之间的区别吗?。

    非常感谢你

    答复
  6. 你好,

    我还有下一个问题:awgn对象有一个名为“SamplesPerSymbol”的参数,该参数在自定义公式中的何处使用?

    谢谢。

    答复
    • 此处给出的自定义函数模仿此处给出的“awgn”函数:http://www.mathworks.com/help/comm/ref/awgn.html
      它根据定义为“每个样本的信噪比”的给定信噪比计算所需的噪声。因此,在这种情况下,“示例Persymbol”没有任何含义。

      然而,您所指的comm toolbox对象更复杂,它包括不同的参数,如EbNo、EsNo、SNR、BitsPerSymbol、SignalPower、SamplesPerSymbol和Variance等。。,

      当然,这里给出的函数可以扩展到包括上述所有参数。

      答复
  7. 代码不错…。我想问一下我的具体问题…。。
    我正在构建一个端到端的基本通信收发器。在添加AWGN噪声之前,我在发射机的信号被过采样了10倍。我按照您的代码添加了一个噪声,但在添加噪声时没有考虑过采样因素。我已经验证了信道块,并在接收器处处理了信道信号(满足接收器处的上采样因子),但在将BER曲线与理论结果(berawgn函数)进行比较后,BER曲线中存在4dB差异/偏移(我的结果比附件中的理论BER曲线好4dB)…。。我唯一担心的是AWGN块中的上采样因子合并,而我的发射机和接收机没有错误…。。
    请告诉我们如何在增加噪音的过程中满足这种上采样因素。

    答复
    • 如果代码中没有包含过采样因子,则该曲线是预期的。
      要合并过采样因子(OF),请将第17行更改为add_awgn_noise函数中的
      Esym=OF*总和(abs(x))^2) /(L);%计算实际符号能量

      答复
      • 亲爱的,谢谢你的回复。我按照你的建议做了,但这一次的误码性能变差了6dB,如以下附件所示。请建议出了什么问题…我需要使用吗
        Esym=平方(OF)*总和(abs(x))^2) /(L);%计算实际符号能量
        而不是。再次感谢您的光临。

        答复
        • 发射机发出的调制信号的格式是什么?您是否使用复数表示法来表示同相和正交信号-复数基带等效模型?在这种情况下,模拟中不需要过采样因子。

          如果调制信号不是复杂格式,可以按如下方式添加噪声(我已经验证了所有PSK调制都是这样,QAM也应该可以)。这里唯一的区别是噪声σ设置为N0/2(与复信号的情况相同)

          信噪比=10ˆ(信噪比_dB/10);%信噪比到线性标度
          Esym=OF*总和(abs(x))^2) /(L);%计算实际符号能量
          N0=Esym/SNR;%求噪声谱密度
          noiseSigma=sqrt(N0/2)#注意系数N0/2
          n=噪声Sigma*randn(1,L);%计算出的噪音
          y=x+n

          相反,如果您的模拟是通带模拟,则过采样因子是相关的。

          答复
          • 是的,传输的信号是一个复杂的信号,我添加的噪声既包括实部也包括虚部,满足了你提到的No/2因素。
            此外,我预见到的可能的错误是,我将名为snrVecdB的向量传递给berawgn函数,而不是Eb/No,因为berawgn函数需要Eb/No而不是snr向量。
            snrVecdB=-4:2:10;%单位:db
            bertheory=berawgn(snrVecdB(snrCount),'qam',M);
            记住,这很重要,因为我在AWGN信道中添加噪声时,正在模拟中计算Es/No。

            答复
  8. 先生@马图拉纳坦:disqus,信号的带宽如何,我想我们必须调整噪声功率的值,该值仅位于该带宽范围内,对吗…对于AWGN情况,当加入噪声时,其沿整个频率的分布是平坦的,那么信号频谱中的噪声功率是多少?我们的兴趣应该是这个带宽内的噪声功率值,不是吗。我非常感谢这个伟大的网站,它让我受益匪浅。

    答复
    • 如果您首先生成一个实际噪声信号x,平均值和方差为零,σ^2(因此功率也是σ^ 2),并且您将其用于特定采样率Fs的模拟,那么谱密度就是σ^2/(Fs/2)。对于带限噪声,我认为如果你首先根据你想要的密度产生噪声功率,对大多数人来说会更清楚(因此你需要更多功率,F越大)。然后用一些滤波器对其进行滤波(通常是FIR,以匹配一些模拟滤波器或您正在使用的特定数字滤波器),并选择滤波器,使其具有单位直流增益(系数之和为1)。然后在滤除白噪声后,它的功率=BW*sigma^2/(Fs/2),其中BW是滤波器的单边带宽(0到截止频率)。注意,一个BW=Fs/2(没有滤波),您仍然处于sigma^2,但对于任何较小的BW,您已经降低了功率。

      答复
  9. 想在我的信号中添加简单的相位噪声。当我在频域中分析信号时,没有得到所需的输出。对于理想信号,它应该只有单峰,而在加上噪声后,它应该有一些波动。我犯的错误是什么?

    sig=cos(2*pi*30*t);%%%%原始信号
    sig_fft=快速傅里叶变换(sig);
    图形,绘图(abs(sig_fft));
    西格玛=2
    sig2=sig+sigma*randn(1,长度(t))添加相位噪声
    sig2_fft=快速傅里叶变换(sig2);
    图形,绘图(abs(sig2-fft));

    答复
      • 感谢Mathuranathan的回复。

        啊,好的。这意味着我可以使用Theta=randn(1,长度(t));正确的?

        答复
        • 通常,相位噪声被认为是从间隔[-pi,pi]中提取的均匀噪声。
          因此,相位噪声需要从-pi到+pi,并且可以从均匀分布中得出。对于均匀rvs,请使用rand函数,而不是用于高斯rvs的randn函数。

          rand函数必须生成从-pi到+pi的均匀相位。通读matlab文档,了解如何在区间[a,b]中生成均匀分布,并用-pi替换a,用+pi替换b。

          答复
            • 嘿Mathuranathan,
              正如你告诉我的,我用兰特来产生相位噪声。然而,当我看到频域中的图表时,频谱并没有变宽。你能告诉我我犯了什么错误吗?

              σ=0.5;
              t=0:0.01:1;
              sig=cos(2*pi*4*t);%原始信号
              A=σ*randn(1,长度(t));%相位噪声的标准偏差,增加
              sig2=(A).*cos(2*pi*4*t+sigma*rand(1,长度(t));%相位噪声和振幅4e噪声信号
              图形,绘图(t,sig,'r',t,sig2,'b');
              图形,绘图(abs(fft(sig,10*长度(sig)));
              图形,绘图(abs(fft(sig2,10*长度(sig2)));
              返回

              答复
          • 相位噪声最好在-pi到pi之间不均匀。那么多相位噪声会破坏任何通信系统。如果您想查看相位噪声示例的PDF格式,并且您有Matlab Comm工具箱,您可以键入:

            Nsamp=1e5;
            Nhist=1e3;
            hPhNoise=通信相位噪声('Level',[-60-80],'FrequencyOffset',[2000],'SampleRate',1024);%来自doc页面的示例调用
            y=步长(hPhNoise,1j*个数(Nsamp,1));%实例化复杂的平凡常数相量上的相位噪声(如果不复杂,Matlab会投诉)
            数字,hist((角度(y)-pi/2),Nhist)

            当然,PDF是高斯的。为什么会这样?由于大数定律,相位噪声是模拟硬件中许多小事情的总和,这些小事情会产生不完美的正弦曲线。所以事实上,mayank使用randn并通过sigma对相位噪声进行缩放是正确的。问题是:虽然您可以调整sigma以匹配RMS相位噪声规范,然后编写代码以使用sigma*randn(1,N)来输入cos或exp函数的参数,但当相位噪声从来不是这样时,这将产生白相位噪声(与AWGN的每个时间采样无关),因为它有一个(更难模拟)只能在对数图上清晰查看的dBc/Hz频谱。因此,在将噪声序列应用于参数之前,必须对其进行过滤。同样,如果你有Comm工具箱,有很多关于doc-Comm.PhaseNoise的信息。如果你没有工具箱(或者即使你有),这个链接看起来不错:http://www.dsplog.com/2012/09/30/modeling-phase-noise-frequency-domain公司/

            答复
            • 这不一定是真的。相位噪声的假设取决于上下文。例如,振荡器相位可以从一个符号时间随机设置到另一个符号时刻,并且仍然可以非相干地检测到fsk等调制技术。如果没有给出上下文,我通常会假设噪声是均匀的

              答复
              • Mathuranathan,关于上下文的观点很好。我同意在FSK系统中可以容忍缓慢变化的随机相位(或任何通信系统,如果变化足够慢并且可以被跟踪)。这个随机相位可以遍历各个地方,模为2π,从很长一段时间来看,它在0到2π之间是均匀的。我对相位噪声的基本理解是:在模拟域中,它是一个随机过程,其中包含所有频率内容,但当从0频率积分到任何有限带宽时,它具有无限功率。我通常对其建模的方法是,如果使用了锁相环,则忽略从0频率到PLL BW的部分(或者,如果没有像您提到的非相干FSK系统那样使用,则忽略对BER没有影响的一些低频限制)。并且有一个基于所使用的滤波的高速截止。因此,我们只需要考虑f1到f2之间的相位噪声密度,通常在这两个频率之间进行积分时,您可能最终得到1度RMS或20度RMS(BPSK中可以接受,但256 QAM中不能接受)或其他值,但您将得到一个零均值随机序列(因为您忽略了从0频率到f1的部分)这意味着随机变量将有一个PDF,它是一个特定的形状,我保持在这一点上,形状通常是高斯的,不均匀。不过,我同意上下文很重要,我想在发表进一步评论之前,我需要更多地了解mayank的准确模拟任务。你试过我发布的示例代码了吗?

                答复
                • Dara_parsavand,谢谢你的见解和知识。是的,我知道comm工具箱中的相位噪声函数,我总是在需要时在模拟中使用它。是的,正如你提到的,相位电平对相移键控系统来说更为重要。

                  答复
    • 如果给定了Eb/N0值,则应按如下方式生成噪声。

      实际上,上述函数计算符号能量(Es)并相应地向传入信号添加噪声。输入参数SNR_dB等于Es/N0(单位:dB)。

      如果给定了Eb/N0,则需要将其适当转换为Es/N0。示例如下

      Es/N0 dB=10*log10(2)+Eb/N0 dB;%QPSK的线性标度,1个符号=2比特
      Es/N0 dB=10*log10(4)+Eb/N0 dB;%16-QAM的线性比例,1个符号=4位

      一般情况:
      Es/N0 dB=10*log10(k)+Eb/N0 dB;%对于其中1个符号=k个比特的任何调制,以线性尺度

      现在调用函数

      y=add_awgn_noise(x,EsN0dB);%其中x是包含需要添加噪声的调制样本的变量

      答复

发表您的宝贵意见!!!