第2章(2):卷积码

您所在的位置:网站首页 m寄存器和v寄存器的区别 第2章(2):卷积码

第2章(2):卷积码

2023-05-05 18:20| 来源: 网络整理| 查看: 265

上一讲主要讲到线性分组码,并以(7,4)线性分组码为例,结合BPSK调制进行了误码率仿真。链接见:《陈老湿:第2章(1):线性分组码》

本章集中在卷积码的内容,并以(2,1,7)卷积码为例,结合BPSK和QAM调制,来比较硬判决和软判决的误码率性能。

本章主要内容如下:

一、卷积码与线性分组码的不同?

二、软判决和硬判决的区别?

三、BPSK调制+(2,1,7)卷积码的误码率性能仿真

四、QAM调制+(2,1,7)卷积码的误码率性能仿真

五、总结

一、卷积码与线性分组码的不同?

本文中卷积码的许多内容,来自研究生《编码理论》课程第四章和第五章的PPT。

Untitled Document

首先一个问题,卷积码与线性分组码有什么不同?

如果用输入比特数为k、输出比特数为n、存储器阶数为m来表示卷积码的话,图4.1表示为(2,1,3)。

但是(2,1,7)卷积码中其实只有6个寄存器,下面是(2,1,7)卷积码的一个例子。

为什么这里不表示成(2,1,6)卷积编码器呢?

这是因为在(2,1,7)这种表示中,第三个参数是约束长度(constraint length),约束长度=寄存器数量+1。

上面两种表示方法的差异,和平时生活中与人交流知识是一样的,要先建立共识,确保交流过程中是在交流一个东西。

引出了卷积码,来想想线性分组码有什么缺点呢?

(1)系统延时较大

分组码是面向数据块的,因此,在译码过程中必须等待整个码字全部接收到之后才能开始进行译码。在数据块长度较大时,引入系统延时非常大。

(2)精确帧同步

接收机需要对字或帧的起始符号时间和相位精确同步。

举一个例子帮助你理解上面两点,如果使用(7,4)线性分组码,那么接收机要等到7个比特都到了才能开始译码,这对应第(1)点。

但对于接收机来说,一串比特过来,它是怎么知道哪7个比特是一个码字的呢?

这就需要精确的码字同步,即接收机需要知道一个码字的起始和结束比特是哪一个,然后再进行译码

另外,大多数基于代数的分组码的译码算法都是硬判决算法,而不是对解调器输出未量化信息的软译码,从而造成一定程度的增益损失。

那么问题来了,什么是软判决译码?是不是脑中的小问号越来越多了?这个我后面再讲。

与线性分组码的译码过程不同,卷积码的译码过程中,不仅要在本码中提取译码信息,还要充分利用以前和以后时刻收到的码组,从这些码组中提取译码相关信息,而且译码是连续进行的,这样可以保证译码的延时相对较小。

卷积码的表示方式有移位寄存器、生成多项式、状态图、网格图,这部分内容在《编码理论》课程的第四章均有介绍。

我之前多次推荐的ShareTechnote网站中,这篇文章的图画得是非常好。

ShareTechnote二、软判决和硬判决

回到前面的问题,什么是软判决?以及为什么软判决的性能会比硬判决好?

针对软判决与硬判决的区别,可以参考:

软判决译码与因判决译码之间的区别_dream_201306的专栏-CSDN博客_软判决译码

我觉得上面这篇博客介绍得还比较清楚。

“软判决与硬判决的区别:Viterbi译码分硬判决和软判决两种,在结构和译码过程上没有区别,区别在于分支度量的计算方法

硬判决是指解调器根据其判决门限对接收到的信号波形直接进行判决后输出0或1,换句话说,就是解调器供给译码器作为译码用的每个码元只取0或1两个值,以序列之间的汉明距离作为度量进行译码,适用于二进制对称信道(BSC)。

而软判决的解调器不进行判决,直接输出模拟量,或是将解调器输出波形进行多电平量化(不是简单的0、1两电平量化),然后送往译码器,即编码信道的输出是没有经过判决的'软信息'。

