估计AWGN中Turbo码误码性能

模拟在AWGN信道中使用涡轮码的16-QAM端到端通信链路。估计误码率。

初始化模拟

设置调制顺序和Eb/No值取值范围。将数据包长度设置为500。

rng (10,“旋风”);M = 16;%调制顺序个基点= log2 (M);每符号%位元EbNo = (2:0.5:4);pktLen = 500;

初始化误码率向量。

1 = 0(大小(EbNo));

为turbo编码器和解码器对创建系统对象,其中交错器索引作为输入参数提供。

turboEnc = comm.TurboEncoder ('InterleaverIndicesSource',输入端口的);turboDec = comm.TurboDecoder('InterleaverIndicesSource',输入端口的,“NumIterations”4);

创建一个AWGN通道系统对象和一个错误率计数器系统对象。

awgnChannel = comm.AWGNChannel (“NoiseMethod”,“方差”,“方差”,1);ERRORRATE = comm.ErrorRate;

使用包长度和turbo编码器设置来确定实际传输比特率。涡轮编码对象被初始化为对其组成卷积代码使用rate-1/2格状结构,从而产生涡轮编码器输出2奇偶校验位流,(除了系统流)和12输入包的尾部位。12个尾位是由于每个组成编码器指定的约束长度为4,这导致每个流输出3位,总共有4个流(S1 P1 S2 P2)。

率= PKTLEN /(3 * PKTLEN + 4 * 3);

主要处理循环

处理循环执行以下步骤:

  • 生成随机二进制数据

  • 生成随机交错器索引

  • 涡轮编码数据

  • 应用16-QAM调制

  • 将调制后的信号通过AWGN信道

  • 解调使用LLR算法的噪声信号

  • 涡轮解码数据

  • 计算误差统计

k = 1:长度(EbNo)

初始化误差统计向量、信噪比和噪声方差。更新AWGN信道系统目标噪声方差值。

errorStats = 0(1、3);EsNo = EbNo(k) + 10*log10(bps);snrdB = EsNo + 10*log10(rate);在dB %noiseVar = 1. / (10 ^ (snrdB / 10));awgnChannel。方差= noiseVar;errorStats(2) < 100 && errorStats(3) < 1e7生成随机二进制数据数据= randi([0 1],pktLen,1);%分界指标intrlvrInd = randperm (pktLen);% Turbo编码数据encodedData = turboEnc(数据,intrlvrInd);%调制经编码的数据modSignal = qammod (encodedData, M,'输入类型',“一点”,'UnitAveragePower',真正的);将信号通过AWGN信道rxSignal = awgnChannel (modSignal);解调接收到的信号demodSignal = qamdemod (rxSignal, M,'UnitAveragePower',真的,“OutputType”,“llr”,“NoiseVariance”, noiseVar);Turbo解码解调信号。因为位映射来自解调器是相反的期望,由turbo解码器,%解码器输入必须使用的解调信号的逆。rxBits = turboDec(-demodSignal,intrlvrInd);%计算错误统计errorStats = errorRate(数据、rxBits);结束保存BER数据并重置误码率对象ber (k) = errorStats (1);重置(errorRate)结束

绘制误码率,并将其与未编码的误码率进行比较。

semilogy(的EbNo,BER,“o”)网格包含(“Eb /不(dB)”)ylabel(“误码率”)uncodedBER = berawgn(的EbNo,“qam”, M);估计未编码的误码率持有semilogy(的EbNo,uncodedBER)图例('涡轮',的未编码的,“位置”,“西南”)

另请参阅

|