# comm_ErrorRate
计算输入数据的误码率
函数库: TyCommunication
# 说明
comm_ErrorRate 对象将来自发射器的输入数据与来自接收器的输入数据进行比较,并作为一个运行统计量计算误码率。为了获得误码率,该对象将不相等的数据元素对的总数除以来自一个源的输入数据元素的总数。
要计算误码率:
创建 comm_ErrorRate 对象并设置其属性;
使用参数调用该对象,就像调用一个函数一样。
# 构造
# 语法
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 参数对应于 Samples 和 CustomSamples 属性。