首页 > 其他分享 >(71)卷积码的维特比软判决译码与硬判决译码MATLAB仿真

(71)卷积码的维特比软判决译码与硬判决译码MATLAB仿真

时间:2024-11-20 10:48:05浏览次数:3  
标签:仿真 比特 解码 译码 卷积码 判决

文章目录


前言

本文首先介绍了卷积码原理与卷积码的维特比软判决译码与硬判决译码,然后给出卷积码的维特比软判决译码与硬判决译码的MATLAB仿真代码。最后给出了仿真结果。


一、卷积码

卷积码是一类重要的线性分组码,它在数字通信系统中被广泛用于前向纠错(Forward Error Correction, FEC)。卷积码通过对输入数据进行连续的卷积操作来生成编码数据,与块编码(如汉明码)不同,块编码对固定长度的数据块进行编码,而卷积码则处理无限长度的数据流。

1.卷积码编码

  1. 编码器结构:
    o 卷积码编码器由多个移位寄存器、多个模2加法器(异或门)组成。
    o 编码器通常用(n, k, m)表示,其中n是编码器输出比特数,k是输入比特数,m是编码器的记忆长度(即移位寄存器的级数)。
  2. 编码过程:
    o 在每个时钟周期,k个输入比特被送入编码器,同时移位寄存器的内容向右移动。
    o 输出是由输入比特和移位寄存器状态决定的n个比特。

2.卷积码解码

最常用的卷积码解码算法是维特比解码,它是一种最大似然解码算法,通过构建一个网格图来找到最有可能的编码路径。
卷积码的维特比译码算法可以通过两种基本方式实现:软判决译码和硬判决译码。这两种方法在处理接收到的信号时有所不同,从而影响了解码的性能和复杂度。

二、硬判决译码

硬判决译码是最简单的方法,它直接基于接收到的信号比特值进行译码。

  1. 判决过程:
    o 对于每个接收到的比特,硬判决译码器会将其判决为0或1,这通常是通过比较接收到的信号幅度与一个预定的阈值来完成的。
    o 判决结果是一个确定的比特值,没有考虑到信号的不确定性。
  2. 分支度量计算:
    o 在维特比算法中,硬判决译码的分支度量通常是0或1,这取决于接收到的比特与网格图中对应分支的码字是否匹配。
    o 如果匹配,分支度量是0;如果不匹配,分支度量是1。
  3. 性能:
    o 硬判决译码相对简单,计算复杂度较低。
    o 然而,由于它不考虑接收信号的不确定性,因此在噪声较大的环境中,其性能可能会较差。

三、软判决译码

软判决译码则考虑了接收信号的不确定性,通常能够提供更好的译码性能。

  1. 判决过程:
    o 在软判决译码中,接收到的信号不会被简单地判决为0或1,而是使用连续值(通常是接收信号的归一化对数似然比LLR)来表示每个比特是0或1的概率。
    o LLR值越大,表示该比特为0的概率越高;LLR值越小,表示该比特为1的概率越高。
  2. 分支度量计算:
    o 软判决译码的分支度量是基于LLR值计算的,通常是对LLR值进行累加或取最小值来得到。
    o 分支度量的计算更加复杂,因为它需要考虑所有可能的比特组合及其概率。
  3. 性能:
    o 软判决译码在噪声较大的环境中性能更好,因为它更准确地反映了接收信号的不确定性。
    o 由于使用了更多的信息,软判决译码通常能够提供比硬判决译码更低的误码率。
  4. 复杂度:
    o 软判决译码的计算复杂度高于硬判决译码,因为它需要处理连续的LLR值而不是简单的0/1比特。
    o 需要更多的存储空间和计算资源来处理分支度量和路径度量。

四、MATLAB仿真

1. 仿真代码

clear;
close all
% rng default;                      % 设置随机数生成器的状态,产生可重复的随机数序列
M = 16;                           % 调制阶数
k = log2(M);                      % 每符号包含的比特数
EbNoVec = 0:10;                   % Eb/No,单位:dB
numSymPerFrame = 1000;            % 每帧包含的QAM符号数
numMaxErrs = 100;                 % 仿真停止条件1:最大错误比特数
numTotalBits = 1e6;               % 仿真停止条件2:总比特数

