衰落信道知识

来源:互联网 发布:淘宝刷单被清洗 编辑:程序博客网 时间:2024/04/20 13:03
1.  MATLAB ToolBox中衰落信道的介绍http://cn.mathworks.com/help/comm/ug/fading-channels.html#a1071598663b1

使用对象实现衰落信道

使用对象实现的多路径传播方案的基带通道模型包括:

  • N离散衰落路径, 每个都有自己的延迟和平均功率增益。一个信道, N = 1 称为频率平坦衰落通道一个信道, N > 1 作为一个频率选择衰落信道 , 其信号具有足够宽的带宽。

  • 每个路径的瑞利或斯模型。

  • 使用杰克斯多普勒频谱的默认通道路径建模, 可以指定最大多普勒频移。其他类型的多普勒频谱允许 (相同或不同的所有路径) 包括: 扁平, 限制杰克斯, 不对称杰克斯, 高斯, 双高斯, 圆形, 和钟。

    如果在通道对象的构造过程中将最大多普勒频移设置为0或省略, 则对象将信道建模为静态。对于这种配置, 衰落不随时间而变化, 并且所指定的多普勒频谱对衰落过程没有影响。

有关延迟和增益的典型值的一些附加信息在选择实际信道属性值.

使用块实现衰落信道

信道块库包括可在移动通信中模拟真实世界现象的 MIMO 和单输入衰落块。这些现象包括多径散射效应, 以及发射机和接收机之间的相对运动引起的多普勒位移。

提示

要对衰落和加法白高斯噪声的信道进行建模, 请使用与 AWGN 信道块串联在一起的衰落信道块, 其中衰落信道块最先出现。

可以将 MIMO 信道和单输出 衰落信道块设置为模型的信道的瑞利或斯衰落分布。根据信号路径的类型选择要使用的衰落分布。

信号路径褪色分布从发射机到接收机的直接视线路径Rician从发射机到接收机的一个或多个主要反射路径Rayleigh

在多个主要反射路径的情况下, 为瑞利衰落分布配置的衰落信道块的单个实例可以同时对它们进行建模。

为您的情况选择适当的块参数是很重要的。有关更多信息, 请参见选择实际信道属性值, 以及 MIMO 衰落通道和单输出衰落信道阻止参考页。

可视化衰落信道

您可以使用通道可视化工具查看衰落信道的特征。有关更多信息, 请参见频道可视化.

补偿褪色响应

涉及衰落信道的通信系统通常需要组件 (s) 来补偿衰落响应。弥补衰落的典型方法包括:

  • 差分调制或单抽头均衡器有助于补偿频率平坦衰落信道。有关实现差分调制的信息, 请参见 M-DPSK 调制器基带块引用页。

  • 带有多个分路器的均衡器有助于补偿频率选择性衰落信道。有关更多信息, 请参见均衡。

与自适应均衡的通信链接示例说明了为什么需要对衰落信道进行补偿。

单输出多径衰落信道的仿真方法

通信系统中的瑞利和斯多径衰落信道模拟器 Toolbox™在[1]中使用 9.1. 3.5. 2 的带限制的离散多路径信道模型。此实现假定延迟电源配置文件和信道的多普勒频谱是可分离的[1]。因此, 多径衰落信道被建模为线性有限冲激响应 (FIR) 滤波器。{s}表示输入到通道的样本集。然后样品{y}通道的输出与{s}通过:

y=n2n=n1sngn

{gn}是由以下值给定的分路权重集:

gn=kk=1一个ksinc[τktsn]n1nn2

在上述方程式中:

  • ts为通道的输入采样周期。

  • {τk}, 在1kk, 是路径延迟的集合。K是多路径衰落信道中的路径总数。

  • {一个k}, 在1kk, 是多径衰落信道的复杂路径增益集。这些路径增益是相互不相关的。

  • n1n2的选择, 以便gnn小于n1或大于n2.

两种技术, 过滤高斯噪声和 sum-of-sinusoids, 被用来生成一组复杂的路径增益,一个k.

每个路径增益过程一个k由以下步骤生成:

