主要内容

误码率分析技术

介绍如何计算各种通信系统的错误统计信息。

理论误差统计的计算

biterr函数,在使用模拟数据计算SERs和BERs部分可以帮助您收集经验误差统计数据,但通过将结果与理论误差统计数据进行比较来验证结果是很好的实践。对于某些类型的通信系统,存在计算误码率(BER)或误码率的近似边界的封闭表达式。本表中列出的函数为指定类型的通信系统计算误码率的闭合表达式或其边界。

通讯系统类型 函数
未编码的AWGN通道 berawgn
无编码瑞利和瑞斯衰落信道 berfading
编码AWGN通道 bercoding
同步不完全的未编码AWGN通道 bersync

文中讨论了这些函数的解析表达式误码率分析中使用的解析表达式和符号.这些函数的参考页还列出了对包含该函数实现的封闭形式表达式的一本或多本书的引用。

理论性能结果

图理论错误率

此示例使用bercoding函数,用于计算使用软决策解码器进行卷积编码的BERs的上界。

编码率= 1/4;编码率

创建一个结构,dspec,其中包含距离谱的信息。定义每比特能量与噪声功率谱密度比( E b / N 0 )扫描范围,并生成理论边界结果。

dspec。Dfree = 10;代码的最小自由距离dspec。权重=[1 0 4 0 12 0 32 0 80 0 192 0 448 0 1024。...0 2304 0 5120 0];码的距离谱EbNo = 3:0.5:8;berbound = bercoding(EbNo,“conv”“软”、coderate dspec);

画出理论边界结果。

semilogy (EbNo berbound)包含(“E_b / N_0 (dB)”);ylabel (“误码率上限”);标题(卷积编码误码率的理论界);网格

图中包含一个axes对象。标题为“卷积编码误码率理论界”的axis对象包含一个类型为line的对象。

比较理论和经验错误率

使用berawgn函数,计算脉冲幅度调制(PAM)的理论符号误差率(SERs) E b / N 0 值。在AWGN信道下模拟8 PAM,计算经验SERs。通过在同一组坐标轴上绘制理论和经验SERs图来进行比较。

计算和绘制理论SERberawgn