软判决译码器以欧几里得距离作为度量进行译码,软判决译码算法的路径度量采用'软距离'而不是汉明距离,最常采用的是欧几里得距离,也就是接收波形与可能的发送波形之间的几何距离,是一种适合于离散无记忆信道(DMC)的译码方法。

对于数字电路,硬判决的实现是通过截取解调量化信号的符号位,可以认为是一级量化,而软判决可认为多级量化,包括高位符号位在内,还含有信道信息的有效位

软判决避免了解调后误判影响,直接送入译码器进行译码处理。一般而言,硬判决译码较软判决译码简单而易于实现,但软判决译码由于充分利用了信道输出信号的信息,在性能上要增加2~3dB。目前,通用的量化电平为8电平(3bit量化)和16电平(4bit量化),再高的话,只能增加译码器复杂度,几乎没有性能的提高。总的来说,软判决是用欧氏距离做,硬判决用汉明距离。”

再看到《编码理论》课程中第5.1节维特比算法中提到的内容:

“对于连续输出 AWGN 信道,最大化对数似然函数等效为找到与接收序列r欧拉距离最近的那个码字 v;而在 BSC 信道,最大化对数似然函数等效为找到与接收序列r汉明距离最近的那个码字 v”。

以上两者,思想可谓一致。站在译码器的角度上来看,硬判决和软判决的区别有什么不同呢?

硬判决:译码器的期待输入是0或者1。

软判决:译码码期待的整数输入在 \[\left[ {0,\left( {{2^{nsdec}} - 1} \right)} \right]\] 之间,维特比算法决策准则将0当做最可能的0,将 \[{\left( {{2^{nsdec}} - 1} \right)}\] 当做最可能的1。

其中nsdec是vitdec的一个参数,是指软判决量化比特数。

上面的CSDN博客中提到量化电平一般取3或者4比特,我在代码中是将nsdec取值为3。

本文中,关于卷积码编码和译码过程中,MATLAB自带的几个函数,比如convenc、poly2trellis和vitdec函数,均可以在命令行help进行学习。

三、BPSK调制解调+(2,1,7)卷积码的误码率性能仿真

结合《陈老湿:第1章:BPSK调制解调器仿真》和《陈老湿:第2章:线性分组码》的代码,尤其注意SNR、EbN0、EsN0三者之间的换算关系这将直接决定仿真结果是否正确

下面再次复习SNR、EbN0与EsN0的换算关系,复噪声和实噪声的区别。

来自MATLAB的文档:AWGN Channel

举个例子来说,(7,4)汉明码+BPSK调制,1个符号是1个信道比特,而1个信道比特有4/7个是信息比特,所以 \[k = \frac{4}{7}{\log _2}2\]

若是(7,4)汉明码+QPSK调制,1个符号是2个信道比特,1个信道比特,有4/7个是信息比特,所以 \[k = \frac{4}{7}{\log _2}4\]

本文是(2,1,7)卷积码+BPSK调制,此时便不能说2个信道比特中有1个信息比特,这是卷积码和分组码的不同。原因前面已经介绍过,即卷积码的编码器输出不仅与当前输入有关,还与以前信息的输入有关。编码速率为1/2,\[k = \frac{1}{2}{\log _2}2\]

因此,SNR与EbN0的换算关系如下:

snr = ebn0 - 10*log10(0.5*16)+10*log10(1/2);

发射时,卷积码编码关键步骤如下:

%%%%%%%%%%%%%%%%% 发射机 %%%%%%%%%%%%%%%%%%% %%%%%%%%编码器 %%%%采用(2,1,7)卷积码 % n = 2; % k = 1; % ConstraintLength = 7; trellis = poly2trellis(7,[171 133]); msg_source_code = convenc(msg_source,trellis);

接收机采用vitdec硬判决的参数设置如下:

tbdepth = 30; decodeData1 = vitdec(msg_source_frame_bi,trellis,tbdepth,'trunc','hard');

接收机采用vitdec软判决的参数设置如下:

partition = [-0.75 -0.5 -0.25 0 0.25 0.5 0.75]; codebook = [0 1 2 3 4 5 6 7]; [index,quantized] = quantiz(msg_source_frame_temp,partition,codebook); %%%%%%%%% 卷积码译码 tbdepth = 30; decodeData2 = vitdec(quantized,trellis,tbdepth,'trunc','soft',3);来自《衰落信道下的卷积码的软判决译码》

quantiz也为MATLAB自带函数,可以help quantiz进行学习,中文可参考:Matlab量化函数quantiz解析_weixin_30511039的博客-CSDN博客

上面的这个过程,对解调的输出进行了3比特的量化,所以在vitdec使用的dectype使用的是soft。

partition的设置根据调制方式有所不同,比如在下面的QAM调制中,依然采用3bit进行量化,但是partition = [-1.5:0.5:1.5]。

来自《编码理论》课程第5章PPT

tbdepth为什么设置成30?

对于码率为1/2,回溯深度设为5*(Constraintlength-1),即 5*(7-1) = 30。不过我看别人有将tbdepth设置成32的,我倒没有去深究30与32的区别。

由于我vitdec中使用opmode是trunc,译码时延为0。如果opmode是cont,译码时延等于回溯深度的符号数。

你也可以通过对比本章中的第四部分——QAM调制+(2,1,7)卷积码的误码率性能仿真,来对比opmode的不同所带来的延时影响。

BPSK调制+(2,1,7)卷积码的误码率性能仿真实验结果如下:

图1 BPSK调制+(2,1,7)卷积码的误码率性能

从图中可以看出,在BPSK调制下,采用(2,1,7)卷积码时,软判决比硬判决带来的增益为2~3dB。

通过这个图,还需要再次强调,为什么在低信噪比条件下,未编码系统比编码系统的误码率性能好呢

每一种码字都有自己的纠检错能力,当处于低信噪比情况下,解调器产生大量错误,超出了解码器的解码能力,导致其比未编码系统性能差。

四、QAM调制+(2,1,7)卷积码的误码率性能仿真

MATLAB自带函数真的是有非常多代码,可以学到很多通信知识,直接在文档搜索框中输入想查找的内容即可,然后我突然有一种发现了知识大宝库的感觉。

完整可运行代码如下:

Estimate BER for Hard and Soft Decision Viterbi Decoding Estimate bit error rate (BER) performance for hard-decision and soft-decision Viterbi decoders in AWGN. Compare the performance to that of an uncoded 64-QAM link. Set the simulation parameters. clear; close all rng default M = 64; % Modulation order k = log2(M); % Bits per symbol EbNoVec = (4:10)'; % Eb/No values (dB) numSymPerFrame = 1000; % Number of QAM symbols per frame berEstSoft = zeros(size(EbNoVec)); berEstHard = zeros(size(EbNoVec)); trellis = poly2trellis(7,[171 133]); tbl = 32; rate = 1/2; for n = 1:length(EbNoVec) % Convert Eb/No to SNR snrdB = EbNoVec(n) + 10*log10(k*rate); % Noise variance calculation for unity average signal power. noiseVar = 10.^(-snrdB/10); % Reset the error and bit counters [numErrsSoft,numErrsHard,numBits] = deal(0); while numErrsSoft < 100 && numBits < 1e7 % Generate binary data and convert to symbols dataIn = randi([0 1],numSymPerFrame*k,1); % Convolutionally encode the data dataEnc = convenc(dataIn,trellis); % QAM modulate txSig = qammod(dataEnc,M,'InputType','bit','UnitAveragePower',true); % Pass through AWGN channel rxSig = awgn(txSig,snrdB,'measured'); % Demodulate the noisy signal using hard decision (bit) and % soft decision (approximate LLR) approaches. rxDataHard = qamdemod(rxSig,M,'OutputType','bit','UnitAveragePower',true); rxDataSoft = qamdemod(rxSig,M,'OutputType','approxllr', ... 'UnitAveragePower',true,'NoiseVariance',noiseVar); % Viterbi decode the demodulated data dataHard = vitdec(rxDataHard,trellis,tbl,'cont','hard'); dataSoft = vitdec(rxDataSoft,trellis,tbl,'cont','unquant'); % Calculate the number of bit errors in the frame. Adjust for the % decoding delay, which is equal to the traceback depth. numErrsInFrameHard = biterr(dataIn(1:end-tbl),dataHard(tbl+1:end)); numErrsInFrameSoft = biterr(dataIn(1:end-tbl),dataSoft(tbl+1:end)); % Increment the error and bit counters numErrsHard = numErrsHard + numErrsInFrameHard; numErrsSoft = numErrsSoft + numErrsInFrameSoft; numBits = numBits + numSymPerFrame*k; end % Estimate the BER for both methods berEstSoft(n) = numErrsSoft/numBits; berEstHard(n) = numErrsHard/numBits; end semilogy(EbNoVec,[berEstSoft berEstHard],'-*') hold on semilogy(EbNoVec,berawgn(EbNoVec,'qam',M)) legend('Soft','Hard','Uncoded','location','best') grid xlabel('Eb/No (dB)') ylabel('Bit Error Rate') 图2 QAM调制+(2,1,7)卷积码的误码率性能