滤波高斯噪声技术

  1. 在离散时间内, 生成了具有零均值和单位方差的复杂不相关 (白) 高斯过程。

  2. 用多普勒滤波器对复高斯过程进行频率响应滤波h(f)=gs(f), 在s(f)表示所需的多普勒功率谱。

  3. 对滤波的复高斯过程进行插值, 使其采样周期与输入信号相一致。使用线性和多相插值的组合。

Sum-of-sinusoids 技术

  1. 使用[2]中描述的方法生成相互不相关的瑞利衰落波形, 其中 i = 1对应于相分量, i = 2对应于正交分量。

    zk(t)μ()k(t)=μ(1)k(t)+jμ(2)k(t),k=1,2,...,k=g2nknkn=1因为(2πf()k,nt+θ()k,n),=1,2

    • nk指定用于对单个路径建模的窦的数量。

    • f()k,n是离散多普勒频率, 并计算在单个路径中的每个正弦分量。

    • θ()k,n的阶段是n成分的μ()k是一个分布的随机变量, 在区间上具有均匀分布(0,2π].

    • t是淡入淡出的进程时间。


    当建模一个杰克斯多普勒频谱, 离散多普勒频率,f()k,n, 最大移位f最大是由

    f()k,n=f最大因为(α()k,n)=f最大因为[π2nk(n12)+α()k,0]

    α()k,0(1)1π4nkkk+2,=1,2k=1,2,...,k

  2. 为了提前时间的衰落过程, 一个初始的时间参数,t初始, 介绍了。衰落波形成为

    μ()k(t)=g2nknkn=1因为(2πf()k,n(t+tnt)+θ()k,n),=1,2

    t初始= 0, 衰落过程从时间零开始。的正值t初始在保持它的连续性的同时, 推进衰落过程相对于时间零。

  3. 使用 GMEDS 生成信道衰落样本1 [2]算法。

计算复杂系数

由任一技术造成的复杂过程,zk, 进行缩放以获得正确的平均路径增益。在瑞利信道的情况下, 衰落过程获得如下:

一个k=gωkzk

ωk=e[一个k2]

在斯通道的情况下, 衰落过程获得如下:

一个k=gωk[zkgk研发,k+1+gk研发,kk研发,k+1ej(2πfd,i/os,kt+θi/os,k)]

k研发,k是 k-th 路径的斯 k 因子,fd,i/os,k是 k 次路径的视线分量的多普勒变换 (赫兹),θi/os,k是 k 次路径的视线分量的初始相位 (在 rad 中)。

在输入到带限制的多径信道模型中, 传输的符号必须由至少等于脉冲整形引入的带宽扩展因子的因子取样。例如, 如果使用 sinc 脉冲整形, 其中脉冲形信号的带宽等于符号速率, 则带宽扩展因子为 1, 在输入到通道时需要至少一个每个符号的采样。如果使用超过1的因数的凸起余弦 (RC) 滤波器, 其脉冲形状信号的带宽等于符号速率的两倍, 则带宽扩展因子为 2, 在输入到通道时, 每个符号至少需要两个样本。

有关其他信息, 请参见文章基于 matlab 的面向对象的多路径衰落信道仿真方法, 位于 MATLABCentral。

引用

[1] Jeruchim,., 巴拉班, P., 并且 Shanmugan, k.s,通信系统的模仿, 再版, 纽约, Kluwer 学术或充满, 2000。

[2] Pätzold, Matthias, 程湘王, 比 Olav Hogstand。"两个新的基于 Sum-of-Sinusoids 的方法, 有效生成多不相关的瑞利衰落波形。无线通信的 IEEE 事务Vol. 8, 数字 6, 2009, pp. 3122–3131。

指定衰落信道

通信系统工具箱将衰落信道建模为线性 FIR 滤波器。使用衰落通道筛选信号包括以下步骤:

  1. 创建一个用于描述要使用的信道的信道对象。信道对象是一种 MATLAB 变量, 它包含有关信道的信息, 如最大多普勒频移。

  2. 调整通道对象的属性 (如有必要), 以根据需要进行定制。例如, 您可以更改路径延迟或平均路径增益。

  3. 使用调用对象将信道对象应用于您的信号。

