Matlab在编码中增加CRC和交织功能

这篇具有很好参考价值的文章主要介绍了Matlab在编码中增加CRC和交织功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义CRC生成和检验的类(包括函数)

我们在MATLAB中定义一个类(class),包含了CRC生成函数和检验函数(囊括了常用的CRC多项式)文章来源地址https://www.toymoban.com/news/detail-687387.html

classdef CRC
    properties
        CRCbit_Len
        polynomial
        CRCgen
        CRCdet
    end
    
    methods
        function obj = CRC(CRCbit_Len) %(polynomial)
            obj.CRCbit_Len = CRCbit_Len;
            switch CRCbit_Len
                case 0
                    obj.polynomial = [0];
                case 1
                    obj.polynomial = [1 1];
                case 2
                    obj.polynomial = [1 1 1];
                case 3
                    obj.polynomial = [1 1 1 1];
                case 4
                    obj.polynomial = [1 0 0 1 1]; % x^4 + x + 1
                case 5
                    obj.polynomial = [1 0 0 1 0 1];
                case 6
                    obj.polynomial = [1 0 0 0 0 1 1];  %1000001
                case 7
                    obj.polynomial = [1 0 0 0 1 1 1 1];
                case 8
                    obj.polynomial = [1 0 0 1 1 0 0 0 1];
                case 9
                    obj.polynomial = [1 0 0 0 1 0 0 0 0 1];
                case 10
                    obj.polynomial = [1 0 0 0 0 1 0 0 0 1 1];
                case 11
                    obj.polynomial = [1 0 0 0 0 0 0 1 0 0 0 1];
                case 12
                    obj.polynomial = [1 0 0 1 0 0 0 0 0 0 0 1 1];
                case 13
                    obj.polynomial = [1 0 0 0 1 0 0 0 0 0 0 0 1 1]; 
                case 14
                    obj.polynomial = [1 0 0 0 0 1 0 1 0 0 0 0 0 1 1];
                case 15
                    obj.polynomial = [1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1];
                case 16
                    obj.polynomial = [1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1];
                case 24
                    obj.polynomial = [1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1];
                otherwise
                    disp(["Please add the corresponding polynomial in binary form."]);
            end
                obj.CRCgen = crc.generator('Polynomial', obj.polynomial, ...
                                   'InitialState', zeros(1, obj.CRCbit_Len), ...
                                   'FinalXOR', zeros(1, obj.CRCbit_Len));
                obj.CRCdet = crc.detector('Polynomial', obj.polynomial, ...
                                   'InitialState', zeros(1, obj.CRCbit_Len), ...
                                   'FinalXOR', zeros(1, obj.CRCbit_Len));
            
        end
        
        % generate CRC
        function crcencoded_data = encode(obj, data)
            crcencoded_data = generate(obj.CRCgen, data); % SourceCoding_Len x No_Active_Users
        end
        
        % detect CRC
        function [crcdecoded_data, error_detected] = decode(obj, received_data)
            [crcdecoded_data, error_detected] = detect(obj.CRCdet, received_data); 
        end
        

    end
end

程序示例(包含交织和解交织功能)

clc; clear all;
rng('default');
warning('off');

K0 = 12;   % information bits
K_crc = 4; % crc bits length
N = 16;    % coded length (omit here)
% Rate = (K0 + K_crc) / N;

Ka = 10; % packet number

% Preporcessing:
% interleaver and de-interleaver related: for row vector
interleaver_IDs = randperm(N);
[~, de_interleaver_IDs] = sort(interleaver_IDs);
interlv_func = @(Bits)  Bits(:, interleaver_IDs);  % Bits could be a matrix with size (packet_num x FEC_Len) 
de_interlv_func = @(interlv_Bits) interlv_Bits(:, de_interleaver_IDs);

% invoke CRC class
CRC = CRC(K_crc);

% Transmission
% information bits
u0 = randi([0, 1], K0, Ka);
% append CRC
u  = CRC.encode(u0); % (K0 + K_crc) x Ka
% interleaving
inlv_bits = interlv_func(encodedBits);

% omit encoding process and receiver procedure

% de-interleaving
deinlv_bits = de_interlv_func(inlv_bits );