rng (“默认”为可重复性设置随机数种子M = 8;EbNo = 0:13;[ber,ser] = berawgn(EbNo,“帕姆”, M);semilogy (EbNo,爵士,“r”);传奇(“理论SER”);标题(“理论错误率”);包含(“E_b / N_0 (dB)”);ylabel (“符号错误率”);网格

图中包含一个axes对象。标题为“理论错误率”的axes对象包含一个类型为line的对象。该对象表示理论SER。

通过模拟一个8 PAM通信系统链路计算经验SER。定义模拟参数并预先分配结果所需的变量。如在[1],因为 N 0 2 × N 方差 2 ,增加3 dB E b / N 0 值。 E b / N 0 值到信噪比值。

N = 10000;要处理的符号数量k = log2(M);每个符号的比特数snr = EbNo+3+10*log10(k);% In dBynoise = 0 (n,长度(信噪比));Z = 0 (n,长度(snr));errVec = 0 (3,length(EbNo));

创建一个错误率计算器系统对象,将解码的符号与原始传输的符号进行比较。

errcalc = com . errorrate;

生成一个随机数据消息并应用PAM。将信道归一化到信号功率。循环模拟以生成在信噪比值范围内的错误率。

x = randi([0 M-1],n,1);%创建消息信号y = pammod(x,M);%调节Signalpower = (real(y)'*real(y))/length(real(y));Jj = 1:length(snr) reset(errcalc) ynoise (:, Jj) = awgn(real(y),snr(Jj),“测量”);%添加AWGNz(:,jj) = pamdemod(complex(ynoise (:,jj)),M);%解调errVec(:,jj) = errcalc(x,z(:,jj));%从模拟计算SER结束

比较理论和实证结果。

持有;semilogy (EbNo errVec (1:)“b”。);传奇(“理论SER”“实证SER”);标题(“理论和经验错误率的比较”);持有

图中包含一个axes对象。以“理论错误率与经验错误率比较”为题的坐标轴对象包含2个类型为直线的对象。这些对象代表理论SER,经验SER。

模拟性能结果

部分概述

本节描述如何比较进入和离开通信系统模拟的数据消息,以及如何使用蒙特卡洛技术计算错误统计信息。通过使用传输前和接收后的数据消息来计算通信系统的误码率或SER,模拟可以测量系统性能。要探究用于建模和模拟通信系统的物理层组件,请参见PHY组件

当你有一个小的或不完美的数据集,但想要绘制一个平滑的曲线来表示时,曲线拟合是很有用的。若要探索在通过模拟计算性能结果时使用曲线拟合,请参阅错误率曲线拟合部分。

使用模拟数据计算SERs和BERs

该示例演示了如何使用biterr而且symerr函数,分别。的symerr函数比较两组数据并计算符号错误数和SER。的biterr函数比较两组数据并计算误码率和误码率。误差是两组数据中对应点之间的差异。

这两组数据通常表示进入发射机的消息和离开接收器的恢复的消息。您还可以比较进入和离开通信系统其他部分的数据(例如,进入编码器的数据和离开解码器的数据)。

如果您的通信系统使用几个位来表示一个符号,计算符号错误与计算比特错误是不同的。在符号计数或比特计数的情况下,错误率分别是错误数除以传输的符号或比特总数。

通常,模拟足够多的数据以产生至少100个错误可以提供准确的错误率结果。如果错误率非常小(例如, 10 - 6 或者更少),使用半解析技术可能比只使用模拟方法更快地计算结果。有关更多信息,请参见半分析技术的性能结果部分。

计算错误率

使用symerr函数计算噪声线性分组码的SERs。不应用数字调制,使每个符号只包含一个位。当每个符号为单个比特时,符号误差和比特误差相同。

在人为地向编码的消息添加噪声后,将产生的噪声代码与原始代码进行比较。然后,解码并将解码后的消息与原始消息进行比较。

M = 3;设置汉明码参数N = 2^m-1;K = n-m;MSG = randi([0 1],k*200,1);指定200条k比特的消息代码= encode(msg,n,k,“汉明”);co降噪= bsc(code,0.95);%增加噪音Newmsg = decode(codenoisy,n,k,“汉明”);解码和纠正错误

计算SERs

[~,noisyVec] = symerr(代码,codenoisy);[~,decodedVec] = symerr(msg,newmsg);

解码后错误率降低,因为汉明解码器根据解码器配置的纠错能力纠正错误。由于随机数生成器生成消息并添加了噪声,所以每次运行的结果都不同。显示SERs。

disp (['收到的代码中的SER: 'num2str (noisyVec (1))))
接收代码中的SER: 0.94571
disp (['解码后的SER: 'num2str (decodedVec (1))))
解码后的SER: 0.9675

比较误码率和误码率

这些命令显示了不同情况下符号错误和比特错误之间的差异。

创建两个三元素十进制向量并显示二进制表示。向量一个包含三个2位符号和向量b包含三个3位符号。

A = [1 2 3]';B = [1 4 4]';de2bi (a)
ans =3×21 0 0 1 1 1
de2bi (b)
ans =3×31 0 0 0 0 1 0 0 1

比较两个向量的二进制值,并计算错误数和错误率biterr而且symerr功能。

格式老鼠显示分数而不是小数[snum,srate] = symerr(a,b)
Snum = 2
Srate = 2/3

snum2因为第二和第三项有位差。srate2/3因为符号的总数是3.

[bnum,brate] = biterr(a,b)
Bnum = 5
Brate = 5/9

bnum5因为第二项有两位不同,第三项有三位不同。看看5/9因为总比特数是9.根据定义,总比特数是在一个用于符号错误计算或b对于误码计算乘以所有条目中的最大比特数一个而且b,分别。

半分析技术的性能结果

描述的技术模拟性能结果Section可以用于各种各样的通信系统,但对于小错误率(例如,106或更少)。半分析技术是计算错误率的另一种方法。半分析技术可以比使用模拟数据的非分析方法更快地产生结果。

有关使用模拟和分析的组合来实现半分析技术以确定通信系统的错误率的更多信息,请参见semianalytic函数。

错误率图

部分概述

错误率图在检查通信系统的性能时是很有用的,经常包含在出版物中。本节讨论和演示可以用来创建错误率图的工具,修改它们以适应您的需要,并对错误率数据和图执行曲线拟合。

创建错误率图使用semilogy函数

在许多错误率图中,横轴表示Eb/N0值以dB为单位,纵轴表示使用对数(以10为基数)刻度的错误率。创建这样一个情节的例子semilogy功能,请参阅比较理论和经验错误率而且图理论错误率

错误率曲线拟合

当你有一个小的或不完美的数据集,但想要绘制一个平滑的曲线来表示时,曲线拟合是很有用的。的berfit函数包括曲线拟合能力,当经验数据描述不同的错误率时,有助于您的分析Eb/N0值。通过此功能,您可以:

  • 自定义曲线拟合过程的各个相关方面,例如用于生成拟合的封闭形式函数类型的选择列表。

  • 将经验数据绘制成一条曲线berfit符合数据。

  • 在之间的拟合曲线上插入点Eb/N0在你的经验数据集的值,以平滑的情节。

  • 收集关于拟合的相关信息,如沿拟合曲线的点的数值和拟合表达式的系数。

请注意

berfit函数用于曲线拟合或插值,而不是外推。将误码率数据外推到比最小的经验误码率值低一个数量级之外,本质上是不可靠的。

在错误率图上使用曲线拟合

这个例子模拟了一个简单的差分二相移键控(DBPSK)通信系统,并绘制了一系列的错误率数据 E b / N 0 值。它使用berfit而且berconfint函数拟合曲线到一组经验错误率。

初始化仿真参数

指定输入信号的消息长度、调制顺序、范围 E b / N 0 要模拟的值,以及模拟计算给定的错误率之前必须发生的最小错误数 E b / N 0 价值。为最终结果和中期结果预分配变量。

通常,对于统计上准确的错误率结果,最小错误数必须在100的数量级上。该模拟使用少量的误差来缩短运行时间,并说明曲线拟合如何使一组结果平滑。

Siglen = 100000;每次尝试的比特数M = 2;% DBPSK是二进制的EbN0vec = 0:5;% EbN0值的向量Minnumerr = 5;只发生5个错误后计算误码率numbn0 = length(EbN0vec);EbN0值的百分比ber = 0 (1, numbn0);最终BER值berVec = 0 (3, numbn0);%更新的BER值intv = cell(1, numbn0);置信区间的单元格数组

创建一个错误率计算器系统对象™。

errorCalc = com . errorrate;

循环模拟

模拟dbpsk调制的通信系统,并计算误码率循环来改变 E b / N 0 价值。内循环确保每一个都有最小的误码率 E b / N 0 价值。每一个都保存错误率统计信息 E b / N 0 值,并在本示例后面的曲线拟合和绘图时使用。

jj = 1: numbn0 EbN0 = EbN0vec(jj);snr = EbN0;%对于二进制调制SNR = EbN0重置(errorCalc)(berVec(2,jj) < minnumerr) msg = randi([0,M-1],siglen,1);%生成消息序列txsig = dpskmod(msg,M);%调节Rxsig = awgn(txsig,snr,“测量”);%增加噪音decodmsg = dpskdemod(rxsig,M);%解调berVec(:,jj) = errorCalc(msg,decodmsg);%计算误码率结束

使用berconfint函数计算在98%置信区间的错误率 E b / N 0 值。

[ber(jj),intv1] = berconfint(berVec(2,jj),berVec(3,jj),0.98);Intv {jj} = intv1;disp (['EbN0 = 'num2str (EbN0)“dB,”jj num2str (berVec (2))...' errors, BER = 'num2str (ber (jj))))结束
EbN0 = 0 dB, 18392 errors, BER = 0.18392 EbN0 = 1 dB, 14307 errors, BER = 0.14307 EbN0 = 2 dB, 10190 errors, BER = 0.1019 EbN0 = 3 dB, 6940 errors, BER = 0.0694 EbN0 = 4 dB, 4151 errors, BER = 0.04151 EbN0 = 5 dB, 2098 errors, BER = 0.02098 errors

使用berfit函数绘制最佳拟合曲线,在误码率点之间进行插值,得到平滑的曲线。在图中添加置信区间。

fitEbN0 = EbN0vec(1):0.25:EbN0vec(end);插值值%berfit (EbN0vec误码率,fitEbN0);持有jj=1: numbn0 semilogy([EbN0vec(jj) EbN0vec(jj)],intv{jj},“g - +”);结束持有

图中包含一个axes对象。标题为BER vs. Eb/No的axis对象包含8个类型为line的对象。这些对象表示经验BER, Dbl Exp + Const Fit。

另请参阅

应用程序

功能

相关的话题