本节介绍如何定义、检查和操作通道对象。这些主题是:

  • 创建通道对象

  • 复制和复制对象

  • 显示和更改对象属性

  • 通道对象属性之间的关系

创建通道对象

选择这些系统对象之一, 以创建适合您的建模情况的衰落通道对象。

功能对象情况模型

comm.RayleighChannel

瑞利衰落信道对象一个或多个主要的反射路径

comm.RicianChannel

斯衰落信道对象一个直接的视线路径, 可能与一个或多个主要的反射路径结合

例如, 下面的命令创建一个信道对象, 它表示一个在 10万 Hz 采样的信号上作用的瑞利衰落信道。该通道的最大多普勒频移是130赫兹。

rayChan1 = comm.RayleighChannel('SampleRate',1e5,...               'MaximumDopplerShift',130); % Rayleigh fading channel object

若要了解如何调用rayChan1淡入淡出通道对象以通过通道筛选传输的信号, 请参阅使用衰落通道.

复制和复制对象

创建对象的另一种方法是复制现有对象, 然后根据需要调整新对象的属性。如果这样做, 则使用copy命令很重要, 如

rayChan2 = copy(rayChan1); % Copy rayChan1 to create an independent rayChan2.

而不是rayChan2 = rayChan1copy命令创建一个独立于rayChan1rayChan1副本。相比之下, 命令rayChan2 = rayChan1只创建rayChan2作为对rayChan1的引用, 因此rayChan1rayChan2始终具有无法区分的内容。

显示和更改对象属性

信道对象具有许多记录有关信道模型的信息的属性, 其中关于已筛选信号的信道的状态, 以及有关信道对未来信号的操作。

可以通过下列方式查看属性:

  • 若要查看通道对象的所有属性, 请在命令窗口中输入对象的名称。

  • 若要查看信道对象的特定属性或将该属性的值赋给某个变量, 请输入该对象的名称, 后跟一个点 (句点), 后跟该属性的名称。

可以通过以下方式更改信道对象的可写属性:

  • 若要更改信道对象属性的默认值, 请在对象创建语法中输入所需的值。

  • 若要更改通道对象的可写属性的值, 请发出在信道对象上使用点表示法的分配语句。更具体地说, 点表示法是指由对象名称组成的表达式, 后跟一个点, 后跟该属性的名称。

显示瑞利通道对象属性

创建一个瑞利通道对象。显示对象以显示默认情况下初始化的属性以及在创建对象时指定的特性。输入rayChan将显示通道对象的所有属性。在创建对象时分配了某些属性值, 而其他属性具有默认值。有关特定信道属性的详细信息, 请参阅 comm.RayleighChannel 对象。

rayChan = comm.RayleighChannel('SampleRate',1e5,'MaximumDopplerShift',130);rayChan % View all the properties
rayChan =   comm.RayleighChannel with properties:             SampleRate: 100000             PathDelays: 0       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 130        DopplerSpectrum: [1x1 struct]  Show all properties
g = rayChan.AveragePathGains % Retreive the AveragePathGains property of rayChan
g = 0

调整斯通道对象属性

斯衰落信道对象具有一个不为瑞利衰落信道对象 (即标量KFactor属性) 显示的附加属性。有关斯通道属性的详细信息, 请参阅 comm.RicianChannel 对象。

更改斯通道对象属性

创建斯通道对象。Visualization属性的默认设置为'Off'将默认设置更改为'Impulse response'会在调用对象时生成输出信号的脉冲响应图。

ricChan= comm.RicianChannel; % Create objectricChan.Visualization = 'Impulse response' % Enables the impulse response channel visualization
ricChan =   comm.RicianChannel with properties:                SampleRate: 1                PathDelays: 0          AveragePathGains: 0        NormalizePathGains: true                   KFactor: 3    DirectPathDopplerShift: 0    DirectPathInitialPhase: 0       MaximumDopplerShift: 1.0000e-03           DopplerSpectrum: [1x1 struct]  Show all properties