到了这里,关于Matlab在编码中增加CRC和交织功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab 13折线法数据量化编码与解码

    模拟信号抽样后变成时间离散的信号,经过量化后,此抽样信号才能成为数字信号。分析可知:最简单的均匀量化器对于小输入信号很不利。为了改善小信号时的信号量噪比,在实际应用中常采用非均匀量化。 非均匀量化时,量化间隔随信号抽样值的不同而变化。信号抽样值

    2024年02月09日
    浏览(40)
  • 如和使用matlab实现香农编码和解码

    在网上看了好多 , 都是对香农进行编码的案例 , 却没有 进行解码的操作 , 今天就来补齐这个欠缺 定义一个字符串类型的变量text,其值为’你好’。 调用函数shannonCoding对文本信息进行编码,并将编码、解码、平均码长和编码效率作为四个返回值保存到变量encoded, decoded, avgC

    2024年02月08日
    浏览(35)
  • 线性分组码编码与译码(MATLAB实现)

    分组码是对信息序列分段编码。若对包含 k 个信息元的信息组 M : 按照一定的编码规则产生包括 n 个码元的码组 C : 编码规则定义为: 如果 f i (·),i = 0,1,…,n-1 均为线性函数,则称 C 为线性分组码。线性分组码一般用 (n,k,d)码表示,其中 n 为码长, k 为信息组长度,

    2024年01月15日
    浏览(25)
  • (数字图像处理MATLAB+Python)第十二章图像编码-第一、二节:图像编码基本理论和无损编码

    图像编码 :一种将数字图像转换为压缩表示形式的过程。它的目标是减少图像数据的存储空间,并在传输或存储时减少带宽和存储需求、主要分为两类 无损压缩 :尽可能地保留原始图像的所有信息,以实现无失真的压缩。其中最常见的算法之一是无损JPEG(JPEG-LS)编码,它

    2024年02月10日
    浏览(30)
  • 基于物理层网络编码的相位同步算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 matlab2022a         基于物理层网络编码的相位同步算法是一种利用物理层网络编码技术来实现相位同步的算法。这种算法的原理是将两个或多个相位不同的信号进行叠加,产生

    2024年02月09日
    浏览(27)
  • 【MATLAB源码-第112期】基于matlab的IDMA系统仿真,输出误码率和误块率,采用turbo编码。

    IDMA(交织多址接入)系统详细描述 1. 基本原理:    - IDMA是一种基于码分多址(CDMA)的通信技术,它通过为每个用户分配一个独特的交织模式来实现用户之间的区分。    - 交织器的作用是重新排列发送的数据符号,这样即使在信号传输过程中发生干扰,也可以在接收端通

    2024年01月17日
    浏览(33)
  • (数字图像处理MATLAB+Python)第十二章图像编码-第三、四节:有损编码和JPEG

    A:概述 预测编码 :是一种数据压缩技术,旨在通过利用数据中的 统计规律来减少存储或传输所需的比特数 。它基于预测模型,根据已经观察到的数据来预测未来的数据,并将预测误差编码和传输。预测编码的过程通常包括以下几个步骤 模型训练 :首先,根据已有的数据,

    2024年02月09日
    浏览(33)
  • 基于机会网络编码(COPE)的卫星网络路由算法matlab仿真

    目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1机会网络编码(COPE)概述 4.2COPE算法原理 4.2.1 编码机会预测 4.2.2 编码决策 4.2.3 数据包编码 4.2.4 数据包传输 4.2.5 数据包解码 5.完整程序         基于机会网络编码(COPE)的卫星网络路由算法。基

    2024年01月25日
    浏览(32)
  • matlab读取pwm波数据,不用timer的方法,这里可以参考。Matlab/Simulink之STM32开发-编码器测速

    这里提供了一个不用timer的方法,可以参考: https://blog.csdn.net/weixin_36967309/article/details/88699830 Matlab/Simulink之STM32开发-编码器测速

    2024年01月18日
    浏览(44)
  • MATLAB初始化智能算法编码-产生随机不重复整数序列矩阵

    产生随机不重复整数序列矩阵是智能算法最常用的操作之一,以下给出具体方法: clc;close all;clear all;warning off;%清除变量 rand(\\\'seed\\\', 100); randn(\\\'seed\\\', 100); format long g; N=10; % 设定优化问题维数 lb=0*ones(1,N);% 自变量上限 ub=1*ones(1,N);% 自变量下限 popsize=10;% 种群数 Chrom=mygenfun(popsize,N,lb,u

    2024年01月24日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包