% 初始化误码率向量
berEstSoft = zeros(size(EbNoVec)); 
berEstHard = zeros(size(EbNoVec));

% 设置卷积码参数与网格结构
rate = 1/2;                       % 卷积码码率
ConstraintLength = 7;             % 约束长度
CodeGenerator = [171 133];        % 生成多项式(八进制)
trellis = poly2trellis(ConstraintLength,CodeGenerator);  % 生成卷积码的网格结构
tbl = 32;                         % 译码回溯深度

for n = 1:length(EbNoVec)
    % Eb/No转换为SNR
    snrdB = EbNoVec(n) + 10*log10(k*rate);
    % 噪声功率(方差)计算,使用归一化平均信号功率
    noiseVar = 10.^(-snrdB/10);
    
    % 初始化错误比特计数器和比特计数器
    numErrsSoft = 0;
    numErrsHard = 0;
    numBits = 0;
    
    while numErrsSoft < numMaxErrs && numBits < numTotalBits
        % 生成二进制数据并转换为符号
        dataIn = randi([0 1],numSymPerFrame*k,1);
        
        % 对数据进行卷积编码
        dataEnc = convenc(dataIn,trellis);
        
        % QAM调制
        txSig = qammod(dataEnc,M,'InputType','bit','UnitAveragePower',true);
        
        % AWGN信道传输
        rxSig = awgn(txSig,snrdB,'measured');
        
        % 使用硬判决(比特)和软判决(似然LLR)方法对噪声信号进行解调。
        rxDataHard = qamdemod(rxSig,M,'OutputType','bit','UnitAveragePower',true);
        rxDataSoft = qamdemod(rxSig,M,'OutputType','approxllr', ...
            'UnitAveragePower',true,'NoiseVariance',noiseVar);
        
        % 对解调后的数据进行维特比解码
        dataHard = vitdec(rxDataHard,trellis,tbl,'cont','hard');
        dataSoft = vitdec(rxDataSoft,trellis,tbl,'cont','unquant');
        
        % 计算帧中的比特错误数量。调整解码延迟,该延迟等于回溯深度。
        numErrsInFrameHard = biterr(dataIn(1:end-tbl),dataHard(tbl+1:end));
        numErrsInFrameSoft = biterr(dataIn(1:end-tbl),dataSoft(tbl+1:end));
        
        % 更新错误比特计数器和比特计数器
        numErrsHard = numErrsHard + numErrsInFrameHard;
        numErrsSoft = numErrsSoft + numErrsInFrameSoft;
        numBits = numBits + numSymPerFrame*k;

    end
    
    % 计算BER
    berEstSoft(n) = numErrsSoft/numBits;
    berEstHard(n) = numErrsHard/numBits;
end

% 未编码16-QAM的理论BER
berTheoretical_qam = berawgn(EbNoVec,'qam',M);

% 绘制16-QAM的仿真与理论性能
semilogy(EbNoVec,berEstSoft,'-*','LineWidth',1)
hold on
semilogy(EbNoVec,berEstHard,'-o','LineWidth',1)
semilogy(EbNoVec,berTheoretical_qam,'-d','LineWidth',1)
legend('软判决解码','硬判决解码','未编码','location','NorthEast')
grid on
title([num2str(M),'QAM硬判决和软判决维特比解码BER'])
xlabel('Eb/No (dB)')
ylabel('Bit Error Rate')

2. 代码说明

主处理循环执行以下步骤:

(1)生成二进制数据。
(2)对数据进行卷积编码。
(3)对数据符号应用QAM调制。为传输信号指定单位平均功率。
(4)将调制信号通过AWGN信道。
(5)使用硬判决和似然LLR方法对接收信号进行解调。为接收信号指定单位平均功率。
(6)使用硬判决和似然方法对信号进行维特比解码。
(7)计算比特错误数。 当达到100个错误或者传输了1e6比特时,退出当前信噪比的while循环,继续处理下一信噪比的数据。

3. 仿真结果

在这里插入图片描述

总结

(1)硬判决译码简单、计算量小,但在高噪声环境下性能较差。
(2)软判决译码更复杂、计算量大,但在高噪声环境下能提供更好的性能。