输出显示通道对象所有属性的子集。选择all properties可查看ricChan的完整属性集.

通道对象属性之间的关系

信道对象的某些属性彼此相关, 这样, 当一个属性的值发生变化时, 另一个属性的值必须以某种相应的方式更改, 以保持通道对象的一致性。例如, 如果更改PathDelays的向量长度, 则AveragePathGains的值必须更改, 以便其向量长度等于PathDelays的新值。这是因为两个向量的长度等于信道的离散路径数。有关链接属性和示例的详细信息, 请参见 comm.RayleighChannel  comm.RicianChannel .

参考页。

指定衰落信道的多普勒频谱

信道对象的多普勒频谱通过其DopplerSpectrum属性指定。此属性的值必须为:

  • 多普勒物体。在这种情况下, 相同的多普勒频谱适用于通道对象的每个路径。

  • PathDelays向量属性长度相同的多普勒对象的单元格数组。在这种情况下, 每个路径的多普勒频谱是由相应的多普勒对象在矢量中给出的。

    • 当 PathDelays 属性的向量长度增加时, 通过附加杰克斯多普勒对象, DopplerSpectrum 的长度自动增加以匹配 PathDelays 的长度。

    • 如果 PathDelays 矢量属性的长度减小, 则通过删除最后一个多普勒对象, DopplerSpectrum 的长度会自动减小以匹配 PathDelays 的长度。

多普勒对象包含用于表征多普勒频谱的所有属性, 但最大多普勒频移除外, 这是信道对象的一个特性。本节介绍如何创建和操作多普勒对象, 以及如何将它们分配给信道对象的DopplerSpectrum属性。

创建多普勒对象

要创建多普勒对象, 请使用doppler函数。doppler函数的唯一用途是创建用于指定信道对象的DopplerSpectrum属性值的多普勒对象。

如果将单个多普勒频谱结构分配给 DopplerSpectrum, 则所有路径都具有相同的多普勒频谱。如果 FadingTechnique 属性是'Sum of sinusoids', 则 DopplerSpectrum 必须是doppler('Jakes');否则, 请从以下选项中进行选择:

  • doppler('Jakes')

  • doppler('Flat')

  • doppler('Rounded', ...)

  • doppler('Bell', ...)

  • doppler('Asymmetric Jakes', ...)

  • doppler('Restricted Jakes', ...)

  • doppler('Gaussian', ...)

  • doppler('BiGaussian', ...)

如果为不同的多普勒频谱结构 (可以从上一列表中的任何一个) 中选择一个行单元格数组, 则每个路径都有由单元格数组中相应结构指定的多普勒频谱 DopplerSpectrum。在这种情况下, DopplerSpectrum 的长度必须等于PathDelays的长度.

若要生成 C 代码, 请将此属性指定给单个多普勒频谱结构。

例如, 一个高斯谱与正常化 (由渠道的最大多普勒位移) 标准偏差 0.1, 可以被创造如下:

dopp1 = doppler('Gaussian',0.1);

重复多普勒对象

与通道对象的情况一样, 多普勒对象可以使用copy函数进行复制。该命令:

dopp2 = copy(dopp1);

创建具有与dopp1相同属性的多普勒对象dopp2 。dopp1dopp2分别是多普勒对象的单独实例, 因为修改二者中的一个不会影响另一个。如果使用dopp1 = dopp2 , 则会导致dopp1dopp2引用多普勒对象的同一实例, 因为修改任何一个都将导致对另一项的相同修改。

查看和更改多普勒对象属性

查看和更改多普勒对象属性的语法与通道对象的大小写相同 (请参阅显示和更改对象属性).

创建、更改和查看多普勒对象

创建并显示一个具有默认属性的圆角多普勒对象, 并修改其Polynomial属性的第三个元素。

doppRound = doppler('Rounded')
doppRound = struct with fields:    SpectrumType: 'Rounded'      Polynomial: [1 -1.7200 0.7850]

调整多项式的第三系数。

doppRound.Polynomial(3) = 0.825
doppRound = struct with fields:    SpectrumType: 'Rounded'      Polynomial: [1 -1.7200 0.8250]