运行以上代码,注意到当硬判决时候,rxDataHard的值均为0或者1,而在软判决时候,rxDataSoft既不是0也不是1,截个图直观感受一下。

rxDataSoft的值对应的物理含义是什么呢?

这就引出来一个非常重要的概念:对数似然比(log-likelihood ratio,LLR)。

解调器不直接输出判决结果为0或者1,而是输出一种可能性。在vitdec使用的dectype使用的是unquant,未进行量化。

Exact LLR计算起来更加准确,但是计算速度慢,而Approximate LLR,计算准确性降低了,但是速度快。

如果需要一个直观例子来理解Exact LLR和Approximate LLR的不同,我推荐《MIMO-OFDM无线通信技术及MATLAB实现》的第11.7节,我便是从这一节开始理解软判决,以及LLR的概念与计算的。

《MIMO-OFDM无线通信技术及MATLAB实现》这本书一次次被我推荐,我都快成这本书的宣传大使了,哈哈哈哈哈哈哈哈哈!

其中《MIMO-OFDM无线通信技术及MATLAB实现》公式(11.82)的两个式子与上面的Exact LLR和Approximate LLR均分别对应。

图3 16QAM调制下,计算每一个比特的LLR

上面的BPSK调制解调+(2,1,7)卷积码的误码率性能仿真中使用的vetdec中dectype选择的是hard和soft,而在QAM调制+(2,1,7)卷积码的误码率性能仿真中使用的vetdec中dectype选择的是hard和unquant。

那么soft和unquant的性能有什么区别呢?

看到MATLAB自带的函数Log-likelihood Ratio (LLR) Demodulation中的实验结果:

图4 LLR vs. Hard Decision Demodulation

从图4中可以看出来,LLR with unquantized decoding:Simulation是性能最好,LLR with Soft Decision:Simulation,这两者之间的差距由量化误差引起。

五、总结

我自己写了这几个月知乎文章,总结出16个字“不断追问、逐步积累、广泛阅读、交叉验证”,哈哈哈哈哈。

通过上面的例子,终于对软判决和硬判决的区别有所理解,并在不同调制方式对比了MATLAB自带函数vetdec中dectype这个参数为unquant、hard、soft的区别。

每次在参数设置中,我都会好奇参数值为什么这样设的,然后开始查别的资料。仅看一份资料是不够的,还要看不同的人对同一个知识点是怎么理解,这样学起来扎实些

最后,要形成输出,给周边的同学讲解、或者给前辈汇报、或者直接写成文字,知识才变成自己的。

编解码的内容有很多,比如5G中采用的Polar编码和LDPC编码,这方面内容后续结合我自己的学习进度补充到这个专栏中来。

请你也别忘了把这篇文章分享给你身边正在学习通信专业的同学们,也许能够帮到Ta。这是《陈老湿·通信MATLAB仿真》的第2章,下次更新见!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3