在实际应用中,选择硬判决还是软判决译码取决于系统对性能和复杂度的要求。在噪声较低且对计算资源有限制的场合,硬判决译码可能是更好的选择。而在噪声较高且对性能要求严格的场合,软判决译码则是更合适的选择。



标签:仿真,比特,解码,译码,卷积码,判决
From: https://blog.csdn.net/weixin_45333185/article/details/143783594

相关文章

  • 简易CPU设计入门:译码模块(一)
    项目代码下载还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。下载本项目代码准备好了项目源代码以后,我们接着去讲解。本节前言有一段时间没写本专栏的教程了。在之......
  • 基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,t
    1.算法仿真效果       本程序系统是《m基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,信道对译码性能的影响,对比卷积码,turbo码》的的升级。 升级前原文章链接 增加了更多的不同码长,不同码率,不同信道对LDPC译码性能的影响,并增加了BCH编译码的对比。 matl......
  • 基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,t
    1.算法仿真效果本程序系统是《m基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,信道对译码性能的影响,对比卷积码,turbo码》的的升级。升级前原文章链接增加了更多的不同码长,不同码率,不同信道对LDPC译码性能的影响,并增加了BCH编译码的对比。matlab2022a仿真结果如下(完整......
  • 南沙信奥塞陈老师解一本通题:1409:判决素数个数
    ​ 【题目描述】输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。【输入】两个整数X和Y(1≤X,Y≤105)。#include<bits/stdc++.h>usingnamespacestd;boolIsPrime(intn){ if(n<=1) returnfalse; for(inti=2;i<=sqrt(n);i++) if(n%i==0) returnfalse; re......
  • 信道编码——线性分组码(Hamming、BCH、RS)Matlab编译码实现与性能分析
    目录第六篇博客感言编译码原理Hamming码BCH码RS码Matlab源码和运行结果源码结果Hamming码BCH码RS码 总结第六篇博客感言坚持写,及时写。编译码原理Hamming码参考汉明码——计算机网络——全网最通俗的讲解-CSDN博客。BCH码参考【举例子详细分析】BCH码(BC......
  • POLIR-Society-Organization-Lawsuits: (2020)粤0303民初16184号判决书
    (2020)粤0303民初16184号判决书深圳市罗湖区人民法院送达公告页:https://guanwang.szlhfy.gov.cn/news/14209.cshtml送达公告列表页(第162页):https://guanwang.szlhfy.gov.cn/sdgg/162/20240827_163138GMT+0800......
  • 山东大学计算机组成原理实验6七段译码设计(含原理图,引脚分配,实验结果输入输出)
    实验目的熟悉QuartusII的设计流程全过程,学习计数器的设计和硬件测试。掌握原理图的设计方法。实验原理4位计数器连接7段译码,多数码管进行显示控制。实验框图如图6所示。图6 原理图示意图其中,CNT4B采用74161计数器芯片实现,DECL7S采用7448(共阳)设计。实验内容(1)设计工程......
  • 没签合同“跳单”,就不需要付中介费了吗?法院这样判决......
    借款人在找到贷款中介帮忙申请贷款时,好多借款人因为没签正式合同,心里就琢磨着怎么省下那笔服务费。钱一到手,他们就动起了“跳单”的歪脑筋,借款人心想:“咱俩又没签字画押,钱我都收到了,凭啥还要给你服务费?你中介能拿我咋地?”但话说回来,中介遇到这种“跳单”的,没合同在手,想维权还......
  • 【Mutilism数字电路实现32进制5线32译码器】2022-5-7
    缘由3-8译码器到74HC138-编程语言-CSDN问答 +2片160+04非门2个组成8进制和4进制实现。按138逻辑表把E3也接入置零,同时把E1也接入反向使得切换时138保持高电平输出,就看不到转换时第一个出现短暂低电平,是最完美的解决方案,二级反向能时延使得时序符合。......
  • 基于GWO灰狼优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):     2.算法涉及理论知识概要       LDPC码是一种线性错误修正码,以其接近香农极限的优良性能而被广泛应用于现代通信系统中。NMS译码是一种基于最小平方误差准则的软判决译码方法,其目标是找到一......