所有多普勒对象共有的属性SpectrumType是只读的。它在对象构造中自动指定, 无法修改。如果你想使用不同的多普勒频谱类型, 你需要创建一个新的多普勒对象的期望类型。

在通道对象中使用多普勒对象

信道对象的DopplerSpectrum属性可以通过向它分配多普勒对象或多普勒对象的向量来更改。

用平坦多普勒频谱创建瑞利信道

此示例阐释如何将构造的瑞利通道对象的默认杰克斯多普勒频谱更改为平面多普勒频谱:

创建瑞利通道对象

将采样速率设置为 9600 hz, 最大多普勒 shfit 为100赫兹。

rayChan = comm.RayleighChannel('SampleRate',9600, 'MaximumDopplerShift',100)
rayChan =   comm.RayleighChannel with properties:             SampleRate: 9600             PathDelays: 0       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 100        DopplerSpectrum: [1x1 struct]  Show all properties
rayChan.DopplerSpectrum
ans = struct with fields:    SpectrumType: 'Jakes'

修改多普勒频谱

创建平面多普勒对象并将其分配到rayChan对象中

doppFlat = doppler('Flat')
doppFlat = struct with fields:    SpectrumType: 'Flat'
rayChan.DopplerSpectrum = doppFlat
rayChan =   comm.RayleighChannel with properties:             SampleRate: 9600             PathDelays: 0       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 100        DopplerSpectrum: [1x1 struct]  Show all properties
rayChan.DopplerSpectrum
ans = struct with fields:    SpectrumType: 'Flat'

利用高斯多普勒频谱创建斯信道

This example shows how to change the default Jakes Doppler spectrum of a constructed Rician channel object to a Gaussian Doppler spectrum with normalized standard deviation of 0.3, and subsequently display the DopplerSpectrum property, and change the value of the normalized standard deviation to 1.1:

Create a Rician channel object

Set the sample rate to 9600 Hz, the maximum Doppler shfit to 100 Hz, and K factor to 2.

ricChan = comm.RicianChannel('SampleRate',9600, 'MaximumDopplerShift',100, 'KFactor',2)
ricChan =   comm.RicianChannel with properties:                SampleRate: 9600                PathDelays: 0          AveragePathGains: 0        NormalizePathGains: true                   KFactor: 2    DirectPathDopplerShift: 0    DirectPathInitialPhase: 0       MaximumDopplerShift: 100           DopplerSpectrum: [1x1 struct]  Show all properties
ricChan.DopplerSpectrum
ans = struct with fields:    SpectrumType: 'Jakes'

Modify the Doppler spectrum

Create a Gaussian doppler object with normalized standard deviation of 0.3 and assign it in the ricChan object.

doppGaus = doppler('Gaussian',0.3)
doppGaus = struct with fields:                   SpectrumType: 'Gaussian'    NormalizedStandardDeviation: 0.3000
ricChan.DopplerSpectrum = doppGaus
ricChan =   comm.RicianChannel with properties:                SampleRate: 9600                PathDelays: 0          AveragePathGains: 0        NormalizePathGains: true                   KFactor: 2    DirectPathDopplerShift: 0    DirectPathInitialPhase: 0       MaximumDopplerShift: 100           DopplerSpectrum: [1x1 struct]  Show all properties
ricChan.DopplerSpectrum
ans = struct with fields:                   SpectrumType: 'Gaussian'    NormalizedStandardDeviation: 0.3000
ricChan.DopplerSpectrum.NormalizedStandardDeviation = 1.1;ricChan.DopplerSpectrum
ans = struct with fields:                   SpectrumType: 'Gaussian'    NormalizedStandardDeviation: 1.1000

Create Rayleigh Channel Using Independent Doppler Spectrum

This example illustrates how to change the default Jakes Doppler spectrum of a constructed three-path Rayleigh channel object to a cell array of different Doppler spectra, and then change the properties of the Doppler spectrum of the third path:

Create a Rayleigh channel object

Set the sample rate to 9600 Hz, the maximum Doppler shfit to 100 Hz, and specify path delays of 01e-4, and 2.1e-4 seconds.

