2026a

# comm_ErrorRate


计算输入数据的误码率

函数库: TyCommunication

# 说明

comm_ErrorRate 对象将来自发射器的输入数据与来自接收器的输入数据进行比较,并作为一个运行统计量计算误码率。为了获得误码率,该对象将不相等的数据元素对的总数除以来自一个源的输入数据元素的总数。

要计算误码率:

  1. 创建 comm_ErrorRate 对象并设置其属性;

  2. 使用参数调用该对象,就像调用一个函数一样。

# 构造

# 语法

errorRate = comm_ErrorRate()
errorRate = comm_ErrorRate(; Name = Value)

# 说明

errorRate = comm_ErrorRate() 创建一个误码率计算器系统对象。该对象通过将接收的数据与发送的数据进行比较来计算误码率。


errorRate = comm_ErrorRate(; Name = Value) 使用一个或多个名称-值参数设置属性。例如,ReceiveDelay = 5 指定接收的数据比发送的数据延迟 5 个样本。

# 属性

ReceiveDelay - 信号传输延迟的样本数
0(默认)| 整数标量

指定接收数据滞后于传输数据的样本数。该值必须是整数标量。默认值为 0。

数据类型: Int64

ComputationDelay - 计算延迟
0(默认)| 整数标量

指定对象在比较开始时应忽略的数据样本数。该值必须是整数标量。利用此属性可去除两个输入信号的瞬态特性。默认值为 0。

数据类型: Int64

Samples - 参与误码率计算的样本
字符串

指定参与误码率计算的样本为 Entire frame、Custom 之一。该属性定义了当计算错误统计时对象应该考虑全部还是只考虑部分输入帧。默认为 Entire frame。选择 Entire frame 以比较 RX 帧和 TX 帧的所有样本。选择 Custom 以列出对象在进行比较时应考虑的 RX 帧元素的索引。当将此属性设置为 Custom 时,可以通过 CustomSamples 属性将索引列为双精度整数的标量或列向量。

数据类型: String

CustomSamples - 从帧中选择样本
向量

指定向量。该值列出了对象在进行比较时使用的元素的索引。此属性适用于将 Samples 属性设置为 Custom 时。默认为空向量,指定使用所有样本。

数据类型: Int64

ResetInputPort - 启用重置输入
false(默认)| true

启用重置输入,指定为 true 或 false。

数据类型: Bool

# 用法

# 语法

y = step(errorRate, tx, rx)
y = step(errorRate, tx, rx, ind)
y = errorRate(___, reset)

# 说明

y = step(errorRate, tx, rx) 计算发送数据向量 tx 和接收数据向量 rx 之间的差异数量。


y = step(errorRate, tx, rx, ind) 根据样本索引 ind 计算发送和接收数据向量之间的差异数量。要启用此语法,请将 Samples 属性设置为输入端口。


y = errorRate(___, reset) 当您将重置输入设置为非零值时,重置误差计数。要启用此语法,请将 ResetInputPort 属性设置为 true。

# 输入参数

tx - 发送数据
标量 | 向量

发送数据向量,指定为标量或向量。

rx - 接收数据
标量 | 向量

接收数据向量,指定为标量或向量。

提示

如果您将 tx 或 rx 输入指定为标量,则该对象将此值与另一个输入的所有元素进行比较。如果您将两个输入都指定为向量,则它们必须具有相同的大小和数据类型。

ind - 样本索引
正整数 | 正整数的向量

在比较数据时参与误码率计算的样本索引,指定为正整数或正整数的向量。

依赖关系

要启用此输入,请将 Samples 属性设置为 Input port。

reset - 重置误差计数
Bool

重置误差计数,指定为 true 或 false。要在对对象的调用之间重置误差计数,请将此属性设置为非零值。

依赖关系

要启用此输入,请将 ResetInputPort 属性设置为 true。

# 输出参数

y - 发送数据和接收数据之间的差异
向量

发送数据和接收数据之间的差异,作为形式为 [R; N; S] 的向量返回,其中

  • R 是误码率;

  • N 是错误的数量;

  • S 是比较的样本数量。

# 示例

计算输入数据的误码率
using TyCommunication
errorRate = comm_ErrorRate()
xx= [1 0 1 0 1 0 1 0 1 0]
yy = copy(xx)
yy[1] = Int(!Bool(yy[1]))
yy[end] = Int(!Bool(yy[end]))
rate, num, len = step(errorRate, xx, yy)
rate = 0.2

num = 2.0

len = 10.0
统计发射和接收信号的误码率

创建用于处理二进制数据的 8-DPSK 调制器和解调器。

using TyMath
using TyCommunication

rng = MT19937ar(5489)
dpskModulator = comm_DPSKModulator(; ModulationOrder=8, BitInput=true);
dpskDemodulator = comm_DPSKDemodulator(; ModulationOrder=8, BitOutput=true);

创建一个误码率计算器,并考虑差分调制引起的三个比特(一个符号)的瞬态效应。

errorRate = comm_ErrorRate(; ComputationDelay=3, Samples="Input port")

计算 10 帧的 BER。

BER = zeros(10)
ind = 1:3:96
for i in 1:10
    tx = randi(rng, [false, true], 96)      # Generate binary data
    modData = step(dpskModulator, tx) # Modulate
    rxSig = awgn(rng, modData, 7)     # Pass through AWGN channel
    rx = step(dpskDemodulator, rxSig) # Demodulate
    y, = step(errorRate, tx, rx, ind)   # Compute error statistics
    BER[i] = y               # Save BER data
end
BER
10-element Vector{Float64}:
 0.0967741935483871
 0.1111111111111111
 0.07368421052631578
 0.07874015748031496
 0.0880503144654088
 0.08376963350785341
 0.08071748878923767
 0.0784313725490196
 0.08362369337979095
 0.08463949843260188

# 算法

该对象实现了错误率计算模块参考页中描述的算法、输入和输出。对象属性对应于块参数,除了:

  • 输出数据和变量名称模块参数没有对应的属性。该对象始终将结果作为输出返回;

  • Stop 仿真模块参数没有对应的属性。要实现类似的行为,请在 while 循环中使用 step 方法的输出,以编程方式停止模拟;

  • Computation mode 参数对应于 SamplesCustomSamples 属性。

# 另请参阅

alignsignals | finddelay