精华内容
下载资源
问答
  • matlab开发-ViterbideCodingMostProbablePath(维特比编码mostProbablePath)。维特比译码,通过给定的状态找到最可能的路径。可以指定结束状态
  • matlab开发-软决策维特比编码与穿孔。使用Simulink(R)在awgn信道上进行软decison-viterbi解码。
  • 卷积编码维特比译码-卷积编码维特比译码.rar 卷积编码维特比译码相关文献 1.bmp
  • 卷积码编码 维特比译码 分组交织 去交织 编码输出至txt
  • 卷积编码维特比译码的经典资料,希望对大家有所帮助哈!请大家支持一下哈
  • 一.LDPC编码介绍1.为什么要用LDPC编码,LDPC编码相对其他编码的好处 LDPC(低密度奇偶检验)码是由稀疏校验矩阵定义的线性分组码,具有能够逼近香农极限的优良特性,其描述简单,具有较大的灵活性和较低的差错误码特性...

    .LDPC编码介绍

    1.为什么要用LDPC编码,LDPC编码相对其他编码的好处

           LDPC(低密度奇偶检验)码是由稀疏校验矩阵定义的线性分组码,具有能够逼近香农极限的优良特性,其描述简单,具有较大的灵活性和较低的差错误码特性,可实现并行操作,译码复杂度低,适合硬件实现,吞吐量大,极具高速译码的潜力,在码长较长的情况下,仍然可以有效译码。

           目前常用的信道编码体制有BCH码、RS码、卷积码、Turbo码和LDPC码等。其中BCH码和RS码都属于线性分组码的范畴,在较短和中等码长下具有良好的纠错性能;卷积码在编码过程中引入了寄存器,增加了码元之间的相关性,在相同复杂度下可以获得比线性分组码更高的编码增益;Turbo码采用并行级联递归的编码器结构,其分量采用系统的卷积码,能够在长码时逼近香农极限,同时译码复杂度也可以接收,但是它的译码复杂性仍然较大,且码长较长时,由于交织器的存在具有较大的时延。

           相比之下LPDC具有以下特性:

           (1)译码的复杂度很低,运算量不会因为码长的增加而急剧增加;

           (2)采用迭代译码算法,可以实现并行操作,具有高速的译码能力;

           (3)吞吐量大,从而改善系统的传输效率,并且便于硬件实现;

           (4)译码复杂度与码长成线性关系,克服了分组码在长码时所面临的巨大译码计算复杂度的问题,使长编码分组的应用成为可能。

    .LDPC编码基础

    1. LDPC编码的定义及矩阵表示

           LDPC码是一类具有稀疏矩阵的线性分组码,在线性分组码中,任意两个码字的和仍属于这个分组码,输出的码字只和输入的信息位有关,即每个消息是独立编码的。

           假设信源输出一系列的二进制01,这些二进制块分成固定长的消息块,每个消息块记作M,由k比特信息组成,其中M=[m0,m1,…m(k-1)]。然后根据一定的编码方式产生一个n维向量,这个向量就叫做m的码字,假设信息M对应的码字位C,其中C=[c0,c1,…c(n-1)],则可以找到k个线性无关的码字g0,g1,…,g(k-1),使得:

    C= m0*g0+m1*g1+……+m(k-1)*g(k-1)

           C中,信息位不变,校验位附加在信息为之后,写成矩阵的形式就是:

    C= M*G

           Gkn列的矩阵,又称为生成矩阵。

           另外,可以由n-kn维线性无关向量h0,h1,…h(n-k-1)生成C(表示与C对应的零空间)。因此对于任意的ihi*CT=0写成矩阵的形式就是H*CT=0

           H(n-k)n列的矩阵,通常被称为校验矩阵,用来判断码字是否合法。

    2. LDPC码的Tanner

           LDPC编码可以用Tanner图来唯一确定,其和校验矩阵是完全等价的。Tanner图的顶点称为节点,分为变量节点和校验节点,每个变量节点与每个码字比特相对应,它对应校验矩阵的每一行,每个校验节点与每个校验方程相对应,它对应校验矩阵的每一列,变量节点和校验节点之间的连线称为沿,也代表校验矩阵中的1。例如校验矩阵H如下:

    810bff10f9eaad702cce6dc34ba90460.png

           Tanner图来表示H矩阵如下:

    5eb13cd4af77b6bbd2fe376aaa57fcaf.png

           在上图中,从节点v1出发,经节点c1,v2,c3,再回到v1,称为一个环,环的周长为该环所包含的边数,周长较短的环影响译码的性能,短环的存在会使得译码重复迭代,影响译码效率,使译码收敛速度变慢,在构造LDPC编码时应尽量避免出现短环。

    3.eIRA编码算法

           LDPC码的编码可以采用线性分组码的通用编码方法,但通用编码方法的编码复杂度与码长的平方成正比,编码时延较大,实用性不强。eIRA(extended Irregular Repeat Accumulate,扩展的非规则重复累积码)编码算法,利用校验矩阵的稀疏性进行有效编码,使编码复杂度与码长成线性关系。

           eIRA编码算法需要构造具有如下形式的校验矩阵

    H=[H1 H2]

           其中,H1是一个mXk维稀疏矩阵,H2是一个阶梯状下三角形矩阵,H2的形式如下:

    4d847041d0cabf336c071b34c8de0cca.png

    3

           系统码的生成矩阵形式为G=[I P],其中I是单位矩阵 P=H1TH2-TH2-T的形式为:

    67e195f3357e06f36a48d39d655c5cf6.png

    4

           H2-T可以看成一个累加器,也称差分编码器。因此,eIRA 编码算法分两步进行,首先将待编码的信息矢量 m 乘以稀疏矩阵H1T,得到中间结果S,然后将中间结果S进行重复累加,得到校验比特,最后将信息比特和校验比特合并起来就得到最终的码字。

    .LPDC编码实现

    1.LDPC编码过程

           LDPC编码器的任务是将K个信息比特M=[m0,m1,…,m(k-1)]通过编码得到(N-K)个奇偶校验比特P=[p0,p1,…,p(n-k-1)],最后得到的码字是将信息比特与校验比特合并,即得到码长为N的码字[i0,i1,…i(k-1),p0,p1,…,p(n-k-1)]。假设LDPC的码长位16200,码率为1/2,其中Nldpc = 16200,Kldpc =7200,Qldpc=25

           具体计算步骤如下:

           (1)初始化p0=p1=p2==p(n-k-1)=0

           (2)在表格中第一行指定的校验位地址处累加信息位i0,如下图所示,这一步的操作为编码的信息矢量i乘以稀疏矩阵H1T,一共有20行,即360*20 = 7200

    47bb61e13cabde869456f81bd11aa111.png

    5

           对于接下来的359个信息位,im,m=1,2,…,359。在{x+(m mod 360) * Qldpc } mod(Nldpc-Kldpc)指定的校验位地址累加信息位im,其中x表示信息为i0对应的校验位地址。

           (3)对于信息i1,校验位的地址需要根据 i0的地址来求,例如第一个校验位地址,{20+(1 mod 360) * 25 } mod (9000) = 45,第二个校验位{712+(1 mod 360) * 25} mod (9000) = 737,求出所有的校验位地址,然后进行信息累加,如下:

    f52515577e48ba6a89df99ad813c36c4.png

    6

           (4)对于第361个信息位i360,在表中的第二行指定了累加器对应的校验位地址。和步骤3相同的处理方式,接下来的359个信息位对应的校验位地址为{x+(m mod 360) * Qldpc} mod (Nldpc-Kldpc),其中x表示i360对应的校验位地址。

           (5)以同样的方式处理每一组信息位,给出每一组对应的校验位地址。

           (6)i=1开始,按照下面的公式完成迭代计算

    3334d0e624d7d166cbe0f9cf9b96e845.png

    7

    2.matlab实现

           matlab中,有专门的函数来实现ldpc编码,但是在实现编码之前,需要我们产生一个我们需要的校验矩阵H。这里以Nldpc = 16200 ,码率1/2为例,介绍校验矩阵H的产生过程。

           (1)按照上述LDPC编码中提到的,把校验位起始的地址存储起来,用于计算

    其他的校验位。

    6a53354db5f2490ba09332e227e8149e.png

    8

             把数据分成两组是因为数据的列数不一样,把相同列数的归到同一组里,这样更方便计算。

           (2)根据公式,第一行,计算剩余359个校验位地址,其他行也做同样的操作,如下代码表示计算ct1所表示的校验位,ct2校验位的计算同ct1

    f581eab8af491f581d3b640f3786112f.png

    9

           (3)计算完所有的校验位之后,按照如下操作产生校验矩阵

    86fa3911402c75b814b9acfa40c18255.png

    10

           (4)用产生的校验矩阵,计算LDPC编码,这里使用comm.LDPCEncoder函数来实现,在较早的matlab版本中是fec.ldpcenc函数。

    ad6c0511b89bcbfa14e0248a8c734f00.png

    11

    3.FPGA实现

           FGPA不可能一次性存储那么多的数据,并且也不现实,需要根据实时的计算产生校验位。通过上述的分析可知,LDPC码的编码具有周期为360的并行结构,如果把长度为K的信息比特分成r=K/360组,长度为N-K的校验比特分成s=(N-K)/360如下所示

    ed01cf60633bae54437210574c335517.png

    12

           由每个信息比特对应的校验比特公式pj=pjim,其中j={x+(m mod 360)*q} mod(N-K)x是第im个信息比特所对应的校验比特地址。可知,每一组信息比特均参与了同一组校验比特校验的过程。

           考虑到码的周期性,我们可以同时进行M=360次并行处理,增加编码效率,可以写成以下迭代公式:

    de6ed4e1d483a7c02e0fbd85780e19cc.png

    13

           其中符号‘r’和‘c’表示校验矩阵 H 的行和列,和信息节点连接的所有检验节点的集合定义为CN(c)。两个迭代循环,每次计算M个信息位,按照下面的矩阵形式存储Sr

    484660a43779aa09638ee0e99c18ac8b.png

    14

           从公式中可以看到,并行更新的MSr处于矩阵的同一行,但是输出的顺序并不是我们想要的顺序,不是从行的第一位到最后一位,因此需要对输入的信息位做循环移位,以保证S矩阵的结构。

           一旦得到Sr就可以得到pr

    d5309babedd4da14bdf9a139516e7f96.png

    15

           计算S矩阵所有列的累加和,可以的到下面的向量

    ecc37a1055f5d232bb352741077e0a57.png

    16

           然后按照下面的公式计算s’

    f24da10fe7e456a63462b6dc2cd73734.png

    17

           其中,LMXM的下三角矩阵,然后将s’逻辑右移一位,得到

    fd7c6c5995000b28490544dc8fcc3ff3.png

    18

    最后按照下面的公式,每次计算Mbit校验位

    914716185138c38ffb30b8ca7c16f09b.png

    19

           根据以上的公式推导,提出以下的实现结构,有三个主要部分组成:第一部分计算Sr的值,第二部分就算S矩阵中列的累加和,第三部分计算校验位。编码器的系统结构主要包括编码配置模块(Ldpc_contrl),信息位分组计数模块(data_recv),基地址产生模块(Bom_addr),数据地址计算模块(ADDER_GEN),校验位计算模块(iterator),整个系统结构如下图所示:

    cb4787b04000bbd16de0b0bf32c0501c.png

    20

    3.1编码配置

           在配置模块中提供了1/41/23/52/33/44/55/6七种码率,为了实现编码方式的可配置,利用寄存器保存不同码率下的参数,主要包括Qldpc,Kldpc,可以在整个系统结构中看到。首先检测配置使能信号,然后加载配置数据,保存参数。其中framfram_en是输入信息位和使能延迟输出,考虑到最坏的情况下,配置信号和数据同时到来,需要先配置,才能进行数据的处理,所以对数据要延迟几个时钟周期。

    3.2 信息位分组计数

           模块的主要作用是对输入的信息比特进行序号标记,采用三个计数器,其中data_cnt 0~14 表示15个数据 rom_cnt 0~2324组表示共24*15=360个数据,0表示初始数据,fram_cnt360bit的组数统计。如对应1/2码率,输入数据为7200bit,则数据可分为:20*360 = 20*15*24 =7200,下图为信息位分组计数模块主要信号的时序图,延迟的是因为在计算校验位地址的时候会花费时间,为了后边计算校验位时信息位能够和校验地址对齐。

    be84a3169d3acbaab2efdc0994755fa2.png

    21

    3.3 基地址产生

           基地址产生模块根据输入的码率选择存在rom中的基地址,选择基地址的读取位置由输入的码率和输入序号共同确定,输入码率确定及地址的起始位置,序号fram_cnt确定基地址的偏移。以1/2码率为例,rom中初始地址为63,当fram0时表示第一行,读取的基地址如下:

    b716b03dd837df85c21314526c443f8b.png

    22

           仿真时钟周期为20ns,地址输出相对信息位使能延迟了16个时钟周期,其中移位输出的计数器分别延时了两个时钟周期。延迟是为了在校验位计算的时候,地址能够和信息位对齐。

    3.4 数据地址计算

           地址计算模块需要根据公式{x+(m mod360) * Qldpc } mod (Nldpc-Kldpc),计算每个信息位所对应的校验位。但是这个公式所用的取模以及乘法运算不适合在FPGA中运算,会占用很多的DSP资源,而且也是不必要的。以1/2码率为例,可以转化为如下的加减运算。

    60d3dc601796b6366847cfdb95406cb2.png

    23

           result = Amod B ,当A小于Bresult等于A本身,当A大于Bresult等于A-B,通过这个模块计算出每个信息位所对应的的校验位。

    f653b597d2090b324506afaa136fc04e.png

    24

           其中data_in_bom为初始地址,data_in_addr为计算的校验位地址。

    3.5校验比特计算

           校验比特计算需要完成两个部分,第一部分为信息位的输出,第二部分为校验位的输出。因为在硬件中为实时处理。以1/2码率为例,发送的16200bit码字,包括7200bit信息位,9000bit校验位,两个部分分时段进行。系统采用13个并行度计算校验位,其中的一个的时序如下:

    c23ce6b5b474e5caa53d3a1e7a1d6b6e.png

    25

           双口ram设置为read first,数据相对于地址有三个时钟的延迟。上述中所涉及的延迟均在调试中根据运算所需时钟数进行的延迟。采用13个并行度计算校验位,其中的一个的结构如下,addr_enaaddr_flag均由read_addr控制

    3fbac64fef1d16fb83291b42492a8501.png

    26

           最后把每个13个并行度的数据相加,然后与上一位的值异或,得到最终的输出。

    cca3533c3a54c11c554277639b25387f.png

    27

           通过modelsim把结果输出和matlab计算的结果进行比较,可以看到我们使用FPGA实现的结果和用matlab做出的结果是一样的。

    34401a89ccc6a59f9abd7283b59744b1.png

    28

    展开全文
  • 基于matlab的卷积码编码程序 可直接运行 并有维特比译码程序 可以实现信道卷积码编译码过程
  • 卷积码的编码维特比译码程序,使用C/C++编写,可在Ubuntu和Windows操作系统上运行,经过修改可在嵌入式系统中运行。适合新手学习卷积码编码维特比译码算法,也可供工程师参考。
  • 卷积码的编码原理 及维特比译码

    热门讨论 2011-11-12 13:45:59
    卷积码的编码原理及维特比译码 主要是算法实现
  • 采用MATLAB自编函数对卷积码以及维特比译码进行仿真,且对其性能进行分析。由于卷积码有性能floor,编码增益随信噪比降低而体现不明显。  1.引言  卷积码的编码器是由一个有k位输入、n位输出,且具有m位移位...
  • 仿真思路: step1:生成随机bit作为待调制信号sig; step2:对生成bit stream做信道...step6:将LLR结果导入维特比输入,经维特比译码还原至1/3码率的bit stream,采用软判决方式译码,取译码后的原数据长度为原始bit

    仿真思路:

    step1:生成随机bit作为待调制信号sig;

    step2:对生成bit stream做信道编码,编码方式:咬尾卷积1/3编码,可观察经编码后的码率变化;

    step3:将信道编码后的bit stream经QPSK调制;

    step4:调制信号过awgn信道,改变snr,观察过信道后信号变化;

    step5:接收端QPSK软解调,输出LLR;

    step6:将LLR结果导入维特比输入,经维特比译码还原至1/3码率的bit stream,采用软判决方式译码,取译码后的原数据长度为原始bit 流,即为系统bit。代码中LLR结果取了乘以-1,取决于实现时LLR实现时分子分母的含义。

    step6:计算误码率;

    %% Constants
    FRM=2048;
    MaxNumErrs=200;MaxNumBits=1e7;
    EbNo_vector=0:10;BER_vector=zeros(size(EbNo_vector));
    %% Initializations
        Modulator      = comm.QPSKModulator('BitInput',true);
        AWGN             = comm.AWGNChannel;
        DeModulator =  comm.QPSKDemodulator('BitOutput',true,...
            'DecisionMethod','Log-likelihood ratio',...
            'VarianceSource', 'Input port');
        BitError           = comm.ErrorRate;
        ConvEncoder=comm.ConvolutionalEncoder(...
            'TerminationMethod','Terminated');
        Viterbi=comm.ViterbiDecoder(...
            'InputFormat','Soft',...
            'SoftInputWordLength', 4,...
            'OutputDataType', 'double',...
            'TerminationMethod','Terminated');
        Quantizer=dsp.ScalarQuantizerEncoder(...
            'Partitioning',  'Unbounded',...
            'BoundaryPoints', -7:7,...
            'OutputIndexDataType','uint8');
    %% Outer Loop computing Bit-error rate as a function of EbNo
    % for EbNo = EbNo_vector
    %     snr = EbNo + 10*log10(2);
        snr = 20;
        noise_var = 10.^(-snr/10);
        AWGN.EbNo=snr;
        numErrs = 0; numBits = 0;results=zeros(3,1);
        %% Inner loop modeling transmitter, channel model and receiver for each EbNo
    %     while ((numErrs < MaxNumErrs) && (numBits < MaxNumBits))  
            % Transmitter
            u             = randi([0 1], FRM,1);                  % Generate random bits
            encoded     = ConvEncoder.step(u);               % Convolutional encoder
            mod_sig = step(Modulator,   encoded);                % QPSK Modulator
    
            scatterplot(mod_sig); 
            % Channel
            rx_sig  = step(AWGN,        mod_sig);        % AWGN channel
    %         rx_sig = awgn(mod_sig,20,'measured');
            % Receiver
    
            scatterplot(rx_sig); 
            demod       =  DeModulator.step(rx_sig, noise_var);          % Soft-decision QPSK Demodulator
            llr         = Quantizer.step(-demod);                              % Quantize Log-Likelihood Ratios    
            decoded     = Viterbi.step(llr);                                              % Viterbi decoder with LLRs
            y           = decoded(1:FRM);                                          % Compute output bits
            results = step(BitError,    u, y);                  % Update BER
            numErrs = results(2);
            numBits = results(3);
    %     end
        % Compute BER
        ber = results(1); bits= results(3);
        %% Clean up & collect results
        reset(BitError);
        BER_vector(EbNo+1)=ber;
    % end

     

    展开全文
  • 卷积码编码维特比译码源代码

    热门讨论 2010-01-14 22:52:19
    卷积码编码维特比译码源代码 包括三个编译码文件,213编译码,217编译码等
  • 卷积编码及其维特比译码的软件实现。很好的论文,希望对你有所帮助
  • 仿真思路: step1:生成随机bit作为待调制信号sig; ...step6:对QPSK解调后的输出,经维特比译码还原至1/3码率的bit stream,采用硬判决方式译码,取译码后的原数据长度为原始bit 流,即为系统bit

    仿真思路:

    step1:生成随机bit作为待调制信号sig;

    step2:对生成bit stream做信道编码,编码方式:咬尾卷积1/3编码,可观察经编码后的码率变化;

    step3:将信道编码后的bit stream经QPSK调制;

    step4:调制信号过awgn信道,改变snr,观察过信道后信号变化;

    step5:接收端QPSK解调;

    step6:对QPSK解调后的输出,经维特比译码还原至1/3码率的bit stream,采用硬判决方式译码,取译码后的原数据长度为原始bit 流,即为系统bit。

    step6:计算误码率;

    备注:源程序略做修改,只是观察中间信号变化

    %% Constants
    FRM=2048;
    MaxNumErrs=200;MaxNumBits=1e7;
    EbNo_vector=0:10;BER_vector=zeros(size(EbNo_vector));
    %% Initializations
    Modulator      = comm.QPSKModulator('BitInput',true);
    AWGN             = comm.AWGNChannel;
    DeModulator =  comm.QPSKDemodulator('BitOutput',true);
    BitError           = comm.ErrorRate;
    ConvEncoder=comm.ConvolutionalEncoder(...
        'TerminationMethod','Terminated');
    Viterbi=comm.ViterbiDecoder('InputFormat','Hard',...
        'TerminationMethod','Terminated');
    %% Outer Loop computing Bit-error rate as a function of EbNo
    for EbNo = EbNo_vector
        snr = EbNo + 10*log10(2);
        AWGN.EbNo=20;
        numErrs = 0; numBits = 0;results=zeros(3,1);
        %% Inner loop modeling transmitter, channel model and receiver for each EbNo
    %     while ((numErrs < MaxNumErrs) && (numBits < MaxNumBits))  
            % Transmitter
            u             = randi([0 1], FRM,1);                  % Generate random bits
            encoded     = ConvEncoder.step(u);               % Convolutional encoder
            mod_sig = step(Modulator,   encoded);                % QPSK Modulator
    
            scatterplot(mod_sig); 
            % Channel
            rx_sig  = step(AWGN,        mod_sig);        % AWGN channel
    %         rx_sig = awgn(mod_sig,20,'measured');
            % Receiver
    
            scatterplot(rx_sig); 
            demod =       step(DeModulator, rx_sig);           % QPSK Demodulator
            decoded     = Viterbi.step(demod);                % Viterbi decoder
            y           = decoded(1:FRM);                    % Compute output bits
    
            results = step(BitError,    u, y);                  % Update BER
            numErrs = results(2);
            numBits = results(3);
    %     end
        % Compute BER
        ber = results(1); bits= results(3);
        %% Clean up & collect results
        reset(BitError);
        BER_vector(EbNo+1)=ber;
    end

     

    展开全文
  • 我们把所使用的每一种二进制代码状态都赋于特定的含义,表示一个特定的信号或对象,叫编码。如用四位二进制数的0000~1001这十种状太,分别表示0~9这十个十进制数码,称为8421编码。反过来把代码的特定含义翻译出来,...

    我们把所使用的每一种二进制代码状态都赋于特定的含义,表示一个特定的信号或对象,叫编码。如用四位二进制数的0000~1001这十种状太,分别表示0~9这十个十进制数码,称为8421编码。反过来把代码的特定含义翻译出来,称为译码。

    计算机在处理各种文字符号或数码时,必须把这些信息进行二进制编码,在编码时所使用的第一种二进制代码状态都赋予了特定的含义,即表示一个确定的信号或者对象,实现这种功能的电路叫编码器,如用于键盘的BCD码,ASCII码编码器等。

    0dbcd0c9e7efa9817a36ada0fb818642.png

    单片机外围电路用译码器较多,所以在这节课我们主要与大家一起来学习下译码器的工作原理,把代码的含义‘翻译’成相应的输出信号,以表示其原意。其功能恰恰与编码器相反。

    译码器可以将输入代码的状态翻译成相应的输出信号,以高、低电平的形式在各自的输出端口送出,以表示其意愿。译码器有多个输入端和多个输出端。假如输入的端个数为,每个输出端只能有两个状态,则输出端个数最多有2n个。常用译码器输入、输出端头数来称呼译码器,如3线-8线译码器,4线-10线译码器等。我们经常用到的74138就是一个三线-八线译码器,

    3fdf0f98d348b3f1fe58c11b94e0d936.png

    编码、译码的概念我们了解下,下面我们就来重点来讲一下三-八译码器的工作原理,这在我们51单片机的接口电路中也是经常用到的。

    从上图可看出,74138有三个输入端:A0、A1、A2和八个输出端Q0~Q7。当输入端A0、A1、A2的编码为000时,译码器输出为Q0=0,而Q1~Q7=1。即Q0对应于A0、A1、A2为000状态,低电平有效。A0、A1、A2的另外7种组合见后面的真值表。

    6a030e275cf3e8db893be2f960fafc93.png

    图中S1、S2、S3为使能控制端,起到控制译码器是否能进行译码的作用。只有S1为高电平,S2、S3均为低电平时,才能进行译码,否则不论输入羰输入为何值,每个输出端均为1。

    下图是输入端A0、A1、A2为000,控制端S1=1、S1=0、S2=0的电平示意图(红色数字为端口电平),也可以分析输出端另外七种组合时的输出情况。

    展开全文
  • 信息论课程的一套代码,附有详细的每一部分的代码说明文档。卷积编码采用自己写的代码,完成了217和319码。在MATLAB2016b环境下编译通过
  • 采用MATLAB自编函数对卷积码以及维特比译码进行仿真,且对其性能进行分析。由于卷积码有性能floor,编码增益随信噪比降低而体现不明显。  1.引言  卷积码的编码器是由一个有k位输入、n位输出,且具有m位移位...
  • 利用matlab的communication toolbox实现AWGN信道下采用QPSK调制和卷积码编码,然后接收端采用维特比译码并且采用硬判决的系统最终得到的误码率曲线,并且采用BERtool工具将其与理论值进行比较。
  • 详细介绍与分析了符合CSSDS编码标准的(7,1/2)卷积编码及其维特比译码算法的软件实现
  • 在发送端根据生成多项式进行卷积码编码,在接收端根据维特比(Viterbi)译码算法进行译码,能够有效抵抗信道噪声的影响,在误码率门限之下可以对传输过程中发生的突发错误进行纠错。 1、编码及译码算法的基本原理 ...
  • Matlab卷积编码维特比译码-通信专业课程设计

    千次阅读 热门讨论 2017-04-17 20:48:06
    首先是演示代码,首先输入输入信号,用m序列加扰(演示里只用16位长度的m序列),再1/3卷积编码,接收端先维特比解码,再解扰,得到原始信号 Demo.m   function demo input=[1 0 1 1 0 1 0 0 0 1 1];%输入信号 ...
  • 卷积编码和对应的维特比算法 卷积编码程序很简单,但是对应的维特比算法比较复杂,网上有很多算法都是不断循环试探路径,效率上会有一定的缺陷。本程序用了查表法,效率有所提高。但是查表法也只针对这种简单的卷积...
  • (2,1,3)卷积码编译码实现,信道加性高斯白噪声,BPSK调制
  • 卷积码/Viterbi译码,卷积...为了达到一定的纠错能力和编码效率(=k/n),分组码的码组长度n通常都比较大。编译码时必须把整个信息码组存储起来,由此产生的延时随着n的增加而线性增加。 为了减少这个延迟,人们提出了...
  • 网络编码在无线通信网络中的应用知识 研究显示,网络编码是可以逼近网络容量理论传输极限的有效方法,具有确定拓扑的有线网络的网络编码受到了广泛关注。由于无线链路的不可靠性和物理层广播特性非常适合采用网络...
  • 本论文是一篇关于如何基于FPGA平台进行卷积码编码和viterbi译码的过程论文,让你能更好完成相关卷积码编码译码的设计仿真等。
  • 我们可以试着用动态规划的思路,维特比算法,直接上图 维特比算法的顺序解法 给每个节点编号1~8,开始到结束,f(a)代表该节点的所有得分值,每一步单个的箭头都有其对应的概率值,c(a~b)代表的是a节点到b节点的值,...
  • 基于LDPC-OFDM编码调制的水下应急语音通信系统优化设计——之国内外当前研究现状传统的水下语音通信系统采用模拟调制方式,通信噪声大,传输距离近,通话效果受环境影响严重。数字式通信设备已经逐渐成为无缆水下...
  • 一个完整的BPSK仿真MATLAB代码,发射机为卷积编码,接收采用的是维特比译码
  • 差错控制编码,差错控制编码是什么 差错控制编码也称为纠错编码。在实际信道上传输数字信号时,由于信道传输特性不理想及加性噪声的影响,接收端所收到的数字信号不可避免地会发生错误。为了在已知信噪比情况下达到...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 121
精华内容 48
关键字:

维特比编码