rayChan = comm.RayleighChannel('SampleRate',9600, 'MaximumDopplerShift',100, 'PathDelays',[0 1e-4 2.1e-4])
rayChan =   comm.RayleighChannel with properties:             SampleRate: 9600             PathDelays: [0 1.0000e-04 2.1000e-04]       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 100        DopplerSpectrum: [1x1 struct]  Show all properties
rayChan.DopplerSpectrum
ans = struct with fields:    SpectrumType: 'Jakes'

Modify the Doppler spectrum

Specify the DopplerSpectrum property as a cell array with an independent Doppler spectrum for each path.

rayChan.DopplerSpectrum = {doppler('Flat') doppler('Flat') doppler('Rounded')}
rayChan =   comm.RayleighChannel with properties:             SampleRate: 9600             PathDelays: [0 1.0000e-04 2.1000e-04]       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 100        DopplerSpectrum: {[1x1 struct]  [1x1 struct]  [1x1 struct]}  Show all properties
rayChan.DopplerSpectrum{:}
ans = struct with fields:    SpectrumType: 'Flat'
ans = struct with fields:    SpectrumType: 'Flat'
ans = struct with fields:    SpectrumType: 'Rounded'      Polynomial: [1 -1.7200 0.7850]

Change the Polynomial property for the third path.

rayChan.DopplerSpectrum{3}.Polynomial = [1 -1.21 0.7]
rayChan =   comm.RayleighChannel with properties:             SampleRate: 9600             PathDelays: [0 1.0000e-04 2.1000e-04]       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 100        DopplerSpectrum: {[1x1 struct]  [1x1 struct]  [1x1 struct]}  Show all properties
rayChan.DopplerSpectrum{:}
ans = struct with fields:    SpectrumType: 'Flat'
ans = struct with fields:    SpectrumType: 'Flat'
ans = struct with fields:    SpectrumType: 'Rounded'      Polynomial: [1 -1.2100 0.7000]

Configure Channel Objects

Before you filter a signal using a channel object, make sure that the properties of the channel have suitable values for the situation you want to model. This section offers some guidelines to help you choose realistic values that are appropriate for your modeling needs. The topics are

  • Choose Realistic Channel Property Values

  • Configure Channel Objects Based on Simulation Needs

  • Store Channel State History

The syntaxes for viewing and changing values of properties of channel objects are described in Specifying a Fading Channel.

Choose Realistic Channel Property Values

Here are some tips for choosing property values that describe realistic channels:

Path Delays

  • By convention, the first delay is typically set to zero. The first delay corresponds to the first arriving path.

  • For indoor environments, path delays after the first are typically between 1 ns and 100 ns (that is, between 1e-9 s and 1e-7 s).

  • For outdoor environments, path delays after the first are typically between 100 ns and 10 µs (that is, between 1e-7 s and 1e-5 s). Very large delays in this range might correspond, for example, to an area surrounded by mountains.

  • The ability of a signal to resolve discrete paths is related to its bandwidth. If the difference between the largest and smallest path delays is less than about 1% of the symbol period, then the signal experiences the channel as if it had only one discrete path.

平均路径增益

  • 通道对象中的平均路径增益表示每个衰落路径的平均功率增益。在实际中, 平均路径增益值是一个大的负 dB 值。但是, 计算机模型通常使用-20 db 和 0 db 之间的平均路径增益。

  • 平均路径增益向量中的 dB 值通常呈线性衰减, 但具体的时延分布取决于传播环境。

  • 为了确保路径的期望值为 1, 可以通过通道对象的NormalizePathGains属性规范化路径增益。

最大多普勒位移

  • 一些无线应用, 如标准 GSM (全球移动通信系统), 更喜欢在移动速度方面指定多普勒变化。如果移动速度为v (米/秒), 那么最大多普勒频移计算如下, 其中f是传输载波频率赫兹和c是光速 (3e8 米/秒)。

    fd=vfc

  • 根据这个公式的速度的移动, 在高速公路上的移动汽车的信号可能会经历最大多普勒位移约80赫兹, 而从一个移动的行人的信号可能会经历一个最大的多普勒位移约4赫兹。这些数字假设一个传输载波频率900兆赫。

  • 0的最大多普勒位移对应于来自瑞利或斯分布的静态通道。

