主要内容

对16-QAM信号使用前向纠错

此示例扩展了在16-QAM信号上使用脉冲整形示例显示使用前向纠错(FEC)编码时误码率(BER)性能的改善。

本例展示了如何通过使用由基带调制器、信道、解调器、脉冲整形、凸起余弦滤波和纠错组成的通信链路来处理二进制数据流。

建立仿真框架

在本例中,为实现更准确的误码率估计,要处理的比特数从中使用的值增加在16-QAM信号上使用脉冲整形的例子。其他模拟变量与该示例中的设置相匹配。

定义带有提升余弦滤波和AWGN信道的16-QAM调制方案的仿真参数。

M = 16;调制阶数k = log2(M);每个符号的比特数%numBits = k*2.5e5;要处理的总比特数SPS = 4;每个符号的样本百分比(过采样因子)Filtlen = 10;%以符号表示的过滤器长度滚落= 0.25;过滤器滚转系数

生成随机数据

设置rng函数的默认状态,或任何静态种子值,以便示例产生可重复的结果。然后,使用兰迪函数生成随机二进制数据。

rng默认的使用默认的随机数生成器dataIn = randi([0 1],numBits,1);生成二进制数据向量

应用卷积编码

为了纠正噪声信道产生的错误,在传输前对数据进行卷积编码,对接收到的数据进行维特比解码。解码器使用硬决策算法,这意味着每个接收到的数据位都被解释为任意一种01

函数为速率为2/3的代码定义卷积编码网格poly2trellis函数。所定义的网格表示卷积代码convenc函数用于对二进制向量进行编码,dataIn

Constrlen = [5 4];代码约束长度%Genpoly = [23 35 0;0 5 13]%生成器多项式
genpoly =2×323 35 0 0 5 13
tPoly = poly2trellis(constrlen,genpoly);codeRate = 2/3;

方法对输入数据进行编码房产申诉专员署格子。

dataEnc = conc (dataIn,tPoly);

调整数据

使用bit2int函数将k-tuple将二进制数据编码为整数值。

dataSymbolsIn = bit2int(dataEnc,k);

使用qammod功能应用16-QAM调制。

dataMod = qammod(dataSymbolsIn,M);

应用提升余弦滤波

使用rcosdesign函数来创建一个RRC过滤器。

rrcFilter = rcosdesign(rolloff, fillen,sps);

使用upfirdn函数通过过采样因子对信号进行上采样,并应用RRC滤波器。的upfirdn函数垫上采样信号与零在结束冲洗滤波器。然后,函数应用筛选器。

txSignal = upfirdn(dataMod,rrcFilter,sps,1);

应用AWGN信道

使用每个符号的比特数(k),以及每个符号的样本数目(sps),将每位能量的比率转换为噪音功率谱密度(EbNo)转换为信噪比值,供情况下函数。当转换 E b / N 0 对于信噪比,必须考虑每个符号的信息比特数。由于没有应用FEC,每个符号对应于k位。应用FEC后,每个符号对应于(k × codeRate)信息位。对于本例中使用的2/3码率和16-QAM传输,三个符号对应12个编码位和8个未编码(信息)位。

EbNo = 10;信噪比= EbNo+10*log10(k*codeRate)-10*log10(sps);

将滤波后的信号通过AWGN信道传递。

rxSignal = awgn(txSignal,snr,“测量”);

接收和解调信号

使用RRC滤波器对接收到的信号进行滤波。去除一部分信号来解释滤波器延迟。

rxFiltSignal =...upfirdn (rxSignal rrcFilter 1, sps);%下采样和过滤rxFiltSignal =...rxFiltSignal(filtlen + 1:end - filtlen);%延迟原因

使用qamdemod函数来解调接收到的滤波信号。

dataSymbolsOut = qamdemod(rxFiltSignal,M);

应用维特比解码

使用int2bit函数将恢复的整数符号转换为二进制数据。

codedDataOut = int2bit(dataSymbolsOut,k);返回列向量中的数据

使用vitdec功能,配置为硬决策和连续操作模式,解码卷积编码的数据。连续操作模式在解码器被重复调用时维持内部状态,例如在循环中接收操作的数据帧时。连续操作模式也增加了系统的延迟。虽然这个例子没有使用循环,但是'模式用于说明如何补偿此解码操作中的延迟。

traceBack = 16;解码回溯长度numCodeWords =...地板(长度(codedDataOut) * 2/3);完整码字的百分比dataOut =...vitdec (codedDataOut (1: numCodeWords * 3/2),...传真照片,回溯,“合同”“硬”);解码数据

计算系统误码率

由发送和接收RRC滤波器引入的延迟已经在恢复的数据中被考虑到,但是解码器延迟还没有被考虑。维特比解码器的连续操作模式会产生一个延迟,其持续时间等于回溯长度,回溯,乘以编码器上的输入流的数量。对于本例中使用的2/3码率,编码器有两个输入流,因此延迟为2×回溯位。因此,第一个2×回溯解码矢量中的位,dataOut,都是零。计算误码率时,丢弃前2×回溯位在dataOut最后一个2×回溯原始向量中的位,dataIn

使用biterr函数,通过比较计算错误数和误码率dataIn而且dataOut.是一样的 E b / N 0 为10db,当处理链中包含FEC时,误差较小。

decDelay = 2*traceBack;%解码器延迟,以比特为单位(numErrors,误码率)=...biterr(dataIn(1:end - decDelay),dataOut(decDelay + 1:end));流(误码率为%5.2e,基于%d个错误。\n'...方方面面,numErrors)
误码率为4.30e-05,基于43个错误。

更多关于延迟

本例中的解码操作会引起延迟,导致解码器的输出滞后于输入。该示例中没有显式地显示计时信息,延迟的长度取决于正在执行的具体操作。延迟发生在各种通信系统操作中,包括卷积解码、卷积交织和解交织、均衡和滤波。具体功能或操作造成的延迟时间,请参见具体功能或操作的相关文档。有关延迟的详细信息,请参见卷积交织器的延迟而且衰落信道

相关的话题