斯衰落信道的 k-因子

  • 斯 K 因子指定了直接视距路径的 specular-to-diffuse 功率的比值。比率是线性表达的, 而不是 dB。

  • 对于斯衰落, K 因子通常介于1和10之间。

  • 一个 K 因子0对应于瑞利衰落。

多普勒频谱参数

  • 有关参数及其意义的说明, 请参见有关多普勒对象的doppler参考页。

根据模拟需要配置通道对象

有关配置信道对象以自定义筛选过程的提示:

  • 如果将数据分成一系列向量 (例如, 在循环中处理), 则可以多次调用该信道对象 (在循环中的每个迭代中)。在每次调用后更新和保存通道的状态信息。通道输出与数据的分区方式无关 (向量长度)。

  • 如果希望通道输出可重复, 请为通道对象的RandomStream属性选择种子选项。若要重复输出, 请调用reset对象函数以重置内部筛选器和内部随机数生成器。

  • 如果要对连续传输的数据进行建模, 请将FadingTechnique属性设置为'Sum of sinusoids'InitialTimeSource属性, 以便为通道对象'Input port' 。在调用对象时, 指定每个数据向量/帧的开始时间, 通过输入来处理该通道。

  • 如果要使衰落进程正常化, 以便路径的预期值为 1 (通道不贡献额外的电源增益或损耗), 请将通道对象的NormalizePathGains属性设置为true.

存储通道状态历史记录

默认情况下, 通道对象的PathGains属性存储当前的复杂路径增益向量。

将信道的StoreHistory属性设置为 true 将使其存储最后一个n路径增益向量, 其中n是通过通道处理的向量的长度。下面的代码阐释此属性

rayChan = comm.RayleighChannel('SampleRate',100000,'MaximumDopplerShift',130); % Rayleigh channeltx = randi([0 1],10,1);          % Random bit streamhmod = comm.DBPSKModulator;      % Create DBPSK ModulatordpskSig = step(hmod,tx);         % Process data by calling the step methodrayChan.StoreHistory = true;           % Allow states to be storedy = filter(h, dpskSig);          % Run signal through channelh.PathGains                      % Display the stored path gains data

本示例生成类似于以下内容的输出:

 -0.7601 - 1.1853i  -0.7540 - 1.1822i  -0.7480 - 1.1791i  -0.7419 - 1.1759i  -0.7358 - 1.1728i  -0.7298 - 1.1696i  -0.7237 - 1.1665i  -0.7177 - 1.1634i  -0.7115 - 1.1599i  -0.7053 - 1.1565i
ans =   0.0788 - 0.5305i

最后一个元素是通道的当前路径增益。

StoreHistory设置为 true 将大大降低信道的筛选器函数的执行速度。

使用淡入淡出的通道

按照指定衰落通道中的说明创建了通道对象后, 可以调用该对象通过信道传递信号。将信号作为输入参数提供给通道对象。在筛选操作结束时, 通道对象将保留其状态, 以便您可以通过调用 info 对象函数作为输入参数来查找最终路径增益或通道已处理的样本总数。

有关演示基本语法和状态保留的示例, 请参见褪色信号的电源.

要使通道的特征可视Visualization, 请将显示属性设置为'Impulse response''Frequency response''Doppler spectrum'有关更多信息, 请参见频道可视化.

可视化三路瑞利通道

这个例子说明了如何可视化信道的脉冲响应。

创建通道对象

在创建通道对象时, 使用名称-值对设置Visualization属性

'Impulse response'.

rayChan = comm.RayleighChannel('SampleRate',100000,'MaximumDopplerShift',130,...    'PathDelays',[0 1.5e-5 3.2e-5],'AveragePathGains',[0, -3, -3],...    'Visualization','Impulse response');

生成一个比特流并创建一个调制器对象。调制比特流并通过

通过调用信道对象, 通过信道调制 DBPSK 信号。

tx = randi([0 1],500,1);dbspkMod = comm.DBPSKModulator;dpskSig = dbspkMod(tx);y = rayChan(dpskSig);

当调用对象时, 会绘制脉冲响应。


rayChan = comm.RayleighChannel('SampleRate',10000,'MaximumDopplerShift',100);sig = j*ones(2000,1); % Signalout = rayChan(sig); % Pass signal through channel.rayChan % Display all properties of the channel object.
rayChan =   comm.RayleighChannel with properties:             SampleRate: 10000             PathDelays: 0       AveragePathGains: 0     NormalizePathGains: true    MaximumDopplerShift: 100        DopplerSpectrum: [1x1 struct]  Show all properties
% Plot power of faded signal, versus sample number.plot(20*log10(abs(out)))

衰落条件下的 DBPSK 经验与理论性能

本示例创建一个频率平坦的瑞利衰落信道对象, 并调用它来处理由单个矢量组成的 DBPSK 信号。对信噪比的不同值计算比特错误率。衰落信道过滤器在 AWGN 之前应用。这是在将淡入淡出与 AWGN 合并时使用的建议序列。

创建瑞利衰落信道、调制器和解调器对象

chan = comm.RayleighChannel('SampleRate',1e4,'MaximumDopplerShift',100);

创建 DBPSK 调制器和解调对象, 其调制顺序设置为2生成 DBPSK 调制的数据并通过通道传递。

M = 2; % DBPSK modulation ordertx = randi([0 M-1],50000,1); % Generate a random bit streammod = comm.DBPSKModulator;demod = comm.DBPSKDemodulator;dpskSig = mod(tx);fadedSig = chan(dpskSig); % Apply the channel effects

创建一个 AWGN 的通道对象和 ErrorRate 计算器系统对象。

awgnChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');errorCalc = comm.ErrorRate;

计算信噪比的不同值的误差率。

SNR = 0:2:20; % Range of SNR values, in dB.numSNR = length(SNR);berVec = zeros(3, numSNR); % Preallocate a vector for BER results for n = 1:numSNR   awgnChan.SNR = SNR(n);   rxSig = awgnChan(fadedSig); % Add Gaussian noise   rx = demod(rxSig);  % Demodulate   reset(errorCalc)     berVec(:,n) = errorCalc(tx,rx); % Compute error rate.endBER = berVec(1,:);

计算理论性能结果, 进行比较。

BERtheory = berfading(SNR,'dpsk',M,1);

绘制误码率结果。

semilogy(SNR,BERtheory,'b-',SNR,BER,'r*');legend('Theoretical BER','Empirical BER');xlabel('SNR (dB)'); ylabel('BER');title('Binary DPSK over Rayleigh Fading Channel');

使用通道过滤器延迟

信道对象的 ChannelFilterDelay 属性的值是信道输出滞后于输入的样本数。如果直接比较输入和输出数据集, 则必须使用适当的截断或填充操作来考虑延迟。

该示例说明了在计算位错误率之前对延迟进行解释的方法。

创建 DBPSK 调制器和解调对象, 其调制顺序设置为2生成 DBPSK 调制的数据并通过通道传递。

bitRate = 50000;M = 2; % DQPSK modulation ordermod = comm.DBPSKModulator;demod = comm.DBPSKDemodulator;

创建瑞利衰落信道对象。

rayChan = comm.RayleighChannel('SampleRate',bitRate,'MaximumDopplerShift',4,...    'PathDelays',[0 0.5/bitRate],'AveragePathGains',[0 -10]);chInfo = info(rayChan);delay = chInfo.ChannelFilterDelay;

生成随机比特流数据。对数据进行调制, 通过衰落信道传递, 并解调。

tx = randi([0 M-1],50000,1);dpskSig = mod(tx);fadedSig = rayChan(dpskSig);rx = demod(fadedSig);

计算比特错误率, 考虑到延迟。

errorCalc = comm.ErrorRate('ReceiveDelay', delay);berVec = step(errorCalc,tx,rx);ber = berVec(1)
ber = 0.0152
num = berVec(2)
num = 760


原创粉丝点击